Leancrypto 0.12.0
Post-Quantum Cryptographic Library
Loading...
Searching...
No Matches
lc_kyber.h File Reference
#include "ext_headers.h"
+ Include dependency graph for lc_kyber.h:

Go to the source code of this file.

Data Structures

struct  lc_kyber_sk
 Kyber secret key. More...
 
struct  lc_kyber_pk
 Kyber public key. More...
 
struct  lc_kyber_ct
 Kyber ciphertext. More...
 
struct  lc_kyber_ss
 Kyber shared secret. More...
 
struct  lc_kyber_x25519_sk
 Kyber secret key. More...
 
struct  lc_kyber_x25519_pk
 Kyber public key. More...
 
struct  lc_kyber_x25519_ct
 Kyber ciphertext. More...
 
struct  lc_kyber_x25519_ss
 Kyber shared secret. More...
 
union  lc_kyber_sk.key
 
union  lc_kyber_pk.key
 
union  lc_kyber_ct.key
 
union  lc_kyber_ss.key
 
union  lc_kyber_x25519_sk.key
 
union  lc_kyber_x25519_pk.key
 
union  lc_kyber_x25519_ct.key
 
union  lc_kyber_x25519_ss.key
 

Enumerations

enum  lc_kyber_type { LC_KYBER_UNKNOWN , LC_KYBER_1024 , LC_KYBER_768 , LC_KYBER_512 }
 

Functions

static enum lc_kyber_type lc_kyber_sk_type (const struct lc_kyber_sk *sk)
 Obtain Kyber type from secret key.
 
static enum lc_kyber_type lc_kyber_pk_type (const struct lc_kyber_pk *pk)
 Obtain Kyber type from public key.
 
static enum lc_kyber_type lc_kyber_ct_type (const struct lc_kyber_ct *ct)
 Obtain Kyber type from Kyber ciphertext.
 
static enum lc_kyber_type lc_kyber_ss_type (const struct lc_kyber_ss *ss)
 Obtain Kyber type from shared secret.
 
static LC_PURE unsigned int lc_kyber_sk_size (enum lc_kyber_type kyber_type)
 Return the size of the Kyber secret key.
 
static LC_PURE unsigned int lc_kyber_pk_size (enum lc_kyber_type kyber_type)
 Return the size of the Kyber public key.
 
static LC_PURE unsigned int lc_kyber_ct_size (enum lc_kyber_type kyber_type)
 Return the size of the Kyber ciphertext.
 
static LC_PURE unsigned int lc_kyber_ss_size (enum lc_kyber_type kyber_type)
 Return the size of the Kyber shared secret.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static int lc_kyber_enc (struct lc_kyber_ct *ct, struct lc_kyber_ss *ss, const struct lc_kyber_pk *pk)
 Key encapsulation.
 
static 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.
 
static int lc_kyber_dec (struct lc_kyber_ss *ss, const struct lc_kyber_ct *ct, const struct lc_kyber_sk *sk)
 Key decapsulation.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static int lc_kyber_ies_enc (const struct lc_kyber_pk *pk, struct lc_kyber_ct *ct, const uint8_t *plaintext, uint8_t *ciphertext, size_t datalen, const uint8_t *aad, size_t aadlen, uint8_t *tag, size_t taglen, struct lc_aead_ctx *aead)
 KyberIES encryption oneshot.
 
static int lc_kyber_ies_enc_init (struct lc_aead_ctx *aead, const struct lc_kyber_pk *pk, struct lc_kyber_ct *ct, const uint8_t *aad, size_t aadlen)
 KyberIES encryption stream operation initialization.
 
static int lc_kyber_ies_enc_update (struct lc_aead_ctx *aead, const uint8_t *plaintext, uint8_t *ciphertext, size_t datalen)
 KyberIES encryption stream operation add more data.
 
static int lc_kyber_ies_enc_final (struct lc_aead_ctx *aead, uint8_t *tag, size_t taglen)
 KyberIES encryption stream operation finalization / integrity test.
 
static int lc_kyber_ies_dec (const struct lc_kyber_sk *sk, const struct lc_kyber_ct *ct, const uint8_t *ciphertext, uint8_t *plaintext, size_t datalen, const uint8_t *aad, size_t aadlen, const uint8_t *tag, size_t taglen, struct lc_aead_ctx *aead)
 KyberIES decryption oneshot.
 
static int lc_kyber_ies_dec_init (struct lc_aead_ctx *aead, const struct lc_kyber_sk *sk, const struct lc_kyber_ct *ct, const uint8_t *aad, size_t aadlen)
 KyberIES decryption stream operation initialization.
 
static int lc_kyber_ies_dec_update (struct lc_aead_ctx *aead, const uint8_t *ciphertext, uint8_t *plaintext, size_t datalen)
 KyberIES decryption stream operation add more data.
 
static int lc_kyber_ies_dec_final (struct lc_aead_ctx *aead, const uint8_t *tag, size_t taglen)
 KyberIES decryption stream operation finalization / integrity test.
 
static enum lc_kyber_type lc_kyber_x25519_sk_type (const struct lc_kyber_x25519_sk *sk)
 Obtain Kyber type from secret key.
 
static enum lc_kyber_type lc_kyber_x25519_pk_type (const struct lc_kyber_x25519_pk *pk)
 Obtain Kyber type from public key.
 
static enum lc_kyber_type lc_kyber_x25519_ct_type (const struct lc_kyber_x25519_ct *ct)
 Obtain Kyber type from Kyber ciphertext.
 
static enum lc_kyber_type lc_kyber_x25519_ss_type (const struct lc_kyber_x25519_ss *ss)
 Obtain Kyber type from shared secret.
 
static LC_PURE unsigned int lc_kyber_x25519_sk_size (enum lc_kyber_type kyber_type)
 Return the size of the Kyber secret key.
 
static LC_PURE unsigned int lc_kyber_x25519_pk_size (enum lc_kyber_type kyber_type)
 Return the size of the Kyber public key.
 
static LC_PURE unsigned int lc_kyber_x25519_ct_size (enum lc_kyber_type kyber_type)
 Return the size of the Kyber ciphertext.
 
static LC_PURE unsigned int lc_kyber_x25519_ss_size (enum lc_kyber_type kyber_type)
 Return the size of the Kyber shared secret.
 
static 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)
 
static 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)
 
static 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)
 
static 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)
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static 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.
 
static int lc_kyber_x25519_ies_enc (const struct lc_kyber_x25519_pk *pk, struct lc_kyber_x25519_ct *ct, const uint8_t *plaintext, uint8_t *ciphertext, size_t datalen, const uint8_t *aad, size_t aadlen, uint8_t *tag, size_t taglen, struct lc_aead_ctx *aead)
 KyberIES encryption oneshot.
 
static int lc_kyber_x25519_ies_enc_init (struct lc_aead_ctx *aead, const struct lc_kyber_x25519_pk *pk, struct lc_kyber_x25519_ct *ct, const uint8_t *aad, size_t aadlen)
 KyberIES encryption stream operation initialization.
 
static int lc_kyber_x25519_ies_enc_update (struct lc_aead_ctx *aead, const uint8_t *plaintext, uint8_t *ciphertext, size_t datalen)
 KyberIES encryption stream operation add more data.
 
static int lc_kyber_x25519_ies_enc_final (struct lc_aead_ctx *aead, uint8_t *tag, size_t taglen)
 KyberIES encryption stream operation finalization / integrity test.
 
static int lc_kyber_x25519_ies_dec (const struct lc_kyber_x25519_sk *sk, const struct lc_kyber_x25519_ct *ct, const uint8_t *ciphertext, uint8_t *plaintext, size_t datalen, const uint8_t *aad, size_t aadlen, const uint8_t *tag, size_t taglen, struct lc_aead_ctx *aead)
 KyberIES decryption oneshot.
 
static int lc_kyber_x25519_ies_dec_init (struct lc_aead_ctx *aead, const struct lc_kyber_x25519_sk *sk, const struct lc_kyber_x25519_ct *ct, const uint8_t *aad, size_t aadlen)
 KyberIES decryption stream operation initialization.
 
static int lc_kyber_x25519_ies_dec_update (struct lc_aead_ctx *aead, const uint8_t *ciphertext, uint8_t *plaintext, size_t datalen)
 KyberIES decryption stream operation add more data.
 
static int lc_kyber_x25519_ies_dec_final (struct lc_aead_ctx *aead, const uint8_t *tag, size_t taglen)
 KyberIES decryption stream operation finalization / integrity test.
 

Data Structure Documentation

◆ lc_kyber_sk

struct lc_kyber_sk

Kyber secret key.

Definition at line 81 of file lc_kyber.h.

Data Fields
union lc_kyber_sk.key key
enum lc_kyber_type kyber_type

◆ lc_kyber_pk

struct lc_kyber_pk

Kyber public key.

Definition at line 99 of file lc_kyber.h.

Data Fields
union lc_kyber_pk.key key
enum lc_kyber_type kyber_type

◆ lc_kyber_ct

struct lc_kyber_ct

Kyber ciphertext.

Definition at line 117 of file lc_kyber.h.

Data Fields
union lc_kyber_ct.key key
enum lc_kyber_type kyber_type

◆ lc_kyber_ss

struct lc_kyber_ss

Kyber shared secret.

Definition at line 135 of file lc_kyber.h.

Data Fields
union lc_kyber_ss.key key
enum lc_kyber_type kyber_type

◆ lc_kyber_x25519_sk

struct lc_kyber_x25519_sk

Kyber secret key.

Definition at line 1986 of file lc_kyber.h.

Data Fields
union lc_kyber_x25519_sk.key key
enum lc_kyber_type kyber_type

◆ lc_kyber_x25519_pk

struct lc_kyber_x25519_pk

Kyber public key.

Definition at line 2004 of file lc_kyber.h.

Data Fields
union lc_kyber_x25519_pk.key key
enum lc_kyber_type kyber_type

◆ lc_kyber_x25519_ct

struct lc_kyber_x25519_ct

Kyber ciphertext.

Definition at line 2022 of file lc_kyber.h.

Data Fields
union lc_kyber_x25519_ct.key key
enum lc_kyber_type kyber_type

◆ lc_kyber_x25519_ss

struct lc_kyber_x25519_ss

Kyber shared secret.

Definition at line 2040 of file lc_kyber.h.

Data Fields
union lc_kyber_x25519_ss.key key
enum lc_kyber_type kyber_type

◆ lc_kyber_sk.key

union lc_kyber_sk.key

Definition at line 83 of file lc_kyber.h.

◆ lc_kyber_pk.key

union lc_kyber_pk.key

Definition at line 101 of file lc_kyber.h.

◆ lc_kyber_ct.key

union lc_kyber_ct.key

Definition at line 119 of file lc_kyber.h.

◆ lc_kyber_ss.key

union lc_kyber_ss.key

Definition at line 137 of file lc_kyber.h.

◆ lc_kyber_x25519_sk.key

union lc_kyber_x25519_sk.key

Definition at line 1988 of file lc_kyber.h.

◆ lc_kyber_x25519_pk.key

union lc_kyber_x25519_pk.key

Definition at line 2006 of file lc_kyber.h.

◆ lc_kyber_x25519_ct.key

union lc_kyber_x25519_ct.key

Definition at line 2024 of file lc_kyber.h.

◆ lc_kyber_x25519_ss.key

union lc_kyber_x25519_ss.key

Definition at line 2042 of file lc_kyber.h.

Enumeration Type Documentation

◆ lc_kyber_type

Enumerator
LC_KYBER_UNKNOWN 
LC_KYBER_1024 

Unknown key type

LC_KYBER_768 

Kyber 1024

LC_KYBER_512 

Kyber 768

Definition at line 46 of file lc_kyber.h.

Function Documentation

◆ lc_kyber_x25519_ct_load()

static 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 )
inlinestatic

Definition at line 2351 of file lc_kyber.h.

◆ lc_kyber_x25519_pk_load()

static 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 )
inlinestatic

Definition at line 2309 of file lc_kyber.h.

◆ lc_kyber_x25519_sk_load()

static 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 )
inlinestatic

Definition at line 2267 of file lc_kyber.h.

◆ lc_kyber_x25519_ss_load()

static 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 )
inlinestatic

Definition at line 2396 of file lc_kyber.h.