Leancrypto 1.6.0
Post-Quantum Cryptographic Library
Loading...
Searching...
No Matches
lc_kyber.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2024 - 2025, Stephan Mueller <smueller@chronox.de>
3 *
4 * License: see LICENSE file in root directory
5 *
6 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
7 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
8 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
9 * WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
10 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
11 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
12 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
13 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
14 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
15 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
16 * USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
17 * DAMAGE.
18 */
19
20#ifndef LC_KYBER_H
21#define LC_KYBER_H
22
23#include "ext_headers.h"
24
25#if defined __has_include
26#if __has_include("lc_kyber_1024.h")
27#include "lc_kyber_1024.h"
28#define LC_KYBER_1024_ENABLED
29#endif
30#if __has_include("lc_kyber_768.h")
31#include "lc_kyber_768.h"
32#define LC_KYBER_768_ENABLED
33#endif
34#if __has_include("lc_kyber_512.h")
35#include "lc_kyber_512.h"
36#define LC_KYBER_512_ENABLED
37#endif
38#else
39#error "Compiler misses __has_include"
40#endif
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
52
79
80/************************************* KEM ************************************/
86 union {
87#ifdef LC_KYBER_1024_ENABLED
88 struct lc_kyber_1024_sk sk_1024;
89#endif
90#ifdef LC_KYBER_768_ENABLED
91 struct lc_kyber_768_sk sk_768;
92#endif
93#ifdef LC_KYBER_512_ENABLED
94 struct lc_kyber_512_sk sk_512;
95#endif
96 } key;
97};
98
104 union {
105#ifdef LC_KYBER_1024_ENABLED
106 struct lc_kyber_1024_pk pk_1024;
107#endif
108#ifdef LC_KYBER_768_ENABLED
109 struct lc_kyber_768_pk pk_768;
110#endif
111#ifdef LC_KYBER_512_ENABLED
112 struct lc_kyber_512_pk pk_512;
113#endif
115};
116
122 union {
123#ifdef LC_KYBER_1024_ENABLED
124 struct lc_kyber_1024_ct ct_1024;
125#endif
126#ifdef LC_KYBER_768_ENABLED
127 struct lc_kyber_768_ct ct_768;
128#endif
129#ifdef LC_KYBER_512_ENABLED
130 struct lc_kyber_512_ct ct_512;
131#endif
133};
134
140 union {
141#ifdef LC_KYBER_1024_ENABLED
142 struct lc_kyber_1024_ss ss_1024;
143#endif
144#ifdef LC_KYBER_768_ENABLED
145 struct lc_kyber_768_ss ss_768;
146#endif
147#ifdef LC_KYBER_512_ENABLED
148 struct lc_kyber_512_ss ss_512;
149#endif
151};
152
162
172
182
192
201LC_PURE unsigned int lc_kyber_sk_size(enum lc_kyber_type kyber_type);
202
211LC_PURE unsigned int lc_kyber_pk_size(enum lc_kyber_type kyber_type);
212
221LC_PURE unsigned int lc_kyber_ct_size(enum lc_kyber_type kyber_type);
222
231LC_PURE unsigned int lc_kyber_ss_size(enum lc_kyber_type kyber_type);
232
244int lc_kyber_sk_load(struct lc_kyber_sk *sk, const uint8_t *src_key,
245 size_t src_key_len);
246
258int lc_kyber_pk_load(struct lc_kyber_pk *pk, const uint8_t *src_key,
259 size_t src_key_len);
260
274int lc_kyber_ct_load(struct lc_kyber_ct *ct, const uint8_t *src_key,
275 size_t src_key_len);
276
290int lc_kyber_ss_load(struct lc_kyber_ss *ss, const uint8_t *src_key,
291 size_t src_key_len);
292
304int lc_kyber_pct(const struct lc_kyber_pk *pk, const struct lc_kyber_sk *sk);
305
319int lc_kyber_sk_ptr(uint8_t **kyber_key, size_t *kyber_key_len,
320 struct lc_kyber_sk *sk);
321
335int lc_kyber_pk_ptr(uint8_t **kyber_key, size_t *kyber_key_len,
336 struct lc_kyber_pk *pk);
337
352int lc_kyber_ct_ptr(uint8_t **kyber_ct, size_t *kyber_ct_len,
353 struct lc_kyber_ct *ct);
354
369int lc_kyber_ss_ptr(uint8_t **kyber_ss, size_t *kyber_ss_len,
370 struct lc_kyber_ss *ss);
371
384int lc_kyber_keypair(struct lc_kyber_pk *pk, struct lc_kyber_sk *sk,
385 struct lc_rng_ctx *rng_ctx, enum lc_kyber_type kyber_type);
386
412 const uint8_t *seed, size_t seedlen,
413 enum lc_kyber_type kyber_type);
414
428int lc_kyber_enc(struct lc_kyber_ct *ct, struct lc_kyber_ss *ss,
429 const struct lc_kyber_pk *pk);
430
450int lc_kyber_enc_kdf(struct lc_kyber_ct *ct, uint8_t *ss, size_t ss_len,
451 const struct lc_kyber_pk *pk);
452
468int lc_kyber_dec(struct lc_kyber_ss *ss, const struct lc_kyber_ct *ct,
469 const struct lc_kyber_sk *sk);
470
492int lc_kyber_dec_kdf(uint8_t *ss, size_t ss_len, const struct lc_kyber_ct *ct,
493 const struct lc_kyber_sk *sk);
494
495/************************************* KEX ************************************/
496
543
561 struct lc_kyber_ct *ct_e_i,
562 struct lc_kyber_ss *tk, struct lc_kyber_sk *sk_e,
563 const struct lc_kyber_pk *pk_r);
564
583int lc_kex_uake_responder_ss(struct lc_kyber_ct *ct_e_r, uint8_t *shared_secret,
584 size_t shared_secret_len, const uint8_t *kdf_nonce,
585 size_t kdf_nonce_len,
586 const struct lc_kyber_pk *pk_e_i,
587 const struct lc_kyber_ct *ct_e_i,
588 const struct lc_kyber_sk *sk_r);
589
608int lc_kex_uake_initiator_ss(uint8_t *shared_secret, size_t shared_secret_len,
609 const uint8_t *kdf_nonce, size_t kdf_nonce_len,
610 const struct lc_kyber_ct *ct_e_r,
611 const struct lc_kyber_ss *tk,
612 const struct lc_kyber_sk *sk_e);
613
662
680 struct lc_kyber_ct *ct_e_i,
681 struct lc_kyber_ss *tk, struct lc_kyber_sk *sk_e,
682 const struct lc_kyber_pk *pk_r);
683
706 struct lc_kyber_ct *ct_e_r_2,
707 uint8_t *shared_secret, size_t shared_secret_len,
708 const uint8_t *kdf_nonce, size_t kdf_nonce_len,
709 const struct lc_kyber_pk *pk_e_i,
710 const struct lc_kyber_ct *ct_e_i,
711 const struct lc_kyber_sk *sk_r,
712 const struct lc_kyber_pk *pk_i);
713
734int lc_kex_ake_initiator_ss(uint8_t *shared_secret, size_t shared_secret_len,
735 const uint8_t *kdf_nonce, size_t kdf_nonce_len,
736 const struct lc_kyber_ct *ct_e_r_1,
737 const struct lc_kyber_ct *ct_e_r_2,
738 const struct lc_kyber_ss *tk,
739 const struct lc_kyber_sk *sk_e,
740 const struct lc_kyber_sk *sk_i);
741
742/************************************* IES ************************************/
743
744#ifdef LC_KYBER_IES
745
754
784int lc_kyber_ies_enc(const struct lc_kyber_pk *pk, struct lc_kyber_ct *ct,
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);
788
815int lc_kyber_ies_enc_init(struct lc_aead_ctx *aead,
816 const struct lc_kyber_pk *pk, struct lc_kyber_ct *ct,
817 const uint8_t *aad, size_t aadlen);
818
840int lc_kyber_ies_enc_update(struct lc_aead_ctx *aead, const uint8_t *plaintext,
841 uint8_t *ciphertext, size_t datalen);
842
862int lc_kyber_ies_enc_final(struct lc_aead_ctx *aead, uint8_t *tag,
863 size_t taglen);
864
893int lc_kyber_ies_dec(const struct lc_kyber_sk *sk, const struct lc_kyber_ct *ct,
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);
898
924int lc_kyber_ies_dec_init(struct lc_aead_ctx *aead,
925 const struct lc_kyber_sk *sk,
926 const struct lc_kyber_ct *ct, const uint8_t *aad,
927 size_t aadlen);
928
950int lc_kyber_ies_dec_update(struct lc_aead_ctx *aead, const uint8_t *ciphertext,
951 uint8_t *plaintext, size_t datalen);
952
972int lc_kyber_ies_dec_final(struct lc_aead_ctx *aead, const uint8_t *tag,
973 size_t taglen);
974
975#endif /* LC_KYBER_IES */
976
977/****************************** Kyber X25510 KEM ******************************/
978
979#ifdef LC_KYBER_X25519_KEM
980
994
1000 union {
1001#ifdef LC_KYBER_1024_ENABLED
1002 struct lc_kyber_1024_x25519_sk sk_1024;
1003#endif
1004#ifdef LC_KYBER_768_ENABLED
1005 struct lc_kyber_768_x25519_sk sk_768;
1006#endif
1007#ifdef LC_KYBER_512_ENABLED
1008 struct lc_kyber_512_x25519_sk sk_512;
1009#endif
1011};
1012
1018 union {
1019#ifdef LC_KYBER_1024_ENABLED
1020 struct lc_kyber_1024_x25519_pk pk_1024;
1021#endif
1022#ifdef LC_KYBER_768_ENABLED
1023 struct lc_kyber_768_x25519_pk pk_768;
1024#endif
1025#ifdef LC_KYBER_512_ENABLED
1026 struct lc_kyber_512_x25519_pk pk_512;
1027#endif
1029};
1030
1036 union {
1037#ifdef LC_KYBER_1024_ENABLED
1038 struct lc_kyber_1024_x25519_ct ct_1024;
1039#endif
1040#ifdef LC_KYBER_768_ENABLED
1041 struct lc_kyber_768_x25519_ct ct_768;
1042#endif
1043#ifdef LC_KYBER_512_ENABLED
1044 struct lc_kyber_512_x25519_ct ct_512;
1045#endif
1047};
1048
1054 union {
1055#ifdef LC_KYBER_1024_ENABLED
1056 struct lc_kyber_1024_x25519_ss ss_1024;
1057#endif
1058#ifdef LC_KYBER_768_ENABLED
1059 struct lc_kyber_768_x25519_ss ss_768;
1060#endif
1061#ifdef LC_KYBER_512_ENABLED
1062 struct lc_kyber_512_x25519_ss ss_512;
1063#endif
1065};
1066
1076
1086
1096
1106
1115LC_PURE
1116unsigned int lc_kyber_x25519_sk_size(enum lc_kyber_type kyber_type);
1117
1126LC_PURE
1127unsigned int lc_kyber_x25519_pk_size(enum lc_kyber_type kyber_type);
1128
1137LC_PURE
1138unsigned int lc_kyber_x25519_ct_size(enum lc_kyber_type kyber_type);
1139
1148LC_PURE
1149unsigned int lc_kyber_x25519_ss_size(enum lc_kyber_type kyber_type);
1150
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);
1156
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);
1162
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);
1168
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);
1173
1189int lc_kyber_x25519_sk_ptr(uint8_t **kyber_key, size_t *kyber_key_len,
1190 uint8_t **x25519_key, size_t *x25519_key_len,
1191 struct lc_kyber_x25519_sk *sk);
1192
1208int lc_kyber_x25519_pk_ptr(uint8_t **kyber_key, size_t *kyber_key_len,
1209 uint8_t **x25519_key, size_t *x25519_key_len,
1210 struct lc_kyber_x25519_pk *pk);
1211
1228int lc_kyber_x25519_ct_ptr(uint8_t **kyber_ct, size_t *kyber_ct_len,
1229 uint8_t **x25519_key, size_t *x25519_key_len,
1230 struct lc_kyber_x25519_ct *ct);
1231
1248int lc_kyber_x25519_ss_ptr(uint8_t **kyber_ss, size_t *kyber_ss_len,
1249 uint8_t **x25519_ss, size_t *x25519_ss_len,
1250 struct lc_kyber_x25519_ss *ss);
1251
1265 struct lc_kyber_x25519_sk *sk,
1266 struct lc_rng_ctx *rng_ctx,
1267 enum lc_kyber_type kyber_type);
1268
1294 size_t ss_len, const struct lc_kyber_x25519_pk *pk);
1295
1317int lc_kyber_x25519_dec_kdf(uint8_t *ss, size_t ss_len,
1318 const struct lc_kyber_x25519_ct *ct,
1319 const struct lc_kyber_x25519_sk *sk);
1320
1321/****************************** Kyber X25510 KEX ******************************/
1322
1340 struct lc_kyber_x25519_ct *ct_e_i,
1341 struct lc_kyber_x25519_ss *tk,
1342 struct lc_kyber_x25519_sk *sk_e,
1343 const struct lc_kyber_x25519_pk *pk_r);
1344
1364 uint8_t *shared_secret,
1365 size_t shared_secret_len,
1366 const uint8_t *kdf_nonce,
1367 size_t kdf_nonce_len,
1368 const struct lc_kyber_x25519_pk *pk_e_i,
1369 const struct lc_kyber_x25519_ct *ct_e_i,
1370 const struct lc_kyber_x25519_sk *sk_r);
1371
1390int lc_kex_x25519_uake_initiator_ss(uint8_t *shared_secret,
1391 size_t shared_secret_len,
1392 const uint8_t *kdf_nonce,
1393 size_t kdf_nonce_len,
1394 const struct lc_kyber_x25519_ct *ct_e_r,
1395 const struct lc_kyber_x25519_ss *tk,
1396 const struct lc_kyber_x25519_sk *sk_e);
1397
1415 struct lc_kyber_x25519_ct *ct_e_i,
1416 struct lc_kyber_x25519_ss *tk,
1417 struct lc_kyber_x25519_sk *sk_e,
1418 const struct lc_kyber_x25519_pk *pk_r);
1419
1442 struct lc_kyber_x25519_ct *ct_e_r_2,
1443 uint8_t *shared_secret,
1444 size_t shared_secret_len,
1445 const uint8_t *kdf_nonce,
1446 size_t kdf_nonce_len,
1447 const struct lc_kyber_x25519_pk *pk_e_i,
1448 const struct lc_kyber_x25519_ct *ct_e_i,
1449 const struct lc_kyber_x25519_sk *sk_r,
1450 const struct lc_kyber_x25519_pk *pk_i);
1451
1472int lc_kex_x25519_ake_initiator_ss(uint8_t *shared_secret,
1473 size_t shared_secret_len,
1474 const uint8_t *kdf_nonce,
1475 size_t kdf_nonce_len,
1476 const struct lc_kyber_x25519_ct *ct_e_r_1,
1477 const struct lc_kyber_x25519_ct *ct_e_r_2,
1478 const struct lc_kyber_x25519_ss *tk,
1479 const struct lc_kyber_x25519_sk *sk_e,
1480 const struct lc_kyber_x25519_sk *sk_i);
1481
1482/****************************** Kyber X25519 IES ******************************/
1483
1484#ifdef LC_KYBER_IES
1485
1515int lc_kyber_x25519_ies_enc(const struct lc_kyber_x25519_pk *pk,
1516 struct lc_kyber_x25519_ct *ct,
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);
1521
1548int lc_kyber_x25519_ies_enc_init(struct lc_aead_ctx *aead,
1549 const struct lc_kyber_x25519_pk *pk,
1550 struct lc_kyber_x25519_ct *ct,
1551 const uint8_t *aad, size_t aadlen);
1552
1572int lc_kyber_x25519_ies_enc_update(struct lc_aead_ctx *aead,
1573 const uint8_t *plaintext,
1574 uint8_t *ciphertext, size_t datalen);
1575
1595int lc_kyber_x25519_ies_enc_final(struct lc_aead_ctx *aead, uint8_t *tag,
1596 size_t taglen);
1597
1627int lc_kyber_x25519_ies_dec(const struct lc_kyber_x25519_sk *sk,
1628 const struct lc_kyber_x25519_ct *ct,
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);
1633
1660int lc_kyber_x25519_ies_dec_init(struct lc_aead_ctx *aead,
1661 const struct lc_kyber_x25519_sk *sk,
1662 const struct lc_kyber_x25519_ct *ct,
1663 const uint8_t *aad, size_t aadlen);
1664
1686int lc_kyber_x25519_ies_dec_update(struct lc_aead_ctx *aead,
1687 const uint8_t *ciphertext,
1688 uint8_t *plaintext, size_t datalen);
1689
1709int lc_kyber_x25519_ies_dec_final(struct lc_aead_ctx *aead, const uint8_t *tag,
1710 size_t taglen);
1711
1712#endif /* LC_KYBER_IES */
1713
1714#endif /* LC_KYBER_X25519_KEM */
1715
1716/****************************** Kyber X25510 KEM ******************************/
1717
1718#ifdef LC_KYBER_X448_KEM
1719
1736
1742 union {
1743#ifdef LC_KYBER_1024_ENABLED
1744 struct lc_kyber_1024_x448_sk sk_1024;
1745#endif
1746#ifdef LC_KYBER_768_ENABLED
1747 struct lc_kyber_768_x448_sk sk_768;
1748#endif
1749#ifdef LC_KYBER_512_ENABLED
1750 struct lc_kyber_512_x448_sk sk_512;
1751#endif
1753};
1754
1760 union {
1761#ifdef LC_KYBER_1024_ENABLED
1762 struct lc_kyber_1024_x448_pk pk_1024;
1763#endif
1764#ifdef LC_KYBER_768_ENABLED
1765 struct lc_kyber_768_x448_pk pk_768;
1766#endif
1767#ifdef LC_KYBER_512_ENABLED
1768 struct lc_kyber_512_x448_pk pk_512;
1769#endif
1771};
1772
1778 union {
1779#ifdef LC_KYBER_1024_ENABLED
1780 struct lc_kyber_1024_x448_ct ct_1024;
1781#endif
1782#ifdef LC_KYBER_768_ENABLED
1783 struct lc_kyber_768_x448_ct ct_768;
1784#endif
1785#ifdef LC_KYBER_512_ENABLED
1786 struct lc_kyber_512_x448_ct ct_512;
1787#endif
1789};
1790
1796 union {
1797#ifdef LC_KYBER_1024_ENABLED
1798 struct lc_kyber_1024_x448_ss ss_1024;
1799#endif
1800#ifdef LC_KYBER_768_ENABLED
1801 struct lc_kyber_768_x448_ss ss_768;
1802#endif
1803#ifdef LC_KYBER_512_ENABLED
1804 struct lc_kyber_512_x448_ss ss_512;
1805#endif
1807};
1808
1818
1828
1838
1848
1857LC_PURE
1858unsigned int lc_kyber_x448_sk_size(enum lc_kyber_type kyber_type);
1859
1868LC_PURE
1869unsigned int lc_kyber_x448_pk_size(enum lc_kyber_type kyber_type);
1870
1879LC_PURE
1880unsigned int lc_kyber_x448_ct_size(enum lc_kyber_type kyber_type);
1881
1890LC_PURE
1891unsigned int lc_kyber_x448_ss_size(enum lc_kyber_type kyber_type);
1892
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);
1897
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);
1902
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);
1907
1909 const uint8_t *kyber_src_ss, size_t kyber_src_ss_len,
1910 const uint8_t *x448_ss, size_t x448_ss_len);
1911
1927int lc_kyber_x448_sk_ptr(uint8_t **kyber_key, size_t *kyber_key_len,
1928 uint8_t **x448_key, size_t *x448_key_len,
1929 struct lc_kyber_x448_sk *sk);
1930
1946int lc_kyber_x448_pk_ptr(uint8_t **kyber_key, size_t *kyber_key_len,
1947 uint8_t **x448_key, size_t *x448_key_len,
1948 struct lc_kyber_x448_pk *pk);
1949
1966int lc_kyber_x448_ct_ptr(uint8_t **kyber_ct, size_t *kyber_ct_len,
1967 uint8_t **x448_key, size_t *x448_key_len,
1968 struct lc_kyber_x448_ct *ct);
1969
1986int lc_kyber_x448_ss_ptr(uint8_t **kyber_ss, size_t *kyber_ss_len,
1987 uint8_t **x448_ss, size_t *x448_ss_len,
1988 struct lc_kyber_x448_ss *ss);
1989
2003 struct lc_kyber_x448_sk *sk,
2004 struct lc_rng_ctx *rng_ctx,
2005 enum lc_kyber_type kyber_type);
2006
2032 size_t ss_len, const struct lc_kyber_x448_pk *pk);
2033
2055int lc_kyber_x448_dec_kdf(uint8_t *ss, size_t ss_len,
2056 const struct lc_kyber_x448_ct *ct,
2057 const struct lc_kyber_x448_sk *sk);
2058
2059/****************************** Kyber X25510 KEX ******************************/
2060
2078 struct lc_kyber_x448_ct *ct_e_i,
2079 struct lc_kyber_x448_ss *tk,
2080 struct lc_kyber_x448_sk *sk_e,
2081 const struct lc_kyber_x448_pk *pk_r);
2082
2102 uint8_t *shared_secret,
2103 size_t shared_secret_len,
2104 const uint8_t *kdf_nonce,
2105 size_t kdf_nonce_len,
2106 const struct lc_kyber_x448_pk *pk_e_i,
2107 const struct lc_kyber_x448_ct *ct_e_i,
2108 const struct lc_kyber_x448_sk *sk_r);
2109
2128int lc_kex_x448_uake_initiator_ss(uint8_t *shared_secret,
2129 size_t shared_secret_len,
2130 const uint8_t *kdf_nonce,
2131 size_t kdf_nonce_len,
2132 const struct lc_kyber_x448_ct *ct_e_r,
2133 const struct lc_kyber_x448_ss *tk,
2134 const struct lc_kyber_x448_sk *sk_e);
2135
2153 struct lc_kyber_x448_ct *ct_e_i,
2154 struct lc_kyber_x448_ss *tk,
2155 struct lc_kyber_x448_sk *sk_e,
2156 const struct lc_kyber_x448_pk *pk_r);
2157
2180 struct lc_kyber_x448_ct *ct_e_r_2,
2181 uint8_t *shared_secret,
2182 size_t shared_secret_len,
2183 const uint8_t *kdf_nonce, size_t kdf_nonce_len,
2184 const struct lc_kyber_x448_pk *pk_e_i,
2185 const struct lc_kyber_x448_ct *ct_e_i,
2186 const struct lc_kyber_x448_sk *sk_r,
2187 const struct lc_kyber_x448_pk *pk_i);
2188
2209int lc_kex_x448_ake_initiator_ss(uint8_t *shared_secret,
2210 size_t shared_secret_len,
2211 const uint8_t *kdf_nonce, size_t kdf_nonce_len,
2212 const struct lc_kyber_x448_ct *ct_e_r_1,
2213 const struct lc_kyber_x448_ct *ct_e_r_2,
2214 const struct lc_kyber_x448_ss *tk,
2215 const struct lc_kyber_x448_sk *sk_e,
2216 const struct lc_kyber_x448_sk *sk_i);
2217
2218/****************************** Kyber X448 IES ******************************/
2219
2220#ifdef LC_KYBER_IES
2221
2251int lc_kyber_x448_ies_enc(const struct lc_kyber_x448_pk *pk,
2252 struct lc_kyber_x448_ct *ct, const uint8_t *plaintext,
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);
2256
2283int lc_kyber_x448_ies_enc_init(struct lc_aead_ctx *aead,
2284 const struct lc_kyber_x448_pk *pk,
2285 struct lc_kyber_x448_ct *ct, const uint8_t *aad,
2286 size_t aadlen);
2287
2307int lc_kyber_x448_ies_enc_update(struct lc_aead_ctx *aead,
2308 const uint8_t *plaintext, uint8_t *ciphertext,
2309 size_t datalen);
2310
2330int lc_kyber_x448_ies_enc_final(struct lc_aead_ctx *aead, uint8_t *tag,
2331 size_t taglen);
2332
2362int lc_kyber_x448_ies_dec(const struct lc_kyber_x448_sk *sk,
2363 const struct lc_kyber_x448_ct *ct,
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);
2368
2395int lc_kyber_x448_ies_dec_init(struct lc_aead_ctx *aead,
2396 const struct lc_kyber_x448_sk *sk,
2397 const struct lc_kyber_x448_ct *ct,
2398 const uint8_t *aad, size_t aadlen);
2399
2421int lc_kyber_x448_ies_dec_update(struct lc_aead_ctx *aead,
2422 const uint8_t *ciphertext, uint8_t *plaintext,
2423 size_t datalen);
2424
2444int lc_kyber_x448_ies_dec_final(struct lc_aead_ctx *aead, const uint8_t *tag,
2445 size_t taglen);
2446
2447#endif /* LC_KYBER_IES */
2448
2449#endif /* LC_KYBER_X448_KEM */
2450
2451#ifdef __cplusplus
2452}
2453#endif
2454
2455#endif /* LC_KYBER_H */
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
Definition lc_kyber.h:121
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
Definition lc_kyber.h:103
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
Definition lc_kyber.h:1777
enum lc_kyber_type kyber_type
Definition lc_kyber.h:1053
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
Definition lc_kyber.h:1035
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
Definition lc_kyber.h:1741
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
Definition lc_kyber.h:85
union lc_kyber_pk::@122262157340111343110040111157325004342333062314 key
enum lc_kyber_type kyber_type
Definition lc_kyber.h:1759
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
Definition lc_kyber.h:1017
union lc_kyber_x25519_ss::@057214222310375250355100172100062151157306203227 key
union lc_kyber_sk::@043217160375300164167310073010046332264010340051 key
enum lc_kyber_type kyber_type
Definition lc_kyber.h:139
enum lc_kyber_type kyber_type
Definition lc_kyber.h:999
lc_kyber_type
Definition lc_kyber.h:46
@ LC_KYBER_1024
Definition lc_kyber.h:48
@ LC_KYBER_768
Definition lc_kyber.h:49
@ LC_KYBER_UNKNOWN
Definition lc_kyber.h:47
@ LC_KYBER_512
Definition lc_kyber.h:50
enum lc_kyber_type kyber_type
Definition lc_kyber.h:1795
Kyber ciphertext.
Definition lc_kyber.h:120
Kyber public key.
Definition lc_kyber.h:102
Kyber secret key.
Definition lc_kyber.h:84
Kyber shared secret.
Definition lc_kyber.h:138
Kyber ciphertext.
Definition lc_kyber.h:1034
Kyber public key.
Definition lc_kyber.h:1016
Kyber secret key.
Definition lc_kyber.h:998
Kyber shared secret.
Definition lc_kyber.h:1052
Kyber ciphertext.
Definition lc_kyber.h:1776
Kyber public key.
Definition lc_kyber.h:1758
Kyber secret key.
Definition lc_kyber.h:1740
Kyber shared secret.
Definition lc_kyber.h:1794
Kyber ciphertext.
Kyber public key.
Kyber secret key.
Kyber shared secret.
Kyber ciphertext.
Kyber public key.
Kyber secret key.
Kyber shared secret.
Kyber ciphertext.
Kyber public key.
Kyber secret key.
Kyber shared secret.
struct lc_kyber_512_ss ss
struct lc_kyber_512_ss ss
uint8_t ss[LC_KYBER_SSBYTES]
Kyber ciphertext.
Kyber public key.
Kyber secret key.
Kyber shared secret.
Kyber ciphertext.
Kyber public key.
Kyber secret key.
Kyber shared secret.
Kyber ciphertext.
Kyber public key.
Kyber secret key.
Kyber shared secret.
Kyber ciphertext.
Kyber public key.
Kyber secret key.
Kyber shared secret.
Kyber ciphertext.
Kyber public key.
Kyber secret key.
Kyber shared secret.
Kyber ciphertext.
Kyber public key.
Kyber secret key.
Kyber shared secret.