KpqC-0.1.0: cbits/third_party/SMAUG-T/include/params.h
// SPDX-License-Identifier: MIT
#ifndef SMAUGT_PARAMS_H
#define SMAUGT_PARAMS_H
#include "config.h"
#define SMAUGT_MODE SMAUGT_CONFIG_MODE
#define SMAUGT_NAMESPACE(s) \
SMAUGT_CONCAT(SMAUGT_CONFIG_NAMESPACE_PREFIX_MODE, s)
#define SMAUGT_CRYPTO_ALGNAME \
SMAUGT_STR(SMAUGT_CONCAT(smaugt_, SMAUGT_CONFIG_MODE_STRING))
#define SMAUGT_N 256 // LWE dim and LWR dim
#define SMAUGT_DELTA_BYTES (SMAUGT_N / 8) // 32
#define SMAUGT_T_BYTES (SMAUGT_N / 8) // 32
#define SMAUGT_LOG_T 1 // plaintext modulus
#if SMAUGT_MODE == SMAUGT_MODE1
#define SMAUGT_K 2 // rank of the module, in (2, 3, 4)
#define SMAUGT_LOG_Q 10 // public key modulus
#define SMAUGT_LOG_P 8 // ciphertext modulus
#define SMAUGT_LOG_P_PRIME 5 // ciphertext2 modulus
#define SMAUGT_CBDSEED_BYTES ((3 * SMAUGT_N) / 8)
#define SMAUGT_MSG_BYTES SMAUGT_DELTA_BYTES
#elif SMAUGT_MODE == SMAUGT_MODE3
#define SMAUGT_K 3 // rank of the module, in (2, 3, 4)
#define SMAUGT_LOG_Q 11 // public key modulus
#define SMAUGT_LOG_P 9 // ciphertext modulus
#define SMAUGT_LOG_P_PRIME 4 // ciphertext2 modulus
#define SMAUGT_CBDSEED_BYTES ((2 * SMAUGT_N) / 8)
#define SMAUGT_MSG_BYTES SMAUGT_DELTA_BYTES
#elif SMAUGT_MODE == SMAUGT_MODE5
#define SMAUGT_K 4 // rank of the module, in (2, 3, 4)
#define SMAUGT_LOG_Q 11 // public key modulus
#define SMAUGT_LOG_P 9 // ciphertext modulus
#define SMAUGT_LOG_P_PRIME 7 // ciphertext2 modulus
#define SMAUGT_CBDSEED_BYTES ((4 * SMAUGT_N) / 8)
#define SMAUGT_MSG_BYTES SMAUGT_DELTA_BYTES
#elif SMAUGT_MODE == SMAUGT_MODET
#define SMAUGT_K 2 // rank of the module, in (2, 3, 4)
#define SMAUGT_LOG_Q 10 // public key modulus
#define SMAUGT_LOG_P 8 // ciphertext modulus
#define SMAUGT_LOG_P_PRIME 3 // ciphertext2 modulus
#define SMAUGT_CBDSEED_BYTES ((3 * SMAUGT_N) / 8)
#define SMAUGT_MSG_BYTES 16 // for D2
#endif
#define SMAUGT_MODULUS_16_LOG_Q \
(16 - SMAUGT_LOG_Q) // modulus (16 - SMAUGT_LOG_Q)
#define SMAUGT_MODULUS_16_LOG_P \
(16 - SMAUGT_LOG_P) // modulus (16 - SMAUGT_LOG_P)
#define SMAUGT_MODULUS_16_LOG_P_PRIME \
(16 - SMAUGT_LOG_P_PRIME) // modulus (16 - SMAUGT_LOG_P_PRIME)
#define SMAUGT_MODULUS_16_LOG_T \
(16 - SMAUGT_LOG_T) // modulus (16 - SMAUGT_LOG_T)
// Size of keys and ciphertext
#define SMAUGT_SHARED_SECRETE_BYTES (32) // 32
#define SMAUGT_CRYPTO_BYTES SMAUGT_SHARED_SECRETE_BYTES // 32
#define SMAUGT_CTPOLY1_BYTES (SMAUGT_LOG_P * SMAUGT_N / 8) // element in R_p
#define SMAUGT_CTPOLY2_BYTES \
(SMAUGT_LOG_P_PRIME * SMAUGT_N / 8) // element in R_p'
#define SMAUGT_SKPOLY_BYTES (SMAUGT_N / 4) // 64
#define SMAUGT_SKPOLYVEC_BYTES \
(SMAUGT_SKPOLY_BYTES * SMAUGT_K) // vector of secret polynomials
#define SMAUGT_CTPOLYVEC_BYTES \
(SMAUGT_CTPOLY1_BYTES * SMAUGT_K) // vector with element in R_p
#define SMAUGT_CIPHERTEXT_BYTES \
(SMAUGT_CTPOLYVEC_BYTES + SMAUGT_CTPOLY2_BYTES) // (vector c21, c22)
#define SMAUGT_PKSEED_BYTES (32) // seed for a(x) 32
#define SMAUGT_PKPOLY_BYTES ((SMAUGT_LOG_Q * SMAUGT_N) / 8) // b(x)
#define SMAUGT_PKPOLYVEC_BYTES \
(SMAUGT_PKPOLY_BYTES * SMAUGT_K) // vector with element in R_q
#define SMAUGT_PKPOLYMAT_BYTES \
(SMAUGT_PKPOLYVEC_BYTES * SMAUGT_K) // matrix with element in R_q
#define SMAUGT_PUBLICKEY_BYTES \
(SMAUGT_PKSEED_BYTES + SMAUGT_PKPOLYVEC_BYTES) // (A seed, b(x) vector)
#define SMAUGT_PKE_SECRETKEY_BYTES (SMAUGT_SKPOLYVEC_BYTES) // s(x) vector
#define SMAUGT_KEM_SECRETKEY_BYTES \
(SMAUGT_PKE_SECRETKEY_BYTES + SMAUGT_T_BYTES + \
SMAUGT_PUBLICKEY_BYTES) // s(x) vector, t, pk
#endif /* !SMAUGT_PARAMS_H */