Leancrypto 1.6.0
Post-Quantum Cryptographic Library
Loading...
Searching...
No Matches
lc_dilithium.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2022 - 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 * This code is derived in parts from the code distribution provided with
21 * https://github.com/pq-crystals/dilithium
22 *
23 * That code is released under Public Domain
24 * (https://creativecommons.org/share-your-work/public-domain/cc0/);
25 * or Apache 2.0 License (https://www.apache.org/licenses/LICENSE-2.0.html).
26 */
27
28#ifndef LC_DILITHIUM_H
29#define LC_DILITHIUM_H
30
31#include "ext_headers.h"
32
33#if defined __has_include
34
35#if __has_include("lc_dilithium_87.h")
36#include "lc_dilithium_87.h"
37#define LC_DILITHIUM_87_ENABLED
38#endif
39
40#if __has_include("lc_dilithium_65.h")
41#include "lc_dilithium_65.h"
42#define LC_DILITHIUM_65_ENABLED
43#endif
44
45#if __has_include("lc_dilithium_44.h")
46#include "lc_dilithium_44.h"
47#define LC_DILITHIUM_44_ENABLED
48#endif
49
50#else
51#error "Compiler misses __has_include"
52#endif
53
54#ifdef __cplusplus
55extern "C" {
56#endif
57
68
102
108 union {
109#ifdef LC_DILITHIUM_87_ENABLED
110 struct lc_dilithium_87_sk sk_87;
111#endif
112#ifdef LC_DILITHIUM_65_ENABLED
113 struct lc_dilithium_65_sk sk_65;
114#endif
115#ifdef LC_DILITHIUM_44_ENABLED
116 struct lc_dilithium_44_sk sk_44;
117#endif
119};
120
126 union {
127#ifdef LC_DILITHIUM_87_ENABLED
128 struct lc_dilithium_87_pk pk_87;
129#endif
130#ifdef LC_DILITHIUM_65_ENABLED
131 struct lc_dilithium_65_pk pk_65;
132#endif
133#ifdef LC_DILITHIUM_44_ENABLED
134 struct lc_dilithium_44_pk pk_44;
135#endif
137};
138
144 union {
145#ifdef LC_DILITHIUM_87_ENABLED
146 struct lc_dilithium_87_sig sig_87;
147#endif
148#ifdef LC_DILITHIUM_65_ENABLED
149 struct lc_dilithium_65_sig sig_65;
150#endif
151#ifdef LC_DILITHIUM_44_ENABLED
152 struct lc_dilithium_44_sig sig_44;
153#endif
155};
156
200#ifdef LC_DILITHIUM_87_ENABLED
201#define LC_DILITHIUM_CTX_ON_STACK_AHAT(name) \
202 LC_DILITHIUM_87_CTX_ON_STACK_AHAT(name)
203#elif defined(LC_DILITHIUM_65_ENABLED)
204LC_DILITHIUM_CTX_ON_STACK_AHAT(name)
206#elif defined(LC_DILITHIUM_44_ENABLED)
207LC_DILITHIUM_CTX_ON_STACK_AHAT(name)
209#endif
210
220
233
241
249
258
270 const struct lc_hash *hash);
271
282 const uint8_t *userctx, size_t userctxlen);
283
300 const uint8_t *external_mu,
301 size_t external_mu_len);
302
314
324
334
345
354LC_PURE unsigned int
356
365LC_PURE unsigned int
367
376LC_PURE unsigned int
378
390int lc_dilithium_sk_load(struct lc_dilithium_sk *sk, const uint8_t *src_key,
391 size_t src_key_len);
392
404int lc_dilithium_pk_load(struct lc_dilithium_pk *pk, const uint8_t *src_key,
405 size_t src_key_len);
406
418int lc_dilithium_sig_load(struct lc_dilithium_sig *sig, const uint8_t *src_sig,
419 size_t src_sig_len);
420
434int lc_dilithium_sk_ptr(uint8_t **dilithium_key, size_t *dilithium_key_len,
435 struct lc_dilithium_sk *sk);
436
450int lc_dilithium_pk_ptr(uint8_t **dilithium_key, size_t *dilithium_key_len,
451 struct lc_dilithium_pk *pk);
452
467int lc_dilithium_sig_ptr(uint8_t **dilithium_sig, size_t *dilithium_sig_len,
468 struct lc_dilithium_sig *sig);
469
482 struct lc_rng_ctx *rng_ctx,
483 enum lc_dilithium_type dilithium_type);
484
507 struct lc_dilithium_sk *sk,
508 const uint8_t *seed, size_t seedlen,
509 enum lc_dilithium_type dilithium_type);
510
522 const struct lc_dilithium_sk *sk);
523
538int lc_dilithium_sign(struct lc_dilithium_sig *sig, const uint8_t *m,
539 size_t mlen, const struct lc_dilithium_sk *sk,
540 struct lc_rng_ctx *rng_ctx);
541
573 struct lc_dilithium_ctx *ctx, const uint8_t *m,
574 size_t mlen, const struct lc_dilithium_sk *sk,
575 struct lc_rng_ctx *rng_ctx);
576
592 const struct lc_dilithium_sk *sk);
593
609int lc_dilithium_sign_update(struct lc_dilithium_ctx *ctx, const uint8_t *m,
610 size_t mlen);
611
628 struct lc_dilithium_ctx *ctx,
629 const struct lc_dilithium_sk *sk,
630 struct lc_rng_ctx *rng_ctx);
631
644int lc_dilithium_verify(const struct lc_dilithium_sig *sig, const uint8_t *m,
645 size_t mlen, const struct lc_dilithium_pk *pk);
646
664 struct lc_dilithium_ctx *ctx, const uint8_t *m,
665 size_t mlen, const struct lc_dilithium_pk *pk);
666
683 const struct lc_dilithium_pk *pk);
684
701int lc_dilithium_verify_update(struct lc_dilithium_ctx *ctx, const uint8_t *m,
702 size_t mlen);
703
718 struct lc_dilithium_ctx *ctx,
719 const struct lc_dilithium_pk *pk);
720
721/****************************** Dilithium ED25510 *****************************/
722
723#ifdef LC_DILITHIUM_ED25519_SIG
724
742
748 union {
749#ifdef LC_DILITHIUM_87_ENABLED
750 struct lc_dilithium_87_ed25519_sk sk_87;
751#endif
752#ifdef LC_DILITHIUM_65_ENABLED
753 struct lc_dilithium_65_ed25519_sk sk_65;
754#endif
755#ifdef LC_DILITHIUM_44_ENABLED
756 struct lc_dilithium_44_ed25519_sk sk_44;
757#endif
759};
760
766 union {
767#ifdef LC_DILITHIUM_87_ENABLED
768 struct lc_dilithium_87_ed25519_pk pk_87;
769#endif
770#ifdef LC_DILITHIUM_65_ENABLED
771 struct lc_dilithium_65_ed25519_pk pk_65;
772#endif
773#ifdef LC_DILITHIUM_44_ENABLED
774 struct lc_dilithium_44_ed25519_pk pk_44;
775#endif
777};
778
784 union {
785#ifdef LC_DILITHIUM_87_ENABLED
786 struct lc_dilithium_87_ed25519_sig sig_87;
787#endif
788#ifdef LC_DILITHIUM_65_ENABLED
789 struct lc_dilithium_65_ed25519_sig sig_65;
790#endif
791#ifdef LC_DILITHIUM_44_ENABLED
792 struct lc_dilithium_44_ed25519_sig sig_44;
793#endif
795};
796
806
814
822
834 const struct lc_hash *hash);
835
844
859 const uint8_t *userctx,
860 size_t userctxlen);
861
872 const uint8_t *randomizer,
873 size_t randomizerlen);
874
885
896
907
916LC_PURE unsigned int
918
927LC_PURE unsigned int
929
938LC_PURE unsigned int
940
958 const uint8_t *dilithium_src_key,
959 size_t dilithium_src_key_len,
960 const uint8_t *ed25519_src_key,
961 size_t ed25519_src_key_len);
962
980 const uint8_t *dilithium_src_key,
981 size_t dilithium_src_key_len,
982 const uint8_t *ed25519_src_key,
983 size_t ed25519_src_key_len);
984
1003 const uint8_t *dilithium_src_sig,
1004 size_t dilithium_src_sig_len,
1005 const uint8_t *ed25519_src_sig,
1006 size_t ed25519_src_sig_len);
1007
1023int lc_dilithium_ed25519_sk_ptr(uint8_t **dilithium_key,
1024 size_t *dilithium_key_len,
1025 uint8_t **ed25519_key, size_t *ed25519_key_len,
1026 struct lc_dilithium_ed25519_sk *sk);
1027
1043int lc_dilithium_ed25519_pk_ptr(uint8_t **dilithium_key,
1044 size_t *dilithium_key_len,
1045 uint8_t **ed25519_key, size_t *ed25519_key_len,
1046 struct lc_dilithium_ed25519_pk *pk);
1047
1064int lc_dilithium_ed25519_sig_ptr(uint8_t **dilithium_sig,
1065 size_t *dilithium_sig_len,
1066 uint8_t **ed25519_sig, size_t *ed25519_sig_len,
1068
1081 struct lc_dilithium_ed25519_sk *sk,
1082 struct lc_rng_ctx *rng_ctx,
1083 enum lc_dilithium_type dilithium_type);
1084
1103 const uint8_t *m, size_t mlen,
1104 const struct lc_dilithium_ed25519_sk *sk,
1105 struct lc_rng_ctx *rng_ctx);
1106
1135 struct lc_dilithium_ed25519_ctx *ctx,
1136 const uint8_t *m, size_t mlen,
1137 const struct lc_dilithium_ed25519_sk *sk,
1138 struct lc_rng_ctx *rng_ctx);
1139
1156 const struct lc_dilithium_ed25519_sk *sk);
1157
1169 const uint8_t *m, size_t mlen);
1170
1185 struct lc_dilithium_ed25519_ctx *ctx,
1186 const struct lc_dilithium_ed25519_sk *sk,
1187 struct lc_rng_ctx *rng_ctx);
1188
1205 const uint8_t *m, size_t mlen,
1206 const struct lc_dilithium_ed25519_pk *pk);
1207
1234 struct lc_dilithium_ed25519_ctx *ctx,
1235 const uint8_t *m, size_t mlen,
1236 const struct lc_dilithium_ed25519_pk *pk);
1237
1254 const struct lc_dilithium_ed25519_pk *pk);
1255
1267 const uint8_t *m, size_t mlen);
1268
1281 struct lc_dilithium_ed25519_ctx *ctx,
1282 const struct lc_dilithium_ed25519_pk *pk);
1283
1284#endif /* LC_DILITHIUM_ED25519_SIG */
1285
1286/****************************** Dilithium ED25510 *****************************/
1287
1288#ifdef LC_DILITHIUM_ED448_SIG
1289
1310
1316 union {
1317#ifdef LC_DILITHIUM_87_ENABLED
1318 struct lc_dilithium_87_ed448_sk sk_87;
1319#endif
1320#ifdef LC_DILITHIUM_65_ENABLED
1321 struct lc_dilithium_65_ed448_sk sk_65;
1322#endif
1323#ifdef LC_DILITHIUM_44_ENABLED
1324 struct lc_dilithium_44_ed448_sk sk_44;
1325#endif
1327};
1328
1334 union {
1335#ifdef LC_DILITHIUM_87_ENABLED
1336 struct lc_dilithium_87_ed448_pk pk_87;
1337#endif
1338#ifdef LC_DILITHIUM_65_ENABLED
1339 struct lc_dilithium_65_ed448_pk pk_65;
1340#endif
1341#ifdef LC_DILITHIUM_44_ENABLED
1342 struct lc_dilithium_44_ed448_pk pk_44;
1343#endif
1345};
1346
1352 union {
1353#ifdef LC_DILITHIUM_87_ENABLED
1354 struct lc_dilithium_87_ed448_sig sig_87;
1355#endif
1356#ifdef LC_DILITHIUM_65_ENABLED
1357 struct lc_dilithium_65_ed448_sig sig_65;
1358#endif
1359#ifdef LC_DILITHIUM_44_ENABLED
1360 struct lc_dilithium_44_ed448_sig sig_44;
1361#endif
1363};
1364
1374
1382
1390
1402 const struct lc_hash *hash);
1403
1412
1427 const uint8_t *userctx, size_t userctxlen);
1428
1439 const uint8_t *randomizer,
1440 size_t randomizerlen);
1441
1452
1463
1474
1483LC_PURE unsigned int
1485
1494LC_PURE unsigned int
1496
1505LC_PURE unsigned int
1507
1525 const uint8_t *dilithium_src_key,
1526 size_t dilithium_src_key_len,
1527 const uint8_t *ed448_src_key,
1528 size_t ed448_src_key_len);
1529
1547 const uint8_t *dilithium_src_key,
1548 size_t dilithium_src_key_len,
1549 const uint8_t *ed448_src_key,
1550 size_t ed448_src_key_len);
1551
1570 const uint8_t *dilithium_src_sig,
1571 size_t dilithium_src_sig_len,
1572 const uint8_t *ed448_src_sig,
1573 size_t ed448_src_sig_len);
1574
1590int lc_dilithium_ed448_sk_ptr(uint8_t **dilithium_key,
1591 size_t *dilithium_key_len, uint8_t **ed448_key,
1592 size_t *ed448_key_len,
1593 struct lc_dilithium_ed448_sk *sk);
1594
1610int lc_dilithium_ed448_pk_ptr(uint8_t **dilithium_key,
1611 size_t *dilithium_key_len, uint8_t **ed448_key,
1612 size_t *ed448_key_len,
1613 struct lc_dilithium_ed448_pk *pk);
1614
1631int lc_dilithium_ed448_sig_ptr(uint8_t **dilithium_sig,
1632 size_t *dilithium_sig_len, uint8_t **ed448_sig,
1633 size_t *ed448_sig_len,
1634 struct lc_dilithium_ed448_sig *sig);
1635
1648 struct lc_dilithium_ed448_sk *sk,
1649 struct lc_rng_ctx *rng_ctx,
1650 enum lc_dilithium_type dilithium_type);
1651
1670 const uint8_t *m, size_t mlen,
1671 const struct lc_dilithium_ed448_sk *sk,
1672 struct lc_rng_ctx *rng_ctx);
1673
1702 struct lc_dilithium_ed448_ctx *ctx,
1703 const uint8_t *m, size_t mlen,
1704 const struct lc_dilithium_ed448_sk *sk,
1705 struct lc_rng_ctx *rng_ctx);
1706
1723 const struct lc_dilithium_ed448_sk *sk);
1724
1736 const uint8_t *m, size_t mlen);
1737
1752 struct lc_dilithium_ed448_ctx *ctx,
1753 const struct lc_dilithium_ed448_sk *sk,
1754 struct lc_rng_ctx *rng_ctx);
1755
1772 const uint8_t *m, size_t mlen,
1773 const struct lc_dilithium_ed448_pk *pk);
1774
1801 struct lc_dilithium_ed448_ctx *ctx,
1802 const uint8_t *m, size_t mlen,
1803 const struct lc_dilithium_ed448_pk *pk);
1804
1821 const struct lc_dilithium_ed448_pk *pk);
1822
1834 const uint8_t *m, size_t mlen);
1835
1848 struct lc_dilithium_ed448_ctx *ctx,
1849 const struct lc_dilithium_ed448_pk *pk);
1850
1851#endif /* LC_DILITHIUM_ED448_SIG */
1852
1853#ifdef __cplusplus
1854}
1855#endif
1856
1857#endif /* LC_DILITHIUM_H */
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.
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.
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.
void lc_dilithium_ctx_userctx(struct lc_dilithium_ctx *ctx, const uint8_t *userctx, size_t userctxlen)
Specify the optional user context string to be applied with the Dilithium signature operation.
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.
void lc_dilithium_ctx_hash(struct lc_dilithium_ctx *ctx, const struct lc_hash *hash)
Set the hash type that was used for pre-hashing the message. The message digest is used with the Hash...
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.
void lc_dilithium_ctx_zero_free(struct lc_dilithium_ctx *ctx)
Zeroizes and frees Dilithium context on heap.
int lc_dilithium_sign_ctx(struct lc_dilithium_sig *sig, struct lc_dilithium_ctx *ctx, const uint8_t *m, size_t mlen, const struct lc_dilithium_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature woth user context in one shot.
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.
LC_PURE unsigned int lc_dilithium_sig_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium signature.
void lc_dilithium_ctx_zero(struct lc_dilithium_ctx *ctx)
Zeroizes Dilithium context either on heap or on stack.
int lc_dilithium_verify_final(const struct lc_dilithium_sig *sig, struct lc_dilithium_ctx *ctx, const struct lc_dilithium_pk *pk)
Verifies signature.
enum lc_dilithium_type lc_dilithium_sig_type(const struct lc_dilithium_sig *sig)
Obtain Dilithium type from signature.
void lc_dilithium_ctx_drop_ahat(struct lc_dilithium_ctx *ctx)
Invalidate the expanded key that potentially is stored in the context.
int lc_dilithium_ctx_alloc(struct lc_dilithium_ctx **ctx)
Allocate stack memory for the Dilithium stream context and additional parameter relevant for the sign...
int lc_dilithium_verify_init(struct lc_dilithium_ctx *ctx, const struct lc_dilithium_pk *pk)
Initializes a signature verification operation.
void lc_dilithium_ctx_internal(struct lc_dilithium_ctx *ctx)
Mark the Dilithium context to execute ML-DSA.Sign_internal / ML-DSA.Verify_internal.
LC_PURE unsigned int lc_dilithium_pk_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium public key.
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.
LC_PURE unsigned int lc_dilithium_sk_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium secret key.
int lc_dilithium_sign_init(struct lc_dilithium_ctx *ctx, const struct lc_dilithium_sk *sk)
Initializes a signature operation.
int lc_dilithium_verify_ctx(const struct lc_dilithium_sig *sig, struct lc_dilithium_ctx *ctx, const uint8_t *m, size_t mlen, const struct lc_dilithium_pk *pk)
Verifies signature with Dilithium context in one shot.
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.
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.
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.
enum lc_dilithium_type lc_dilithium_pk_type(const struct lc_dilithium_pk *pk)
Obtain Dilithium type from public key.
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.
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.
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.
int lc_dilithium_ctx_alloc_ahat(struct lc_dilithium_ctx **ctx)
Allocates Dilithium context on heap with support to keep the internal representation of the key.
enum lc_dilithium_type lc_dilithium_sk_type(const struct lc_dilithium_sk *sk)
Obtain Dilithium type from secret key.
void lc_dilithium_ctx_external_mu(struct lc_dilithium_ctx *ctx, const uint8_t *external_mu, size_t external_mu_len)
Specify the optional external mu value.
int lc_hash(const struct lc_hash *hash, const uint8_t *in, size_t inlen, uint8_t *digest)
Calculate message digest - one-shot.
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.
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.
void lc_dilithium_ed25519_ctx_zero_free(struct lc_dilithium_ed25519_ctx *ctx)
Zeroizes and frees Dilithium-ED25519 context on heap.
int lc_dilithium_ed448_sig_ptr(uint8_t **dilithium_sig, size_t *dilithium_sig_len, uint8_t **ed448_sig, size_t *ed448_sig_len, struct lc_dilithium_ed448_sig *sig)
Obtain the reference to the Dilithium signature and its length.
int lc_dilithium_ed448_pk_ptr(uint8_t **dilithium_key, size_t *dilithium_key_len, uint8_t **ed448_key, size_t *ed448_key_len, struct lc_dilithium_ed448_pk *pk)
Obtain the reference to the Dilithium key and its length.
int lc_dilithium_ed448_sign_final(struct lc_dilithium_ed448_sig *sig, struct lc_dilithium_ed448_ctx *ctx, const struct lc_dilithium_ed448_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature in stream mode.
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.
LC_PURE unsigned int lc_dilithium_ed448_sig_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium signature.
int lc_dilithium_ed25519_sign_update(struct lc_dilithium_ed25519_ctx *ctx, const uint8_t *m, size_t mlen)
Updates signature in stream mode.
int lc_dilithium_ed25519_sign_ctx(struct lc_dilithium_ed25519_sig *sig, struct lc_dilithium_ed25519_ctx *ctx, const uint8_t *m, size_t mlen, const struct lc_dilithium_ed25519_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature with Dilithium context in one shot.
enum lc_dilithium_type lc_dilithium_ed448_sig_type(const struct lc_dilithium_ed448_sig *sig)
Obtain Dilithium type from signature.
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.
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.
void lc_dilithium_ed448_ctx_zero(struct lc_dilithium_ed448_ctx *ctx)
Zeroizes Dilithium-ED448 context either on heap or on stack.
int lc_dilithium_ed25519_ctx_alloc(struct lc_dilithium_ed25519_ctx **ctx)
Allocates Dilithium-ED25519 context on heap.
LC_PURE unsigned int lc_dilithium_ed25519_pk_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium public key.
int lc_dilithium_ed448_sign_update(struct lc_dilithium_ed448_ctx *ctx, const uint8_t *m, size_t mlen)
Updates signature in stream mode.
int lc_dilithium_ed448_verify_init(struct lc_dilithium_ed448_ctx *ctx, const struct lc_dilithium_ed448_pk *pk)
Initializes signature verification operation in stream mode.
void lc_dilithium_ed25519_ctx_randomizer(struct lc_dilithium_ed25519_ctx *ctx, const uint8_t *randomizer, size_t randomizerlen)
Specify the optional randomizer to be applied with the Dilithium-ED25519 signature operation.
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.
enum lc_dilithium_type lc_dilithium_ed448_pk_type(const struct lc_dilithium_ed448_pk *pk)
Obtain Dilithium type from public key.
void lc_dilithium_ed448_ctx_zero_free(struct lc_dilithium_ed448_ctx *ctx)
Zeroizes and frees Dilithium-ED448 context on heap.
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.
LC_PURE unsigned int lc_dilithium_ed448_pk_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium public key.
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.
LC_PURE unsigned int lc_dilithium_ed25519_sk_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium secret key.
int lc_dilithium_ed448_sk_ptr(uint8_t **dilithium_key, size_t *dilithium_key_len, uint8_t **ed448_key, size_t *ed448_key_len, struct lc_dilithium_ed448_sk *sk)
Obtain the reference to the Dilithium key and its length.
void lc_dilithium_ed448_ctx_internal(struct lc_dilithium_ed448_ctx *ctx)
Mark the Dilithium context to execute ML-DSA.Sign_internal / ML-DSA.Verify_internal.
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.
void lc_dilithium_ed25519_ctx_userctx(struct lc_dilithium_ed25519_ctx *ctx, const uint8_t *userctx, size_t userctxlen)
Specify the optional user context string to be applied with the Dilithium-ED25519 signature operation...
int lc_dilithium_ed25519_verify_ctx(const struct lc_dilithium_ed25519_sig *sig, struct lc_dilithium_ed25519_ctx *ctx, const uint8_t *m, size_t mlen, const struct lc_dilithium_ed25519_pk *pk)
Verifies signature with Dilithium context in one shot.
void lc_dilithium_ed25519_ctx_zero(struct lc_dilithium_ed25519_ctx *ctx)
Zeroizes Dilithium-ED25519 context either on heap or on stack.
int lc_dilithium_ed448_pk_load(struct lc_dilithium_ed448_pk *pk, const uint8_t *dilithium_src_key, size_t dilithium_src_key_len, const uint8_t *ed448_src_key, size_t ed448_src_key_len)
Load a Dilithium public key provided with a buffer into the leancrypto data structure.
enum lc_dilithium_type lc_dilithium_ed25519_pk_type(const struct lc_dilithium_ed25519_pk *pk)
Obtain Dilithium type from public key.
int lc_dilithium_ed448_verify(const struct lc_dilithium_ed448_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_ed448_pk *pk)
Verifies signature in one shot.
int lc_dilithium_ed448_sign(struct lc_dilithium_ed448_sig *sig, const uint8_t *m, size_t mlen, const struct lc_dilithium_ed448_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature in one shot.
int lc_dilithium_ed448_sig_load(struct lc_dilithium_ed448_sig *sig, const uint8_t *dilithium_src_sig, size_t dilithium_src_sig_len, const uint8_t *ed448_src_sig, size_t ed448_src_sig_len)
Load a Dilithium signature provided with a buffer into the leancrypto data structure.
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.
enum lc_dilithium_type lc_dilithium_ed448_sk_type(const struct lc_dilithium_ed448_sk *sk)
Obtain Dilithium type from secret key.
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.
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.
LC_PURE unsigned int lc_dilithium_ed448_sk_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium secret key.
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.
LC_PURE unsigned int lc_dilithium_ed25519_sig_size(enum lc_dilithium_type dilithium_type)
Return the size of the Dilithium signature.
void lc_dilithium_ed25519_ctx_internal(struct lc_dilithium_ed25519_ctx *ctx)
Mark the Dilithium context to execute ML-DSA.Sign_internal / ML-DSA.Verify_internal.
int lc_dilithium_ed448_verify_update(struct lc_dilithium_ed448_ctx *ctx, const uint8_t *m, size_t mlen)
Updates signature verification in stream mode.
void lc_dilithium_ed25519_ctx_hash(struct lc_dilithium_ed25519_ctx *ctx, const struct lc_hash *hash)
Set the hash type that was used for pre-hashing the message. The message digest ist used with the Has...
int lc_dilithium_ed448_verify_final(const struct lc_dilithium_ed448_sig *sig, struct lc_dilithium_ed448_ctx *ctx, const struct lc_dilithium_ed448_pk *pk)
Verifies signature in stream mode.
enum lc_dilithium_type lc_dilithium_ed25519_sig_type(const struct lc_dilithium_ed25519_sig *sig)
Obtain Dilithium type from signature.
void lc_dilithium_ed448_ctx_randomizer(struct lc_dilithium_ed448_ctx *ctx, const uint8_t *randomizer, size_t randomizerlen)
Specify the optional randomizer to be applied with the Dilithium-ED25519 signature operation.
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.
void lc_dilithium_ed448_ctx_hash(struct lc_dilithium_ed448_ctx *ctx, const struct lc_hash *hash)
Set the hash type that was used for pre-hashing the message. The message digest ist used with the Has...
enum lc_dilithium_type lc_dilithium_ed25519_sk_type(const struct lc_dilithium_ed25519_sk *sk)
Obtain Dilithium type from secret key.
int lc_dilithium_ed448_sign_init(struct lc_dilithium_ed448_ctx *ctx, const struct lc_dilithium_ed448_sk *sk)
Initializes signature operation in stream mode.
int lc_dilithium_ed448_sk_load(struct lc_dilithium_ed448_sk *sk, const uint8_t *dilithium_src_key, size_t dilithium_src_key_len, const uint8_t *ed448_src_key, size_t ed448_src_key_len)
Load a Dilithium secret key provided with a buffer into the leancrypto data structure.
int lc_dilithium_ed448_verify_ctx(const struct lc_dilithium_ed448_sig *sig, struct lc_dilithium_ed448_ctx *ctx, const uint8_t *m, size_t mlen, const struct lc_dilithium_ed448_pk *pk)
Verifies signature with Dilithium context in one shot.
void lc_dilithium_ed448_ctx_userctx(struct lc_dilithium_ed448_ctx *ctx, const uint8_t *userctx, size_t userctxlen)
Specify the optional user context string to be applied with the Dilithium-ED448 signature operation.
int lc_dilithium_ed448_ctx_alloc(struct lc_dilithium_ed448_ctx **ctx)
Allocates Dilithium-ED448 context on heap.
int lc_dilithium_ed448_sign_ctx(struct lc_dilithium_ed448_sig *sig, struct lc_dilithium_ed448_ctx *ctx, const uint8_t *m, size_t mlen, const struct lc_dilithium_ed448_sk *sk, struct lc_rng_ctx *rng_ctx)
Computes signature with Dilithium context in one shot.
int lc_dilithium_ed448_keypair(struct lc_dilithium_ed448_pk *pk, struct lc_dilithium_ed448_sk *sk, struct lc_rng_ctx *rng_ctx, enum lc_dilithium_type dilithium_type)
Generates Dilithium public and private key.
lc_dilithium_type
@ LC_DILITHIUM_65
@ LC_DILITHIUM_UNKNOWN
@ LC_DILITHIUM_44
@ LC_DILITHIUM_87
enum lc_dilithium_type dilithium_type
union lc_dilithium_sk::@023140266173122376146257253052136150224201312302 key
int lc_dilithium_pct(const struct lc_dilithium_pk *pk, const struct lc_dilithium_sk *sk)
Pairwise consistency check as per FIPS 140 IG.
union lc_dilithium_sig::@253200045274042000141376221122043356131046366147 sig
union lc_dilithium_ed448_sk::@253041030320102372376017002314034324161003101335 key
union lc_dilithium_ed25519_pk::@374037170017044037351117321345333072171140134203 key
enum lc_dilithium_type dilithium_type
union lc_dilithium_ed448_sig::@212243107342061271066346165004203111066243276363 sig
enum lc_dilithium_type dilithium_type
enum lc_dilithium_type dilithium_type
enum lc_dilithium_type dilithium_type
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_pk::@322212144176246142345120113132130212345020203246 key
union lc_dilithium_ed448_pk::@254046247170216132141170276332304267377124000115 key
union lc_dilithium_ed25519_sig::@153124376101002147233177111226011157256271352356 sig
union lc_dilithium_ed25519_sk::@127001250111262044130262306377154372363326114117 key
Dilithium public key.
Dilithium signature.
Dilithium secret key.
Dilithium public key.
Dilithium signature.
Dilithium secret key.
Dilithium public key.
Dilithium signature.
Dilithium secret key.
struct lc_dilithium_44_sig sig
struct lc_dilithium_44_sig sig
#define LC_DILITHIUM_44_CTX_ON_STACK_AHAT(name)
Allocate stack memory for the Dilithium stream context and additional parameter relevant for the sign...
uint8_t sig[LC_DILITHIUM_CRYPTO_BYTES]
Dilithium public key.
Dilithium secret key.
Dilithium public key.
Dilithium signature.
Dilithium secret key.
Dilithium public key.
Dilithium signature.
Dilithium secret key.
#define LC_DILITHIUM_65_CTX_ON_STACK_AHAT(name)
Allocate stack memory for the Dilithium stream context and additional parameter relevant for the sign...
Dilithium public key.
Dilithium secret key.
Dilithium public key.
Dilithium signature.
Dilithium secret key.
Dilithium public key.
Dilithium signature.
Dilithium secret key.
Dilithium public key.
Dilithium secret key.
Dilithium public key.
Dilithium signature.
Dilithium secret key.
Dilithium public key.
Dilithium signature.
Dilithium secret key.
Dilithium stream context.
Dilithium stream context.