QSC Post Quantum Cryptographic Library 1.1.0.2 (B2)
A post quantum secure library written in Ansi C
Loading...
Searching...
No Matches
secrand.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_SECRAND_H
53#define QSC_SECRAND_H
54
55#include "qsccommon.h"
56#include "async.h"
57#include "csg.h"
58
59QSC_CPLUSPLUS_ENABLED_START
60
76
81#define QSC_SECRAND_SEED_SIZE 32ULL
82
87#define QSC_SECRAND_CACHE_SIZE 1024ULL
88
101
108
115
122
129
136QSC_EXPORT_API int16_t qsc_secrand_next_int16_max(int16_t maximum);
137
145QSC_EXPORT_API int16_t qsc_secrand_next_int16_maxmin(int16_t maximum, int16_t minimum);
146
153
160QSC_EXPORT_API uint16_t qsc_secrand_next_uint16_max(uint16_t maximum);
161
169QSC_EXPORT_API uint16_t qsc_secrand_next_uint16_maxmin(uint16_t maximum, uint16_t minimum);
170
177
184QSC_EXPORT_API int32_t qsc_secrand_next_int32_max(int32_t maximum);
185
193QSC_EXPORT_API int32_t qsc_secrand_next_int32_maxmin(int32_t maximum, int32_t minimum);
194
201
208QSC_EXPORT_API uint32_t qsc_secrand_next_uint32_max(uint32_t maximum);
209
217QSC_EXPORT_API uint32_t qsc_secrand_next_uint32_maxmin(uint32_t maximum, uint32_t minimum);
218
225
232QSC_EXPORT_API int64_t qsc_secrand_next_int64_max(int64_t maximum);
233
241QSC_EXPORT_API int64_t qsc_secrand_next_int64_maxmin(int64_t maximum, int64_t minimum);
242
249
256QSC_EXPORT_API uint64_t qsc_secrand_next_uint64_max(uint64_t maximum);
257
265QSC_EXPORT_API uint64_t qsc_secrand_next_uint64_maxmin(uint64_t maximum, uint64_t minimum);
266
271
280QSC_EXPORT_API void qsc_secrand_initialize(const uint8_t* seed, size_t seedlen, const uint8_t* custom, size_t custlen);
281
289QSC_EXPORT_API bool qsc_secrand_generate(uint8_t* output, size_t length);
290
291QSC_CPLUSPLUS_ENABLED_END
292
293#endif
Asynchronous Thread and Mutex Management Functions.
Contains the public API and documentation for the CSG pseudo-random bytes generator.
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
QSC_EXPORT_API uint64_t qsc_secrand_next_uint64(void)
Generate an unsigned 64-bit random integer.
Definition secrand.c:307
QSC_EXPORT_API void qsc_secrand_dispose(void)
Clear the buffer and destroy the internal state.
Definition secrand.c:358
QSC_EXPORT_API uint16_t qsc_secrand_next_uint16(void)
Generate an unsigned 16-bit random integer.
Definition secrand.c:103
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:220
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:186
QSC_EXPORT_API int32_t qsc_secrand_next_int32(void)
Generate a signed 32-bit random integer.
Definition secrand.c:154
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:288
#define QSC_SECRAND_CACHE_SIZE
The internal cache size of the generator.
Definition secrand.h:87
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:339
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:322
QSC_EXPORT_API int16_t qsc_secrand_next_int16(void)
Generate a signed 16-bit random integer.
Definition secrand.c:52
QSC_EXPORT_API uint32_t qsc_secrand_next_uint32(void)
Generate an unsigned 32-bit random integer.
Definition secrand.c:205
QSC_EXPORT_API int64_t qsc_secrand_next_int64(void)
Generate a signed 64-bit random integer.
Definition secrand.c:256
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:169
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:118
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:135
QSC_EXPORT_API uint8_t qsc_secrand_next_uchar(void)
Generate an unsigned 8-bit random integer.
Definition secrand.c:21
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:67
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:376
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:271
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:237
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:84
QSC_EXPORT_API bool qsc_secrand_generate(uint8_t *output, size_t length)
Generate an array of pseudo-random bytes.
Definition secrand.c:405
QSC_EXPORT_API double qsc_secrand_next_double(void)
Generate a random double-precision floating-point number.
Definition secrand.c:36
The CSG state structure.
Definition csg.h:121
The internal secrand state array.
Definition secrand.h:94
size_t cpos
Definition secrand.h:97
bool init
Definition secrand.h:98
qsc_csg_state hstate
Definition secrand.h:95
qsc_mutex opmtx
Definition secrand.h:99
uint8_t cache[QSC_SECRAND_CACHE_SIZE]
Definition secrand.h:96