QSC Post Quantum Cryptographic Library 1.0.0.6c (A6)
A post quantum secure library written in Ansi C
 
Loading...
Searching...
No Matches
secrand.h
Go to the documentation of this file.
1/*
2 * 2025 Quantum Resistant Cryptographic Solutions Corporation
3 * All Rights Reserved.
4 *
5 * NOTICE: This software and all accompanying materials are the exclusive
6 * property of Quantum Resistant Cryptographic Solutions Corporation (QRCS).
7 * The intellectual and technical concepts contained within this implementation
8 * are proprietary to QRCS and its authorized licensors and are protected under
9 * applicable U.S. and international copyright, patent, and trade secret laws.
10 *
11 * CRYPTOGRAPHIC STANDARDS:
12 * - This software includes implementations of cryptographic algorithms such as
13 * SHA3, AES, and others. These algorithms are public domain or standardized
14 * by organizations such as NIST and are NOT the property of QRCS.
15 * - However, all source code, optimizations, and implementations in this library
16 * are original works of QRCS and are protected under this license.
17 *
18 * RESTRICTIONS:
19 * - Redistribution, modification, or unauthorized distribution of this software,
20 * in whole or in part, is strictly prohibited.
21 * - This software is provided for non-commercial, educational, and research
22 * purposes only. Commercial use in any form is expressly forbidden.
23 * - Licensing and authorized distribution are solely at the discretion of QRCS.
24 * - Any use of this software implies acceptance of these restrictions.
25 *
26 * DISCLAIMER:
27 * This software is provided "as is," without warranty of any kind, express or
28 * implied, including but not limited to warranties of merchantability or fitness
29 * for a particular purpose. QRCS disclaims all liability for any direct, indirect,
30 * incidental, or consequential damages resulting from the use or misuse of this software.
31 *
32 * FULL LICENSE:
33 * This software is subject to the **Quantum Resistant Cryptographic Solutions
34 * Proprietary License (QRCS-PL)**. The complete license terms are included
35 * in the LICENSE.txt file distributed with this software.
36 *
37 * Written by: John Underhill
38 * Contact: john.underhill@protonmail.com
39 */
40
41#ifndef QSC_SECRAND_H
42#define QSC_SECRAND_H
43
44#include "common.h"
45#include "csg.h"
46
47QSC_CPLUSPLUS_ENABLED_START
48
64
69#define QSC_SECRAND_SEED_SIZE 32ULL
70
75#define QSC_SECRAND_CACHE_SIZE 1024ULL
76
88
95
102
109
116
123QSC_EXPORT_API int16_t qsc_secrand_next_int16_max(int16_t maximum);
124
132QSC_EXPORT_API int16_t qsc_secrand_next_int16_maxmin(int16_t maximum, int16_t minimum);
133
140
147QSC_EXPORT_API uint16_t qsc_secrand_next_uint16_max(uint16_t maximum);
148
156QSC_EXPORT_API uint16_t qsc_secrand_next_uint16_maxmin(uint16_t maximum, uint16_t minimum);
157
164
171QSC_EXPORT_API int32_t qsc_secrand_next_int32_max(int32_t maximum);
172
180QSC_EXPORT_API int32_t qsc_secrand_next_int32_maxmin(int32_t maximum, int32_t minimum);
181
188
195QSC_EXPORT_API uint32_t qsc_secrand_next_uint32_max(uint32_t maximum);
196
204QSC_EXPORT_API uint32_t qsc_secrand_next_uint32_maxmin(uint32_t maximum, uint32_t minimum);
205
212
219QSC_EXPORT_API int64_t qsc_secrand_next_int64_max(int64_t maximum);
220
228QSC_EXPORT_API int64_t qsc_secrand_next_int64_maxmin(int64_t maximum, int64_t minimum);
229
236
243QSC_EXPORT_API uint64_t qsc_secrand_next_uint64_max(uint64_t maximum);
244
252QSC_EXPORT_API uint64_t qsc_secrand_next_uint64_maxmin(uint64_t maximum, uint64_t minimum);
253
258
267QSC_EXPORT_API void qsc_secrand_initialize(const uint8_t* seed, size_t seedlen, const uint8_t* custom, size_t custlen);
268
276QSC_EXPORT_API bool qsc_secrand_generate(uint8_t* output, size_t length);
277
278QSC_CPLUSPLUS_ENABLED_END
279
280#endif
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 common.h:520
Contains the public API and documentation for the CSG pseudo-random bytes generator.
QSC_EXPORT_API uint64_t qsc_secrand_next_uint64(void)
Generate an unsigned 64-bit random integer.
Definition secrand.c:274
QSC_EXPORT_API void qsc_secrand_dispose(void)
Clear the buffer and destroy the internal state.
Definition secrand.c:322
QSC_EXPORT_API uint16_t qsc_secrand_next_uint16(void)
Generate an unsigned 16-bit random integer.
Definition secrand.c:82
QSC_EXPORT_API uint32_t qsc_secrand_next_uint32_max(uint32_t maximum)
Generate an unsigned 32-bit random integer of a maximum value.
Definition secrand.c:190
QSC_EXPORT_API int32_t qsc_secrand_next_int32_maxmin(int32_t maximum, int32_t minimum)
Generate a signed 32-bit random integer of a maximum and minimum value.
Definition secrand.c:159
QSC_EXPORT_API int32_t qsc_secrand_next_int32(void)
Generate a signed 32-bit random integer.
Definition secrand.c:130
QSC_EXPORT_API int64_t qsc_secrand_next_int64_maxmin(int64_t maximum, int64_t minimum)
Generate a signed 64-bit random integer of a maximum and minimum value.
Definition secrand.c:255
#define QSC_SECRAND_CACHE_SIZE
The internal cache size of the generator.
Definition secrand.h:75
QSC_EXPORT_API uint64_t qsc_secrand_next_uint64_maxmin(uint64_t maximum, uint64_t minimum)
Generate an unsigned 64-bit random integer of a maximum and minimum value.
Definition secrand.c:303
QSC_EXPORT_API uint64_t qsc_secrand_next_uint64_max(uint64_t maximum)
Generate an unsigned 64-bit random integer of a maximum value.
Definition secrand.c:286
QSC_EXPORT_API int16_t qsc_secrand_next_int16(void)
Generate a signed 16-bit random integer.
Definition secrand.c:34
QSC_EXPORT_API uint32_t qsc_secrand_next_uint32(void)
Generate an unsigned 32-bit random integer.
Definition secrand.c:178
QSC_EXPORT_API int64_t qsc_secrand_next_int64(void)
Generate a signed 64-bit random integer.
Definition secrand.c:226
QSC_EXPORT_API int32_t qsc_secrand_next_int32_max(int32_t maximum)
Generate a signed 32-bit random integer of a maximum value.
Definition secrand.c:142
QSC_EXPORT_API uint16_t qsc_secrand_next_uint16_max(uint16_t maximum)
Generate an unsigned 16-bit random integer of a maximum value.
Definition secrand.c:94
QSC_EXPORT_API uint16_t qsc_secrand_next_uint16_maxmin(uint16_t maximum, uint16_t minimum)
Generate an unsigned 16-bit random integer of a maximum and minimum value.
Definition secrand.c:111
QSC_EXPORT_API uint8_t qsc_secrand_next_uchar(void)
Generate an unsigned 8-bit random integer.
Definition secrand.c:14
QSC_EXPORT_API int16_t qsc_secrand_next_int16_max(int16_t maximum)
Generate a signed 16-bit random integer of a maximum value.
Definition secrand.c:46
QSC_EXPORT_API void qsc_secrand_initialize(const uint8_t *seed, size_t seedlen, const uint8_t *custom, size_t custlen)
Initialize the random generator with a seed and optional customization array.
Definition secrand.c:333
QSC_EXPORT_API int64_t qsc_secrand_next_int64_max(int64_t maximum)
Generate a signed 64-bit random integer of a maximum value.
Definition secrand.c:238
QSC_EXPORT_API uint32_t qsc_secrand_next_uint32_maxmin(uint32_t maximum, uint32_t minimum)
Generate an unsigned 32-bit random integer of a maximum and minimum value.
Definition secrand.c:207
QSC_EXPORT_API int8_t qsc_secrand_next_char(void)
Generate a signed 8-bit random integer.
Definition secrand.c:6
QSC_EXPORT_API int16_t qsc_secrand_next_int16_maxmin(int16_t maximum, int16_t minimum)
Generate a signed 16-bit random integer of a maximum and minimum value.
Definition secrand.c:63
QSC_EXPORT_API bool qsc_secrand_generate(uint8_t *output, size_t length)
Generate an array of pseudo-random bytes.
Definition secrand.c:347
QSC_EXPORT_API double qsc_secrand_next_double(void)
Generate a random double-precision floating-point number.
Definition secrand.c:22
The CSG state structure.
Definition csg.h:110
The internal secrand state array.
Definition secrand.h:82
size_t cpos
Definition secrand.h:85
bool init
Definition secrand.h:86
qsc_csg_state hstate
Definition secrand.h:83
uint8_t cache[QSC_SECRAND_CACHE_SIZE]
Definition secrand.h:84