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.