52#ifndef QSC_FALCONBASE_H
53#define QSC_FALCONBASE_H
61#if defined(QSC_FALCON_S3SHAKE256F512)
62# define FALCON_CRYPTO_SECRETKEYBYTES 1281
63# define FALCON_CRYPTO_PUBLICKEY_BYTES 897
64# define FALCON_CRYPTO_SIGNATURE_BYTES 658
65#elif defined(QSC_FALCON_S5SHAKE256F1024)
66# define FALCON_CRYPTO_SECRETKEYBYTES 2305
67# define FALCON_CRYPTO_PUBLICKEY_BYTES 1793
68# define FALCON_CRYPTO_SIGNATURE_BYTES 1276
73#define FALCON_FPR_GM_TAB_SIZE 2048
74#define FALCON_FPR_INV_SIGMA_SIZE 11
75#define FALCON_FPR_GM_P2_SIZE 11
77#define FALCON_Q0I 12287
79#define FALCON_R2 10952
80#define FALCON_GMB_SIZE 1024
81#define FALCON_KEYGEN_TEMP_1 136
82#define FALCON_KEYGEN_TEMP_2 272
83#define FALCON_KEYGEN_TEMP_3 224
84#define FALCON_KEYGEN_TEMP_4 448
85#define FALCON_KEYGEN_TEMP_5 896
86#define FALCON_KEYGEN_TEMP_6 1792
87#define FALCON_KEYGEN_TEMP_7 3584
88#define FALCON_KEYGEN_TEMP_8 7168
89#define FALCON_KEYGEN_TEMP_9 14336
90#define FALCON_KEYGEN_TEMP_10 28672
91#define FALCON_SMALL_PRIME_SIZE 522
92#define FALCON_GAUS_1024_12289_SIZE 27
93#define FALCON_MAX_BL_SMALL_SIZE 11
94#define FALCON_MAX_BL_LARGE_SIZE 10
95#define FALCON_DEPTH_INT_FG 4
96#define FALCON_NONCE_SIZE 40
97#define FALCON_L2BOUND_SIZE 11
98#define FALCON_MAXBITS_SIZE 11
99#define FALCON_REV10_SIZE 1024
113typedef uint64_t falcon_fpr;
115static const falcon_fpr falcon_fpr_q = 4667981563525332992;
116static const falcon_fpr falcon_fpr_inverse_of_q = 4545632735260551042;
117static const falcon_fpr falcon_fpr_inv_2sqrsigma0 = 4594603506513722306;
118static const falcon_fpr falcon_fpr_log2 = 4604418534313441775;
119static const falcon_fpr falcon_fpr_inv_log2 = 4609176140021203710;
120static const falcon_fpr falcon_fpr_bnorm_max = 4670353323383631276;
121static const falcon_fpr falcon_fpr_zero = 0;
122static const falcon_fpr falcon_fpr_one = 4607182418800017408;
123static const falcon_fpr falcon_fpr_two = 4611686018427387904;
124static const falcon_fpr falcon_fpr_onehalf = 4602678819172646912;
125static const falcon_fpr falcon_fpr_invsqrt2 = 4604544271217802189;
126static const falcon_fpr falcon_fpr_invsqrt8 = 4600040671590431693;
127static const falcon_fpr falcon_fpr_ptwo31 = 4746794007248502784;
128static const falcon_fpr falcon_fpr_ptwo31m1 = 4746794007244308480;
129static const falcon_fpr falcon_fpr_mtwo31m1 = 13970166044099084288U;
130static const falcon_fpr falcon_fpr_ptwo63m1 = 4890909195324358656;
131static const falcon_fpr falcon_fpr_mtwo63m1 = 14114281232179134464U;
132static const falcon_fpr falcon_fpr_ptwo63 = 4890909195324358656;
141extern const falcon_fpr falcon_fpr_inv_sigma[FALCON_FPR_INV_SIGMA_SIZE];
142extern const falcon_fpr falcon_fpr_sigma_min[FALCON_FPR_INV_SIGMA_SIZE];
143extern const falcon_fpr falcon_fpr_gm_tab[FALCON_FPR_GM_TAB_SIZE];
144extern const falcon_fpr falcon_fpr_p2_tab[FALCON_FPR_GM_P2_SIZE];
145extern const uint8_t falcon_max_fg_bits[FALCON_MAXBITS_SIZE];
146extern const uint8_t falcon_max_FG_bits[FALCON_MAXBITS_SIZE];
147extern const uint16_t falcon_GMb[FALCON_GMB_SIZE];
148extern const uint16_t falcon_iGMb[FALCON_GMB_SIZE];
149extern const falcon_small_prime falcon_small_primes[FALCON_SMALL_PRIME_SIZE];
158extern const uint64_t falcon_gauss_1024_12289[FALCON_GAUS_1024_12289_SIZE];
159extern const uint16_t falcon_rev10[FALCON_REV10_SIZE];
215extern const size_t falcon_max_bl_small[FALCON_MAX_BL_SMALL_SIZE];
216extern const size_t falcon_max_bl_large[FALCON_MAX_BL_LARGE_SIZE];
217extern const uint32_t falcon_l2bound[FALCON_L2BOUND_SIZE];
229int32_t qsc_falcon_ref_generate_keypair(uint8_t *pk, uint8_t *sk,
bool (*rng_generate)(uint8_t*,
size_t));
241int32_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));
253bool qsc_falcon_ref_open(uint8_t *m,
size_t *mlen,
const uint8_t *sm,
size_t smlen,
const uint8_t *pk);
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 qsccommon.h:1041