23#include "ext_headers.h"
25#if defined __has_include
26#if __has_include("lc_kyber_1024.h")
28#define LC_KYBER_1024_ENABLED
30#if __has_include("lc_kyber_768.h")
32#define LC_KYBER_768_ENABLED
34#if __has_include("lc_kyber_512.h")
36#define LC_KYBER_512_ENABLED
39#error "Compiler misses __has_include"
87#ifdef LC_KYBER_1024_ENABLED
90#ifdef LC_KYBER_768_ENABLED
93#ifdef LC_KYBER_512_ENABLED
105#ifdef LC_KYBER_1024_ENABLED
108#ifdef LC_KYBER_768_ENABLED
111#ifdef LC_KYBER_512_ENABLED
123#ifdef LC_KYBER_1024_ENABLED
126#ifdef LC_KYBER_768_ENABLED
129#ifdef LC_KYBER_512_ENABLED
141#ifdef LC_KYBER_1024_ENABLED
144#ifdef LC_KYBER_768_ENABLED
147#ifdef LC_KYBER_512_ENABLED
412 const uint8_t *seed,
size_t seedlen,
584 size_t shared_secret_len,
const uint8_t *kdf_nonce,
585 size_t kdf_nonce_len,
609 const uint8_t *kdf_nonce,
size_t kdf_nonce_len,
707 uint8_t *shared_secret,
size_t shared_secret_len,
708 const uint8_t *kdf_nonce,
size_t kdf_nonce_len,
735 const uint8_t *kdf_nonce,
size_t kdf_nonce_len,
785 const uint8_t *plaintext, uint8_t *ciphertext,
786 size_t datalen,
const uint8_t *aad,
size_t aadlen,
787 uint8_t *tag,
size_t taglen,
struct lc_aead_ctx *aead);
815int lc_kyber_ies_enc_init(
struct lc_aead_ctx *aead,
817 const uint8_t *aad,
size_t aadlen);
840int lc_kyber_ies_enc_update(
struct lc_aead_ctx *aead,
const uint8_t *plaintext,
841 uint8_t *ciphertext,
size_t datalen);
862int lc_kyber_ies_enc_final(
struct lc_aead_ctx *aead, uint8_t *tag,
894 const uint8_t *ciphertext, uint8_t *plaintext,
895 size_t datalen,
const uint8_t *aad,
size_t aadlen,
896 const uint8_t *tag,
size_t taglen,
897 struct lc_aead_ctx *aead);
924int lc_kyber_ies_dec_init(
struct lc_aead_ctx *aead,
950int lc_kyber_ies_dec_update(
struct lc_aead_ctx *aead,
const uint8_t *ciphertext,
951 uint8_t *plaintext,
size_t datalen);
972int lc_kyber_ies_dec_final(
struct lc_aead_ctx *aead,
const uint8_t *tag,
979#ifdef LC_KYBER_X25519_KEM
1001#ifdef LC_KYBER_1024_ENABLED
1004#ifdef LC_KYBER_768_ENABLED
1007#ifdef LC_KYBER_512_ENABLED
1019#ifdef LC_KYBER_1024_ENABLED
1022#ifdef LC_KYBER_768_ENABLED
1025#ifdef LC_KYBER_512_ENABLED
1037#ifdef LC_KYBER_1024_ENABLED
1040#ifdef LC_KYBER_768_ENABLED
1043#ifdef LC_KYBER_512_ENABLED
1055#ifdef LC_KYBER_1024_ENABLED
1058#ifdef LC_KYBER_768_ENABLED
1061#ifdef LC_KYBER_512_ENABLED
1152 const uint8_t *kyber_src_key,
1153 size_t kyber_src_key_len,
1154 const uint8_t *x25519_src_key,
1155 size_t x25519_src_key_len);
1158 const uint8_t *kyber_src_key,
1159 size_t kyber_src_key_len,
1160 const uint8_t *x25519_src_key,
1161 size_t x25519_src_key_len);
1164 const uint8_t *kyber_src_ct,
1165 size_t kyber_src_ct_len,
1166 const uint8_t *x25519_rem_pub_key,
1167 size_t x25519_rem_pub_len);
1170 const uint8_t *kyber_src_ss,
1171 size_t kyber_src_ss_len,
const uint8_t *x25519_ss,
1172 size_t x25519_ss_len);
1190 uint8_t **x25519_key,
size_t *x25519_key_len,
1209 uint8_t **x25519_key,
size_t *x25519_key_len,
1229 uint8_t **x25519_key,
size_t *x25519_key_len,
1249 uint8_t **x25519_ss,
size_t *x25519_ss_len,
1266 struct lc_rng_ctx *rng_ctx,
1364 uint8_t *shared_secret,
1365 size_t shared_secret_len,
1366 const uint8_t *kdf_nonce,
1367 size_t kdf_nonce_len,
1391 size_t shared_secret_len,
1392 const uint8_t *kdf_nonce,
1393 size_t kdf_nonce_len,
1443 uint8_t *shared_secret,
1444 size_t shared_secret_len,
1445 const uint8_t *kdf_nonce,
1446 size_t kdf_nonce_len,
1473 size_t shared_secret_len,
1474 const uint8_t *kdf_nonce,
1475 size_t kdf_nonce_len,
1517 const uint8_t *plaintext, uint8_t *ciphertext,
1518 size_t datalen,
const uint8_t *aad,
size_t aadlen,
1519 uint8_t *tag,
size_t taglen,
1520 struct lc_aead_ctx *aead);
1548int lc_kyber_x25519_ies_enc_init(
struct lc_aead_ctx *aead,
1551 const uint8_t *aad,
size_t aadlen);
1572int lc_kyber_x25519_ies_enc_update(
struct lc_aead_ctx *aead,
1573 const uint8_t *plaintext,
1574 uint8_t *ciphertext,
size_t datalen);
1595int lc_kyber_x25519_ies_enc_final(
struct lc_aead_ctx *aead, uint8_t *tag,
1629 const uint8_t *ciphertext, uint8_t *plaintext,
1630 size_t datalen,
const uint8_t *aad,
size_t aadlen,
1631 const uint8_t *tag,
size_t taglen,
1632 struct lc_aead_ctx *aead);
1660int lc_kyber_x25519_ies_dec_init(
struct lc_aead_ctx *aead,
1663 const uint8_t *aad,
size_t aadlen);
1686int lc_kyber_x25519_ies_dec_update(
struct lc_aead_ctx *aead,
1687 const uint8_t *ciphertext,
1688 uint8_t *plaintext,
size_t datalen);
1709int lc_kyber_x25519_ies_dec_final(
struct lc_aead_ctx *aead,
const uint8_t *tag,
1718#ifdef LC_KYBER_X448_KEM
1743#ifdef LC_KYBER_1024_ENABLED
1746#ifdef LC_KYBER_768_ENABLED
1749#ifdef LC_KYBER_512_ENABLED
1761#ifdef LC_KYBER_1024_ENABLED
1764#ifdef LC_KYBER_768_ENABLED
1767#ifdef LC_KYBER_512_ENABLED
1779#ifdef LC_KYBER_1024_ENABLED
1782#ifdef LC_KYBER_768_ENABLED
1785#ifdef LC_KYBER_512_ENABLED
1797#ifdef LC_KYBER_1024_ENABLED
1800#ifdef LC_KYBER_768_ENABLED
1803#ifdef LC_KYBER_512_ENABLED
1894 const uint8_t *kyber_src_key,
1895 size_t kyber_src_key_len,
const uint8_t *x448_src_key,
1896 size_t x448_src_key_len);
1899 const uint8_t *kyber_src_key,
1900 size_t kyber_src_key_len,
const uint8_t *x448_src_key,
1901 size_t x448_src_key_len);
1904 const uint8_t *kyber_src_ct,
size_t kyber_src_ct_len,
1905 const uint8_t *x448_rem_pub_key,
1906 size_t x448_rem_pub_len);
1909 const uint8_t *kyber_src_ss,
size_t kyber_src_ss_len,
1910 const uint8_t *x448_ss,
size_t x448_ss_len);
1928 uint8_t **x448_key,
size_t *x448_key_len,
1947 uint8_t **x448_key,
size_t *x448_key_len,
1967 uint8_t **x448_key,
size_t *x448_key_len,
1987 uint8_t **x448_ss,
size_t *x448_ss_len,
2004 struct lc_rng_ctx *rng_ctx,
2102 uint8_t *shared_secret,
2103 size_t shared_secret_len,
2104 const uint8_t *kdf_nonce,
2105 size_t kdf_nonce_len,
2129 size_t shared_secret_len,
2130 const uint8_t *kdf_nonce,
2131 size_t kdf_nonce_len,
2181 uint8_t *shared_secret,
2182 size_t shared_secret_len,
2183 const uint8_t *kdf_nonce,
size_t kdf_nonce_len,
2210 size_t shared_secret_len,
2211 const uint8_t *kdf_nonce,
size_t kdf_nonce_len,
2253 uint8_t *ciphertext,
size_t datalen,
2254 const uint8_t *aad,
size_t aadlen, uint8_t *tag,
2255 size_t taglen,
struct lc_aead_ctx *aead);
2283int lc_kyber_x448_ies_enc_init(
struct lc_aead_ctx *aead,
2307int lc_kyber_x448_ies_enc_update(
struct lc_aead_ctx *aead,
2308 const uint8_t *plaintext, uint8_t *ciphertext,
2330int lc_kyber_x448_ies_enc_final(
struct lc_aead_ctx *aead, uint8_t *tag,
2364 const uint8_t *ciphertext, uint8_t *plaintext,
2365 size_t datalen,
const uint8_t *aad,
size_t aadlen,
2366 const uint8_t *tag,
size_t taglen,
2367 struct lc_aead_ctx *aead);
2395int lc_kyber_x448_ies_dec_init(
struct lc_aead_ctx *aead,
2398 const uint8_t *aad,
size_t aadlen);
2421int lc_kyber_x448_ies_dec_update(
struct lc_aead_ctx *aead,
2422 const uint8_t *ciphertext, uint8_t *plaintext,
2444int lc_kyber_x448_ies_dec_final(
struct lc_aead_ctx *aead,
const uint8_t *tag,
enum lc_kyber_type lc_kyber_x448_ss_type(const struct lc_kyber_x448_ss *ss)
Obtain Kyber type from shared secret.
int lc_kex_x448_uake_initiator_ss(uint8_t *shared_secret, size_t shared_secret_len, const uint8_t *kdf_nonce, size_t kdf_nonce_len, const struct lc_kyber_x448_ct *ct_e_r, const struct lc_kyber_x448_ss *tk, const struct lc_kyber_x448_sk *sk_e)
Responder's shared secret generation.
int lc_kex_x448_ake_initiator_init(struct lc_kyber_x448_pk *pk_e_i, struct lc_kyber_x448_ct *ct_e_i, struct lc_kyber_x448_ss *tk, struct lc_kyber_x448_sk *sk_e, const struct lc_kyber_x448_pk *pk_r)
Initialize authenticated key exchange.
int lc_kex_x25519_ake_initiator_ss(uint8_t *shared_secret, size_t shared_secret_len, const uint8_t *kdf_nonce, size_t kdf_nonce_len, const struct lc_kyber_x25519_ct *ct_e_r_1, const struct lc_kyber_x25519_ct *ct_e_r_2, const struct lc_kyber_x25519_ss *tk, const struct lc_kyber_x25519_sk *sk_e, const struct lc_kyber_x25519_sk *sk_i)
Responder's shared secret generation.
int lc_kyber_x448_keypair(struct lc_kyber_x448_pk *pk, struct lc_kyber_x448_sk *sk, struct lc_rng_ctx *rng_ctx, enum lc_kyber_type kyber_type)
Generates public and private key for IND-CCA2-secure Kyber key encapsulation mechanism.
int lc_kex_x448_ake_initiator_ss(uint8_t *shared_secret, size_t shared_secret_len, const uint8_t *kdf_nonce, size_t kdf_nonce_len, const struct lc_kyber_x448_ct *ct_e_r_1, const struct lc_kyber_x448_ct *ct_e_r_2, const struct lc_kyber_x448_ss *tk, const struct lc_kyber_x448_sk *sk_e, const struct lc_kyber_x448_sk *sk_i)
Responder's shared secret generation.
LC_PURE unsigned int lc_kyber_x25519_ss_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber shared secret.
LC_PURE unsigned int lc_kyber_x25519_pk_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber public key.
int lc_kyber_x25519_enc_kdf(struct lc_kyber_x25519_ct *ct, uint8_t *ss, size_t ss_len, const struct lc_kyber_x25519_pk *pk)
Key encapsulation with KDF applied to shared secret.
int lc_kex_x25519_uake_initiator_init(struct lc_kyber_x25519_pk *pk_e_i, struct lc_kyber_x25519_ct *ct_e_i, struct lc_kyber_x25519_ss *tk, struct lc_kyber_x25519_sk *sk_e, const struct lc_kyber_x25519_pk *pk_r)
Initialize unilaterally authenticated key exchange.
int lc_kyber_x25519_pk_ptr(uint8_t **kyber_key, size_t *kyber_key_len, uint8_t **x25519_key, size_t *x25519_key_len, struct lc_kyber_x25519_pk *pk)
Obtain the reference to the Kyber key and its length.
int lc_kyber_x448_ss_ptr(uint8_t **kyber_ss, size_t *kyber_ss_len, uint8_t **x448_ss, size_t *x448_ss_len, struct lc_kyber_x448_ss *ss)
Obtain the reference to the Kyber shared secret and its length.
int lc_kex_x448_uake_initiator_init(struct lc_kyber_x448_pk *pk_e_i, struct lc_kyber_x448_ct *ct_e_i, struct lc_kyber_x448_ss *tk, struct lc_kyber_x448_sk *sk_e, const struct lc_kyber_x448_pk *pk_r)
Initialize unilaterally authenticated key exchange.
LC_PURE unsigned int lc_kyber_x25519_ct_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber ciphertext.
int lc_kex_x25519_ake_responder_ss(struct lc_kyber_x25519_ct *ct_e_r_1, struct lc_kyber_x25519_ct *ct_e_r_2, uint8_t *shared_secret, size_t shared_secret_len, const uint8_t *kdf_nonce, size_t kdf_nonce_len, const struct lc_kyber_x25519_pk *pk_e_i, const struct lc_kyber_x25519_ct *ct_e_i, const struct lc_kyber_x25519_sk *sk_r, const struct lc_kyber_x25519_pk *pk_i)
Initiator's shared secret generation.
int lc_kyber_x448_ct_ptr(uint8_t **kyber_ct, size_t *kyber_ct_len, uint8_t **x448_key, size_t *x448_key_len, struct lc_kyber_x448_ct *ct)
Obtain the reference to the Kyber ciphertext and its length.
int lc_kyber_x25519_ct_ptr(uint8_t **kyber_ct, size_t *kyber_ct_len, uint8_t **x25519_key, size_t *x25519_key_len, struct lc_kyber_x25519_ct *ct)
Obtain the reference to the Kyber ciphertext and its length.
int lc_kyber_x25519_keypair(struct lc_kyber_x25519_pk *pk, struct lc_kyber_x25519_sk *sk, struct lc_rng_ctx *rng_ctx, enum lc_kyber_type kyber_type)
Generates public and private key for IND-CCA2-secure Kyber key encapsulation mechanism.
enum lc_kyber_type lc_kyber_x25519_pk_type(const struct lc_kyber_x25519_pk *pk)
Obtain Kyber type from public key.
int lc_kyber_x448_enc_kdf(struct lc_kyber_x448_ct *ct, uint8_t *ss, size_t ss_len, const struct lc_kyber_x448_pk *pk)
Key encapsulation with KDF applied to shared secret.
int lc_kyber_x448_dec_kdf(uint8_t *ss, size_t ss_len, const struct lc_kyber_x448_ct *ct, const struct lc_kyber_x448_sk *sk)
Key decapsulation with KDF applied to shared secret.
enum lc_kyber_type lc_kyber_x25519_sk_type(const struct lc_kyber_x25519_sk *sk)
Obtain Kyber type from secret key.
int lc_kex_x25519_uake_initiator_ss(uint8_t *shared_secret, size_t shared_secret_len, const uint8_t *kdf_nonce, size_t kdf_nonce_len, const struct lc_kyber_x25519_ct *ct_e_r, const struct lc_kyber_x25519_ss *tk, const struct lc_kyber_x25519_sk *sk_e)
Responder's shared secret generation.
LC_PURE unsigned int lc_kyber_x448_sk_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber secret key.
int lc_kyber_x25519_dec_kdf(uint8_t *ss, size_t ss_len, const struct lc_kyber_x25519_ct *ct, const struct lc_kyber_x25519_sk *sk)
Key decapsulation with KDF applied to shared secret.
enum lc_kyber_type lc_kyber_x448_sk_type(const struct lc_kyber_x448_sk *sk)
Obtain Kyber type from secret key.
LC_PURE unsigned int lc_kyber_x448_ct_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber ciphertext.
int lc_kex_x25519_ake_initiator_init(struct lc_kyber_x25519_pk *pk_e_i, struct lc_kyber_x25519_ct *ct_e_i, struct lc_kyber_x25519_ss *tk, struct lc_kyber_x25519_sk *sk_e, const struct lc_kyber_x25519_pk *pk_r)
Initialize authenticated key exchange.
enum lc_kyber_type lc_kyber_x25519_ss_type(const struct lc_kyber_x25519_ss *ss)
Obtain Kyber type from shared secret.
int lc_kyber_x448_sk_ptr(uint8_t **kyber_key, size_t *kyber_key_len, uint8_t **x448_key, size_t *x448_key_len, struct lc_kyber_x448_sk *sk)
Obtain the reference to the Kyber key and its length.
enum lc_kyber_type lc_kyber_x448_pk_type(const struct lc_kyber_x448_pk *pk)
Obtain Kyber type from public key.
LC_PURE unsigned int lc_kyber_x448_pk_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber public key.
int lc_kex_x448_ake_responder_ss(struct lc_kyber_x448_ct *ct_e_r_1, struct lc_kyber_x448_ct *ct_e_r_2, uint8_t *shared_secret, size_t shared_secret_len, const uint8_t *kdf_nonce, size_t kdf_nonce_len, const struct lc_kyber_x448_pk *pk_e_i, const struct lc_kyber_x448_ct *ct_e_i, const struct lc_kyber_x448_sk *sk_r, const struct lc_kyber_x448_pk *pk_i)
Initiator's shared secret generation.
int lc_kyber_x25519_ss_ptr(uint8_t **kyber_ss, size_t *kyber_ss_len, uint8_t **x25519_ss, size_t *x25519_ss_len, struct lc_kyber_x25519_ss *ss)
Obtain the reference to the Kyber shared secret and its length.
int lc_kyber_x25519_sk_ptr(uint8_t **kyber_key, size_t *kyber_key_len, uint8_t **x25519_key, size_t *x25519_key_len, struct lc_kyber_x25519_sk *sk)
Obtain the reference to the Kyber key and its length.
LC_PURE unsigned int lc_kyber_x25519_sk_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber secret key.
int lc_kex_x25519_uake_responder_ss(struct lc_kyber_x25519_ct *ct_e_r, uint8_t *shared_secret, size_t shared_secret_len, const uint8_t *kdf_nonce, size_t kdf_nonce_len, const struct lc_kyber_x25519_pk *pk_e_i, const struct lc_kyber_x25519_ct *ct_e_i, const struct lc_kyber_x25519_sk *sk_r)
Initiator's shared secret generation.
enum lc_kyber_type lc_kyber_x25519_ct_type(const struct lc_kyber_x25519_ct *ct)
Obtain Kyber type from Kyber ciphertext.
int lc_kyber_x448_pk_ptr(uint8_t **kyber_key, size_t *kyber_key_len, uint8_t **x448_key, size_t *x448_key_len, struct lc_kyber_x448_pk *pk)
Obtain the reference to the Kyber key and its length.
int lc_kex_x448_uake_responder_ss(struct lc_kyber_x448_ct *ct_e_r, uint8_t *shared_secret, size_t shared_secret_len, const uint8_t *kdf_nonce, size_t kdf_nonce_len, const struct lc_kyber_x448_pk *pk_e_i, const struct lc_kyber_x448_ct *ct_e_i, const struct lc_kyber_x448_sk *sk_r)
Initiator's shared secret generation.
enum lc_kyber_type lc_kyber_x448_ct_type(const struct lc_kyber_x448_ct *ct)
Obtain Kyber type from Kyber ciphertext.
LC_PURE unsigned int lc_kyber_x448_ss_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber shared secret.
int lc_kex_ake_initiator_ss(uint8_t *shared_secret, size_t shared_secret_len, const uint8_t *kdf_nonce, size_t kdf_nonce_len, const struct lc_kyber_ct *ct_e_r_1, const struct lc_kyber_ct *ct_e_r_2, const struct lc_kyber_ss *tk, const struct lc_kyber_sk *sk_e, const struct lc_kyber_sk *sk_i)
Responder's shared secret generation.
int lc_kex_ake_initiator_init(struct lc_kyber_pk *pk_e_i, struct lc_kyber_ct *ct_e_i, struct lc_kyber_ss *tk, struct lc_kyber_sk *sk_e, const struct lc_kyber_pk *pk_r)
Initialize authenticated key exchange.
int lc_kex_ake_responder_ss(struct lc_kyber_ct *ct_e_r_1, struct lc_kyber_ct *ct_e_r_2, uint8_t *shared_secret, size_t shared_secret_len, const uint8_t *kdf_nonce, size_t kdf_nonce_len, const struct lc_kyber_pk *pk_e_i, const struct lc_kyber_ct *ct_e_i, const struct lc_kyber_sk *sk_r, const struct lc_kyber_pk *pk_i)
Initiator's shared secret generation.
int lc_kex_uake_responder_ss(struct lc_kyber_ct *ct_e_r, uint8_t *shared_secret, size_t shared_secret_len, const uint8_t *kdf_nonce, size_t kdf_nonce_len, const struct lc_kyber_pk *pk_e_i, const struct lc_kyber_ct *ct_e_i, const struct lc_kyber_sk *sk_r)
Initiator's shared secret generation.
int lc_kex_uake_initiator_ss(uint8_t *shared_secret, size_t shared_secret_len, const uint8_t *kdf_nonce, size_t kdf_nonce_len, const struct lc_kyber_ct *ct_e_r, const struct lc_kyber_ss *tk, const struct lc_kyber_sk *sk_e)
Responder's shared secret generation.
int lc_kex_uake_initiator_init(struct lc_kyber_pk *pk_e_i, struct lc_kyber_ct *ct_e_i, struct lc_kyber_ss *tk, struct lc_kyber_sk *sk_e, const struct lc_kyber_pk *pk_r)
Initialize unilaterally authenticated key exchange.
enum lc_kyber_type lc_kyber_ss_type(const struct lc_kyber_ss *ss)
Obtain Kyber type from shared secret.
int lc_kyber_sk_ptr(uint8_t **kyber_key, size_t *kyber_key_len, struct lc_kyber_sk *sk)
Obtain the reference to the Kyber key and its length.
int lc_kyber_enc(struct lc_kyber_ct *ct, struct lc_kyber_ss *ss, const struct lc_kyber_pk *pk)
Key encapsulation.
int lc_kyber_ct_load(struct lc_kyber_ct *ct, const uint8_t *src_key, size_t src_key_len)
Load a Kyber ciphertext key provided with a buffer into the leancrypto data structure.
int lc_kyber_enc_kdf(struct lc_kyber_ct *ct, uint8_t *ss, size_t ss_len, const struct lc_kyber_pk *pk)
Key encapsulation with KDF applied to shared secret.
int lc_kyber_ss_load(struct lc_kyber_ss *ss, const uint8_t *src_key, size_t src_key_len)
Load a Kyber shared secret provided with a buffer into the leancrypto data structure.
LC_PURE unsigned int lc_kyber_ss_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber shared secret.
int lc_kyber_dec_kdf(uint8_t *ss, size_t ss_len, const struct lc_kyber_ct *ct, const struct lc_kyber_sk *sk)
Key decapsulation with KDF applied to shared secret.
LC_PURE unsigned int lc_kyber_pk_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber public key.
LC_PURE unsigned int lc_kyber_sk_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber secret key.
int lc_kyber_pk_ptr(uint8_t **kyber_key, size_t *kyber_key_len, struct lc_kyber_pk *pk)
Obtain the reference to the Kyber key and its length.
int lc_kyber_keypair(struct lc_kyber_pk *pk, struct lc_kyber_sk *sk, struct lc_rng_ctx *rng_ctx, enum lc_kyber_type kyber_type)
Generates public and private key for IND-CCA2-secure Kyber key encapsulation mechanism.
int lc_kyber_ct_ptr(uint8_t **kyber_ct, size_t *kyber_ct_len, struct lc_kyber_ct *ct)
Obtain the reference to the Kyber ciphertext and its length.
int lc_kyber_pk_load(struct lc_kyber_pk *pk, const uint8_t *src_key, size_t src_key_len)
Load a Kyber public key provided with a buffer into the leancrypto data structure.
int lc_kyber_ss_ptr(uint8_t **kyber_ss, size_t *kyber_ss_len, struct lc_kyber_ss *ss)
Obtain the reference to the Kyber shared secret and its length.
LC_PURE unsigned int lc_kyber_ct_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber ciphertext.
int lc_kyber_dec(struct lc_kyber_ss *ss, const struct lc_kyber_ct *ct, const struct lc_kyber_sk *sk)
Key decapsulation.
enum lc_kyber_type lc_kyber_ct_type(const struct lc_kyber_ct *ct)
Obtain Kyber type from Kyber ciphertext.
int lc_kyber_sk_load(struct lc_kyber_sk *sk, const uint8_t *src_key, size_t src_key_len)
Load a Kyber secret key provided with a buffer into the leancrypto data structure.
enum lc_kyber_type lc_kyber_pk_type(const struct lc_kyber_pk *pk)
Obtain Kyber type from public key.
enum lc_kyber_type lc_kyber_sk_type(const struct lc_kyber_sk *sk)
Obtain Kyber type from secret key.
int lc_kyber_keypair_from_seed(struct lc_kyber_pk *pk, struct lc_kyber_sk *sk, const uint8_t *seed, size_t seedlen, enum lc_kyber_type kyber_type)
Generates Kyber public and private key from a given seed.
int lc_kyber_x448_ct_load(struct lc_kyber_x448_ct *ct, const uint8_t *kyber_src_ct, size_t kyber_src_ct_len, const uint8_t *x448_rem_pub_key, size_t x448_rem_pub_len)
union lc_kyber_x25519_ct::@143155205102213154070310317306061123055074161173 key
union lc_kyber_x448_ss::@346362263046133322136030153266010045017271322130 key
enum lc_kyber_type kyber_type
union lc_kyber_ct::@322176123034217116050137115361010044167253261201 key
int lc_kyber_x25519_sk_load(struct lc_kyber_x25519_sk *sk, const uint8_t *kyber_src_key, size_t kyber_src_key_len, const uint8_t *x25519_src_key, size_t x25519_src_key_len)
enum lc_kyber_type kyber_type
int lc_kyber_x25519_ct_load(struct lc_kyber_x25519_ct *ct, const uint8_t *kyber_src_ct, size_t kyber_src_ct_len, const uint8_t *x25519_rem_pub_key, size_t x25519_rem_pub_len)
enum lc_kyber_type kyber_type
enum lc_kyber_type kyber_type
int lc_kyber_x25519_ss_load(struct lc_kyber_x25519_ss *ss, const uint8_t *kyber_src_ss, size_t kyber_src_ss_len, const uint8_t *x25519_ss, size_t x25519_ss_len)
union lc_kyber_x448_sk::@070312011331110107005331227014024206243051271156 key
int lc_kyber_x448_sk_load(struct lc_kyber_x448_sk *sk, const uint8_t *kyber_src_key, size_t kyber_src_key_len, const uint8_t *x448_src_key, size_t x448_src_key_len)
union lc_kyber_x25519_sk::@012036335243251002250063375072100010000257322313 key
int lc_kyber_x25519_pk_load(struct lc_kyber_x25519_pk *pk, const uint8_t *kyber_src_key, size_t kyber_src_key_len, const uint8_t *x25519_src_key, size_t x25519_src_key_len)
enum lc_kyber_type kyber_type
int lc_kyber_x448_pk_load(struct lc_kyber_x448_pk *pk, const uint8_t *kyber_src_key, size_t kyber_src_key_len, const uint8_t *x448_src_key, size_t x448_src_key_len)
union lc_kyber_x25519_pk::@111043004235173005165004331254317150235137017203 key
union lc_kyber_x448_ct::@252275272261207047244052355341255270343203163000 key
enum lc_kyber_type kyber_type
union lc_kyber_x448_pk::@007110110104376110123363117102220343343363153061 key
int lc_kyber_pct(const struct lc_kyber_pk *pk, const struct lc_kyber_sk *sk)
Pairwise consistency check as per FIPS 203 section 7.1.
enum lc_kyber_type kyber_type
union lc_kyber_pk::@122262157340111343110040111157325004342333062314 key
enum lc_kyber_type kyber_type
union lc_kyber_ss::@333263222136232367220374035271015372232213265053 key
int lc_kyber_x448_ss_load(struct lc_kyber_x448_ss *ss, const uint8_t *kyber_src_ss, size_t kyber_src_ss_len, const uint8_t *x448_ss, size_t x448_ss_len)
enum lc_kyber_type kyber_type
union lc_kyber_x25519_ss::@057214222310375250355100172100062151157306203227 key
union lc_kyber_sk::@043217160375300164167310073010046332264010340051 key
enum lc_kyber_type kyber_type
enum lc_kyber_type kyber_type
enum lc_kyber_type kyber_type
struct lc_kyber_512_ss ss
struct lc_kyber_512_ss ss
uint8_t ss[LC_KYBER_SSBYTES]