31#include "ext_headers.h"
33#if defined __has_include
34#if __has_include("lc_dilithium_87.h")
36#define LC_DILITHIUM_87_ENABLED
38#if __has_include("lc_dilithium_65.h")
40#define LC_DILITHIUM_65_ENABLED
42#if __has_include("lc_dilithium_44.h")
44#define LC_DILITHIUM_44_ENABLED
47#error "Compiler misses __has_include"
102#ifdef LC_DILITHIUM_87_ENABLED
105#ifdef LC_DILITHIUM_65_ENABLED
108#ifdef LC_DILITHIUM_44_ENABLED
120#ifdef LC_DILITHIUM_87_ENABLED
123#ifdef LC_DILITHIUM_65_ENABLED
126#ifdef LC_DILITHIUM_44_ENABLED
138#ifdef LC_DILITHIUM_87_ENABLED
141#ifdef LC_DILITHIUM_65_ENABLED
144#ifdef LC_DILITHIUM_44_ENABLED
163#ifdef LC_DILITHIUM_87_ENABLED
165#elif defined(LC_DILITHIUM_65_ENABLED)
167#elif defined(LC_DILITHIUM_44_ENABLED)
185#ifdef LC_DILITHIUM_87_ENABLED
187#elif defined(LC_DILITHIUM_65_ENABLED)
189#elif defined(LC_DILITHIUM_44_ENABLED)
205#ifdef LC_DILITHIUM_87_ENABLED
207#elif defined(LC_DILITHIUM_65_ENABLED)
209#elif defined(LC_DILITHIUM_44_ENABLED)
259 return sig->dilithium_type;
271static inline unsigned int
274 switch (dilithium_type) {
276#ifdef LC_DILITHIUM_87_ENABLED
282#ifdef LC_DILITHIUM_65_ENABLED
288#ifdef LC_DILITHIUM_44_ENABLED
308static inline unsigned int
311 switch (dilithium_type) {
313#ifdef LC_DILITHIUM_87_ENABLED
319#ifdef LC_DILITHIUM_65_ENABLED
325#ifdef LC_DILITHIUM_44_ENABLED
345static inline unsigned int
348 switch (dilithium_type) {
350#ifdef LC_DILITHIUM_87_ENABLED
356#ifdef LC_DILITHIUM_65_ENABLED
362#ifdef LC_DILITHIUM_44_ENABLED
385 const uint8_t *src_key,
388 if (!sk || !src_key || src_key_len == 0) {
390#ifdef LC_DILITHIUM_87_ENABLED
394 memcpy(_sk->
sk, src_key, src_key_len);
398#ifdef LC_DILITHIUM_65_ENABLED
402 memcpy(_sk->
sk, src_key, src_key_len);
406#ifdef LC_DILITHIUM_44_ENABLED
410 memcpy(_sk->
sk, src_key, src_key_len);
431 const uint8_t *src_key,
434 if (!pk || !src_key || src_key_len == 0) {
436#ifdef LC_DILITHIUM_87_ENABLED
440 memcpy(_pk->
pk, src_key, src_key_len);
444#ifdef LC_DILITHIUM_65_ENABLED
448 memcpy(_pk->
pk, src_key, src_key_len);
452#ifdef LC_DILITHIUM_44_ENABLED
456 memcpy(_pk->
pk, src_key, src_key_len);
477 const uint8_t *src_sig,
480 if (!sig || !src_sig || src_sig_len == 0) {
482#ifdef LC_DILITHIUM_87_ENABLED
486 memcpy(_sig->
sig, src_sig, src_sig_len);
490#ifdef LC_DILITHIUM_65_ENABLED
494 memcpy(_sig->
sig, src_sig, src_sig_len);
498#ifdef LC_DILITHIUM_44_ENABLED
502 memcpy(_sig->
sig, src_sig, src_sig_len);
525 size_t *dilithium_key_len,
528 if (!sk || !dilithium_key || !dilithium_key_len) {
530#ifdef LC_DILITHIUM_87_ENABLED
534 *dilithium_key = _sk->
sk;
538#ifdef LC_DILITHIUM_65_ENABLED
542 *dilithium_key = _sk->
sk;
546#ifdef LC_DILITHIUM_44_ENABLED
550 *dilithium_key = _sk->
sk;
573 size_t *dilithium_key_len,
576 if (!pk || !dilithium_key || !dilithium_key_len) {
578#ifdef LC_DILITHIUM_87_ENABLED
582 *dilithium_key = _pk->
pk;
586#ifdef LC_DILITHIUM_65_ENABLED
590 *dilithium_key = _pk->
pk;
594#ifdef LC_DILITHIUM_44_ENABLED
598 *dilithium_key = _pk->
pk;
622 size_t *dilithium_sig_len,
625 if (!sig || !dilithium_sig || !dilithium_sig_len) {
627#ifdef LC_DILITHIUM_87_ENABLED
631 *dilithium_sig = _sig->
sig;
635#ifdef LC_DILITHIUM_65_ENABLED
639 *dilithium_sig = _sig->
sig;
643#ifdef LC_DILITHIUM_44_ENABLED
647 *dilithium_sig = _sig->
sig;
669 struct lc_rng_ctx *rng_ctx,
675 switch (dilithium_type) {
677#ifdef LC_DILITHIUM_87_ENABLED
686#ifdef LC_DILITHIUM_65_ENABLED
695#ifdef LC_DILITHIUM_44_ENABLED
739 switch (dilithium_type) {
741#ifdef LC_DILITHIUM_87_ENABLED
745 &pk->
key.pk_87, &sk->
key.sk_87, seed, seedlen);
750#ifdef LC_DILITHIUM_65_ENABLED
754 &pk->
key.pk_65, &sk->
key.sk_65, seed, seedlen);
759#ifdef LC_DILITHIUM_44_ENABLED
763 &pk->
key.pk_44, &sk->
key.sk_44, seed, seedlen);
788 const uint8_t *m,
size_t mlen,
790 struct lc_rng_ctx *rng_ctx)
797#ifdef LC_DILITHIUM_87_ENABLED
800 &sk->
key.sk_87, rng_ctx);
805#ifdef LC_DILITHIUM_65_ENABLED
808 &sk->
key.sk_65, rng_ctx);
813#ifdef LC_DILITHIUM_44_ENABLED
816 &sk->
key.sk_44, rng_ctx);
854#ifdef LC_DILITHIUM_87_ENABLED
860#ifdef LC_DILITHIUM_65_ENABLED
866#ifdef LC_DILITHIUM_44_ENABLED
893 const uint8_t *m,
size_t mlen)
895#ifdef LC_DILITHIUM_87_ENABLED
897#elif defined(LC_DILITHIUM_65_ENABLED)
899#elif defined(LC_DILITHIUM_44_ENABLED)
924 struct lc_rng_ctx *rng_ctx)
931#ifdef LC_DILITHIUM_87_ENABLED
934 &sk->
key.sk_87, rng_ctx);
939#ifdef LC_DILITHIUM_65_ENABLED
942 &sk->
key.sk_65, rng_ctx);
947#ifdef LC_DILITHIUM_44_ENABLED
950 &sk->
key.sk_44, rng_ctx);
973 const uint8_t *m,
size_t mlen,
981#ifdef LC_DILITHIUM_87_ENABLED
988#ifdef LC_DILITHIUM_65_ENABLED
995#ifdef LC_DILITHIUM_44_ENABLED
1036#ifdef LC_DILITHIUM_87_ENABLED
1042#ifdef LC_DILITHIUM_65_ENABLED
1048#ifdef LC_DILITHIUM_44_ENABLED
1076 const uint8_t *m,
size_t mlen)
1078#ifdef LC_DILITHIUM_87_ENABLED
1080#elif defined(LC_DILITHIUM_65_ENABLED)
1082#elif defined(LC_DILITHIUM_44_ENABLED)
1111#ifdef LC_DILITHIUM_87_ENABLED
1118#ifdef LC_DILITHIUM_65_ENABLED
1125#ifdef LC_DILITHIUM_44_ENABLED
1139#ifdef LC_DILITHIUM_ED25519_SIG
1165#ifdef LC_DILITHIUM_87_ENABLED
1168#ifdef LC_DILITHIUM_65_ENABLED
1171#ifdef LC_DILITHIUM_44_ENABLED
1183#ifdef LC_DILITHIUM_87_ENABLED
1186#ifdef LC_DILITHIUM_65_ENABLED
1189#ifdef LC_DILITHIUM_44_ENABLED
1201#ifdef LC_DILITHIUM_87_ENABLED
1204#ifdef LC_DILITHIUM_65_ENABLED
1207#ifdef LC_DILITHIUM_44_ENABLED
1227#ifdef LC_DILITHIUM_87_ENABLED
1229#elif defined(LC_DILITHIUM_65_ENABLED)
1231#elif defined(LC_DILITHIUM_44_ENABLED)
1250#ifdef LC_DILITHIUM_87_ENABLED
1252#elif defined(LC_DILITHIUM_65_ENABLED)
1254#elif defined(LC_DILITHIUM_44_ENABLED)
1271#ifdef LC_DILITHIUM_87_ENABLED
1273#elif defined(LC_DILITHIUM_65_ENABLED)
1275#elif defined(LC_DILITHIUM_44_ENABLED)
1325 return sig->dilithium_type;
1337static inline unsigned int
1340 switch (dilithium_type) {
1342#ifdef LC_DILITHIUM_87_ENABLED
1349#ifdef LC_DILITHIUM_65_ENABLED
1356#ifdef LC_DILITHIUM_44_ENABLED
1377static inline unsigned int
1380 switch (dilithium_type) {
1382#ifdef LC_DILITHIUM_87_ENABLED
1389#ifdef LC_DILITHIUM_65_ENABLED
1396#ifdef LC_DILITHIUM_44_ENABLED
1417static inline unsigned int
1420 switch (dilithium_type) {
1422#ifdef LC_DILITHIUM_87_ENABLED
1429#ifdef LC_DILITHIUM_65_ENABLED
1436#ifdef LC_DILITHIUM_44_ENABLED
1466 size_t dilithium_src_key_len,
const uint8_t *ed25519_src_key,
1467 size_t ed25519_src_key_len)
1469 if (!sk || !dilithium_src_key || !ed25519_src_key ||
1470 ed25519_src_key_len != LC_ED25519_SECRETKEYBYTES) {
1472#ifdef LC_DILITHIUM_87_ENABLED
1473 }
else if (dilithium_src_key_len ==
1477 memcpy(_sk->
sk.
sk, dilithium_src_key, dilithium_src_key_len);
1479 ed25519_src_key_len);
1483#ifdef LC_DILITHIUM_65_ENABLED
1484 }
else if (dilithium_src_key_len ==
1488 memcpy(_sk->
sk.
sk, dilithium_src_key, dilithium_src_key_len);
1490 ed25519_src_key_len);
1494#ifdef LC_DILITHIUM_44_ENABLED
1495 }
else if (dilithium_src_key_len ==
1499 memcpy(_sk->
sk.
sk, dilithium_src_key, dilithium_src_key_len);
1501 ed25519_src_key_len);
1528 size_t dilithium_src_key_len,
const uint8_t *ed25519_src_key,
1529 size_t ed25519_src_key_len)
1531 if (!pk || !dilithium_src_key || !ed25519_src_key ||
1532 ed25519_src_key_len != LC_ED25519_PUBLICKEYBYTES) {
1534#ifdef LC_DILITHIUM_87_ENABLED
1535 }
else if (dilithium_src_key_len ==
1539 memcpy(_pk->
pk.
pk, dilithium_src_key, dilithium_src_key_len);
1541 ed25519_src_key_len);
1545#ifdef LC_DILITHIUM_65_ENABLED
1546 }
else if (dilithium_src_key_len ==
1550 memcpy(_pk->
pk.
pk, dilithium_src_key, dilithium_src_key_len);
1552 ed25519_src_key_len);
1556#ifdef LC_DILITHIUM_44_ENABLED
1557 }
else if (dilithium_src_key_len ==
1561 memcpy(_pk->
pk.
pk, dilithium_src_key, dilithium_src_key_len);
1563 ed25519_src_key_len);
1591 size_t dilithium_src_sig_len,
const uint8_t *ed25519_src_sig,
1592 size_t ed25519_src_sig_len)
1594 if (!sig || !dilithium_src_sig || !ed25519_src_sig ||
1595 ed25519_src_sig_len != LC_ED25519_SIGBYTES) {
1597#ifdef LC_DILITHIUM_87_ENABLED
1598 }
else if (dilithium_src_sig_len ==
1602 memcpy(_sig->
sig.
sig, dilithium_src_sig, dilithium_src_sig_len);
1604 ed25519_src_sig_len);
1608#ifdef LC_DILITHIUM_65_ENABLED
1609 }
else if (dilithium_src_sig_len ==
1613 memcpy(_sig->
sig.
sig, dilithium_src_sig, dilithium_src_sig_len);
1615 ed25519_src_sig_len);
1619#ifdef LC_DILITHIUM_44_ENABLED
1620 }
else if (dilithium_src_sig_len ==
1624 memcpy(_sig->
sig.
sig, dilithium_src_sig, dilithium_src_sig_len);
1626 ed25519_src_sig_len);
1652 uint8_t **ed25519_key,
size_t *ed25519_key_len,
1655 if (!sk || !dilithium_key || !dilithium_key_len || !ed25519_key ||
1658#ifdef LC_DILITHIUM_87_ENABLED
1662 *dilithium_key = _sk->
sk.
sk;
1665 *ed25519_key_len = LC_ED25519_SECRETKEYBYTES;
1668#ifdef LC_DILITHIUM_65_ENABLED
1672 *dilithium_key = _sk->
sk.
sk;
1675 *ed25519_key_len = LC_ED25519_SECRETKEYBYTES;
1678#ifdef LC_DILITHIUM_44_ENABLED
1682 *dilithium_key = _sk->
sk.
sk;
1685 *ed25519_key_len = LC_ED25519_SECRETKEYBYTES;
1710 uint8_t **ed25519_key,
size_t *ed25519_key_len,
1713 if (!pk || !dilithium_key || !dilithium_key_len || !ed25519_key ||
1716#ifdef LC_DILITHIUM_87_ENABLED
1720 *dilithium_key = _pk->
pk.
pk;
1723 *ed25519_key_len = LC_ED25519_PUBLICKEYBYTES;
1726#ifdef LC_DILITHIUM_65_ENABLED
1730 *dilithium_key = _pk->
pk.
pk;
1733 *ed25519_key_len = LC_ED25519_PUBLICKEYBYTES;
1736#ifdef LC_DILITHIUM_44_ENABLED
1740 *dilithium_key = _pk->
pk.
pk;
1743 *ed25519_key_len = LC_ED25519_PUBLICKEYBYTES;
1769 uint8_t **ed25519_sig,
size_t *ed25519_sig_len,
1772 if (!sig || !dilithium_sig || !dilithium_sig_len || !ed25519_sig ||
1775#ifdef LC_DILITHIUM_87_ENABLED
1779 *dilithium_sig = _sig->
sig.
sig;
1782 *ed25519_sig_len = LC_ED25519_SIGBYTES;
1785#ifdef LC_DILITHIUM_65_ENABLED
1789 *dilithium_sig = _sig->
sig.
sig;
1792 *ed25519_sig_len = LC_ED25519_SIGBYTES;
1795#ifdef LC_DILITHIUM_44_ENABLED
1799 *dilithium_sig = _sig->
sig.
sig;
1802 *ed25519_sig_len = LC_ED25519_SIGBYTES;
1828 switch (dilithium_type) {
1830#ifdef LC_DILITHIUM_87_ENABLED
1834 &sk->
key.sk_87, rng_ctx);
1839#ifdef LC_DILITHIUM_65_ENABLED
1843 &sk->
key.sk_65, rng_ctx);
1848#ifdef LC_DILITHIUM_44_ENABLED
1852 &sk->
key.sk_44, rng_ctx);
1885#ifdef LC_DILITHIUM_87_ENABLED
1888 &sk->
key.sk_87, rng_ctx);
1893#ifdef LC_DILITHIUM_65_ENABLED
1896 &sk->
key.sk_65, rng_ctx);
1901#ifdef LC_DILITHIUM_44_ENABLED
1904 &sk->
key.sk_44, rng_ctx);
1932#ifdef LC_DILITHIUM_87_ENABLED
1938#ifdef LC_DILITHIUM_65_ENABLED
1944#ifdef LC_DILITHIUM_44_ENABLED
1971#ifdef LC_DILITHIUM_87_ENABLED
1973#elif defined(LC_DILITHIUM_65_ENABLED)
1975#elif defined(LC_DILITHIUM_44_ENABLED)
2000 if (!sk || !
sig || !ctx)
2005#ifdef LC_DILITHIUM_87_ENABLED
2014#ifdef LC_DILITHIUM_65_ENABLED
2023#ifdef LC_DILITHIUM_44_ENABLED
2051 const uint8_t *m,
size_t mlen,
2059#ifdef LC_DILITHIUM_87_ENABLED
2066#ifdef LC_DILITHIUM_65_ENABLED
2073#ifdef LC_DILITHIUM_44_ENABLED
2103#ifdef LC_DILITHIUM_87_ENABLED
2109#ifdef LC_DILITHIUM_65_ENABLED
2115#ifdef LC_DILITHIUM_44_ENABLED
2142#ifdef LC_DILITHIUM_87_ENABLED
2144#elif defined(LC_DILITHIUM_65_ENABLED)
2146#elif defined(LC_DILITHIUM_44_ENABLED)
2174#ifdef LC_DILITHIUM_87_ENABLED
2182#ifdef LC_DILITHIUM_65_ENABLED
2190#ifdef LC_DILITHIUM_44_ENABLED
static int lc_dilithium_sk_ptr(uint8_t **dilithium_key, size_t *dilithium_key_len, struct lc_dilithium_sk *sk)
Obtain the reference to the Dilithium key and its length.
static int lc_dilithium_sign_init(struct lc_dilithium_ctx *ctx, const struct lc_dilithium_sk *sk)
Initializes a signature operation.
static LC_PURE unsigned int lc_dilithium_pk_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium public key.
static LC_PURE unsigned int lc_dilithium_sk_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium secret key.
static LC_PURE unsigned int lc_dilithium_sig_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium signature.
static int lc_dilithium_pk_ptr(uint8_t **dilithium_key, size_t *dilithium_key_len, struct lc_dilithium_pk *pk)
Obtain the reference to the Dilithium key and its length.
static int lc_dilithium_verify_init(struct lc_dilithium_ctx *ctx, const struct lc_dilithium_pk *pk)
Initializes a signature verification operation.
static int lc_dilithium_sign_update(struct lc_dilithium_ctx *ctx, const uint8_t *m, size_t mlen)
Add more data to an already initialized signature state.
static enum lc_dilithium_type lc_dilithium_sig_type(const struct lc_dilithium_sig *sig)
Obtain Dilithium type from signature.
static int lc_dilithium_pk_load(struct lc_dilithium_pk *pk, const uint8_t *src_key, size_t src_key_len)
Load a Dilithium public key provided with a buffer into the leancrypto data structure.
static void lc_dilithium_ctx_zero(struct lc_dilithium_ctx *ctx)
Zeroizes Dilithium context either on heap or on stack.
static int lc_dilithium_verify_final(const struct lc_dilithium_sig *sig, struct lc_dilithium_ctx *ctx, const struct lc_dilithium_pk *pk)
Verifies signature.
static int lc_dilithium_ctx_alloc(struct lc_dilithium_ctx **ctx)
Allocates Dilithium context on heap.
static enum lc_dilithium_type lc_dilithium_pk_type(const struct lc_dilithium_pk *pk)
Obtain Dilithium type from public key.
static int lc_dilithium_verify(const struct lc_dilithium_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_pk *pk)
Verifies signature in one shot.
static int lc_dilithium_keypair(struct lc_dilithium_pk *pk, struct lc_dilithium_sk *sk, struct lc_rng_ctx *rng_ctx, enum lc_dilithium_type dilithium_type)
Generates Dilithium public and private key.
static int lc_dilithium_sk_load(struct lc_dilithium_sk *sk, const uint8_t *src_key, size_t src_key_len)
Load a Dilithium secret key provided with a buffer into the leancrypto data structure.
static int lc_dilithium_verify_update(struct lc_dilithium_ctx *ctx, const uint8_t *m, size_t mlen)
Add more data to an already initialized signature state.
static void lc_dilithium_ctx_zero_free(struct lc_dilithium_ctx *ctx)
Zeroizes and frees Dilithium context on heap.
static enum lc_dilithium_type lc_dilithium_sk_type(const struct lc_dilithium_sk *sk)
Obtain Dilithium type from secret key.
static int lc_dilithium_keypair_from_seed(struct lc_dilithium_pk *pk, struct lc_dilithium_sk *sk, const uint8_t *seed, size_t seedlen, enum lc_dilithium_type dilithium_type)
Generates Dilithium public and private key from a given seed.
static int lc_dilithium_sign_final(struct lc_dilithium_sig *sig, struct lc_dilithium_ctx *ctx, const struct lc_dilithium_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature.
static int lc_dilithium_sig_ptr(uint8_t **dilithium_sig, size_t *dilithium_sig_len, struct lc_dilithium_sig *sig)
Obtain the reference to the Dilithium signature and its length.
static int lc_dilithium_sign(struct lc_dilithium_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature in one shot.
static int lc_dilithium_sig_load(struct lc_dilithium_sig *sig, const uint8_t *src_sig, size_t src_sig_len)
Load a Dilithium signature provided with a buffer into the leancrypto data structure.
static int lc_dilithium_ed25519_sk_ptr(uint8_t **dilithium_key, size_t *dilithium_key_len, uint8_t **ed25519_key, size_t *ed25519_key_len, struct lc_dilithium_ed25519_sk *sk)
Obtain the reference to the Dilithium key and its length.
static int lc_dilithium_ed25519_sign_final(struct lc_dilithium_ed25519_sig *sig, struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_ed25519_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature in stream mode.
static LC_PURE unsigned int lc_dilithium_ed25519_sk_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium secret key.
static int lc_dilithium_ed25519_ctx_alloc(struct lc_dilithium_ed25519_ctx **ctx)
Allocates Dilithium-ED25519 context on heap.
static LC_PURE unsigned int lc_dilithium_ed25519_pk_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium public key.
static int lc_dilithium_ed25519_sig_ptr(uint8_t **dilithium_sig, size_t *dilithium_sig_len, uint8_t **ed25519_sig, size_t *ed25519_sig_len, struct lc_dilithium_ed25519_sig *sig)
Obtain the reference to the Dilithium signature and its length.
static int lc_dilithium_ed25519_pk_load(struct lc_dilithium_ed25519_pk *pk, const uint8_t *dilithium_src_key, size_t dilithium_src_key_len, const uint8_t *ed25519_src_key, size_t ed25519_src_key_len)
Load a Dilithium public key provided with a buffer into the leancrypto data structure.
static enum lc_dilithium_type lc_dilithium_ed25519_sig_type(const struct lc_dilithium_ed25519_sig *sig)
Obtain Dilithium type from signature.
static int lc_dilithium_ed25519_keypair(struct lc_dilithium_ed25519_pk *pk, struct lc_dilithium_ed25519_sk *sk, struct lc_rng_ctx *rng_ctx, enum lc_dilithium_type dilithium_type)
Generates Dilithium public and private key.
static int lc_dilithium_ed25519_pk_ptr(uint8_t **dilithium_key, size_t *dilithium_key_len, uint8_t **ed25519_key, size_t *ed25519_key_len, struct lc_dilithium_ed25519_pk *pk)
Obtain the reference to the Dilithium key and its length.
static LC_PURE unsigned int lc_dilithium_ed25519_sig_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium signature.
static int lc_dilithium_ed25519_verify(const struct lc_dilithium_ed25519_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_ed25519_pk *pk)
Verifies signature in one shot.
static int lc_dilithium_ed25519_sig_load(struct lc_dilithium_ed25519_sig *sig, const uint8_t *dilithium_src_sig, size_t dilithium_src_sig_len, const uint8_t *ed25519_src_sig, size_t ed25519_src_sig_len)
Load a Dilithium signature provided with a buffer into the leancrypto data structure.
static enum lc_dilithium_type lc_dilithium_ed25519_sk_type(const struct lc_dilithium_ed25519_sk *sk)
Obtain Dilithium type from secret key.
static int lc_dilithium_ed25519_sign_init(struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_ed25519_sk *sk)
Initializes signature operation in stream mode.
static void lc_dilithium_ed25519_ctx_zero(struct lc_dilithium_ed25519_ctx *ctx)
Zeroizes Dilithium-ED25519 context either on heap or on stack.
static void lc_dilithium_ed25519_ctx_zero_free(struct lc_dilithium_ed25519_ctx *ctx)
Zeroizes and frees Dilithium-ED25519 context on heap.
static int lc_dilithium_ed25519_sign(struct lc_dilithium_ed25519_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_ed25519_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature in one shot.
static int lc_dilithium_ed25519_verify_final(const struct lc_dilithium_ed25519_sig *sig, struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_ed25519_pk *pk)
Verifies signature in stream mode.
static enum lc_dilithium_type lc_dilithium_ed25519_pk_type(const struct lc_dilithium_ed25519_pk *pk)
Obtain Dilithium type from public key.
static int lc_dilithium_ed25519_sign_update(struct lc_dilithium_ed25519_ctx *ctx, const uint8_t *m, size_t mlen)
Updates signature in stream mode.
static int lc_dilithium_ed25519_verify_update(struct lc_dilithium_ed25519_ctx *ctx, const uint8_t *m, size_t mlen)
Updates signature verification in stream mode.
static int lc_dilithium_ed25519_sk_load(struct lc_dilithium_ed25519_sk *sk, const uint8_t *dilithium_src_key, size_t dilithium_src_key_len, const uint8_t *ed25519_src_key, size_t ed25519_src_key_len)
Load a Dilithium secret key provided with a buffer into the leancrypto data structure.
static int lc_dilithium_ed25519_verify_init(struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_ed25519_pk *pk)
Initializes signature verification operation in stream mode.
enum lc_dilithium_type dilithium_type
union lc_dilithium_sig::@10 sig
union lc_dilithium_ed25519_pk::@12 key
enum lc_dilithium_type dilithium_type
enum lc_dilithium_type dilithium_type
enum lc_dilithium_type dilithium_type
enum lc_dilithium_type dilithium_type
union lc_dilithium_ed25519_sk::@11 key
union lc_dilithium_pk::@9 key
enum lc_dilithium_type dilithium_type
union lc_dilithium_sk::@8 key
union lc_dilithium_ed25519_sig::@13 sig
struct lc_ed25519_pk pk_ed25519
int lc_dilithium_44_ed25519_sign_update(struct lc_dilithium_ed25519_ctx *ctx, const uint8_t *m, size_t mlen)
int lc_dilithium_44_verify(const struct lc_dilithium_44_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_44_pk *pk)
Verifies signature in one shot.
struct lc_dilithium_44_sig sig
void lc_dilithium_44_ed25519_ctx_zero_free(struct lc_dilithium_ed25519_ctx *ctx)
Zeroize and free Dilithium-ED25519 stream context.
int lc_dilithium_44_keypair_from_seed(struct lc_dilithium_44_pk *pk, struct lc_dilithium_44_sk *sk, const uint8_t *seed, size_t seedlen)
Generates Dilithium public and private key from a given seed.
int lc_dilithium_44_keypair(struct lc_dilithium_44_pk *pk, struct lc_dilithium_44_sk *sk, struct lc_rng_ctx *rng_ctx)
Generates Dilithium public and private key.
int lc_dilithium_44_ed25519_sign_final(struct lc_dilithium_44_ed25519_sig *sig, struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_44_ed25519_sk *sk, struct lc_rng_ctx *rng_ctx)
int lc_dilithium_44_ctx_alloc(struct lc_dilithium_ctx **ctx)
Allocate Dilithium stream context on heap.
int lc_dilithium_44_sign_final(struct lc_dilithium_44_sig *sig, struct lc_dilithium_ctx *ctx, const struct lc_dilithium_44_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature.
int lc_dilithium_44_sign(struct lc_dilithium_44_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_44_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature in one shot.
struct lc_ed25519_sk sk_ed25519
int lc_dilithium_44_ed25519_verify_init(struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_44_ed25519_pk *pk)
int lc_dilithium_44_ed25519_verify_update(struct lc_dilithium_ed25519_ctx *ctx, const uint8_t *m, size_t mlen)
int lc_dilithium_44_verify_update(struct lc_dilithium_ctx *ctx, const uint8_t *m, size_t mlen)
Add more data to an already initialized signature state.
static void lc_dilithium_44_ed25519_ctx_zero(struct lc_dilithium_ed25519_ctx *ctx)
Zeroize Dilithium-ED25519 context allocated with LC_DILITHIUM_ED25519_CTX_ON_STACK lc_dilithium_ed255...
int lc_dilithium_44_ed25519_sign_init(struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_44_ed25519_sk *sk)
int lc_dilithium_44_sign_update(struct lc_dilithium_ctx *ctx, const uint8_t *m, size_t mlen)
Add more data to an already initialized signature state.
uint8_t sk[LC_DILITHIUM_SECRETKEYBYTES]
int lc_dilithium_44_ed25519_ctx_alloc(struct lc_dilithium_ed25519_ctx **ctx)
Allocate Dilithium-ED25519 stream context on heap.
struct lc_dilithium_44_pk pk
uint8_t sig[LC_DILITHIUM_CRYPTO_BYTES]
int lc_dilithium_44_ed25519_verify(const struct lc_dilithium_44_ed25519_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_44_ed25519_pk *pk)
Verifies signature in one shot.
struct lc_dilithium_44_sk sk
int lc_dilithium_44_ed25519_sign(struct lc_dilithium_44_ed25519_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_44_ed25519_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature in one shot.
int lc_dilithium_44_verify_final(const struct lc_dilithium_44_sig *sig, struct lc_dilithium_ctx *ctx, const struct lc_dilithium_44_pk *pk)
Verifies signature.
int lc_dilithium_44_verify_init(struct lc_dilithium_ctx *ctx, const struct lc_dilithium_44_pk *pk)
Initializes a signature verification operation.
int lc_dilithium_44_ed25519_keypair(struct lc_dilithium_44_ed25519_pk *pk, struct lc_dilithium_44_ed25519_sk *sk, struct lc_rng_ctx *rng_ctx)
Generates Dilithium public and private key.
static void lc_dilithium_44_ctx_zero(struct lc_dilithium_ctx *ctx)
Zeroize Dilithium context allocated with LC_DILITHIUM_CTX_ON_STACK lc_dilithium_ed25519_alloc.
int lc_dilithium_44_sign_init(struct lc_dilithium_ctx *ctx, const struct lc_dilithium_44_sk *sk)
Initializes a signature operation.
void lc_dilithium_44_ctx_zero_free(struct lc_dilithium_ctx *ctx)
Zeroize and free Dilithium stream context.
struct lc_ed25519_sig sig_ed25519
int lc_dilithium_44_ed25519_verify_final(const struct lc_dilithium_44_ed25519_sig *sig, struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_44_ed25519_pk *pk)
uint8_t pk[LC_DILITHIUM_PUBLICKEYBYTES]
int lc_dilithium_65_ed25519_sign_init(struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_65_ed25519_sk *sk)
int lc_dilithium_65_sign_init(struct lc_dilithium_ctx *ctx, const struct lc_dilithium_65_sk *sk)
Initializes a signature operation.
int lc_dilithium_65_ed25519_sign_final(struct lc_dilithium_65_ed25519_sig *sig, struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_65_ed25519_sk *sk, struct lc_rng_ctx *rng_ctx)
int lc_dilithium_65_sign_final(struct lc_dilithium_65_sig *sig, struct lc_dilithium_ctx *ctx, const struct lc_dilithium_65_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature.
int lc_dilithium_65_sign(struct lc_dilithium_65_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_65_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature in one shot.
uint8_t sig[LC_DILITHIUM_CRYPTO_BYTES]
struct lc_ed25519_sk sk_ed25519
int lc_dilithium_65_ed25519_ctx_alloc(struct lc_dilithium_ed25519_ctx **ctx)
Allocate Dilithium-ED25519 stream context on heap.
int lc_dilithium_65_verify(const struct lc_dilithium_65_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_65_pk *pk)
Verifies signature in one shot.
struct lc_dilithium_65_sig sig
struct lc_ed25519_sig sig_ed25519
int lc_dilithium_65_verify_final(const struct lc_dilithium_65_sig *sig, struct lc_dilithium_ctx *ctx, const struct lc_dilithium_65_pk *pk)
Verifies signature.
uint8_t sk[LC_DILITHIUM_SECRETKEYBYTES]
struct lc_ed25519_pk pk_ed25519
struct lc_dilithium_65_pk pk
uint8_t pk[LC_DILITHIUM_PUBLICKEYBYTES]
int lc_dilithium_65_ctx_alloc(struct lc_dilithium_ctx **ctx)
Allocate Dilithium stream context on heap.
int lc_dilithium_65_ed25519_verify_final(const struct lc_dilithium_65_ed25519_sig *sig, struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_65_ed25519_pk *pk)
int lc_dilithium_65_ed25519_sign(struct lc_dilithium_65_ed25519_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_65_ed25519_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature in one shot.
static void lc_dilithium_65_ctx_zero(struct lc_dilithium_ctx *ctx)
Zeroize Dilithium context allocated with LC_DILITHIUM_CTX_ON_STACK lc_dilithium_ed25519_alloc.
int lc_dilithium_65_ed25519_keypair(struct lc_dilithium_65_ed25519_pk *pk, struct lc_dilithium_65_ed25519_sk *sk, struct lc_rng_ctx *rng_ctx)
Generates Dilithium public and private key.
int lc_dilithium_65_ed25519_verify(const struct lc_dilithium_65_ed25519_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_65_ed25519_pk *pk)
Verifies signature in one shot.
struct lc_dilithium_65_sk sk
int lc_dilithium_65_ed25519_sign_update(struct lc_dilithium_ed25519_ctx *ctx, const uint8_t *m, size_t mlen)
void lc_dilithium_65_ctx_zero_free(struct lc_dilithium_ctx *ctx)
Zeroize and free Dilithium stream context.
int lc_dilithium_65_keypair(struct lc_dilithium_65_pk *pk, struct lc_dilithium_65_sk *sk, struct lc_rng_ctx *rng_ctx)
Generates Dilithium public and private key.
int lc_dilithium_65_sign_update(struct lc_dilithium_ctx *ctx, const uint8_t *m, size_t mlen)
Add more data to an already initialized signature state.
void lc_dilithium_65_ed25519_ctx_zero_free(struct lc_dilithium_ed25519_ctx *ctx)
Zeroize and free Dilithium-ED25519 stream context.
int lc_dilithium_65_verify_update(struct lc_dilithium_ctx *ctx, const uint8_t *m, size_t mlen)
Add more data to an already initialized signature state.
int lc_dilithium_65_ed25519_verify_update(struct lc_dilithium_ed25519_ctx *ctx, const uint8_t *m, size_t mlen)
int lc_dilithium_65_ed25519_verify_init(struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_65_ed25519_pk *pk)
int lc_dilithium_65_keypair_from_seed(struct lc_dilithium_65_pk *pk, struct lc_dilithium_65_sk *sk, const uint8_t *seed, size_t seedlen)
Generates Dilithium public and private key from a given seed.
int lc_dilithium_65_verify_init(struct lc_dilithium_ctx *ctx, const struct lc_dilithium_65_pk *pk)
Initializes a signature verification operation.
static void lc_dilithium_65_ed25519_ctx_zero(struct lc_dilithium_ed25519_ctx *ctx)
Zeroize Dilithium-ED25519 context allocated with LC_DILITHIUM_ED25519_CTX_ON_STACK lc_dilithium_ed255...
void lc_dilithium_87_ctx_zero_free(struct lc_dilithium_ctx *ctx)
Zeroize and free Dilithium stream context.
int lc_dilithium_87_verify(const struct lc_dilithium_87_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_87_pk *pk)
Verifies signature in one shot.
int lc_dilithium_87_ctx_alloc(struct lc_dilithium_ctx **ctx)
Allocate Dilithium stream context on heap.
int lc_dilithium_87_ed25519_sign(struct lc_dilithium_87_ed25519_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_87_ed25519_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature in one shot.
int lc_dilithium_87_keypair(struct lc_dilithium_87_pk *pk, struct lc_dilithium_87_sk *sk, struct lc_rng_ctx *rng_ctx)
Generates Dilithium public and private key.
void lc_dilithium_87_ed25519_ctx_zero_free(struct lc_dilithium_ed25519_ctx *ctx)
Zeroize and free Dilithium-ED25519 stream context.
struct lc_dilithium_87_pk pk
int lc_dilithium_87_ed25519_sign_update(struct lc_dilithium_ed25519_ctx *ctx, const uint8_t *m, size_t mlen)
struct lc_ed25519_sig sig_ed25519
int lc_dilithium_87_sign_final(struct lc_dilithium_87_sig *sig, struct lc_dilithium_ctx *ctx, const struct lc_dilithium_87_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature.
static void lc_dilithium_87_ctx_zero(struct lc_dilithium_ctx *ctx)
Zeroize Dilithium context allocated with LC_DILITHIUM_CTX_ON_STACK lc_dilithium_ed25519_alloc.
static void lc_dilithium_87_ed25519_ctx_zero(struct lc_dilithium_ed25519_ctx *ctx)
Zeroize Dilithium-ED25519 context allocated with LC_DILITHIUM_ED25519_CTX_ON_STACK lc_dilithium_ed255...
int lc_dilithium_87_sign_init(struct lc_dilithium_ctx *ctx, const struct lc_dilithium_87_sk *sk)
Initializes a signature operation.
int lc_dilithium_87_ed25519_sign_init(struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_87_ed25519_sk *sk)
int lc_dilithium_87_ed25519_verify(const struct lc_dilithium_87_ed25519_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_87_ed25519_pk *pk)
Verifies signature in one shot.
struct lc_ed25519_pk pk_ed25519
int lc_dilithium_87_verify_update(struct lc_dilithium_ctx *ctx, const uint8_t *m, size_t mlen)
Add more data to an already initialized signature state.
struct lc_dilithium_87_sk sk
int lc_dilithium_87_sign_update(struct lc_dilithium_ctx *ctx, const uint8_t *m, size_t mlen)
Add more data to an already initialized signature state.
int lc_dilithium_87_ed25519_verify_init(struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_87_ed25519_pk *pk)
int lc_dilithium_87_keypair_from_seed(struct lc_dilithium_87_pk *pk, struct lc_dilithium_87_sk *sk, const uint8_t *seed, size_t seedlen)
Generates Dilithium public and private key from a given seed.
uint8_t sig[LC_DILITHIUM_CRYPTO_BYTES]
struct lc_ed25519_sk sk_ed25519
int lc_dilithium_87_ed25519_verify_final(const struct lc_dilithium_87_ed25519_sig *sig, struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_87_ed25519_pk *pk)
int lc_dilithium_87_ed25519_keypair(struct lc_dilithium_87_ed25519_pk *pk, struct lc_dilithium_87_ed25519_sk *sk, struct lc_rng_ctx *rng_ctx)
Generates Dilithium public and private key.
int lc_dilithium_87_sign(struct lc_dilithium_87_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_87_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature in one shot.
int lc_dilithium_87_ed25519_sign_final(struct lc_dilithium_87_ed25519_sig *sig, struct lc_dilithium_ed25519_ctx *ctx, const struct lc_dilithium_87_ed25519_sk *sk, struct lc_rng_ctx *rng_ctx)
struct lc_dilithium_87_sig sig
int lc_dilithium_87_ed25519_ctx_alloc(struct lc_dilithium_ed25519_ctx **ctx)
Allocate Dilithium-ED25519 stream context on heap.
int lc_dilithium_87_verify_init(struct lc_dilithium_ctx *ctx, const struct lc_dilithium_87_pk *pk)
Initializes a signature verification operation.
uint8_t pk[LC_DILITHIUM_PUBLICKEYBYTES]
int lc_dilithium_87_verify_final(const struct lc_dilithium_87_sig *sig, struct lc_dilithium_ctx *ctx, const struct lc_dilithium_87_pk *pk)
Verifies signature.
uint8_t sk[LC_DILITHIUM_SECRETKEYBYTES]
int lc_dilithium_87_ed25519_verify_update(struct lc_dilithium_ed25519_ctx *ctx, const uint8_t *m, size_t mlen)
Dilithium stream context.
Dilithium stream context.