mirror of
				https://github.com/open-quantum-safe/liboqs.git
				synced 2025-11-04 00:02:35 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// SPDX-License-Identifier: MIT
 | 
						|
 | 
						|
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <string.h>
 | 
						|
#include <sys/stat.h>
 | 
						|
#include <sys/stat.h>
 | 
						|
 | 
						|
#define OQS_STORE_DIR "tmp"
 | 
						|
#define OQS_STORE_PREFIX "/oqs-temp-file-"
 | 
						|
#define MAXPATHLEN 128
 | 
						|
 | 
						|
#if (defined(_WIN32) || defined(__WIN32__))
 | 
						|
#include <windows.h>
 | 
						|
#endif
 | 
						|
 | 
						|
static OQS_STATUS oqs_fstore_init(void) {
 | 
						|
#ifndef _WIN32
 | 
						|
	return mkdir(OQS_STORE_DIR, 0755);
 | 
						|
#else
 | 
						|
	if (CreateDirectory(OQS_STORE_DIR, NULL)) {
 | 
						|
		return OQS_SUCCESS;
 | 
						|
	} else {
 | 
						|
		return OQS_ERROR;
 | 
						|
	}
 | 
						|
#endif
 | 
						|
}
 | 
						|
 | 
						|
static OQS_STATUS oqs_fstore(const char *fname, const char *mname, uint8_t *data, size_t len) {
 | 
						|
	char fpath[MAXPATHLEN];
 | 
						|
	strcpy(fpath, OQS_STORE_DIR);
 | 
						|
	strcat(fpath, OQS_STORE_PREFIX);
 | 
						|
	strcat(fpath, mname);
 | 
						|
	strcat(fpath, fname);
 | 
						|
	FILE *fp = fopen(fpath, "wb");
 | 
						|
	if (!fp) {
 | 
						|
		fprintf(stderr, "Couldn't open %s for writing.\n", fpath);
 | 
						|
		return OQS_ERROR;
 | 
						|
	}
 | 
						|
	fwrite(data, len, 1, fp);
 | 
						|
	fclose(fp);
 | 
						|
	return OQS_SUCCESS;
 | 
						|
}
 | 
						|
 | 
						|
static OQS_STATUS oqs_fload(const char *fname, const char *mname, uint8_t *data, size_t len, size_t *rcvd) {
 | 
						|
	size_t len_read = 0, r = 0;
 | 
						|
	uint8_t *dr = NULL;
 | 
						|
	char fpath[MAXPATHLEN];
 | 
						|
	strcpy(fpath, OQS_STORE_DIR);
 | 
						|
	strcat(fpath, OQS_STORE_PREFIX);
 | 
						|
	strcat(fpath, mname);
 | 
						|
	strcat(fpath, fname);
 | 
						|
	FILE *fp = fopen(fpath, "rb");
 | 
						|
	if (!fp) {
 | 
						|
		fprintf(stderr, "Couldn't open %s for reading.\n", fpath);
 | 
						|
		return OQS_ERROR;
 | 
						|
	}
 | 
						|
	do { // assume some OSs don't deliver all data in one go...
 | 
						|
		dr = (uint8_t *)(data + len_read);
 | 
						|
		r = fread(dr, 1, len - len_read, fp);
 | 
						|
		len_read += r;
 | 
						|
	} while (r > 0);
 | 
						|
	*rcvd = len_read;
 | 
						|
	if (len_read <= 0) {
 | 
						|
		fprintf(stderr, "Error reading data (operations called in proper sequence?). Expecting %zu. Exiting.\n", len);
 | 
						|
		return OQS_ERROR;
 | 
						|
	}
 | 
						|
	fclose(fp);
 | 
						|
	return OQS_SUCCESS;
 | 
						|
}
 | 
						|
 |