40#ifndef QSC_KYBERBASE_H
41#define QSC_KYBERBASE_H
47QSC_CPLUSPLUS_ENABLED_START
53#if defined(QSC_KYBER_S1P1632)
55#elif defined(QSC_KYBER_S3P2400)
57#elif defined(QSC_KYBER_S5P3168)
59#elif defined(QSC_KYBER_S6P3936)
62# error "The Kyber parameter set is invalid!"
69#define QSC_KYBER_N 256
75#define QSC_KYBER_Q 3329
81#define QSC_KYBER_ETA2 2
87#define QSC_KYBER_MSGBYTES 32ULL
93#define QSC_KYBER_SYMBYTES 32ULL
99#define QSC_KYBER_POLYBYTES 384ULL
101#if (QSC_KYBER_K == 2)
102# define QSC_KYBER_POLYCOMPRESSED_BYTES 128
103# define QSC_KYBER_POLYVECBASE_BYTES 320
104# define QSC_KYBER_ETA1 3
105#elif (QSC_KYBER_K == 3)
106# define QSC_KYBER_POLYCOMPRESSED_BYTES 128
107# define QSC_KYBER_POLYVECBASE_BYTES 320
108# define QSC_KYBER_ETA1 2
109#elif (QSC_KYBER_K == 4)
110# define QSC_KYBER_POLYCOMPRESSED_BYTES 160
111# define QSC_KYBER_POLYVECBASE_BYTES 352
112# define QSC_KYBER_ETA1 2
113#elif (QSC_KYBER_K == 5)
114# define QSC_KYBER_POLYCOMPRESSED_BYTES 160
115# define QSC_KYBER_POLYVECBASE_BYTES 352
116# define QSC_KYBER_ETA1 2
123#define QSC_KYBER_POLYVEC_COMPRESSED_BYTES (QSC_KYBER_K * QSC_KYBER_POLYVECBASE_BYTES)
129#define QSC_KYBER_POLYVEC_BYTES (QSC_KYBER_K * QSC_KYBER_POLYBYTES)
135#define QSC_KYBER_INDCPA_PUBLICKEY_BYTES (QSC_KYBER_POLYVEC_BYTES + QSC_KYBER_SYMBYTES)
141#define QSC_KYBER_INDCPA_SECRETKEY_BYTES (QSC_KYBER_POLYVEC_BYTES)
147#define QSC_KYBER_INDCPA_BYTES (QSC_KYBER_POLYVEC_COMPRESSED_BYTES + QSC_KYBER_POLYCOMPRESSED_BYTES)
153#define QSC_KYBER_PUBLICKEY_BYTES (QSC_KYBER_INDCPA_PUBLICKEY_BYTES)
159#define QSC_KYBER_SECRETKEY_BYTES (QSC_KYBER_INDCPA_SECRETKEY_BYTES + QSC_KYBER_INDCPA_PUBLICKEY_BYTES + 2 * QSC_KYBER_SYMBYTES)
165#define QSC_KYBER_CIPHERTEXT_BYTES (QSC_KYBER_INDCPA_BYTES)
177bool qsc_kyber_ref_decapsulate(uint8_t ss[QSC_KYBER_MSGBYTES],
const uint8_t ct[QSC_KYBER_CIPHERTEXT_BYTES],
178 const uint8_t sk[QSC_KYBER_SECRETKEY_BYTES]);
188void qsc_kyber_ref_encapsulate(uint8_t ct[QSC_KYBER_CIPHERTEXT_BYTES], uint8_t ss[QSC_KYBER_MSGBYTES],
189 const uint8_t pk[QSC_KYBER_PUBLICKEY_BYTES],
bool (*rng_generate)(uint8_t*,
size_t));
198void qsc_kyber_ref_generate_keypair(uint8_t pk[QSC_KYBER_PUBLICKEY_BYTES], uint8_t sk[QSC_KYBER_SECRETKEY_BYTES],
199 bool (*rng_generate)(uint8_t*,
size_t));
201QSC_CPLUSPLUS_ENABLED_END
Contains common definitions for the Quantum Secure Cryptographic (QSC) library.