41#ifndef QSC_FALCONBASE_H
42#define QSC_FALCONBASE_H
48QSC_CPLUSPLUS_ENABLED_START
52#if defined(QSC_FALCON_S3SHAKE256F512)
53# define FALCON_CRYPTO_SECRETKEYBYTES 1281
54# define FALCON_CRYPTO_PUBLICKEY_BYTES 897
55# define FALCON_CRYPTO_SIGNATURE_BYTES 690
56#elif defined(QSC_FALCON_S5SHAKE256F1024)
57# define FALCON_CRYPTO_SECRETKEYBYTES 2305
58# define FALCON_CRYPTO_PUBLICKEY_BYTES 1793
59# define FALCON_CRYPTO_SIGNATURE_BYTES 1330
64#define FALCON_FPR_GM_TAB_SIZE 2048
65#define FALCON_FPR_INV_SIGMA_SIZE 11
66#define FALCON_FPR_GM_P2_SIZE 11
68#define FALCON_Q0I 12287
70#define FALCON_R2 10952
71#define FALCON_GMB_SIZE 1024
72#define FALCON_KEYGEN_TEMP_1 136
73#define FALCON_KEYGEN_TEMP_2 272
74#define FALCON_KEYGEN_TEMP_3 224
75#define FALCON_KEYGEN_TEMP_4 448
76#define FALCON_KEYGEN_TEMP_5 896
77#define FALCON_KEYGEN_TEMP_6 1792
78#define FALCON_KEYGEN_TEMP_7 3584
79#define FALCON_KEYGEN_TEMP_8 7168
80#define FALCON_KEYGEN_TEMP_9 14336
81#define FALCON_KEYGEN_TEMP_10 28672
82#define FALCON_SMALL_PRIME_SIZE 522
83#define FALCON_GAUS_1024_12289_SIZE 27
84#define FALCON_MAX_BL_SMALL_SIZE 11
85#define FALCON_MAX_BL_LARGE_SIZE 10
86#define FALCON_DEPTH_INT_FG 4
87#define FALCON_NONCE_SIZE 40
88#define FALCON_L2BOUND_SIZE 11
89#define FALCON_MAXBITS_SIZE 11
90#define FALCON_REV10_SIZE 1024
104typedef uint64_t falcon_fpr;
106static const falcon_fpr falcon_fpr_q = 4667981563525332992;
107static const falcon_fpr falcon_fpr_inverse_of_q = 4545632735260551042;
108static const falcon_fpr falcon_fpr_inv_2sqrsigma0 = 4594603506513722306;
109static const falcon_fpr falcon_fpr_log2 = 4604418534313441775;
110static const falcon_fpr falcon_fpr_inv_log2 = 4609176140021203710;
111static const falcon_fpr falcon_fpr_bnorm_max = 4670353323383631276;
112static const falcon_fpr falcon_fpr_zero = 0;
113static const falcon_fpr falcon_fpr_one = 4607182418800017408;
114static const falcon_fpr falcon_fpr_two = 4611686018427387904;
115static const falcon_fpr falcon_fpr_onehalf = 4602678819172646912;
116static const falcon_fpr falcon_fpr_invsqrt2 = 4604544271217802189;
117static const falcon_fpr falcon_fpr_invsqrt8 = 4600040671590431693;
118static const falcon_fpr falcon_fpr_ptwo31 = 4746794007248502784;
119static const falcon_fpr falcon_fpr_ptwo31m1 = 4746794007244308480;
120static const falcon_fpr falcon_fpr_mtwo31m1 = 13970166044099084288U;
121static const falcon_fpr falcon_fpr_ptwo63m1 = 4890909195324358656;
122static const falcon_fpr falcon_fpr_mtwo63m1 = 14114281232179134464U;
123static const falcon_fpr falcon_fpr_ptwo63 = 4890909195324358656;
132extern const falcon_fpr falcon_fpr_inv_sigma[FALCON_FPR_INV_SIGMA_SIZE];
134extern const falcon_fpr falcon_fpr_sigma_min[FALCON_FPR_INV_SIGMA_SIZE];
136extern const falcon_fpr falcon_fpr_gm_tab[FALCON_FPR_GM_TAB_SIZE];
138extern const falcon_fpr falcon_fpr_p2_tab[FALCON_FPR_GM_P2_SIZE];
142extern const uint8_t falcon_max_fg_bits[FALCON_MAXBITS_SIZE];
144extern const uint8_t falcon_max_FG_bits[FALCON_MAXBITS_SIZE];
148extern const uint16_t falcon_GMb[FALCON_GMB_SIZE];
150extern const uint16_t falcon_iGMb[FALCON_GMB_SIZE];
152extern const falcon_small_prime falcon_small_primes[FALCON_SMALL_PRIME_SIZE];
164extern const uint64_t falcon_gauss_1024_12289[FALCON_GAUS_1024_12289_SIZE];
166extern const uint16_t falcon_rev10[FALCON_REV10_SIZE];
223extern const size_t falcon_max_bl_small[FALCON_MAX_BL_SMALL_SIZE];
225extern const size_t falcon_max_bl_large[FALCON_MAX_BL_LARGE_SIZE];
236} falcon_bit_length[] =
256 falcon_fpr sigma_min;
257} falcon_sampler_context;
259typedef int32_t(*falcon_samplerZ)(
void* ctx, falcon_fpr mu, falcon_fpr sigma);
263extern const uint32_t falcon_l2bound[FALCON_L2BOUND_SIZE];
277int32_t qsc_falcon_ref_generate_keypair(uint8_t* pk, uint8_t* sk,
bool (*rng_generate)(uint8_t*,
size_t));
291int32_t qsc_falcon_ref_sign(uint8_t* sm,
size_t* smlen,
const uint8_t* m,
size_t mlen,
const uint8_t* sk,
bool (*rng_generate)(uint8_t*,
size_t));
304bool qsc_falcon_ref_open(uint8_t* m,
size_t* mlen,
const uint8_t* sm,
size_t smlen,
const uint8_t* pk);
306QSC_CPLUSPLUS_ENABLED_END
Contains common definitions for the Quantum Secure Cryptographic (QSC) library.
#define QSC_ALIGN(x)
Macro for aligning data to 'x' bytes using GCC/Clang.
Definition common.h:593