QSC Post Quantum Cryptographic Library 1.1.0.2 (B2)
A post quantum secure library written in Ansi C
Loading...
Searching...
No Matches
hqc.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_HQC_H
53#define QSC_HQC_H
54
55#include "qsccommon.h"
56#if defined(QSC_SYSTEM_HAS_AVX2)
57 #include "hqcbase_avx2.h"
58#else
59 #include "hqcbase.h"
60#endif
61
62QSC_CPLUSPLUS_ENABLED_START
63
96
97#if defined(QSC_HQC_S1N2321)
102# define QSC_HQC_PUBLICKEY_SIZE 2241U
103
108# define QSC_HQC_PRIVATEKEY_SIZE 2321U
109
114# define QSC_HQC_CIPHERTEXT_SIZE 4433U
115
116#elif defined(QSC_HQC_S3N4602)
121# define QSC_HQC_PUBLICKEY_SIZE 4514U
122
127# define QSC_HQC_PRIVATEKEY_SIZE 4602U
128
133# define QSC_HQC_CIPHERTEXT_SIZE 8978U
134
135#elif defined(QSC_HQC_S5N7333)
140# define QSC_HQC_PUBLICKEY_SIZE 7237U
141
146# define QSC_HQC_PRIVATEKEY_SIZE 7333U
147
152# define QSC_HQC_CIPHERTEXT_SIZE 14421U
153
154#else
155# error "A valid HQC parameter set must be defined: QSC_HQC_S1N2321, QSC_HQC_S3N4602, or QSC_HQC_S5N7333."
156#endif
157
162#define QSC_HQC_SEED_SIZE 32U
163
168#define QSC_HQC_SHAREDSECRET_SIZE 32U
169
174#define QSC_HQC_ALGNAME "HQC"
175
186QSC_EXPORT_API bool qsc_hqc_decapsulate(uint8_t* secret, const uint8_t* ciphertext, const uint8_t* privatekey);
187
199QSC_EXPORT_API bool qsc_hqc_encapsulate(uint8_t* secret, uint8_t* ciphertext, const uint8_t* publickey, bool (*rng_generate)(uint8_t*, size_t));
200
210void qsc_hqc_seeded_encapsulate(uint8_t* secret, uint8_t* ciphertext, const uint8_t* publickey, const uint8_t seed[QSC_HQC_SEED_SIZE]);
211
222QSC_EXPORT_API bool qsc_hqc_generate_keypair(uint8_t* publickey, uint8_t* privatekey, bool (*rng_generate)(uint8_t*, size_t));
223
232QSC_EXPORT_API void qsc_hqc_generate_seeded_keypair(uint8_t* publickey, uint8_t* privatekey, uint8_t* seed);
233
234QSC_CPLUSPLUS_ENABLED_END
235
236#endif
#define QSC_HQC_SEED_SIZE
The byte size of the seed array.
Definition hqc.h:162
QSC_EXPORT_API bool qsc_hqc_encapsulate(uint8_t *secret, uint8_t *ciphertext, const uint8_t *publickey, bool(*rng_generate)(uint8_t *, size_t))
Encapsulates a shared secret key using a public key.
void qsc_hqc_seeded_encapsulate(uint8_t *secret, uint8_t *ciphertext, const uint8_t *publickey, const uint8_t seed[QSC_HQC_SEED_SIZE])
Generates cipher text and shared secret for given public key and a random seed.
QSC_EXPORT_API void qsc_hqc_generate_seeded_keypair(uint8_t *publickey, uint8_t *privatekey, uint8_t *seed)
Generates public and private key for the CCA-Secure Kyber key encapsulation mechanism using input see...
QSC_EXPORT_API bool qsc_hqc_decapsulate(uint8_t *secret, const uint8_t *ciphertext, const uint8_t *privatekey)
Decapsulates the shared secret for a given ciphertext using a private key.
QSC_EXPORT_API bool qsc_hqc_generate_keypair(uint8_t *publickey, uint8_t *privatekey, bool(*rng_generate)(uint8_t *, size_t))
Generates a Kyber public/private key pair.
Defines the public AVX2 entry points, parameter constants, and data structures for the QSC HQC implem...
Defines the public AVX2 entry points, parameter constants, and data structures for the QSC HQC implem...
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