40#ifndef QSC_KYBERBASE_AVX2_H
41#define QSC_KYBERBASE_AVX2_H
47QSC_CPLUSPLUS_ENABLED_START
54#if defined(QSC_SYSTEM_HAS_AVX2)
60#if defined(QSC_KYBER_S1P1632)
62#elif defined(QSC_KYBER_S3P2400)
64#elif defined(QSC_KYBER_S5P3168)
66#elif defined(QSC_KYBER_S6P3936)
69# error "The Kyber parameter set is invalid!"
76#define QSC_KYBER_N 256
82#define QSC_KYBER_Q 3329
88#define QSC_KYBER_ETA2 2
94#define QSC_KYBER_MSGBYTES 32
100#define QSC_KYBER_SYMBYTES 32
106#define QSC_KYBER_POLYBYTES 384
108#if (QSC_KYBER_K == 2)
109# define QSC_KYBER_POLYVECBASE_BYTES 320
110# define QSC_KYBER_POLYCOMPRESSED_BYTES 128
111# define QSC_KYBER_ETA1 3
112#elif (QSC_KYBER_K == 3)
113# define QSC_KYBER_POLYVECBASE_BYTES 320
114# define QSC_KYBER_POLYCOMPRESSED_BYTES 128
115# define QSC_KYBER_ETA1 2
116#elif (QSC_KYBER_K == 4)
117# define QSC_KYBER_POLYVECBASE_BYTES 352
118# define QSC_KYBER_POLYCOMPRESSED_BYTES 160
119# define QSC_KYBER_ETA1 2
120#elif (QSC_KYBER_K == 5)
121# define QSC_KYBER_POLYVECBASE_BYTES 352
122# define QSC_KYBER_POLYCOMPRESSED_BYTES 160
123# define QSC_KYBER_ETA1 2
130#define QSC_KYBER_POLYVEC_COMPRESSED_BYTES (QSC_KYBER_K * QSC_KYBER_POLYVECBASE_BYTES)
136#define QSC_KYBER_POLYVEC_BYTES (QSC_KYBER_K * QSC_KYBER_POLYBYTES)
142#define QSC_KYBER_INDCPA_PUBLICKEY_BYTES (QSC_KYBER_POLYVEC_BYTES + QSC_KYBER_SYMBYTES)
148#define QSC_KYBER_INDCPA_SECRETKEY_BYTES (QSC_KYBER_POLYVEC_BYTES)
154#define QSC_KYBER_INDCPA_BYTES (QSC_KYBER_POLYVEC_COMPRESSED_BYTES + QSC_KYBER_POLYCOMPRESSED_BYTES)
160#define QSC_KYBER_PUBLICKEY_BYTES (QSC_KYBER_INDCPA_PUBLICKEY_BYTES)
166#define QSC_KYBER_SECRETKEY_BYTES (QSC_KYBER_INDCPA_SECRETKEY_BYTES + QSC_KYBER_INDCPA_PUBLICKEY_BYTES + 2 * QSC_KYBER_SYMBYTES)
172#define QSC_KYBER_CIPHERTEXT_BYTES (QSC_KYBER_INDCPA_BYTES)
184bool qsc_kyber_avx2_decapsulate(uint8_t ss[QSC_KYBER_MSGBYTES],
const uint8_t ct[QSC_KYBER_CIPHERTEXT_BYTES],
185 const uint8_t sk[QSC_KYBER_SECRETKEY_BYTES]);
195void qsc_kyber_avx2_encapsulate(uint8_t ct[QSC_KYBER_CIPHERTEXT_BYTES], uint8_t ss[QSC_KYBER_MSGBYTES],
196 const uint8_t pk[QSC_KYBER_PUBLICKEY_BYTES],
bool (*rng_generate)(uint8_t*,
size_t));
205void qsc_kyber_avx2_generate_keypair(uint8_t pk[QSC_KYBER_PUBLICKEY_BYTES], uint8_t sk[QSC_KYBER_SECRETKEY_BYTES],
206 bool (*rng_generate)(uint8_t*,
size_t));
210QSC_CPLUSPLUS_ENABLED_END
Contains common definitions for the Quantum Secure Cryptographic (QSC) library.