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"
84#ifdef LC_KYBER_1024_ENABLED
87#ifdef LC_KYBER_768_ENABLED
90#ifdef LC_KYBER_512_ENABLED
102#ifdef LC_KYBER_1024_ENABLED
105#ifdef LC_KYBER_768_ENABLED
108#ifdef LC_KYBER_512_ENABLED
120#ifdef LC_KYBER_1024_ENABLED
123#ifdef LC_KYBER_768_ENABLED
126#ifdef LC_KYBER_512_ENABLED
138#ifdef LC_KYBER_1024_ENABLED
141#ifdef LC_KYBER_768_ENABLED
144#ifdef LC_KYBER_512_ENABLED
207 return ss->kyber_type;
221 switch (kyber_type) {
223#ifdef LC_KYBER_1024_ENABLED
224 return lc_member_size(
struct lc_kyber_sk, key.sk_1024);
229#ifdef LC_KYBER_768_ENABLED
230 return lc_member_size(
struct lc_kyber_sk, key.sk_768);
235#ifdef LC_KYBER_512_ENABLED
236 return lc_member_size(
struct lc_kyber_sk, key.sk_512);
257 switch (kyber_type) {
259#ifdef LC_KYBER_1024_ENABLED
260 return lc_member_size(
struct lc_kyber_pk, key.pk_1024);
265#ifdef LC_KYBER_768_ENABLED
266 return lc_member_size(
struct lc_kyber_pk, key.pk_768);
271#ifdef LC_KYBER_512_ENABLED
272 return lc_member_size(
struct lc_kyber_pk, key.pk_512);
293 switch (kyber_type) {
295#ifdef LC_KYBER_1024_ENABLED
296 return lc_member_size(
struct lc_kyber_ct, key.ct_1024);
301#ifdef LC_KYBER_768_ENABLED
302 return lc_member_size(
struct lc_kyber_ct, key.ct_768);
307#ifdef LC_KYBER_512_ENABLED
308 return lc_member_size(
struct lc_kyber_ct, key.ct_512);
329 switch (kyber_type) {
331#ifdef LC_KYBER_1024_ENABLED
332 return lc_member_size(
struct lc_kyber_ss, key.ss_1024);
337#ifdef LC_KYBER_768_ENABLED
338 return lc_member_size(
struct lc_kyber_ss, key.ss_768);
343#ifdef LC_KYBER_512_ENABLED
344 return lc_member_size(
struct lc_kyber_ss, key.ss_512);
366 const uint8_t *src_key,
size_t src_key_len)
368 if (!sk || !src_key || src_key_len == 0) {
370#ifdef LC_KYBER_1024_ENABLED
374 memcpy(_sk->
sk, src_key, src_key_len);
378#ifdef LC_KYBER_768_ENABLED
382 memcpy(_sk->
sk, src_key, src_key_len);
386#ifdef LC_KYBER_512_ENABLED
390 memcpy(_sk->
sk, src_key, src_key_len);
411 const uint8_t *src_key,
size_t src_key_len)
413 if (!pk || !src_key || src_key_len == 0) {
415#ifdef LC_KYBER_1024_ENABLED
419 memcpy(_pk->
pk, src_key, src_key_len);
423#ifdef LC_KYBER_768_ENABLED
427 memcpy(_pk->
pk, src_key, src_key_len);
431#ifdef LC_KYBER_512_ENABLED
435 memcpy(_pk->
pk, src_key, src_key_len);
458 const uint8_t *src_key,
size_t src_key_len)
460 if (!ct || !src_key || src_key_len == 0) {
462#ifdef LC_KYBER_1024_ENABLED
466 memcpy(_ct->
ct, src_key, src_key_len);
470#ifdef LC_KYBER_768_ENABLED
474 memcpy(_ct->
ct, src_key, src_key_len);
478#ifdef LC_KYBER_512_ENABLED
482 memcpy(_ct->
ct, src_key, src_key_len);
505 const uint8_t *src_key,
size_t src_key_len)
507 if (!ss || !src_key || src_key_len == 0) {
509#ifdef LC_KYBER_1024_ENABLED
513 memcpy(_ss->
ss, src_key, src_key_len);
517#ifdef LC_KYBER_768_ENABLED
521 memcpy(_ss->
ss, src_key, src_key_len);
525#ifdef LC_KYBER_512_ENABLED
529 memcpy(_ss->
ss, src_key, src_key_len);
554 if (!sk || !kyber_key || !kyber_key_len) {
556#ifdef LC_KYBER_1024_ENABLED
560 *kyber_key = _sk->
sk;
564#ifdef LC_KYBER_768_ENABLED
568 *kyber_key = _sk->
sk;
572#ifdef LC_KYBER_512_ENABLED
576 *kyber_key = _sk->
sk;
601 if (!pk || !kyber_key || !kyber_key_len) {
603#ifdef LC_KYBER_1024_ENABLED
607 *kyber_key = _pk->
pk;
611#ifdef LC_KYBER_768_ENABLED
615 *kyber_key = _pk->
pk;
619#ifdef LC_KYBER_512_ENABLED
623 *kyber_key = _pk->
pk;
649 if (!ct || !kyber_ct || !kyber_ct_len) {
651#ifdef LC_KYBER_1024_ENABLED
659#ifdef LC_KYBER_768_ENABLED
667#ifdef LC_KYBER_512_ENABLED
697 if (!ss || !kyber_ss || !kyber_ss_len) {
699#ifdef LC_KYBER_1024_ENABLED
707#ifdef LC_KYBER_768_ENABLED
715#ifdef LC_KYBER_512_ENABLED
742 struct lc_rng_ctx *rng_ctx,
748 switch (kyber_type) {
750#ifdef LC_KYBER_1024_ENABLED
759#ifdef LC_KYBER_768_ENABLED
768#ifdef LC_KYBER_512_ENABLED
812 switch (kyber_type) {
814#ifdef LC_KYBER_1024_ENABLED
818 &pk->
key.pk_1024, &sk->
key.sk_1024, seed, seedlen);
823#ifdef LC_KYBER_768_ENABLED
827 &pk->
key.pk_768, &sk->
key.sk_768, seed, seedlen);
832#ifdef LC_KYBER_512_ENABLED
836 &pk->
key.pk_512, &sk->
key.sk_512, seed, seedlen);
862 if (!ct || !
ss || !pk)
867#ifdef LC_KYBER_1024_ENABLED
876#ifdef LC_KYBER_768_ENABLED
885#ifdef LC_KYBER_512_ENABLED
926#ifdef LC_KYBER_1024_ENABLED
934#ifdef LC_KYBER_768_ENABLED
942#ifdef LC_KYBER_512_ENABLED
979#ifdef LC_KYBER_1024_ENABLED
987#ifdef LC_KYBER_768_ENABLED
995#ifdef LC_KYBER_512_ENABLED
1038#ifdef LC_KYBER_1024_ENABLED
1045#ifdef LC_KYBER_768_ENABLED
1052#ifdef LC_KYBER_512_ENABLED
1135 if (!pk_e_i || !ct_e_i || !tk || !sk_e || !pk_r)
1140#ifdef LC_KYBER_1024_ENABLED
1146 &ct_e_i->
key.ct_1024,
1149 &pk_r->
key.pk_1024);
1154#ifdef LC_KYBER_768_ENABLED
1160 &pk_e_i->
key.pk_768, &ct_e_i->
key.ct_768,
1161 &tk->
key.ss_768, &sk_e->
key.sk_768, &pk_r->
key.pk_768);
1166#ifdef LC_KYBER_512_ENABLED
1172 &pk_e_i->
key.pk_512, &ct_e_i->
key.ct_512,
1173 &tk->
key.ss_512, &sk_e->
key.sk_512, &pk_r->
key.pk_512);
1203 size_t shared_secret_len,
const uint8_t *kdf_nonce,
1204 size_t kdf_nonce_len,
const struct lc_kyber_pk *pk_e_i,
1208 if (!ct_e_r || !pk_e_i || !ct_e_i || !sk_r ||
1215#ifdef LC_KYBER_1024_ENABLED
1218 &ct_e_r->
key.ct_1024, shared_secret, shared_secret_len,
1219 kdf_nonce, kdf_nonce_len, &pk_e_i->
key.pk_1024,
1220 &ct_e_i->
key.ct_1024, &sk_r->
key.sk_1024);
1225#ifdef LC_KYBER_768_ENABLED
1228 &ct_e_r->
key.ct_768, shared_secret, shared_secret_len,
1229 kdf_nonce, kdf_nonce_len, &pk_e_i->
key.pk_768,
1230 &ct_e_i->
key.ct_768, &sk_r->
key.sk_768);
1235#ifdef LC_KYBER_512_ENABLED
1238 &ct_e_r->
key.ct_512, shared_secret, shared_secret_len,
1239 kdf_nonce, kdf_nonce_len, &pk_e_i->
key.pk_512,
1240 &ct_e_i->
key.ct_512, &sk_r->
key.sk_512);
1269 size_t shared_secret_len,
1270 const uint8_t *kdf_nonce,
1271 size_t kdf_nonce_len,
1282#ifdef LC_KYBER_1024_ENABLED
1284 shared_secret, shared_secret_len, kdf_nonce,
1285 kdf_nonce_len, &ct_e_r->
key.ct_1024, &tk->
key.ss_1024,
1286 &sk_e->
key.sk_1024);
1291#ifdef LC_KYBER_768_ENABLED
1293 shared_secret, shared_secret_len, kdf_nonce,
1294 kdf_nonce_len, &ct_e_r->
key.ct_768, &tk->
key.ss_768,
1300#ifdef LC_KYBER_512_ENABLED
1302 shared_secret, shared_secret_len, kdf_nonce,
1303 kdf_nonce_len, &ct_e_r->
key.ct_512, &tk->
key.ss_512,
1385 if (!pk_e_i || !ct_e_i || !tk || !sk_e || !pk_r)
1390#ifdef LC_KYBER_1024_ENABLED
1396 &ct_e_i->
key.ct_1024,
1399 &pk_r->
key.pk_1024);
1404#ifdef LC_KYBER_768_ENABLED
1410 &pk_e_i->
key.pk_768, &ct_e_i->
key.ct_768,
1411 &tk->
key.ss_768, &sk_e->
key.sk_768, &pk_r->
key.pk_768);
1416#ifdef LC_KYBER_512_ENABLED
1422 &pk_e_i->
key.pk_512, &ct_e_i->
key.ct_512,
1423 &tk->
key.ss_512, &sk_e->
key.sk_512, &pk_r->
key.pk_512);
1456 uint8_t *shared_secret,
size_t shared_secret_len,
1457 const uint8_t *kdf_nonce,
size_t kdf_nonce_len,
1461 if (!ct_e_r_1 || !ct_e_r_2 || !pk_e_i || !ct_e_i || !sk_r || !pk_i ||
1469#ifdef LC_KYBER_1024_ENABLED
1473 &ct_e_r_1->
key.ct_1024, &ct_e_r_2->
key.ct_1024,
1474 shared_secret, shared_secret_len, kdf_nonce,
1475 kdf_nonce_len, &pk_e_i->
key.pk_1024,
1476 &ct_e_i->
key.ct_1024, &sk_r->
key.sk_1024,
1477 &pk_i->
key.pk_1024);
1482#ifdef LC_KYBER_768_ENABLED
1486 &ct_e_r_1->
key.ct_768, &ct_e_r_2->
key.ct_768,
1487 shared_secret, shared_secret_len, kdf_nonce,
1488 kdf_nonce_len, &pk_e_i->
key.pk_768, &ct_e_i->
key.ct_768,
1489 &sk_r->
key.sk_768, &pk_i->
key.pk_768);
1494#ifdef LC_KYBER_512_ENABLED
1498 &ct_e_r_1->
key.ct_512, &ct_e_r_2->
key.ct_512,
1499 shared_secret, shared_secret_len, kdf_nonce,
1500 kdf_nonce_len, &pk_e_i->
key.pk_512, &ct_e_i->
key.ct_512,
1501 &sk_r->
key.sk_512, &pk_i->
key.pk_512);
1532 uint8_t *shared_secret,
size_t shared_secret_len,
1533 const uint8_t *kdf_nonce,
size_t kdf_nonce_len,
1538 if (!ct_e_r_1 || !ct_e_r_2 || !tk || !sk_e || !sk_i ||
1547#ifdef LC_KYBER_1024_ENABLED
1549 shared_secret, shared_secret_len, kdf_nonce,
1550 kdf_nonce_len, &ct_e_r_1->
key.ct_1024,
1551 &ct_e_r_2->
key.ct_1024, &tk->
key.ss_1024,
1552 &sk_e->
key.sk_1024, &sk_i->
key.sk_1024);
1557#ifdef LC_KYBER_768_ENABLED
1559 shared_secret, shared_secret_len, kdf_nonce,
1560 kdf_nonce_len, &ct_e_r_1->
key.ct_768,
1561 &ct_e_r_2->
key.ct_768, &tk->
key.ss_768,
1562 &sk_e->
key.sk_768, &sk_i->
key.sk_768);
1567#ifdef LC_KYBER_512_ENABLED
1569 shared_secret, shared_secret_len, kdf_nonce,
1570 kdf_nonce_len, &ct_e_r_1->
key.ct_512,
1571 &ct_e_r_2->
key.ct_512, &tk->
key.ss_512,
1572 &sk_e->
key.sk_512, &sk_i->
key.sk_512);
1624 const uint8_t *plaintext, uint8_t *ciphertext,
size_t datalen,
1625 const uint8_t *aad,
size_t aadlen, uint8_t *tag,
size_t taglen,
1626 struct lc_aead_ctx *aead)
1633#ifdef LC_KYBER_1024_ENABLED
1636 plaintext, ciphertext, datalen,
1637 aad, aadlen, tag, taglen, aead);
1642#ifdef LC_KYBER_768_ENABLED
1645 plaintext, ciphertext, datalen, aad,
1646 aadlen, tag, taglen, aead);
1651#ifdef LC_KYBER_512_ENABLED
1654 plaintext, ciphertext, datalen, aad,
1655 aadlen, tag, taglen, aead);
1694 const uint8_t *aad,
size_t aadlen)
1701#ifdef LC_KYBER_1024_ENABLED
1704 aead, &pk->
key.pk_1024, &ct->
key.ct_1024, aad, aadlen);
1709#ifdef LC_KYBER_768_ENABLED
1712 &ct->
key.ct_768, aad, aadlen);
1717#ifdef LC_KYBER_512_ENABLED
1720 &ct->
key.ct_512, aad, aadlen);
1752 const uint8_t *plaintext,
1753 uint8_t *ciphertext,
size_t datalen)
1813 const uint8_t *ciphertext, uint8_t *plaintext,
size_t datalen,
1814 const uint8_t *aad,
size_t aadlen,
const uint8_t *tag,
1815 size_t taglen,
struct lc_aead_ctx *aead)
1822#ifdef LC_KYBER_1024_ENABLED
1824 ciphertext, plaintext, datalen,
1825 aad, aadlen, tag, taglen, aead);
1830#ifdef LC_KYBER_768_ENABLED
1832 ciphertext, plaintext, datalen, aad,
1833 aadlen, tag, taglen, aead);
1838#ifdef LC_KYBER_512_ENABLED
1840 ciphertext, plaintext, datalen, aad,
1841 aadlen, tag, taglen, aead);
1879 const uint8_t *aad,
size_t aadlen)
1886#ifdef LC_KYBER_1024_ENABLED
1888 aead, &sk->
key.sk_1024, &ct->
key.ct_1024, aad, aadlen);
1893#ifdef LC_KYBER_768_ENABLED
1895 &ct->
key.ct_768, aad, aadlen);
1900#ifdef LC_KYBER_512_ENABLED
1902 &ct->
key.ct_512, aad, aadlen);
1934 const uint8_t *ciphertext,
1935 uint8_t *plaintext,
size_t datalen)
1960 const uint8_t *tag,
size_t taglen)
1967#ifdef LC_KYBER_X25519_KEM
1989#ifdef LC_KYBER_1024_ENABLED
1992#ifdef LC_KYBER_768_ENABLED
1995#ifdef LC_KYBER_512_ENABLED
2007#ifdef LC_KYBER_1024_ENABLED
2010#ifdef LC_KYBER_768_ENABLED
2013#ifdef LC_KYBER_512_ENABLED
2025#ifdef LC_KYBER_1024_ENABLED
2028#ifdef LC_KYBER_768_ENABLED
2031#ifdef LC_KYBER_512_ENABLED
2043#ifdef LC_KYBER_1024_ENABLED
2046#ifdef LC_KYBER_768_ENABLED
2049#ifdef LC_KYBER_512_ENABLED
2116 return ss->kyber_type;
2128static inline unsigned int
2131 switch (kyber_type) {
2133#ifdef LC_KYBER_1024_ENABLED
2139#ifdef LC_KYBER_768_ENABLED
2145#ifdef LC_KYBER_512_ENABLED
2165static inline unsigned int
2168 switch (kyber_type) {
2170#ifdef LC_KYBER_1024_ENABLED
2176#ifdef LC_KYBER_768_ENABLED
2182#ifdef LC_KYBER_512_ENABLED
2202static inline unsigned int
2205 switch (kyber_type) {
2207#ifdef LC_KYBER_1024_ENABLED
2213#ifdef LC_KYBER_768_ENABLED
2219#ifdef LC_KYBER_512_ENABLED
2239static inline unsigned int
2242 switch (kyber_type) {
2244#ifdef LC_KYBER_1024_ENABLED
2250#ifdef LC_KYBER_768_ENABLED
2256#ifdef LC_KYBER_512_ENABLED
2268 const uint8_t *kyber_src_key,
2269 size_t kyber_src_key_len,
2270 const uint8_t *x25519_src_key,
2271 size_t x25519_src_key_len)
2273 if (!sk || !kyber_src_key_len || !x25519_src_key_len ||
2274 kyber_src_key_len == 0 ||
2275 x25519_src_key_len != LC_X25519_SECRETKEYBYTES) {
2277#ifdef LC_KYBER_1024_ENABLED
2281 memcpy(_sk->
sk.
sk, kyber_src_key, kyber_src_key_len);
2282 memcpy(_sk->
sk_x25519.sk, x25519_src_key, x25519_src_key_len);
2286#ifdef LC_KYBER_768_ENABLED
2290 memcpy(_sk->
sk.
sk, kyber_src_key, kyber_src_key_len);
2291 memcpy(_sk->
sk_x25519.sk, x25519_src_key, x25519_src_key_len);
2295#ifdef LC_KYBER_512_ENABLED
2299 memcpy(_sk->
sk.
sk, kyber_src_key, kyber_src_key_len);
2300 memcpy(_sk->
sk_x25519.sk, x25519_src_key, x25519_src_key_len);
2310 const uint8_t *kyber_src_key,
2311 size_t kyber_src_key_len,
2312 const uint8_t *x25519_src_key,
2313 size_t x25519_src_key_len)
2315 if (!pk || !kyber_src_key_len || !x25519_src_key_len ||
2316 kyber_src_key_len == 0 ||
2317 x25519_src_key_len != LC_X25519_PUBLICKEYBYTES) {
2319#ifdef LC_KYBER_1024_ENABLED
2323 memcpy(_pk->
pk.
pk, kyber_src_key, kyber_src_key_len);
2324 memcpy(_pk->
pk_x25519.pk, x25519_src_key, x25519_src_key_len);
2328#ifdef LC_KYBER_768_ENABLED
2332 memcpy(_pk->
pk.
pk, kyber_src_key, kyber_src_key_len);
2333 memcpy(_pk->
pk_x25519.pk, x25519_src_key, x25519_src_key_len);
2337#ifdef LC_KYBER_512_ENABLED
2341 memcpy(_pk->
pk.
pk, kyber_src_key, kyber_src_key_len);
2342 memcpy(_pk->
pk_x25519.pk, x25519_src_key, x25519_src_key_len);
2352 const uint8_t *kyber_src_ct,
2353 size_t kyber_src_ct_len,
2354 const uint8_t *x25519_rem_pub_key,
2355 size_t x25519_rem_pub_len)
2357 if (!ct || !kyber_src_ct_len || !x25519_rem_pub_len ||
2358 kyber_src_ct_len == 0 ||
2359 x25519_rem_pub_len != LC_X25519_PUBLICKEYBYTES) {
2361#ifdef LC_KYBER_1024_ENABLED
2365 memcpy(_ct->
ct.
ct, kyber_src_ct, kyber_src_ct_len);
2366 memcpy(_ct->
pk_x25519.pk, x25519_rem_pub_key,
2367 x25519_rem_pub_len);
2371#ifdef LC_KYBER_768_ENABLED
2375 memcpy(_ct->
ct.
ct, kyber_src_ct, kyber_src_ct_len);
2376 memcpy(_ct->
pk_x25519.pk, x25519_rem_pub_key,
2377 x25519_rem_pub_len);
2381#ifdef LC_KYBER_512_ENABLED
2385 memcpy(_ct->
ct.
ct, kyber_src_ct, kyber_src_ct_len);
2386 memcpy(_ct->
pk_x25519.pk, x25519_rem_pub_key,
2387 x25519_rem_pub_len);
2397 const uint8_t *kyber_src_ss,
2398 size_t kyber_src_ss_len,
2399 const uint8_t *x25519_ss,
2400 size_t x25519_ss_len)
2402 if (!ss || !kyber_src_ss_len || !x25519_ss_len ||
2403 kyber_src_ss_len == 0 || x25519_ss_len != LC_X25519_SSBYTES) {
2405#ifdef LC_KYBER_1024_ENABLED
2409 memcpy(_ss->
ss.
ss, kyber_src_ss, kyber_src_ss_len);
2410 memcpy(_ss->
ss_x25519.ss, x25519_ss, x25519_ss_len);
2414#ifdef LC_KYBER_768_ENABLED
2418 memcpy(_ss->
ss.
ss, kyber_src_ss, kyber_src_ss_len);
2419 memcpy(_ss->
ss_x25519.ss, x25519_ss, x25519_ss_len);
2423#ifdef LC_KYBER_512_ENABLED
2427 memcpy(_ss->
ss.
ss, kyber_src_ss, kyber_src_ss_len);
2428 memcpy(_ss->
ss_x25519.ss, x25519_ss, x25519_ss_len);
2453 size_t *kyber_key_len,
2454 uint8_t **x25519_key,
2455 size_t *x25519_key_len,
2458 if (!sk || !kyber_key || !kyber_key_len || !x25519_key ||
2461#ifdef LC_KYBER_1024_ENABLED
2465 *kyber_key = _sk->
sk.
sk;
2468 *x25519_key_len = LC_X25519_SECRETKEYBYTES;
2471#ifdef LC_KYBER_768_ENABLED
2475 *kyber_key = _sk->
sk.
sk;
2478 *x25519_key_len = LC_X25519_SECRETKEYBYTES;
2481#ifdef LC_KYBER_512_ENABLED
2485 *kyber_key = _sk->
sk.
sk;
2488 *x25519_key_len = LC_X25519_SECRETKEYBYTES;
2512 size_t *kyber_key_len,
2513 uint8_t **x25519_key,
2514 size_t *x25519_key_len,
2517 if (!pk || !kyber_key || !kyber_key_len || !x25519_key ||
2520#ifdef LC_KYBER_1024_ENABLED
2524 *kyber_key = _pk->
pk.
pk;
2527 *x25519_key_len = LC_X25519_PUBLICKEYBYTES;
2530#ifdef LC_KYBER_768_ENABLED
2534 *kyber_key = _pk->
pk.
pk;
2537 *x25519_key_len = LC_X25519_PUBLICKEYBYTES;
2540#ifdef LC_KYBER_512_ENABLED
2544 *kyber_key = _pk->
pk.
pk;
2547 *x25519_key_len = LC_X25519_PUBLICKEYBYTES;
2572 size_t *kyber_ct_len,
2573 uint8_t **x25519_key,
2574 size_t *x25519_key_len,
2577 if (!ct || !kyber_ct || !kyber_ct_len || !x25519_key ||
2580#ifdef LC_KYBER_1024_ENABLED
2584 *kyber_ct = _ct->
ct.
ct;
2587 *x25519_key_len = LC_X25519_PUBLICKEYBYTES;
2590#ifdef LC_KYBER_768_ENABLED
2594 *kyber_ct = _ct->
ct.
ct;
2597 *x25519_key_len = LC_X25519_PUBLICKEYBYTES;
2600#ifdef LC_KYBER_512_ENABLED
2604 *kyber_ct = _ct->
ct.
ct;
2607 *x25519_key_len = LC_X25519_PUBLICKEYBYTES;
2632 size_t *kyber_ss_len,
2633 uint8_t **x25519_ss,
2634 size_t *x25519_ss_len,
2637 if (!ss || !kyber_ss || !kyber_ss_len || !x25519_ss || !x25519_ss_len) {
2639#ifdef LC_KYBER_1024_ENABLED
2643 *kyber_ss = _ss->
ss.
ss;
2646 *x25519_ss_len = LC_X25519_SSBYTES;
2649#ifdef LC_KYBER_768_ENABLED
2653 *kyber_ss = _ss->
ss.
ss;
2656 *x25519_ss_len = LC_X25519_SSBYTES;
2659#ifdef LC_KYBER_512_ENABLED
2663 *kyber_ss = _ss->
ss.
ss;
2666 *x25519_ss_len = LC_X25519_SSBYTES;
2688 struct lc_rng_ctx *rng_ctx,
2694 switch (kyber_type) {
2696#ifdef LC_KYBER_1024_ENABLED
2700 &sk->
key.sk_1024, rng_ctx);
2705#ifdef LC_KYBER_768_ENABLED
2709 &sk->
key.sk_768, rng_ctx);
2714#ifdef LC_KYBER_512_ENABLED
2718 &sk->
key.sk_512, rng_ctx);
2753 uint8_t *
ss,
size_t ss_len,
2761#ifdef LC_KYBER_1024_ENABLED
2764 ss_len, &pk->
key.pk_1024);
2769#ifdef LC_KYBER_768_ENABLED
2777#ifdef LC_KYBER_512_ENABLED
2820#ifdef LC_KYBER_1024_ENABLED
2822 ss, ss_len, &ct->
key.ct_1024, &sk->
key.sk_1024);
2827#ifdef LC_KYBER_768_ENABLED
2834#ifdef LC_KYBER_512_ENABLED
2869 if (!pk_e_i || !ct_e_i || !tk || !sk_e || !pk_r)
2874#ifdef LC_KYBER_1024_ENABLED
2880 &pk_e_i->
key.pk_1024, &ct_e_i->
key.ct_1024,
2881 &tk->
key.ss_1024, &sk_e->
key.sk_1024,
2882 &pk_r->
key.pk_1024);
2887#ifdef LC_KYBER_768_ENABLED
2893 &pk_e_i->
key.pk_768, &ct_e_i->
key.ct_768,
2894 &tk->
key.ss_768, &sk_e->
key.sk_768, &pk_r->
key.pk_768);
2899#ifdef LC_KYBER_512_ENABLED
2905 &pk_e_i->
key.pk_512, &ct_e_i->
key.ct_512,
2906 &tk->
key.ss_512, &sk_e->
key.sk_512, &pk_r->
key.pk_512);
2936 size_t shared_secret_len,
const uint8_t *kdf_nonce,
2941 if (!ct_e_r || !pk_e_i || !ct_e_i || !sk_r ||
2948#ifdef LC_KYBER_1024_ENABLED
2951 &ct_e_r->
key.ct_1024, shared_secret, shared_secret_len,
2952 kdf_nonce, kdf_nonce_len, &pk_e_i->
key.pk_1024,
2953 &ct_e_i->
key.ct_1024, &sk_r->
key.sk_1024);
2958#ifdef LC_KYBER_768_ENABLED
2961 &ct_e_r->
key.ct_768, shared_secret, shared_secret_len,
2962 kdf_nonce, kdf_nonce_len, &pk_e_i->
key.pk_768,
2963 &ct_e_i->
key.ct_768, &sk_r->
key.sk_768);
2968#ifdef LC_KYBER_512_ENABLED
2971 &ct_e_r->
key.ct_512, shared_secret, shared_secret_len,
2972 kdf_nonce, kdf_nonce_len, &pk_e_i->
key.pk_512,
2973 &ct_e_i->
key.ct_512, &sk_r->
key.sk_512);
3003 size_t shared_secret_len,
3004 const uint8_t *kdf_nonce,
size_t kdf_nonce_len,
3015#ifdef LC_KYBER_1024_ENABLED
3017 shared_secret, shared_secret_len, kdf_nonce,
3018 kdf_nonce_len, &ct_e_r->
key.ct_1024, &tk->
key.ss_1024,
3019 &sk_e->
key.sk_1024);
3024#ifdef LC_KYBER_768_ENABLED
3026 shared_secret, shared_secret_len, kdf_nonce,
3027 kdf_nonce_len, &ct_e_r->
key.ct_768, &tk->
key.ss_768,
3033#ifdef LC_KYBER_512_ENABLED
3035 shared_secret, shared_secret_len, kdf_nonce,
3036 kdf_nonce_len, &ct_e_r->
key.ct_512, &tk->
key.ss_512,
3068 if (!pk_e_i || !ct_e_i || !tk || !sk_e || !pk_r)
3073#ifdef LC_KYBER_1024_ENABLED
3079 &pk_e_i->
key.pk_1024, &ct_e_i->
key.ct_1024,
3080 &tk->
key.ss_1024, &sk_e->
key.sk_1024,
3081 &pk_r->
key.pk_1024);
3086#ifdef LC_KYBER_768_ENABLED
3092 &pk_e_i->
key.pk_768, &ct_e_i->
key.ct_768,
3093 &tk->
key.ss_768, &sk_e->
key.sk_768, &pk_r->
key.pk_768);
3098#ifdef LC_KYBER_512_ENABLED
3104 &pk_e_i->
key.pk_512, &ct_e_i->
key.ct_512,
3105 &tk->
key.ss_512, &sk_e->
key.sk_512, &pk_r->
key.pk_512);
3139 uint8_t *shared_secret,
size_t shared_secret_len,
3140 const uint8_t *kdf_nonce,
size_t kdf_nonce_len,
3146 if (!ct_e_r_1 || !ct_e_r_2 || !pk_e_i || !ct_e_i || !sk_r || !pk_i ||
3154#ifdef LC_KYBER_1024_ENABLED
3158 &ct_e_r_1->
key.ct_1024, &ct_e_r_2->
key.ct_1024,
3159 shared_secret, shared_secret_len, kdf_nonce,
3160 kdf_nonce_len, &pk_e_i->
key.pk_1024,
3161 &ct_e_i->
key.ct_1024, &sk_r->
key.sk_1024,
3162 &pk_i->
key.pk_1024);
3167#ifdef LC_KYBER_768_ENABLED
3171 &ct_e_r_1->
key.ct_768, &ct_e_r_2->
key.ct_768,
3172 shared_secret, shared_secret_len, kdf_nonce,
3173 kdf_nonce_len, &pk_e_i->
key.pk_768, &ct_e_i->
key.ct_768,
3174 &sk_r->
key.sk_768, &pk_i->
key.pk_768);
3179#ifdef LC_KYBER_512_ENABLED
3183 &ct_e_r_1->
key.ct_512, &ct_e_r_2->
key.ct_512,
3184 shared_secret, shared_secret_len, kdf_nonce,
3185 kdf_nonce_len, &pk_e_i->
key.pk_512, &ct_e_i->
key.ct_512,
3186 &sk_r->
key.sk_512, &pk_i->
key.pk_512);
3218 const uint8_t *kdf_nonce,
size_t kdf_nonce_len,
3225 if (!ct_e_r_1 || !ct_e_r_2 || !tk || !sk_e || !sk_i ||
3234#ifdef LC_KYBER_1024_ENABLED
3236 shared_secret, shared_secret_len, kdf_nonce,
3237 kdf_nonce_len, &ct_e_r_1->
key.ct_1024,
3238 &ct_e_r_2->
key.ct_1024, &tk->
key.ss_1024,
3239 &sk_e->
key.sk_1024, &sk_i->
key.sk_1024);
3244#ifdef LC_KYBER_768_ENABLED
3246 shared_secret, shared_secret_len, kdf_nonce,
3247 kdf_nonce_len, &ct_e_r_1->
key.ct_768,
3248 &ct_e_r_2->
key.ct_768, &tk->
key.ss_768,
3249 &sk_e->
key.sk_768, &sk_i->
key.sk_768);
3254#ifdef LC_KYBER_512_ENABLED
3256 shared_secret, shared_secret_len, kdf_nonce,
3257 kdf_nonce_len, &ct_e_r_1->
key.ct_512,
3258 &ct_e_r_2->
key.ct_512, &tk->
key.ss_512,
3259 &sk_e->
key.sk_512, &sk_i->
key.sk_512);
3301 const uint8_t *plaintext,
3302 uint8_t *ciphertext,
size_t datalen,
3303 const uint8_t *aad,
size_t aadlen,
3304 uint8_t *tag,
size_t taglen,
3305 struct lc_aead_ctx *aead)
3312#ifdef LC_KYBER_1024_ENABLED
3315 &ct->
key.ct_1024, plaintext,
3316 ciphertext, datalen, aad,
3317 aadlen, tag, taglen, aead);
3322#ifdef LC_KYBER_768_ENABLED
3325 &ct->
key.ct_768, plaintext,
3326 ciphertext, datalen, aad,
3327 aadlen, tag, taglen, aead);
3332#ifdef LC_KYBER_512_ENABLED
3335 &ct->
key.ct_512, plaintext,
3336 ciphertext, datalen, aad,
3337 aadlen, tag, taglen, aead);
3382#ifdef LC_KYBER_1024_ENABLED
3385 aead, &pk->
key.pk_1024, &ct->
key.ct_1024, aad, aadlen);
3390#ifdef LC_KYBER_768_ENABLED
3393 aead, &pk->
key.pk_768, &ct->
key.ct_768, aad, aadlen);
3398#ifdef LC_KYBER_512_ENABLED
3401 aead, &pk->
key.pk_512, &ct->
key.ct_512, aad, aadlen);
3431 const uint8_t *plaintext,
3432 uint8_t *ciphertext,
3458 uint8_t *tag,
size_t taglen)
3494 const uint8_t *ciphertext,
3495 uint8_t *plaintext,
size_t datalen,
3496 const uint8_t *aad,
size_t aadlen,
3497 const uint8_t *tag,
size_t taglen,
3498 struct lc_aead_ctx *aead)
3505#ifdef LC_KYBER_1024_ENABLED
3507 &sk->
key.sk_1024, &ct->
key.ct_1024, ciphertext,
3508 plaintext, datalen, aad, aadlen, tag, taglen, aead);
3513#ifdef LC_KYBER_768_ENABLED
3515 &ct->
key.ct_768, ciphertext,
3516 plaintext, datalen, aad,
3517 aadlen, tag, taglen, aead);
3522#ifdef LC_KYBER_512_ENABLED
3524 &ct->
key.ct_512, ciphertext,
3525 plaintext, datalen, aad,
3526 aadlen, tag, taglen, aead);
3571#ifdef LC_KYBER_1024_ENABLED
3573 aead, &sk->
key.sk_1024, &ct->
key.ct_1024, aad, aadlen);
3578#ifdef LC_KYBER_768_ENABLED
3580 aead, &sk->
key.sk_768, &ct->
key.ct_768, aad, aadlen);
3585#ifdef LC_KYBER_512_ENABLED
3587 aead, &sk->
key.sk_512, &ct->
key.ct_512, aad, aadlen);
3619 const uint8_t *ciphertext,
static int lc_aead_dec_update(struct lc_aead_ctx *ctx, const uint8_t *ciphertext, uint8_t *plaintext, size_t datalen)
AEAD-decrypt data - send partial data.
static int lc_aead_dec_final(struct lc_aead_ctx *ctx, const uint8_t *tag, size_t taglen)
AEAD-decrypt data - Perform authentication.
static int lc_aead_enc_update(struct lc_aead_ctx *ctx, const uint8_t *plaintext, uint8_t *ciphertext, size_t datalen)
AEAD-encrypt data - send partial data.
static int lc_aead_enc_final(struct lc_aead_ctx *ctx, uint8_t *tag, size_t taglen)
Complete AEAD encryption - Obtain the authentication tag from the encryption operation.
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 enum lc_kyber_type lc_kyber_x25519_pk_type(const struct lc_kyber_x25519_pk *pk)
Obtain Kyber type from public key.
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 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_sk_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber secret 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 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_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_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_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_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_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_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_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_ies_dec_final(struct lc_aead_ctx *aead, const uint8_t *tag, size_t taglen)
KyberIES decryption stream operation finalization / integrity test.
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_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 enum lc_kyber_type lc_kyber_x25519_ss_type(const struct lc_kyber_x25519_ss *ss)
Obtain Kyber type from shared secret.
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 enum lc_kyber_type lc_kyber_x25519_sk_type(const struct lc_kyber_x25519_sk *sk)
Obtain Kyber type from secret key.
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_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 enum lc_kyber_type lc_kyber_x25519_ct_type(const struct lc_kyber_x25519_ct *ct)
Obtain Kyber type from Kyber ciphertext.
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_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_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_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 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_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_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_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_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_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_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_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(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_final(struct lc_aead_ctx *aead, const uint8_t *tag, size_t taglen)
KyberIES decryption stream operation finalization / integrity test.
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_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_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_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 LC_PURE unsigned int lc_kyber_sk_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber secret key.
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_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_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 enum lc_kyber_type lc_kyber_sk_type(const struct lc_kyber_sk *sk)
Obtain Kyber type from secret key.
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_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_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_dec(struct lc_kyber_ss *ss, const struct lc_kyber_ct *ct, const struct lc_kyber_sk *sk)
Key decapsulation.
static int lc_kyber_enc(struct lc_kyber_ct *ct, struct lc_kyber_ss *ss, const struct lc_kyber_pk *pk)
Key encapsulation.
static enum lc_kyber_type lc_kyber_ct_type(const struct lc_kyber_ct *ct)
Obtain Kyber type from Kyber ciphertext.
static LC_PURE unsigned int lc_kyber_ct_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber ciphertext.
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 enum lc_kyber_type lc_kyber_pk_type(const struct lc_kyber_pk *pk)
Obtain Kyber type from public key.
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 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_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 LC_PURE unsigned int lc_kyber_pk_size(enum lc_kyber_type kyber_type)
Return the size of the Kyber public key.
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_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 enum lc_kyber_type lc_kyber_ss_type(const struct lc_kyber_ss *ss)
Obtain Kyber type from shared secret.
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.
union lc_kyber_ss::@3 key
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)
union lc_kyber_x25519_pk::@5 key
enum lc_kyber_type kyber_type
enum lc_kyber_type kyber_type
union lc_kyber_sk::@0 key
enum lc_kyber_type kyber_type
union lc_kyber_x25519_ss::@7 key
union lc_kyber_ct::@2 key
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)
enum lc_kyber_type kyber_type
union lc_kyber_pk::@1 key
union lc_kyber_x25519_sk::@4 key
enum lc_kyber_type kyber_type
union lc_kyber_x25519_ct::@6 key
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_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
enum lc_kyber_type kyber_type
enum lc_kyber_type kyber_type
struct lc_x25519_pk pk_x25519
int lc_kex_1024_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_1024_ct *ct_e_r, const struct lc_kyber_1024_ss *tk, const struct lc_kyber_1024_sk *sk_e)
lc_kex_uake_initiator_ss - Responder's shared secret generation
int lc_kyber_1024_keypair_from_seed(struct lc_kyber_1024_pk *pk, struct lc_kyber_1024_sk *sk, const uint8_t *seed, size_t seedlen)
lc_kyber__keypair_from_seed - Generates Kyber public and private key from a given seed.
int lc_kyber_1024_enc(struct lc_kyber_1024_ct *ct, struct lc_kyber_1024_ss *ss, const struct lc_kyber_1024_pk *pk)
lc_kyber_enc - Key encapsulation
int lc_kyber_1024_x25519_dec_kdf(uint8_t *ss, size_t ss_len, const struct lc_kyber_1024_x25519_ct *ct, const struct lc_kyber_1024_x25519_sk *sk)
lc_kyber_x25519_dec_kdf - Key decapsulation with KDF applied to shared secret
int lc_kyber_1024_x25519_keypair(struct lc_kyber_1024_x25519_pk *pk, struct lc_kyber_1024_x25519_sk *sk, struct lc_rng_ctx *rng_ctx)
lc_kyber_x25519_keypair - Generates public and private key for IND-CCA2-secure Kyber key encapsulatio...
struct lc_x25519_ss ss_x25519
struct lc_x25519_sk sk_x25519
int lc_kex_1024_uake_initiator_init(struct lc_kyber_1024_pk *pk_e_i, struct lc_kyber_1024_ct *ct_e_i, struct lc_kyber_1024_ss *tk, struct lc_kyber_1024_sk *sk_e, const struct lc_kyber_1024_pk *pk_r)
lc_kex_uake_initiator_init - Initialize unilaterally authenticated key exchange
int lc_kyber_1024_ies_enc_init(struct lc_aead_ctx *aead, const struct lc_kyber_1024_pk *pk, struct lc_kyber_1024_ct *ct, const uint8_t *aad, size_t aadlen)
lc_kyber_ies_enc_init - KyberIES encryption stream operation initialization
int lc_kyber_1024_dec_kdf(uint8_t *ss, size_t ss_len, const struct lc_kyber_1024_ct *ct, const struct lc_kyber_1024_sk *sk)
lc_kyber_dec_kdf - Key decapsulation with KDF applied to shared secret
int lc_kyber_1024_enc_kdf(struct lc_kyber_1024_ct *ct, uint8_t *ss, size_t ss_len, const struct lc_kyber_1024_pk *pk)
lc_kyber_1024_enc_kdf - Key encapsulation with KDF applied to shared secret
int lc_kex_1024_x25519_ake_initiator_init(struct lc_kyber_1024_x25519_pk *pk_e_i, struct lc_kyber_1024_x25519_ct *ct_e_i, struct lc_kyber_1024_x25519_ss *tk, struct lc_kyber_1024_x25519_sk *sk_e, const struct lc_kyber_1024_x25519_pk *pk_r)
lc_kex_x25519_ake_initiator_init - Initialize authenticated key exchange
struct lc_kyber_1024_ss ss
int lc_kyber_1024_ies_enc(const struct lc_kyber_1024_pk *pk, struct lc_kyber_1024_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)
lc_kyber_ies_enc - KyberIES encryption oneshot
int lc_kyber_1024_ies_dec(const struct lc_kyber_1024_sk *sk, const struct lc_kyber_1024_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)
lc_kyber_ies_dec - KyberIES decryption oneshot
int lc_kex_1024_x25519_uake_responder_ss(struct lc_kyber_1024_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_1024_x25519_pk *pk_e_i, const struct lc_kyber_1024_x25519_ct *ct_e_i, const struct lc_kyber_1024_x25519_sk *sk_r)
lc_kex_x25519_uake_responder_ss - Initiator's shared secret generation
int lc_kex_1024_uake_responder_ss(struct lc_kyber_1024_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_1024_pk *pk_e_i, const struct lc_kyber_1024_ct *ct_e_i, const struct lc_kyber_1024_sk *sk_r)
lc_kex_uake_responder_ss - Initiator's shared secret generation
uint8_t pk[LC_KYBER_PUBLICKEYBYTES]
int lc_kex_1024_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_1024_x25519_ct *ct_e_r_1, const struct lc_kyber_1024_x25519_ct *ct_e_r_2, const struct lc_kyber_1024_x25519_ss *tk, const struct lc_kyber_1024_x25519_sk *sk_e, const struct lc_kyber_1024_x25519_sk *sk_i)
lc_kex_x25519_ake_initiator_ss - Responder's shared secret generation
int lc_kyber_1024_keypair(struct lc_kyber_1024_pk *pk, struct lc_kyber_1024_sk *sk, struct lc_rng_ctx *rng_ctx)
lc_kyber_keypair - Generates public and private key for IND-CCA2-secure Kyber key encapsulation mecha...
int lc_kex_1024_x25519_ake_responder_ss(struct lc_kyber_1024_x25519_ct *ct_e_r_1, struct lc_kyber_1024_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_1024_x25519_pk *pk_e_i, const struct lc_kyber_1024_x25519_ct *ct_e_i, const struct lc_kyber_1024_x25519_sk *sk_r, const struct lc_kyber_1024_x25519_pk *pk_i)
lc_kex_x25519_ake_responder_ss - Initiator's shared secret generation
int lc_kyber_1024_x25519_ies_dec_init(struct lc_aead_ctx *aead, const struct lc_kyber_1024_x25519_sk *sk, const struct lc_kyber_1024_x25519_ct *ct, const uint8_t *aad, size_t aadlen)
lc_kyber_x25519_ies_dec_init - KyberIES decryption stream operation initialization
int lc_kex_1024_ake_initiator_init(struct lc_kyber_1024_pk *pk_e_i, struct lc_kyber_1024_ct *ct_e_i, struct lc_kyber_1024_ss *tk, struct lc_kyber_1024_sk *sk_e, const struct lc_kyber_1024_pk *pk_r)
lc_kex_ake_initiator_init - Initialize authenticated key exchange
struct lc_kyber_1024_ct ct
int lc_kyber_1024_dec(struct lc_kyber_1024_ss *ss, const struct lc_kyber_1024_ct *ct, const struct lc_kyber_1024_sk *sk)
lc_kyber_dec - Key decapsulation
int lc_kyber_1024_x25519_ies_dec(const struct lc_kyber_1024_x25519_sk *sk, const struct lc_kyber_1024_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)
lc_kyber_x25519_ies_dec - KyberIES decryption oneshot
int lc_kyber_1024_ies_dec_init(struct lc_aead_ctx *aead, const struct lc_kyber_1024_sk *sk, const struct lc_kyber_1024_ct *ct, const uint8_t *aad, size_t aadlen)
lc_kyber_ies_dec_init - KyberIES decryption stream operation initialization
uint8_t ct[LC_CRYPTO_CIPHERTEXTBYTES]
int lc_kyber_1024_x25519_ies_enc_init(struct lc_aead_ctx *aead, const struct lc_kyber_1024_x25519_pk *pk, struct lc_kyber_1024_x25519_ct *ct, const uint8_t *aad, size_t aadlen)
lc_kyber_x25519_ies_enc_init - KyberIES encryption stream operation initialization
int lc_kex_1024_x25519_uake_initiator_init(struct lc_kyber_1024_x25519_pk *pk_e_i, struct lc_kyber_1024_x25519_ct *ct_e_i, struct lc_kyber_1024_x25519_ss *tk, struct lc_kyber_1024_x25519_sk *sk_e, const struct lc_kyber_1024_x25519_pk *pk_r)
lc_kex_x25519_uake_initiator_init - Initialize unilaterally authenticated key exchange
struct lc_kyber_1024_sk sk
int lc_kyber_1024_x25519_ies_enc(const struct lc_kyber_1024_x25519_pk *pk, struct lc_kyber_1024_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)
lc_kyber_x25519_ies_enc - KyberIES encryption oneshot
uint8_t sk[LC_KYBER_SECRETKEYBYTES]
uint8_t ss[LC_KYBER_SSBYTES]
struct lc_x25519_pk pk_x25519
int lc_kex_1024_ake_responder_ss(struct lc_kyber_1024_ct *ct_e_r_1, struct lc_kyber_1024_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_1024_pk *pk_e_i, const struct lc_kyber_1024_ct *ct_e_i, const struct lc_kyber_1024_sk *sk_r, const struct lc_kyber_1024_pk *pk_i)
lc_kex_ake_responder_ss - Initiator's shared secret generation
struct lc_kyber_1024_pk pk
int lc_kex_1024_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_1024_ct *ct_e_r_1, const struct lc_kyber_1024_ct *ct_e_r_2, const struct lc_kyber_1024_ss *tk, const struct lc_kyber_1024_sk *sk_e, const struct lc_kyber_1024_sk *sk_i)
lc_kex_ake_initiator_ss - Responder's shared secret generation
int lc_kex_1024_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_1024_x25519_ct *ct_e_r, const struct lc_kyber_1024_x25519_ss *tk, const struct lc_kyber_1024_x25519_sk *sk_e)
lc_kex_x25519_uake_initiator_ss - Responder's shared secret generation
int lc_kyber_1024_x25519_enc_kdf(struct lc_kyber_1024_x25519_ct *ct, uint8_t *ss, size_t ss_len, const struct lc_kyber_1024_x25519_pk *pk)
lc_kyber_x25519_enc_kdf - Key encapsulation with KDF applied to shared secret
int lc_kyber_512_x25519_ies_enc(const struct lc_kyber_512_x25519_pk *pk, struct lc_kyber_512_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)
lc_kyber_x25519_ies_enc - KyberIES encryption oneshot
int lc_kyber_512_x25519_ies_dec_init(struct lc_aead_ctx *aead, const struct lc_kyber_512_x25519_sk *sk, const struct lc_kyber_512_x25519_ct *ct, const uint8_t *aad, size_t aadlen)
lc_kyber_x25519_ies_dec_init - KyberIES decryption stream operation initialization
int lc_kyber_512_enc_kdf(struct lc_kyber_512_ct *ct, uint8_t *ss, size_t ss_len, const struct lc_kyber_512_pk *pk)
lc_kyber_512_enc_kdf - Key encapsulation with KDF applied to shared secret
int lc_kyber_512_x25519_enc_kdf(struct lc_kyber_512_x25519_ct *ct, uint8_t *ss, size_t ss_len, const struct lc_kyber_512_x25519_pk *pk)
lc_kyber_x25519_enc_kdf - Key encapsulation with KDF applied to shared secret
int lc_kyber_512_x25519_dec_kdf(uint8_t *ss, size_t ss_len, const struct lc_kyber_512_x25519_ct *ct, const struct lc_kyber_512_x25519_sk *sk)
lc_kyber_x25519_dec_kdf - Key decapsulation with KDF applied to shared secret
struct lc_x25519_ss ss_x25519
int lc_kex_512_x25519_ake_initiator_init(struct lc_kyber_512_x25519_pk *pk_e_i, struct lc_kyber_512_x25519_ct *ct_e_i, struct lc_kyber_512_x25519_ss *tk, struct lc_kyber_512_x25519_sk *sk_e, const struct lc_kyber_512_x25519_pk *pk_r)
lc_kex_x25519_ake_initiator_init - Initialize authenticated key exchange
struct lc_x25519_pk pk_x25519
int lc_kex_512_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_512_ct *ct_e_r, const struct lc_kyber_512_ss *tk, const struct lc_kyber_512_sk *sk_e)
lc_kex_uake_initiator_ss - Responder's shared secret generation
int lc_kyber_512_ies_dec_init(struct lc_aead_ctx *aead, const struct lc_kyber_512_sk *sk, const struct lc_kyber_512_ct *ct, const uint8_t *aad, size_t aadlen)
lc_kyber_ies_dec_init - KyberIES decryption stream operation initialization
int lc_kex_512_x25519_uake_initiator_init(struct lc_kyber_512_x25519_pk *pk_e_i, struct lc_kyber_512_x25519_ct *ct_e_i, struct lc_kyber_512_x25519_ss *tk, struct lc_kyber_512_x25519_sk *sk_e, const struct lc_kyber_512_x25519_pk *pk_r)
lc_kex_x25519_uake_initiator_init - Initialize unilaterally authenticated key exchange
uint8_t sk[LC_KYBER_SECRETKEYBYTES]
int lc_kex_512_uake_responder_ss(struct lc_kyber_512_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_512_pk *pk_e_i, const struct lc_kyber_512_ct *ct_e_i, const struct lc_kyber_512_sk *sk_r)
lc_kex_uake_responder_ss - Initiator's shared secret generation
int lc_kyber_512_enc(struct lc_kyber_512_ct *ct, struct lc_kyber_512_ss *ss, const struct lc_kyber_512_pk *pk)
lc_kyber_enc - Key encapsulation
int lc_kyber_512_keypair_from_seed(struct lc_kyber_512_pk *pk, struct lc_kyber_512_sk *sk, const uint8_t *seed, size_t seedlen)
lc_kyber__keypair_from_seed - Generates Kyber public and private key from a given seed.
struct lc_kyber_512_ss ss
struct lc_kyber_512_pk pk
int lc_kex_512_ake_initiator_init(struct lc_kyber_512_pk *pk_e_i, struct lc_kyber_512_ct *ct_e_i, struct lc_kyber_512_ss *tk, struct lc_kyber_512_sk *sk_e, const struct lc_kyber_512_pk *pk_r)
lc_kex_ake_initiator_init - Initialize authenticated key exchange
struct lc_kyber_512_sk sk
int lc_kex_512_ake_responder_ss(struct lc_kyber_512_ct *ct_e_r_1, struct lc_kyber_512_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_512_pk *pk_e_i, const struct lc_kyber_512_ct *ct_e_i, const struct lc_kyber_512_sk *sk_r, const struct lc_kyber_512_pk *pk_i)
lc_kex_ake_responder_ss - Initiator's shared secret generation
int lc_kex_512_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_512_x25519_ct *ct_e_r, const struct lc_kyber_512_x25519_ss *tk, const struct lc_kyber_512_x25519_sk *sk_e)
lc_kex_x25519_uake_initiator_ss - Responder's shared secret generation
struct lc_kyber_512_ct ct
int lc_kex_512_uake_initiator_init(struct lc_kyber_512_pk *pk_e_i, struct lc_kyber_512_ct *ct_e_i, struct lc_kyber_512_ss *tk, struct lc_kyber_512_sk *sk_e, const struct lc_kyber_512_pk *pk_r)
lc_kex_uake_initiator_init - Initialize unilaterally authenticated key exchange
int lc_kex_512_x25519_uake_responder_ss(struct lc_kyber_512_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_512_x25519_pk *pk_e_i, const struct lc_kyber_512_x25519_ct *ct_e_i, const struct lc_kyber_512_x25519_sk *sk_r)
lc_kex_x25519_uake_responder_ss - Initiator's shared secret generation
int lc_kyber_512_keypair(struct lc_kyber_512_pk *pk, struct lc_kyber_512_sk *sk, struct lc_rng_ctx *rng_ctx)
lc_kyber_keypair - Generates public and private key for IND-CCA2-secure Kyber key encapsulation mecha...
int lc_kyber_512_x25519_ies_dec(const struct lc_kyber_512_x25519_sk *sk, const struct lc_kyber_512_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)
lc_kyber_x25519_ies_dec - KyberIES decryption oneshot
struct lc_x25519_sk sk_x25519
int lc_kex_512_x25519_ake_responder_ss(struct lc_kyber_512_x25519_ct *ct_e_r_1, struct lc_kyber_512_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_512_x25519_pk *pk_e_i, const struct lc_kyber_512_x25519_ct *ct_e_i, const struct lc_kyber_512_x25519_sk *sk_r, const struct lc_kyber_512_x25519_pk *pk_i)
lc_kex_x25519_ake_responder_ss - Initiator's shared secret generation
uint8_t ss[LC_KYBER_SSBYTES]
int lc_kyber_512_x25519_keypair(struct lc_kyber_512_x25519_pk *pk, struct lc_kyber_512_x25519_sk *sk, struct lc_rng_ctx *rng_ctx)
lc_kyber_x25519_keypair - Generates public and private key for IND-CCA2-secure Kyber key encapsulatio...
int lc_kyber_512_dec(struct lc_kyber_512_ss *ss, const struct lc_kyber_512_ct *ct, const struct lc_kyber_512_sk *sk)
lc_kyber_dec - Key decapsulation
int lc_kex_512_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_512_x25519_ct *ct_e_r_1, const struct lc_kyber_512_x25519_ct *ct_e_r_2, const struct lc_kyber_512_x25519_ss *tk, const struct lc_kyber_512_x25519_sk *sk_e, const struct lc_kyber_512_x25519_sk *sk_i)
lc_kex_x25519_ake_initiator_ss - Responder's shared secret generation
int lc_kyber_512_ies_dec(const struct lc_kyber_512_sk *sk, const struct lc_kyber_512_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)
lc_kyber_ies_dec - KyberIES decryption oneshot
uint8_t pk[LC_KYBER_PUBLICKEYBYTES]
int lc_kex_512_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_512_ct *ct_e_r_1, const struct lc_kyber_512_ct *ct_e_r_2, const struct lc_kyber_512_ss *tk, const struct lc_kyber_512_sk *sk_e, const struct lc_kyber_512_sk *sk_i)
lc_kex_ake_initiator_ss - Responder's shared secret generation
int lc_kyber_512_ies_enc_init(struct lc_aead_ctx *aead, const struct lc_kyber_512_pk *pk, struct lc_kyber_512_ct *ct, const uint8_t *aad, size_t aadlen)
lc_kyber_ies_enc_init - KyberIES encryption stream operation initialization
struct lc_x25519_pk pk_x25519
int lc_kyber_512_ies_enc(const struct lc_kyber_512_pk *pk, struct lc_kyber_512_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)
lc_kyber_ies_enc - KyberIES encryption oneshot
uint8_t ct[LC_CRYPTO_CIPHERTEXTBYTES]
int lc_kyber_512_x25519_ies_enc_init(struct lc_aead_ctx *aead, const struct lc_kyber_512_x25519_pk *pk, struct lc_kyber_512_x25519_ct *ct, const uint8_t *aad, size_t aadlen)
lc_kyber_x25519_ies_enc_init - KyberIES encryption stream operation initialization
int lc_kyber_512_dec_kdf(uint8_t *ss, size_t ss_len, const struct lc_kyber_512_ct *ct, const struct lc_kyber_512_sk *sk)
lc_kyber_dec_kdf - Key decapsulation with KDF applied to shared secret
int lc_kyber_768_x25519_keypair(struct lc_kyber_768_x25519_pk *pk, struct lc_kyber_768_x25519_sk *sk, struct lc_rng_ctx *rng_ctx)
lc_kyber_x25519_keypair - Generates public and private key for IND-CCA2-secure Kyber key encapsulatio...
int lc_kyber_768_ies_enc_init(struct lc_aead_ctx *aead, const struct lc_kyber_768_pk *pk, struct lc_kyber_768_ct *ct, const uint8_t *aad, size_t aadlen)
lc_kyber_ies_enc_init - KyberIES encryption stream operation initialization
int lc_kyber_768_dec_kdf(uint8_t *ss, size_t ss_len, const struct lc_kyber_768_ct *ct, const struct lc_kyber_768_sk *sk)
lc_kyber_dec_kdf - Key decapsulation with KDF applied to shared secret
int lc_kyber_768_ies_dec(const struct lc_kyber_768_sk *sk, const struct lc_kyber_768_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)
lc_kyber_ies_dec - KyberIES decryption oneshot
int lc_kyber_768_x25519_ies_dec(const struct lc_kyber_768_x25519_sk *sk, const struct lc_kyber_768_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)
lc_kyber_x25519_ies_dec - KyberIES decryption oneshot
int lc_kyber_768_keypair(struct lc_kyber_768_pk *pk, struct lc_kyber_768_sk *sk, struct lc_rng_ctx *rng_ctx)
lc_kyber_keypair - Generates public and private key for IND-CCA2-secure Kyber key encapsulation mecha...
int lc_kyber_768_enc_kdf(struct lc_kyber_768_ct *ct, uint8_t *ss, size_t ss_len, const struct lc_kyber_768_pk *pk)
lc_kyber_768_enc_kdf - Key encapsulation with KDF applied to shared secret
uint8_t sk[LC_KYBER_SECRETKEYBYTES]
int lc_kyber_768_x25519_ies_dec_init(struct lc_aead_ctx *aead, const struct lc_kyber_768_x25519_sk *sk, const struct lc_kyber_768_x25519_ct *ct, const uint8_t *aad, size_t aadlen)
lc_kyber_x25519_ies_dec_init - KyberIES decryption stream operation initialization
int lc_kyber_768_x25519_ies_enc(const struct lc_kyber_768_x25519_pk *pk, struct lc_kyber_768_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)
lc_kyber_x25519_ies_enc - KyberIES encryption oneshot
int lc_kex_768_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_768_x25519_ct *ct_e_r_1, const struct lc_kyber_768_x25519_ct *ct_e_r_2, const struct lc_kyber_768_x25519_ss *tk, const struct lc_kyber_768_x25519_sk *sk_e, const struct lc_kyber_768_x25519_sk *sk_i)
lc_kex_x25519_ake_initiator_ss - Responder's shared secret generation
struct lc_kyber_768_ct ct
int lc_kex_768_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_768_ct *ct_e_r_1, const struct lc_kyber_768_ct *ct_e_r_2, const struct lc_kyber_768_ss *tk, const struct lc_kyber_768_sk *sk_e, const struct lc_kyber_768_sk *sk_i)
lc_kex_ake_initiator_ss - Responder's shared secret generation
struct lc_kyber_768_sk sk
struct lc_kyber_768_pk pk
int lc_kex_768_ake_initiator_init(struct lc_kyber_768_pk *pk_e_i, struct lc_kyber_768_ct *ct_e_i, struct lc_kyber_768_ss *tk, struct lc_kyber_768_sk *sk_e, const struct lc_kyber_768_pk *pk_r)
lc_kex_ake_initiator_init - Initialize authenticated key exchange
int lc_kyber_768_dec(struct lc_kyber_768_ss *ss, const struct lc_kyber_768_ct *ct, const struct lc_kyber_768_sk *sk)
lc_kyber_dec - Key decapsulation
int lc_kex_768_x25519_ake_initiator_init(struct lc_kyber_768_x25519_pk *pk_e_i, struct lc_kyber_768_x25519_ct *ct_e_i, struct lc_kyber_768_x25519_ss *tk, struct lc_kyber_768_x25519_sk *sk_e, const struct lc_kyber_768_x25519_pk *pk_r)
lc_kex_x25519_ake_initiator_init - Initialize authenticated key exchange
struct lc_kyber_768_ss ss
struct lc_x25519_ss ss_x25519
int lc_kyber_768_ies_dec_init(struct lc_aead_ctx *aead, const struct lc_kyber_768_sk *sk, const struct lc_kyber_768_ct *ct, const uint8_t *aad, size_t aadlen)
lc_kyber_ies_dec_init - KyberIES decryption stream operation initialization
int lc_kex_768_x25519_ake_responder_ss(struct lc_kyber_768_x25519_ct *ct_e_r_1, struct lc_kyber_768_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_768_x25519_pk *pk_e_i, const struct lc_kyber_768_x25519_ct *ct_e_i, const struct lc_kyber_768_x25519_sk *sk_r, const struct lc_kyber_768_x25519_pk *pk_i)
lc_kex_x25519_ake_responder_ss - Initiator's shared secret generation
int lc_kyber_768_enc(struct lc_kyber_768_ct *ct, struct lc_kyber_768_ss *ss, const struct lc_kyber_768_pk *pk)
lc_kyber_enc - Key encapsulation
int lc_kyber_768_x25519_dec_kdf(uint8_t *ss, size_t ss_len, const struct lc_kyber_768_x25519_ct *ct, const struct lc_kyber_768_x25519_sk *sk)
lc_kyber_x25519_dec_kdf - Key decapsulation with KDF applied to shared secret
int lc_kyber_768_x25519_ies_enc_init(struct lc_aead_ctx *aead, const struct lc_kyber_768_x25519_pk *pk, struct lc_kyber_768_x25519_ct *ct, const uint8_t *aad, size_t aadlen)
lc_kyber_x25519_ies_enc_init - KyberIES encryption stream operation initialization
int lc_kex_768_uake_responder_ss(struct lc_kyber_768_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_768_pk *pk_e_i, const struct lc_kyber_768_ct *ct_e_i, const struct lc_kyber_768_sk *sk_r)
lc_kex_uake_responder_ss - Initiator's shared secret generation
uint8_t pk[LC_KYBER_PUBLICKEYBYTES]
uint8_t ss[LC_KYBER_SSBYTES]
struct lc_x25519_sk sk_x25519
int lc_kex_768_x25519_uake_initiator_init(struct lc_kyber_768_x25519_pk *pk_e_i, struct lc_kyber_768_x25519_ct *ct_e_i, struct lc_kyber_768_x25519_ss *tk, struct lc_kyber_768_x25519_sk *sk_e, const struct lc_kyber_768_x25519_pk *pk_r)
lc_kex_x25519_uake_initiator_init - Initialize unilaterally authenticated key exchange
int lc_kyber_768_ies_enc(const struct lc_kyber_768_pk *pk, struct lc_kyber_768_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)
lc_kyber_ies_enc - KyberIES encryption oneshot
int lc_kex_768_uake_initiator_init(struct lc_kyber_768_pk *pk_e_i, struct lc_kyber_768_ct *ct_e_i, struct lc_kyber_768_ss *tk, struct lc_kyber_768_sk *sk_e, const struct lc_kyber_768_pk *pk_r)
lc_kex_uake_initiator_init - Initialize unilaterally authenticated key exchange
int lc_kex_768_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_768_ct *ct_e_r, const struct lc_kyber_768_ss *tk, const struct lc_kyber_768_sk *sk_e)
lc_kex_uake_initiator_ss - Responder's shared secret generation
uint8_t ct[LC_CRYPTO_CIPHERTEXTBYTES]
int lc_kex_768_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_768_x25519_ct *ct_e_r, const struct lc_kyber_768_x25519_ss *tk, const struct lc_kyber_768_x25519_sk *sk_e)
lc_kex_x25519_uake_initiator_ss - Responder's shared secret generation
int lc_kex_768_x25519_uake_responder_ss(struct lc_kyber_768_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_768_x25519_pk *pk_e_i, const struct lc_kyber_768_x25519_ct *ct_e_i, const struct lc_kyber_768_x25519_sk *sk_r)
lc_kex_x25519_uake_responder_ss - Initiator's shared secret generation
int lc_kex_768_ake_responder_ss(struct lc_kyber_768_ct *ct_e_r_1, struct lc_kyber_768_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_768_pk *pk_e_i, const struct lc_kyber_768_ct *ct_e_i, const struct lc_kyber_768_sk *sk_r, const struct lc_kyber_768_pk *pk_i)
lc_kex_ake_responder_ss - Initiator's shared secret generation
int lc_kyber_768_x25519_enc_kdf(struct lc_kyber_768_x25519_ct *ct, uint8_t *ss, size_t ss_len, const struct lc_kyber_768_x25519_pk *pk)
lc_kyber_x25519_enc_kdf - Key encapsulation with KDF applied to shared secret
struct lc_x25519_pk pk_x25519
struct lc_x25519_pk pk_x25519
int lc_kyber_768_keypair_from_seed(struct lc_kyber_768_pk *pk, struct lc_kyber_768_sk *sk, const uint8_t *seed, size_t seedlen)
lc_kyber__keypair_from_seed - Generates Kyber public and private key from a given seed.