mirror of
https://github.com/itzmeanjan/ml-kem.git
synced 2026-01-09 15:47:55 -05:00
use function parameters, instead of template parameters for computing keypair and cipher text byte length
Signed-off-by: Anjan Roy <hello@itzmeanjan.in>
This commit is contained in:
@@ -8,8 +8,8 @@ void
|
||||
bench_keygen(benchmark::State& state)
|
||||
{
|
||||
constexpr size_t slen = 32;
|
||||
constexpr size_t pklen = kyber_utils::get_kem_public_key_len<k>();
|
||||
constexpr size_t sklen = kyber_utils::get_kem_secret_key_len<k>();
|
||||
constexpr size_t pklen = kyber_utils::get_kem_public_key_len(k);
|
||||
constexpr size_t sklen = kyber_utils::get_kem_secret_key_len(k);
|
||||
|
||||
std::vector<uint8_t> d(slen);
|
||||
std::vector<uint8_t> z(slen);
|
||||
@@ -44,9 +44,9 @@ void
|
||||
bench_encapsulate(benchmark::State& state)
|
||||
{
|
||||
constexpr size_t slen = 32;
|
||||
constexpr size_t pklen = kyber_utils::get_kem_public_key_len<k>();
|
||||
constexpr size_t sklen = kyber_utils::get_kem_secret_key_len<k>();
|
||||
constexpr size_t ctlen = kyber_utils::get_kem_cipher_len<k, du, dv>();
|
||||
constexpr size_t pklen = kyber_utils::get_kem_public_key_len(k);
|
||||
constexpr size_t sklen = kyber_utils::get_kem_secret_key_len(k);
|
||||
constexpr size_t ctlen = kyber_utils::get_kem_cipher_len(k, du, dv);
|
||||
constexpr size_t klen = 32;
|
||||
|
||||
std::vector<uint8_t> d(slen);
|
||||
@@ -94,9 +94,9 @@ void
|
||||
bench_decapsulate(benchmark::State& state)
|
||||
{
|
||||
constexpr size_t slen = 32;
|
||||
constexpr size_t pklen = kyber_utils::get_kem_public_key_len<k>();
|
||||
constexpr size_t sklen = kyber_utils::get_kem_secret_key_len<k>();
|
||||
constexpr size_t ctlen = kyber_utils::get_kem_cipher_len<k, du, dv>();
|
||||
constexpr size_t pklen = kyber_utils::get_kem_public_key_len(k);
|
||||
constexpr size_t sklen = kyber_utils::get_kem_secret_key_len(k);
|
||||
constexpr size_t ctlen = kyber_utils::get_kem_cipher_len(k, du, dv);
|
||||
constexpr size_t klen = 32;
|
||||
|
||||
std::vector<uint8_t> d(slen);
|
||||
|
||||
@@ -29,8 +29,8 @@ template<size_t k, size_t eta1>
|
||||
static inline void
|
||||
keygen(std::span<const uint8_t, 32> d, // used in CPA-PKE
|
||||
std::span<const uint8_t, 32> z, // used in CCA-KEM
|
||||
std::span<uint8_t, kyber_utils::get_kem_public_key_len<k>()> pubkey,
|
||||
std::span<uint8_t, kyber_utils::get_kem_secret_key_len<k>()> seckey)
|
||||
std::span<uint8_t, kyber_utils::get_kem_public_key_len(k)> pubkey,
|
||||
std::span<uint8_t, kyber_utils::get_kem_secret_key_len(k)> seckey)
|
||||
requires(kyber_params::check_keygen_params(k, eta1))
|
||||
{
|
||||
constexpr size_t skoff0 = k * 12 * 32;
|
||||
@@ -76,8 +76,8 @@ keygen(std::span<const uint8_t, 32> d, // used in CPA-PKE
|
||||
template<size_t k, size_t eta1, size_t eta2, size_t du, size_t dv>
|
||||
static inline shake256::shake256_t
|
||||
encapsulate(std::span<const uint8_t, 32> m,
|
||||
std::span<const uint8_t, kyber_utils::get_kem_public_key_len<k>()> pubkey,
|
||||
std::span<uint8_t, kyber_utils::get_kem_cipher_len<k, du, dv>()> cipher)
|
||||
std::span<const uint8_t, kyber_utils::get_kem_public_key_len(k)> pubkey,
|
||||
std::span<uint8_t, kyber_utils::get_kem_cipher_len(k, du, dv)> cipher)
|
||||
requires(kyber_params::check_encap_params(k, eta1, eta2, du, dv))
|
||||
{
|
||||
std::array<uint8_t, 64> g_in{};
|
||||
@@ -144,7 +144,7 @@ encapsulate(std::span<const uint8_t, 32> m,
|
||||
// https://pq-crystals.org/kyber/data/kyber-specification-round3-20210804.pdf
|
||||
template<size_t k, size_t eta1, size_t eta2, size_t du, size_t dv>
|
||||
static inline shake256::shake256_t
|
||||
decapsulate(std::span<const uint8_t, kyber_utils::get_kem_secret_key_len<k>()> seckey, std::span<const uint8_t, kyber_utils::get_kem_cipher_len<k, du, dv>()> cipher)
|
||||
decapsulate(std::span<const uint8_t, kyber_utils::get_kem_secret_key_len(k)> seckey, std::span<const uint8_t, kyber_utils::get_kem_cipher_len(k, du, dv)> cipher)
|
||||
requires(kyber_params::check_decap_params(k, eta1, eta2, du, dv))
|
||||
{
|
||||
constexpr size_t sklen = k * 12 * 32;
|
||||
|
||||
@@ -16,13 +16,13 @@ constexpr size_t du = 11;
|
||||
constexpr size_t dv = 5;
|
||||
|
||||
// = 1568 -bytes Kyber1024 public key
|
||||
constexpr size_t PKEY_LEN = kyber_utils::get_kem_public_key_len<k>();
|
||||
constexpr size_t PKEY_LEN = kyber_utils::get_kem_public_key_len(k);
|
||||
|
||||
// = 3168 -bytes Kyber1024 secret key
|
||||
constexpr size_t SKEY_LEN = kyber_utils::get_kem_secret_key_len<k>();
|
||||
constexpr size_t SKEY_LEN = kyber_utils::get_kem_secret_key_len(k);
|
||||
|
||||
// = 1568 -bytes Kyber1024 cipher text length
|
||||
constexpr size_t CIPHER_LEN = kyber_utils::get_kem_cipher_len<k, du, dv>();
|
||||
constexpr size_t CIPHER_LEN = kyber_utils::get_kem_cipher_len(k, du, dv);
|
||||
|
||||
// Computes a new Kyber1024 KEM keypair s.t. public key is 1568 -bytes and
|
||||
// secret key is 3168 -bytes, given 32 -bytes seed d ( used in CPA-PKE ) and 32
|
||||
|
||||
@@ -16,13 +16,13 @@ constexpr size_t du = 10;
|
||||
constexpr size_t dv = 4;
|
||||
|
||||
// = 800 -bytes Kyber512 public key
|
||||
constexpr size_t PKEY_LEN = kyber_utils::get_kem_public_key_len<k>();
|
||||
constexpr size_t PKEY_LEN = kyber_utils::get_kem_public_key_len(k);
|
||||
|
||||
// = 1632 -bytes Kyber512 secret key
|
||||
constexpr size_t SKEY_LEN = kyber_utils::get_kem_secret_key_len<k>();
|
||||
constexpr size_t SKEY_LEN = kyber_utils::get_kem_secret_key_len(k);
|
||||
|
||||
// = 768 -bytes Kyber512 cipher text length
|
||||
constexpr size_t CIPHER_LEN = kyber_utils::get_kem_cipher_len<k, du, dv>();
|
||||
constexpr size_t CIPHER_LEN = kyber_utils::get_kem_cipher_len(k, du, dv);
|
||||
|
||||
// Computes a new Kyber512 KEM keypair s.t. public key is 800 -bytes and secret
|
||||
// key is 1632 -bytes, given 32 -bytes seed d ( used in CPA-PKE ) and 32 -bytes
|
||||
|
||||
@@ -15,13 +15,13 @@ constexpr size_t du = 10;
|
||||
constexpr size_t dv = 4;
|
||||
|
||||
// = 1184 -bytes Kyber768 public key
|
||||
constexpr size_t PKEY_LEN = kyber_utils::get_kem_public_key_len<k>();
|
||||
constexpr size_t PKEY_LEN = kyber_utils::get_kem_public_key_len(k);
|
||||
|
||||
// = 2400 -bytes Kyber768 secret key
|
||||
constexpr size_t SKEY_LEN = kyber_utils::get_kem_secret_key_len<k>();
|
||||
constexpr size_t SKEY_LEN = kyber_utils::get_kem_secret_key_len(k);
|
||||
|
||||
// = 1088 -bytes Kyber768 cipher text length
|
||||
constexpr size_t CIPHER_LEN = kyber_utils::get_kem_cipher_len<k, du, dv>();
|
||||
constexpr size_t CIPHER_LEN = kyber_utils::get_kem_cipher_len(k, du, dv);
|
||||
|
||||
// Computes a new Kyber768 KEM keypair s.t. public key is 1184 -bytes and secret
|
||||
// key is 2400 -bytes, given 32 -bytes seed d ( used in CPA-PKE ) and 32 -bytes
|
||||
|
||||
@@ -54,31 +54,25 @@ from_hex(std::string_view bytes)
|
||||
}
|
||||
|
||||
// Compile-time compute IND-CCA-secure Kyber KEM public key length ( in bytes )
|
||||
template<size_t k>
|
||||
static inline constexpr size_t
|
||||
get_kem_public_key_len()
|
||||
requires(kyber_params::check_k(k))
|
||||
get_kem_public_key_len(const size_t k)
|
||||
{
|
||||
return k * 12 * 32 + 32;
|
||||
}
|
||||
|
||||
// Compile-time compute IND-CCA-secure Kyber KEM secret key length ( in bytes )
|
||||
template<size_t k>
|
||||
static inline constexpr size_t
|
||||
get_kem_secret_key_len()
|
||||
requires(kyber_params::check_k(k))
|
||||
get_kem_secret_key_len(const size_t k)
|
||||
{
|
||||
constexpr size_t t0 = k * 12 * 32;
|
||||
constexpr size_t t1 = get_kem_public_key_len<k>();
|
||||
const size_t t0 = k * 12 * 32;
|
||||
const size_t t1 = get_kem_public_key_len(k);
|
||||
|
||||
return t0 + t1 + 32 + 32;
|
||||
}
|
||||
|
||||
// Compile-time compute IND-CCA-secure Kyber KEM cipher text length ( in bytes )
|
||||
template<size_t k, size_t du, size_t dv>
|
||||
static inline constexpr size_t
|
||||
get_kem_cipher_len()
|
||||
requires(kyber_params::check_decrypt_params(k, du, dv))
|
||||
get_kem_cipher_len(size_t k, size_t du, size_t dv)
|
||||
{
|
||||
return k * du * 32 + dv * 32;
|
||||
}
|
||||
|
||||
@@ -21,9 +21,9 @@ test_kyber_kem()
|
||||
requires(klen > 0)
|
||||
{
|
||||
constexpr size_t slen = 32;
|
||||
constexpr size_t pklen = kyber_utils::get_kem_public_key_len<k>();
|
||||
constexpr size_t sklen = kyber_utils::get_kem_secret_key_len<k>();
|
||||
constexpr size_t ctlen = kyber_utils::get_kem_cipher_len<k, du, dv>();
|
||||
constexpr size_t pklen = kyber_utils::get_kem_public_key_len(k);
|
||||
constexpr size_t sklen = kyber_utils::get_kem_secret_key_len(k);
|
||||
constexpr size_t ctlen = kyber_utils::get_kem_cipher_len(k, du, dv);
|
||||
|
||||
std::vector<uint8_t> d(slen);
|
||||
std::vector<uint8_t> z(slen);
|
||||
|
||||
Reference in New Issue
Block a user