QSC Post Quantum Cryptographic Library 1.1.0.2 (B2)
A post quantum secure library written in Ansi C
Loading...
Searching...
No Matches
fileutils.h
Go to the documentation of this file.
1/* 2020-2026 Quantum Resistant Cryptographic Solutions Corporation
2 * All Rights Reserved.
3 *
4 * NOTICE:
5 * This software and all accompanying materials are the exclusive property of
6 * Quantum Resistant Cryptographic Solutions Corporation (QRCS). The intellectual
7 * and technical concepts contained herein are proprietary to QRCS and are
8 * protected under applicable Canadian, U.S., and international copyright,
9 * patent, and trade secret laws.
10 *
11 * CRYPTOGRAPHIC ALGORITHMS AND IMPLEMENTATIONS:
12 * - This software includes implementations of cryptographic primitives and
13 * algorithms that are standardized or in the public domain, such as AES
14 * and SHA-3, which are not proprietary to QRCS.
15 * - This software also includes cryptographic primitives, constructions, and
16 * algorithms designed by QRCS, including but not limited to RCS, SCB, CSX, QMAC, and
17 * related components, which are proprietary to QRCS.
18 * - All source code, implementations, protocol compositions, optimizations,
19 * parameter selections, and engineering work contained in this software are
20 * original works of QRCS and are protected under this license.
21 *
22 * LICENSE AND USE RESTRICTIONS:
23 * - This software is licensed under the Quantum Resistant Cryptographic Solutions
24 * Public Research and Evaluation License (QRCS-PREL), 2025-2026.
25 * - Permission is granted solely for non-commercial evaluation, academic research,
26 * cryptographic analysis, interoperability testing, and feasibility assessment.
27 * - Commercial use, production deployment, commercial redistribution, or
28 * integration into products or services is strictly prohibited without a
29 * separate written license agreement executed with QRCS.
30 * - Licensing and authorized distribution are solely at the discretion of QRCS.
31 *
32 * EXPERIMENTAL CRYPTOGRAPHY NOTICE:
33 * Portions of this software may include experimental, novel, or evolving
34 * cryptographic designs. Use of this software is entirely at the user's risk.
35 *
36 * DISCLAIMER:
37 * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
38 * IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS
39 * FOR A PARTICULAR PURPOSE, SECURITY, OR NON-INFRINGEMENT. QRCS DISCLAIMS ALL
40 * LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
41 * ARISING FROM THE USE OR MISUSE OF THIS SOFTWARE.
42 *
43 * FULL LICENSE:
44 * This software is subject to the Quantum Resistant Cryptographic Solutions
45 * Public Research and Evaluation License (QRCS-PREL), 2025-2026. The complete license terms
46 * are provided in the accompanying LICENSE file or at https://www.qrcscorp.ca.
47 *
48 * Written by: John G. Underhill
49 * Contact: contact@qrcscorp.ca
50 */
51
52#ifndef QSC_FILEUTILS_H
53#define QSC_FILEUTILS_H
54
55#include "qsccommon.h"
56#include <stdio.h>
57
58QSC_CPLUSPLUS_ENABLED_START
59
82
87#define QSC_FILEUTILS_CHUNK_SIZE 128U
88
93#define QSC_FILEUTILS_MAX_LINE_SIZE (1024U * 1024U)
94
99#define QSC_FILEUTILS_MAX_EXTENSION 16U
100
105#define QSC_FILEUTILS_MAX_FILENAME QSC_SYSTEM_MAX_PATH
106
111#define QSC_FILEUTILS_MAX_PATH QSC_SYSTEM_MAX_PATH
112
113#if defined(QSC_SYSTEM_OS_WINDOWS)
117 static const char QSC_FILEUTILS_DIRECTORY_SEPERATOR[] = "\\";
118#else
122 static const char QSC_FILEUTILS_DIRECTORY_SEPERATOR[] = "/";
123#endif
124
129typedef enum
130{
132#if defined(QSC_SYSTEM_OS_WINDOWS)
136#else
140#endif
142
157
168QSC_EXPORT_API bool qsc_fileutils_append_to_file(const char* fpath, const char* stream, size_t length);
169
178QSC_EXPORT_API size_t qsc_fileutils_copy_file_to_object(const char* fpath, void* obj, size_t length);
179
188QSC_EXPORT_API size_t qsc_fileutils_copy_file_to_stream(const char* fpath, char* stream, size_t length);
189
198QSC_EXPORT_API bool qsc_fileutils_copy_object_to_file(const char* fpath, const void* obj, size_t length);
199
208QSC_EXPORT_API bool qsc_fileutils_copy_stream_to_file(const char* fpath, const char* stream, size_t length);
209
216QSC_EXPORT_API bool qsc_fileutils_create(const char* fpath);
217
224QSC_EXPORT_API bool qsc_fileutils_delete(const char* fpath);
225
232QSC_EXPORT_API bool qsc_fileutils_erase(const char* fpath);
233
240
248QSC_EXPORT_API bool qsc_fileutils_file_copy(const char* inpath, const char* outpath);
249
258
267QSC_EXPORT_API size_t qsc_fileutils_get_directory(char* directory, size_t dirlen, const char* fpath);
268
277QSC_EXPORT_API size_t qsc_fileutils_get_extension(char* extension, size_t extlen, const char* fpath);
278
287QSC_EXPORT_API size_t qsc_fileutils_get_name(char* name, size_t namelen, const char* fpath);
288
299QSC_EXPORT_API int64_t qsc_fileutils_get_line(char** line, size_t* length, FILE* fp);
300
307QSC_EXPORT_API size_t qsc_fileutils_get_size(const char* fpath);
308
316QSC_EXPORT_API bool qsc_fileutils_get_working_directory(char* fpath, size_t flen);
317
326QSC_EXPORT_API size_t qsc_fileutils_list_files(char* result, size_t reslen, const char* directory);
327
334
341QSC_EXPORT_API bool qsc_fileutils_exists(const char* fpath);
342
351QSC_EXPORT_API FILE* qsc_fileutils_open(const char* fpath, qsc_fileutils_mode mode, bool binary);
352
362QSC_EXPORT_API size_t qsc_fileutils_read(char* output, size_t otplen, size_t position, FILE* fp);
363
373QSC_EXPORT_API size_t qsc_fileutils_safe_read(const char* fpath, size_t position, char* output, size_t length);
374
384QSC_EXPORT_API size_t qsc_fileutils_safe_write(const char* fpath, size_t position, const char* input, size_t length);
385
393QSC_EXPORT_API bool qsc_fileutils_seekto(FILE* fp, size_t position);
394
404QSC_EXPORT_API int64_t qsc_fileutils_read_line(const char* fpath, char* buffer, size_t buflen, size_t linenum);
405
413QSC_EXPORT_API bool qsc_fileutils_truncate_file(FILE* fp, size_t length);
414
421QSC_EXPORT_API bool qsc_fileutils_valid_path(const char* fpath);
422
432QSC_EXPORT_API size_t qsc_fileutils_write(const char* input, size_t inplen, size_t position, FILE* fp);
433
442QSC_EXPORT_API bool qsc_fileutils_write_line(const char* fpath, const char* input, size_t inplen);
443
449QSC_EXPORT_API void qsc_fileutils_zeroise(const char* fpath);
450
456#if defined(QSC_DEBUG_MODE)
457QSC_EXPORT_API void qsc_fileutils_test(const char* fpath);
458#endif
459
460QSC_CPLUSPLUS_ENABLED_END
461
462#endif
QSC_EXPORT_API bool qsc_fileutils_write_line(const char *fpath, const char *input, size_t inplen)
Append a line of text to the end of a file.
Definition fileutils.c:1183
QSC_EXPORT_API size_t qsc_fileutils_get_extension(char *extension, size_t extlen, const char *fpath)
Get the file extension.
Definition fileutils.c:479
QSC_EXPORT_API size_t qsc_fileutils_write(const char *input, size_t inplen, size_t position, FILE *fp)
Write data to a file.
Definition fileutils.c:1161
QSC_EXPORT_API bool qsc_fileutils_get_working_directory(char *fpath, size_t flen)
Get the working directory fpath.
Definition fileutils.c:659
qsc_fileutils_access_rights
Enumerates the file access rights.
Definition fileutils.h:130
@ qsc_fileutils_access_write
Definition fileutils.h:138
@ qsc_fileutils_access_read
Definition fileutils.h:137
@ qsc_fileutils_access_exists
Definition fileutils.h:131
@ qsc_fileutils_access_execute
Definition fileutils.h:139
QSC_EXPORT_API size_t qsc_fileutils_safe_write(const char *fpath, size_t position, const char *input, size_t length)
Write data to a binary file.
Definition fileutils.c:1033
QSC_EXPORT_API FILE * qsc_fileutils_open(const char *fpath, qsc_fileutils_mode mode, bool binary)
Open a file and return the handle.
Definition fileutils.c:842
QSC_EXPORT_API bool qsc_fileutils_exists(const char *fpath)
Test to see if a file exists.
Definition fileutils.c:366
QSC_EXPORT_API size_t qsc_fileutils_get_name(char *name, size_t namelen, const char *fpath)
Get the file name.
Definition fileutils.c:512
QSC_EXPORT_API bool qsc_fileutils_create(const char *fpath)
Create a new file.
Definition fileutils.c:268
QSC_EXPORT_API size_t qsc_fileutils_copy_file_to_stream(const char *fpath, char *stream, size_t length)
Copy elements from a file to a byte array.
Definition fileutils.c:175
QSC_EXPORT_API int64_t qsc_fileutils_read_line(const char *fpath, char *buffer, size_t buflen, size_t linenum)
Read a line of text from a file.
Definition fileutils.c:922
QSC_EXPORT_API size_t qsc_fileutils_safe_read(const char *fpath, size_t position, char *output, size_t length)
Read data from a binary file.
Definition fileutils.c:1003
QSC_EXPORT_API bool qsc_fileutils_copy_object_to_file(const char *fpath, const void *obj, size_t length)
Copy an object to a file.
Definition fileutils.c:206
QSC_EXPORT_API size_t qsc_fileutils_get_size(const char *fpath)
Get the file size in bytes.
Definition fileutils.c:621
QSC_EXPORT_API bool qsc_fileutils_erase(const char *fpath)
Erase a file's contents.
Definition fileutils.c:313
QSC_EXPORT_API void qsc_fileutils_zeroise(const char *fpath)
Truncate a file to zero bytes.
Definition fileutils.c:1222
QSC_EXPORT_API int64_t qsc_fileutils_get_line(char **line, size_t *length, FILE *fp)
Reads a line of text from a formatted file.
Definition fileutils.c:551
QSC_EXPORT_API bool qsc_fileutils_get_access(const char *fpath, qsc_fileutils_access_rights level)
Test a user's access right to a file.
Definition fileutils.c:430
QSC_EXPORT_API bool qsc_fileutils_truncate_file(FILE *fp, size_t length)
Truncate a file to a specified byte size.
Definition fileutils.c:1086
QSC_EXPORT_API size_t qsc_fileutils_get_directory(char *directory, size_t dirlen, const char *fpath)
Get the file directory.
Definition fileutils.c:449
QSC_EXPORT_API void qsc_fileutils_close(FILE *fp)
Close a file.
Definition fileutils.c:134
QSC_EXPORT_API bool qsc_fileutils_append_to_file(const char *fpath, const char *stream, size_t length)
Append an array of characters to a file.
Definition fileutils.c:103
qsc_fileutils_mode
Enumerates the file open modes.
Definition fileutils.h:148
@ qsc_fileutils_mode_append_update
Definition fileutils.h:155
@ qsc_fileutils_mode_write
Definition fileutils.h:152
@ qsc_fileutils_mode_append
Definition fileutils.h:154
@ qsc_fileutils_mode_read
Definition fileutils.h:150
@ qsc_fileutils_mode_write_update
Definition fileutils.h:153
@ qsc_fileutils_mode_none
Definition fileutils.h:149
@ qsc_fileutils_mode_read_update
Definition fileutils.h:151
QSC_EXPORT_API size_t qsc_fileutils_list_files(char *result, size_t reslen, const char *directory)
Get the filenames in a directory delineated with a newline.
Definition fileutils.c:694
QSC_EXPORT_API bool qsc_fileutils_seekto(FILE *fp, size_t position)
Set the file pointer position.
Definition fileutils.c:1064
QSC_EXPORT_API bool qsc_fileutils_copy_stream_to_file(const char *fpath, const char *stream, size_t length)
Copy the contents of a stream to a file.
Definition fileutils.c:237
QSC_EXPORT_API bool qsc_fileutils_delete(const char *fpath)
Delete a file.
Definition fileutils.c:297
QSC_EXPORT_API void qsc_fileutils_flush(FILE *fp)
Flush a file's contents to disk.
Definition fileutils.c:356
QSC_EXPORT_API size_t qsc_fileutils_copy_file_to_object(const char *fpath, void *obj, size_t length)
Copy a file to an object.
Definition fileutils.c:144
QSC_EXPORT_API size_t qsc_fileutils_read(char *output, size_t otplen, size_t position, FILE *fp)
Read data from a file into an output stream.
Definition fileutils.c:901
QSC_EXPORT_API bool qsc_fileutils_valid_path(const char *fpath)
Checks if the fpath is valid.
Definition fileutils.c:1132
QSC_EXPORT_API bool qsc_fileutils_file_copy(const char *inpath, const char *outpath)
Copy a file to a new location.
Definition fileutils.c:391
Contains common definitions for the Quantum Secure Cryptographic (QSC) library.
#define QSC_EXPORT_API
API export macro for Microsoft compilers when importing from a DLL.
Definition qsccommon.h:605