Skip to content

Commit 0b2dab7

Browse files
committed
PQC imports/exports + test vectors
1 parent 6ce3856 commit 0b2dab7

140 files changed

Lines changed: 12074 additions & 93 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

doc/crypt.tex

Lines changed: 251 additions & 8 deletions
Large diffs are not rendered by default.

src/headers/tomcrypt_pk.h

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ enum ltc_pka_id {
3939
LTC_PKA_EC,
4040
LTC_PKA_X25519,
4141
LTC_PKA_ED25519,
42+
LTC_PKA_MLDSA,
43+
LTC_PKA_SLHDSA,
44+
LTC_PKA_MLKEM,
4245
LTC_PKA_DH,
4346
LTC_PKA_NUM
4447
};
@@ -639,6 +642,36 @@ typedef struct {
639642
#endif
640643
#ifdef LTC_MRSA
641644
rsa_key rsa;
645+
#endif
646+
#ifdef LTC_MLKEM
647+
struct {
648+
int alg;
649+
int type;
650+
unsigned char *pk;
651+
unsigned long pklen;
652+
unsigned char *sk;
653+
unsigned long sklen;
654+
} mlkem;
655+
#endif
656+
#ifdef LTC_MLDSA
657+
struct {
658+
int alg;
659+
int type;
660+
unsigned char *pk;
661+
unsigned long pklen;
662+
unsigned char *sk;
663+
unsigned long sklen;
664+
} mldsa;
665+
#endif
666+
#ifdef LTC_SLHDSA
667+
struct {
668+
int alg;
669+
int type;
670+
unsigned char *pk;
671+
unsigned long pklen;
672+
unsigned char *sk;
673+
unsigned long sklen;
674+
} slhdsa;
642675
#endif
643676
char dummy;
644677
} u;

src/headers/tomcrypt_pqc.h

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,15 @@ typedef struct mlkem_key {
2828
} mlkem_key;
2929

3030
int mlkem_make_key(prng_state *prng, int wprng, int alg, mlkem_key *key);
31+
int mlkem_make_key_from_seed(int alg, const unsigned char *seed, unsigned long seedlen, mlkem_key *key);
3132
void mlkem_free(mlkem_key *key);
3233

34+
int mlkem_export(unsigned char *out, unsigned long *outlen, int which, const mlkem_key *key);
3335
int mlkem_export_raw(unsigned char *out, unsigned long *outlen, int which, const mlkem_key *key);
36+
int mlkem_import(const unsigned char *in, unsigned long inlen, mlkem_key *key);
3437
int mlkem_import_raw(const unsigned char *in, unsigned long inlen, int which, int alg, mlkem_key *key);
38+
int mlkem_import_x509(const unsigned char *in, unsigned long inlen, mlkem_key *key);
39+
int mlkem_import_pkcs8(const unsigned char *in, unsigned long inlen, const password_ctx *pw_ctx, mlkem_key *key);
3540

3641
int mlkem_encaps(unsigned char *ct, unsigned long *ctlen,
3742
unsigned char *shared_secret, unsigned long *sslen,
@@ -72,10 +77,15 @@ typedef struct mldsa_key {
7277
} mldsa_key;
7378

7479
int mldsa_make_key(prng_state *prng, int wprng, int alg, mldsa_key *key);
80+
int mldsa_make_key_from_seed(int alg, const unsigned char *seed, unsigned long seedlen, mldsa_key *key);
7581
void mldsa_free(mldsa_key *key);
7682

83+
int mldsa_export(unsigned char *out, unsigned long *outlen, int which, const mldsa_key *key);
7784
int mldsa_export_raw(unsigned char *out, unsigned long *outlen, int which, const mldsa_key *key);
85+
int mldsa_import(const unsigned char *in, unsigned long inlen, mldsa_key *key);
7886
int mldsa_import_raw(const unsigned char *in, unsigned long inlen, int which, int alg, mldsa_key *key);
87+
int mldsa_import_x509(const unsigned char *in, unsigned long inlen, mldsa_key *key);
88+
int mldsa_import_pkcs8(const unsigned char *in, unsigned long inlen, const password_ctx *pw_ctx, mldsa_key *key);
7989

8090
int mldsa_sign(const unsigned char *msg, unsigned long msglen,
8191
unsigned char *sig, unsigned long *siglen,
@@ -110,7 +120,19 @@ enum ltc_slhdsa_id {
110120
LTC_SLHDSA_SHAKE_192S = 8,
111121
LTC_SLHDSA_SHAKE_192F = 9,
112122
LTC_SLHDSA_SHAKE_256S = 10,
113-
LTC_SLHDSA_SHAKE_256F = 11
123+
LTC_SLHDSA_SHAKE_256F = 11,
124+
LTC_SLHDSA_HASH_SHA2_128S_WITH_SHA256 = 12,
125+
LTC_SLHDSA_HASH_SHA2_128F_WITH_SHA256 = 13,
126+
LTC_SLHDSA_HASH_SHA2_192S_WITH_SHA512 = 14,
127+
LTC_SLHDSA_HASH_SHA2_192F_WITH_SHA512 = 15,
128+
LTC_SLHDSA_HASH_SHA2_256S_WITH_SHA512 = 16,
129+
LTC_SLHDSA_HASH_SHA2_256F_WITH_SHA512 = 17,
130+
LTC_SLHDSA_HASH_SHAKE_128S_WITH_SHAKE128 = 18,
131+
LTC_SLHDSA_HASH_SHAKE_128F_WITH_SHAKE128 = 19,
132+
LTC_SLHDSA_HASH_SHAKE_192S_WITH_SHAKE256 = 20,
133+
LTC_SLHDSA_HASH_SHAKE_192F_WITH_SHAKE256 = 21,
134+
LTC_SLHDSA_HASH_SHAKE_256S_WITH_SHAKE256 = 22,
135+
LTC_SLHDSA_HASH_SHAKE_256F_WITH_SHAKE256 = 23
114136
};
115137

116138
/** SLH-DSA key */
@@ -130,8 +152,12 @@ typedef struct slhdsa_key {
130152
int slhdsa_make_key(prng_state *prng, int wprng, int alg, slhdsa_key *key);
131153
void slhdsa_free(slhdsa_key *key);
132154

155+
int slhdsa_export(unsigned char *out, unsigned long *outlen, int which, const slhdsa_key *key);
133156
int slhdsa_export_raw(unsigned char *out, unsigned long *outlen, int which, const slhdsa_key *key);
157+
int slhdsa_import(const unsigned char *in, unsigned long inlen, slhdsa_key *key);
134158
int slhdsa_import_raw(const unsigned char *in, unsigned long inlen, int which, int alg, slhdsa_key *key);
159+
int slhdsa_import_x509(const unsigned char *in, unsigned long inlen, slhdsa_key *key);
160+
int slhdsa_import_pkcs8(const unsigned char *in, unsigned long inlen, const password_ctx *pw_ctx, slhdsa_key *key);
135161

136162
int slhdsa_sign(const unsigned char *msg, unsigned long msglen,
137163
unsigned char *sig, unsigned long *siglen,

src/headers/tomcrypt_private.h

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,36 @@ enum ltc_oid_id {
5959
LTC_OID_EC_PRIMEF,
6060
LTC_OID_X25519,
6161
LTC_OID_ED25519,
62+
LTC_OID_MLDSA_44,
63+
LTC_OID_MLDSA_65,
64+
LTC_OID_MLDSA_87,
65+
LTC_OID_SLHDSA_SHA2_128S,
66+
LTC_OID_SLHDSA_SHA2_128F,
67+
LTC_OID_SLHDSA_SHA2_192S,
68+
LTC_OID_SLHDSA_SHA2_192F,
69+
LTC_OID_SLHDSA_SHA2_256S,
70+
LTC_OID_SLHDSA_SHA2_256F,
71+
LTC_OID_SLHDSA_SHAKE_128S,
72+
LTC_OID_SLHDSA_SHAKE_128F,
73+
LTC_OID_SLHDSA_SHAKE_192S,
74+
LTC_OID_SLHDSA_SHAKE_192F,
75+
LTC_OID_SLHDSA_SHAKE_256S,
76+
LTC_OID_SLHDSA_SHAKE_256F,
77+
LTC_OID_HASH_SLHDSA_SHA2_128S_WITH_SHA256,
78+
LTC_OID_HASH_SLHDSA_SHA2_128F_WITH_SHA256,
79+
LTC_OID_HASH_SLHDSA_SHA2_192S_WITH_SHA512,
80+
LTC_OID_HASH_SLHDSA_SHA2_192F_WITH_SHA512,
81+
LTC_OID_HASH_SLHDSA_SHA2_256S_WITH_SHA512,
82+
LTC_OID_HASH_SLHDSA_SHA2_256F_WITH_SHA512,
83+
LTC_OID_HASH_SLHDSA_SHAKE_128S_WITH_SHAKE128,
84+
LTC_OID_HASH_SLHDSA_SHAKE_128F_WITH_SHAKE128,
85+
LTC_OID_HASH_SLHDSA_SHAKE_192S_WITH_SHAKE256,
86+
LTC_OID_HASH_SLHDSA_SHAKE_192F_WITH_SHAKE256,
87+
LTC_OID_HASH_SLHDSA_SHAKE_256S_WITH_SHAKE256,
88+
LTC_OID_HASH_SLHDSA_SHAKE_256F_WITH_SHAKE256,
89+
LTC_OID_MLKEM_512,
90+
LTC_OID_MLKEM_768,
91+
LTC_OID_MLKEM_1024,
6292
LTC_OID_DH,
6393
LTC_OID_NUM
6494
};
@@ -652,6 +682,16 @@ int ec25519_crypto_ctx( unsigned char *out, unsigned long *outlen,
652682
const unsigned char *ctx, unsigned long ctxlen);
653683
#endif /* LTC_CURVE25519 */
654684

685+
#ifdef LTC_MLKEM
686+
int mlkem_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, mlkem_key *key);
687+
#endif
688+
#ifdef LTC_MLDSA
689+
int mldsa_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, mldsa_key *key);
690+
#endif
691+
#ifdef LTC_SLHDSA
692+
int slhdsa_import_pkcs8_asn1(ltc_asn1_list *alg_id, ltc_asn1_list *priv_key, slhdsa_key *key);
693+
#endif
694+
655695
#ifdef LTC_DER
656696

657697
#define LTC_ASN1_IS_TYPE(e, t) (((e) != NULL) && ((e)->type == (t)))

src/misc/pem/pem_pkcs.c

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,42 @@ static const struct {
6363
[LTC_OID_X25519] = { LTC_PKA_X25519, (pkcs8_import_fn)x25519_import_pkcs8_asn1 },
6464
[LTC_OID_ED25519] = { LTC_PKA_ED25519, (pkcs8_import_fn)ed25519_import_pkcs8_asn1 },
6565
#endif
66+
#ifdef LTC_MLDSA
67+
[LTC_OID_MLDSA_44] = { LTC_PKA_MLDSA, (pkcs8_import_fn)mldsa_import_pkcs8_asn1 },
68+
[LTC_OID_MLDSA_65] = { LTC_PKA_MLDSA, (pkcs8_import_fn)mldsa_import_pkcs8_asn1 },
69+
[LTC_OID_MLDSA_87] = { LTC_PKA_MLDSA, (pkcs8_import_fn)mldsa_import_pkcs8_asn1 },
70+
#endif
71+
#ifdef LTC_SLHDSA
72+
[LTC_OID_SLHDSA_SHA2_128S] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
73+
[LTC_OID_SLHDSA_SHA2_128F] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
74+
[LTC_OID_SLHDSA_SHA2_192S] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
75+
[LTC_OID_SLHDSA_SHA2_192F] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
76+
[LTC_OID_SLHDSA_SHA2_256S] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
77+
[LTC_OID_SLHDSA_SHA2_256F] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
78+
[LTC_OID_SLHDSA_SHAKE_128S] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
79+
[LTC_OID_SLHDSA_SHAKE_128F] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
80+
[LTC_OID_SLHDSA_SHAKE_192S] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
81+
[LTC_OID_SLHDSA_SHAKE_192F] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
82+
[LTC_OID_SLHDSA_SHAKE_256S] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
83+
[LTC_OID_SLHDSA_SHAKE_256F] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
84+
[LTC_OID_HASH_SLHDSA_SHA2_128S_WITH_SHA256] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
85+
[LTC_OID_HASH_SLHDSA_SHA2_128F_WITH_SHA256] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
86+
[LTC_OID_HASH_SLHDSA_SHA2_192S_WITH_SHA512] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
87+
[LTC_OID_HASH_SLHDSA_SHA2_192F_WITH_SHA512] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
88+
[LTC_OID_HASH_SLHDSA_SHA2_256S_WITH_SHA512] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
89+
[LTC_OID_HASH_SLHDSA_SHA2_256F_WITH_SHA512] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
90+
[LTC_OID_HASH_SLHDSA_SHAKE_128S_WITH_SHAKE128] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
91+
[LTC_OID_HASH_SLHDSA_SHAKE_128F_WITH_SHAKE128] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
92+
[LTC_OID_HASH_SLHDSA_SHAKE_192S_WITH_SHAKE256] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
93+
[LTC_OID_HASH_SLHDSA_SHAKE_192F_WITH_SHAKE256] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
94+
[LTC_OID_HASH_SLHDSA_SHAKE_256S_WITH_SHAKE256] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
95+
[LTC_OID_HASH_SLHDSA_SHAKE_256F_WITH_SHAKE256] = { LTC_PKA_SLHDSA, (pkcs8_import_fn)slhdsa_import_pkcs8_asn1 },
96+
#endif
97+
#ifdef LTC_MLKEM
98+
[LTC_OID_MLKEM_512] = { LTC_PKA_MLKEM, (pkcs8_import_fn)mlkem_import_pkcs8_asn1 },
99+
[LTC_OID_MLKEM_768] = { LTC_PKA_MLKEM, (pkcs8_import_fn)mlkem_import_pkcs8_asn1 },
100+
[LTC_OID_MLKEM_1024] = { LTC_PKA_MLKEM, (pkcs8_import_fn)mlkem_import_pkcs8_asn1 },
101+
#endif
66102
};
67103

68104
static int s_import_pkcs8(unsigned char *asn1_cert, unsigned long asn1_len, ltc_pka_key *k, const password_ctx *pw_ctx)
@@ -122,6 +158,15 @@ static const import_fn s_import_openssl_fns[LTC_PKA_NUM] = {
122158
[LTC_PKA_X25519] = (import_fn)x25519_import,
123159
[LTC_PKA_ED25519] = (import_fn)ed25519_import,
124160
#endif
161+
#ifdef LTC_MLDSA
162+
[LTC_PKA_MLDSA] = (import_fn)mldsa_import,
163+
#endif
164+
#ifdef LTC_SLHDSA
165+
[LTC_PKA_SLHDSA] = (import_fn)slhdsa_import,
166+
#endif
167+
#ifdef LTC_MLKEM
168+
[LTC_PKA_MLKEM] = (import_fn)mlkem_import,
169+
#endif
125170
};
126171

127172
static int s_decode(struct get_char *g, ltc_pka_key *k, const password_ctx *pw_ctx)

src/pk/asn1/oid/pk_get.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,36 @@ static const oid_table_entry pka_oids[] = {
1818
{ LTC_OID_EC_PRIMEF, LTC_PKA_EC, "1.2.840.10045.1.1" },
1919
{ LTC_OID_X25519, LTC_PKA_X25519, "1.3.101.110" },
2020
{ LTC_OID_ED25519, LTC_PKA_ED25519, "1.3.101.112" },
21+
{ LTC_OID_MLDSA_44, LTC_PKA_MLDSA, "2.16.840.1.101.3.4.3.17" },
22+
{ LTC_OID_MLDSA_65, LTC_PKA_MLDSA, "2.16.840.1.101.3.4.3.18" },
23+
{ LTC_OID_MLDSA_87, LTC_PKA_MLDSA, "2.16.840.1.101.3.4.3.19" },
24+
{ LTC_OID_SLHDSA_SHA2_128S, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.20" },
25+
{ LTC_OID_SLHDSA_SHA2_128F, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.21" },
26+
{ LTC_OID_SLHDSA_SHA2_192S, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.22" },
27+
{ LTC_OID_SLHDSA_SHA2_192F, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.23" },
28+
{ LTC_OID_SLHDSA_SHA2_256S, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.24" },
29+
{ LTC_OID_SLHDSA_SHA2_256F, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.25" },
30+
{ LTC_OID_SLHDSA_SHAKE_128S, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.26" },
31+
{ LTC_OID_SLHDSA_SHAKE_128F, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.27" },
32+
{ LTC_OID_SLHDSA_SHAKE_192S, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.28" },
33+
{ LTC_OID_SLHDSA_SHAKE_192F, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.29" },
34+
{ LTC_OID_SLHDSA_SHAKE_256S, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.30" },
35+
{ LTC_OID_SLHDSA_SHAKE_256F, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.31" },
36+
{ LTC_OID_HASH_SLHDSA_SHA2_128S_WITH_SHA256, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.35" },
37+
{ LTC_OID_HASH_SLHDSA_SHA2_128F_WITH_SHA256, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.36" },
38+
{ LTC_OID_HASH_SLHDSA_SHA2_192S_WITH_SHA512, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.37" },
39+
{ LTC_OID_HASH_SLHDSA_SHA2_192F_WITH_SHA512, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.38" },
40+
{ LTC_OID_HASH_SLHDSA_SHA2_256S_WITH_SHA512, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.39" },
41+
{ LTC_OID_HASH_SLHDSA_SHA2_256F_WITH_SHA512, LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.40" },
42+
{ LTC_OID_HASH_SLHDSA_SHAKE_128S_WITH_SHAKE128,LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.41" },
43+
{ LTC_OID_HASH_SLHDSA_SHAKE_128F_WITH_SHAKE128,LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.42" },
44+
{ LTC_OID_HASH_SLHDSA_SHAKE_192S_WITH_SHAKE256,LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.43" },
45+
{ LTC_OID_HASH_SLHDSA_SHAKE_192F_WITH_SHAKE256,LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.44" },
46+
{ LTC_OID_HASH_SLHDSA_SHAKE_256S_WITH_SHAKE256,LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.45" },
47+
{ LTC_OID_HASH_SLHDSA_SHAKE_256F_WITH_SHAKE256,LTC_PKA_SLHDSA, "2.16.840.1.101.3.4.3.46" },
48+
{ LTC_OID_MLKEM_512, LTC_PKA_MLKEM, "2.16.840.1.101.3.4.4.1" },
49+
{ LTC_OID_MLKEM_768, LTC_PKA_MLKEM, "2.16.840.1.101.3.4.4.2" },
50+
{ LTC_OID_MLKEM_1024,LTC_PKA_MLKEM, "2.16.840.1.101.3.4.4.3" },
2151
{ LTC_OID_DH, LTC_PKA_DH, "1.2.840.113549.1.3.1" },
2252
};
2353

src/pk/asn1/x509/x509_import_spki.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ static const import_fn s_import_x509_fns[LTC_PKA_NUM] = {
2525
[LTC_PKA_X25519] = (import_fn)x25519_import_x509,
2626
[LTC_PKA_ED25519] = (import_fn)ed25519_import_x509,
2727
#endif
28+
#ifdef LTC_MLKEM
29+
[LTC_PKA_MLKEM] = (import_fn)mlkem_import_x509,
30+
#endif
31+
#ifdef LTC_MLDSA
32+
[LTC_PKA_MLDSA] = (import_fn)mldsa_import_x509,
33+
#endif
34+
#ifdef LTC_SLHDSA
35+
[LTC_PKA_SLHDSA] = (import_fn)slhdsa_import_x509,
36+
#endif
2837
};
2938

3039
int x509_import_spki(const unsigned char *asn1_cert, unsigned long asn1_len, ltc_pka_key *k, ltc_asn1_list **root)

src/pk/pka_key.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,21 @@ void pka_key_free(ltc_pka_key *key)
3737
case LTC_PKA_EC:
3838
#if defined(LTC_MECC)
3939
ecc_free(&key->u.ecc);
40+
#endif
41+
break;
42+
case LTC_PKA_MLDSA:
43+
#if defined(LTC_MLDSA)
44+
mldsa_free((mldsa_key*)&key->u.mldsa);
45+
#endif
46+
break;
47+
case LTC_PKA_SLHDSA:
48+
#if defined(LTC_SLHDSA)
49+
slhdsa_free((slhdsa_key*)&key->u.slhdsa);
50+
#endif
51+
break;
52+
case LTC_PKA_MLKEM:
53+
#if defined(LTC_MLKEM)
54+
mlkem_free((mlkem_key*)&key->u.mlkem);
4055
#endif
4156
break;
4257
default:

0 commit comments

Comments
 (0)