summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbeck <>2025-05-20 00:33:41 +0000
committerbeck <>2025-05-20 00:33:41 +0000
commitb7d2b00a69a9fe4778d1d5eb40407b1bba0ea5a8 (patch)
treef450ccfc382edbfea6d9c43fe327c89137b6f196
parent5b7f1ed9416db994bc8609108b201a62033ed7b6 (diff)
downloadopenbsd-b7d2b00a69a9fe4778d1d5eb40407b1bba0ea5a8.tar.gz
openbsd-b7d2b00a69a9fe4778d1d5eb40407b1bba0ea5a8.tar.bz2
openbsd-b7d2b00a69a9fe4778d1d5eb40407b1bba0ea5a8.zip
Make MLKEM1024_marshal_private_key consistent with the public_key funcitons
Even though this should remain internal, make it the same as the public key marshal function, and make the needed fallout changes in regress. ok kenjiro@, tb@
-rw-r--r--src/lib/libcrypto/mlkem/mlkem1024.c64
-rw-r--r--src/lib/libcrypto/mlkem/mlkem_internal.h7
-rw-r--r--src/regress/lib/libcrypto/mlkem/mlkem_iteration_tests.c10
-rw-r--r--src/regress/lib/libcrypto/mlkem/mlkem_tests.c14
-rw-r--r--src/regress/lib/libcrypto/mlkem/mlkem_tests_util.c21
-rw-r--r--src/regress/lib/libcrypto/mlkem/mlkem_tests_util.h6
-rw-r--r--src/regress/lib/libcrypto/mlkem/mlkem_unittest.c12
7 files changed, 68 insertions, 66 deletions
diff --git a/src/lib/libcrypto/mlkem/mlkem1024.c b/src/lib/libcrypto/mlkem/mlkem1024.c
index 27e34898d1..59ebaaa3cb 100644
--- a/src/lib/libcrypto/mlkem/mlkem1024.c
+++ b/src/lib/libcrypto/mlkem/mlkem1024.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: mlkem1024.c,v 1.9 2025/05/19 07:40:17 beck Exp $ */ 1/* $OpenBSD: mlkem1024.c,v 1.10 2025/05/20 00:33:40 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2024, Google Inc. 3 * Copyright (c) 2024, Google Inc.
4 * Copyright (c) 2024, Bob Beck <beck@obtuse.com> 4 * Copyright (c) 2024, Bob Beck <beck@obtuse.com>
@@ -612,6 +612,19 @@ vector_encode(uint8_t *out, const vector *a, int bits)
612 } 612 }
613} 613}
614 614
615/* Encodes an entire vector as above, but adding it to a CBB */
616static int
617vector_encode_cbb(CBB *cbb, const vector *a, int bits)
618{
619 uint8_t *encoded_vector;
620
621 if (!CBB_add_space(cbb, &encoded_vector, kEncodedVectorSize))
622 return 0;
623 vector_encode(encoded_vector, a, bits);
624
625 return 1;
626}
627
615/* 628/*
616 * scalar_decode parses |DEGREE * bits| bits from |in| into |DEGREE| values in 629 * scalar_decode parses |DEGREE * bits| bits from |in| into |DEGREE| values in
617 * |out|. It returns one on success and zero if any parsed value is >= 630 * |out|. It returns one on success and zero if any parsed value is >=
@@ -851,16 +864,9 @@ LCRYPTO_ALIAS(MLKEM1024_private_key_from_seed);
851static int 864static int
852mlkem_marshal_public_key(CBB *out, const struct public_key *pub) 865mlkem_marshal_public_key(CBB *out, const struct public_key *pub)
853{ 866{
854 uint8_t *vector_output; 867 if (!vector_encode_cbb(out, &pub->t, kLog2Prime))
855
856 if (!CBB_add_space(out, &vector_output, kEncodedVectorSize)) {
857 return 0; 868 return 0;
858 } 869 return CBB_add_bytes(out, pub->rho, sizeof(pub->rho));
859 vector_encode(vector_output, &pub->t, kLog2Prime);
860 if (!CBB_add_bytes(out, pub->rho, sizeof(pub->rho))) {
861 return 0;
862 }
863 return 1;
864} 870}
865 871
866int 872int
@@ -1120,27 +1126,37 @@ MLKEM1024_parse_public_key(struct MLKEM1024_public_key *public_key,
1120LCRYPTO_ALIAS(MLKEM1024_parse_public_key); 1126LCRYPTO_ALIAS(MLKEM1024_parse_public_key);
1121 1127
1122int 1128int
1123MLKEM1024_marshal_private_key(CBB *out, 1129MLKEM1024_marshal_private_key(const struct MLKEM1024_private_key *private_key,
1124 const struct MLKEM1024_private_key *private_key) 1130 uint8_t **out_private_key, size_t *out_private_key_len)
1125{ 1131{
1126 const struct private_key *const priv = private_key_1024_from_external( 1132 const struct private_key *const priv = private_key_1024_from_external(
1127 private_key); 1133 private_key);
1128 uint8_t *s_output; 1134 CBB cbb;
1135 int ret = 0;
1129 1136
1130 if (!CBB_add_space(out, &s_output, kEncodedVectorSize)) { 1137 if (!CBB_init(&cbb, MLKEM1024_PRIVATE_KEY_BYTES))
1131 return 0; 1138 goto err;
1132 } 1139
1133 vector_encode(s_output, &priv->s, kLog2Prime); 1140 if (!vector_encode_cbb(&cbb, &priv->s, kLog2Prime))
1134 if (!mlkem_marshal_public_key(out, &priv->pub)) 1141 goto err;
1135 return 0; 1142 if (!mlkem_marshal_public_key(&cbb, &priv->pub))
1136 if (!CBB_add_bytes(out, priv->pub.public_key_hash, 1143 goto err;
1144 if (!CBB_add_bytes(&cbb, priv->pub.public_key_hash,
1137 sizeof(priv->pub.public_key_hash))) 1145 sizeof(priv->pub.public_key_hash)))
1138 return 0; 1146 goto err;
1139 if (!CBB_add_bytes(out, priv->fo_failure_secret, 1147 if (!CBB_add_bytes(&cbb, priv->fo_failure_secret,
1140 sizeof(priv->fo_failure_secret))) 1148 sizeof(priv->fo_failure_secret)))
1141 return 0; 1149 goto err;
1142 1150
1143 return 1; 1151 if (!CBB_finish(&cbb, out_private_key, out_private_key_len))
1152 goto err;
1153
1154 ret = 1;
1155
1156 err:
1157 CBB_cleanup(&cbb);
1158
1159 return ret;
1144} 1160}
1145 1161
1146int 1162int
diff --git a/src/lib/libcrypto/mlkem/mlkem_internal.h b/src/lib/libcrypto/mlkem/mlkem_internal.h
index aed051e980..1e051970a8 100644
--- a/src/lib/libcrypto/mlkem/mlkem_internal.h
+++ b/src/lib/libcrypto/mlkem/mlkem_internal.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: mlkem_internal.h,v 1.6 2025/05/19 07:53:00 beck Exp $ */ 1/* $OpenBSD: mlkem_internal.h,v 1.7 2025/05/20 00:33:40 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2023, Google Inc. 3 * Copyright (c) 2023, Google Inc.
4 * 4 *
@@ -96,8 +96,9 @@ int MLKEM1024_generate_key_external_entropy(
96 * standard format for ML-KEM private keys. It returns one on success or zero on 96 * standard format for ML-KEM private keys. It returns one on success or zero on
97 * allocation error. 97 * allocation error.
98 */ 98 */
99int MLKEM1024_marshal_private_key(CBB *out, 99int MLKEM1024_marshal_private_key(
100 const struct MLKEM1024_private_key *private_key); 100 const struct MLKEM1024_private_key *private_key, uint8_t **out_private_key,
101 size_t *out_private_key_len);
101 102
102/* 103/*
103 * MLKEM_encap_external_entropy behaves like |MLKEM_encap|, but uses 104 * MLKEM_encap_external_entropy behaves like |MLKEM_encap|, but uses
diff --git a/src/regress/lib/libcrypto/mlkem/mlkem_iteration_tests.c b/src/regress/lib/libcrypto/mlkem/mlkem_iteration_tests.c
index e0fd9ca241..b93243023c 100644
--- a/src/regress/lib/libcrypto/mlkem/mlkem_iteration_tests.c
+++ b/src/regress/lib/libcrypto/mlkem/mlkem_iteration_tests.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: mlkem_iteration_tests.c,v 1.4 2025/05/19 07:53:00 beck Exp $ */ 1/* $OpenBSD: mlkem_iteration_tests.c,v 1.5 2025/05/20 00:33:41 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2024 Google Inc. 3 * Copyright (c) 2024 Google Inc.
4 * Copyright (c) 2024 Bob Beck <beck@obtuse.com> 4 * Copyright (c) 2024 Bob Beck <beck@obtuse.com>
@@ -73,7 +73,7 @@ struct iteration_ctx {
73 void *priv; 73 void *priv;
74 void *pub; 74 void *pub;
75 75
76 mlkem_encode_private_key_fn encode_private_key; 76 mlkem_marshal_private_key_fn marshal_private_key;
77 mlkem_encap_external_entropy_fn encap_external_entropy; 77 mlkem_encap_external_entropy_fn encap_external_entropy;
78 mlkem_generate_key_external_entropy_fn generate_key_external_entropy; 78 mlkem_generate_key_external_entropy_fn generate_key_external_entropy;
79 mlkem_public_from_private_fn public_from_private; 79 mlkem_public_from_private_fn public_from_private;
@@ -127,7 +127,7 @@ MlkemIterativeTest(struct iteration_ctx *ctx)
127 ctx->encoded_public_key_len); 127 ctx->encoded_public_key_len);
128 128
129 /* marshal priv to dk as encoded_private_key */ 129 /* marshal priv to dk as encoded_private_key */
130 if (!ctx->encode_private_key(ctx->priv, &encoded_private_key, 130 if (!ctx->marshal_private_key(ctx->priv, &encoded_private_key,
131 &encoded_private_key_len)) 131 &encoded_private_key_len))
132 errx(1, "encode private key"); 132 errx(1, "encode private key");
133 133
@@ -185,7 +185,7 @@ main(void)
185 .priv = &priv768, 185 .priv = &priv768,
186 .pub = &pub768, 186 .pub = &pub768,
187 .encap_external_entropy = mlkem768_encap_external_entropy, 187 .encap_external_entropy = mlkem768_encap_external_entropy,
188 .encode_private_key = mlkem768_marshal_private_key, 188 .marshal_private_key = mlkem768_marshal_private_key,
189 .generate_key_external_entropy = 189 .generate_key_external_entropy =
190 mlkem768_generate_key_external_entropy, 190 mlkem768_generate_key_external_entropy,
191 .public_from_private = mlkem768_public_from_private, 191 .public_from_private = mlkem768_public_from_private,
@@ -210,7 +210,7 @@ main(void)
210 .priv = &priv1024, 210 .priv = &priv1024,
211 .pub = &pub1024, 211 .pub = &pub1024,
212 .encap_external_entropy = mlkem1024_encap_external_entropy, 212 .encap_external_entropy = mlkem1024_encap_external_entropy,
213 .encode_private_key = mlkem1024_encode_private_key, 213 .marshal_private_key = mlkem1024_marshal_private_key,
214 .generate_key_external_entropy = 214 .generate_key_external_entropy =
215 mlkem1024_generate_key_external_entropy, 215 mlkem1024_generate_key_external_entropy,
216 .public_from_private = mlkem1024_public_from_private, 216 .public_from_private = mlkem1024_public_from_private,
diff --git a/src/regress/lib/libcrypto/mlkem/mlkem_tests.c b/src/regress/lib/libcrypto/mlkem/mlkem_tests.c
index 84b71aebb0..8e04dc6ad2 100644
--- a/src/regress/lib/libcrypto/mlkem/mlkem_tests.c
+++ b/src/regress/lib/libcrypto/mlkem/mlkem_tests.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: mlkem_tests.c,v 1.5 2025/05/19 07:53:00 beck Exp $ */ 1/* $OpenBSD: mlkem_tests.c,v 1.6 2025/05/20 00:33:41 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2024 Google Inc. 3 * Copyright (c) 2024 Google Inc.
4 * Copyright (c) 2024 Theo Buehler <tb@openbsd.org> 4 * Copyright (c) 2024 Theo Buehler <tb@openbsd.org>
@@ -444,7 +444,7 @@ struct keygen_ctx {
444 size_t public_key_len; 444 size_t public_key_len;
445 445
446 mlkem_generate_key_external_entropy_fn generate_key_external_entropy; 446 mlkem_generate_key_external_entropy_fn generate_key_external_entropy;
447 mlkem_encode_private_key_fn encode_private_key; 447 mlkem_marshal_private_key_fn marshal_private_key;
448}; 448};
449 449
450enum keygen_states { 450enum keygen_states {
@@ -515,7 +515,7 @@ MlkemKeygenFileTest(struct keygen_ctx *keygen)
515 515
516 keygen->generate_key_external_entropy(keygen->encoded_public_key, 516 keygen->generate_key_external_entropy(keygen->encoded_public_key,
517 keygen->private_key, CBS_data(&seed)); 517 keygen->private_key, CBS_data(&seed));
518 if (!keygen->encode_private_key(keygen->private_key, 518 if (!keygen->marshal_private_key(keygen->private_key,
519 &encoded_private_key, &encoded_private_key_len)) { 519 &encoded_private_key, &encoded_private_key_len)) {
520 parse_info(p, "encode private key"); 520 parse_info(p, "encode private key");
521 goto err; 521 goto err;
@@ -614,7 +614,7 @@ MlkemNistKeygenFileTest(struct keygen_ctx *keygen)
614 614
615 keygen->generate_key_external_entropy(keygen->encoded_public_key, 615 keygen->generate_key_external_entropy(keygen->encoded_public_key,
616 keygen->private_key, seed); 616 keygen->private_key, seed);
617 if (!keygen->encode_private_key(keygen->private_key, 617 if (!keygen->marshal_private_key(keygen->private_key,
618 &encoded_private_key, &encoded_private_key_len)) { 618 &encoded_private_key, &encoded_private_key_len)) {
619 parse_info(p, "encode private key"); 619 parse_info(p, "encode private key");
620 goto err; 620 goto err;
@@ -661,7 +661,7 @@ mlkem_keygen_tests(const char *fn, size_t size, enum test_type test_type)
661 661
662 .generate_key_external_entropy = 662 .generate_key_external_entropy =
663 mlkem768_generate_key_external_entropy, 663 mlkem768_generate_key_external_entropy,
664 .encode_private_key = 664 .marshal_private_key =
665 mlkem768_marshal_private_key, 665 mlkem768_marshal_private_key,
666 }; 666 };
667 struct MLKEM1024_private_key private_key1024; 667 struct MLKEM1024_private_key private_key1024;
@@ -675,8 +675,8 @@ mlkem_keygen_tests(const char *fn, size_t size, enum test_type test_type)
675 675
676 .generate_key_external_entropy = 676 .generate_key_external_entropy =
677 mlkem1024_generate_key_external_entropy, 677 mlkem1024_generate_key_external_entropy,
678 .encode_private_key = 678 .marshal_private_key =
679 mlkem1024_encode_private_key, 679 mlkem1024_marshal_private_key,
680 }; 680 };
681 681
682 if (size == 768 && test_type == TEST_TYPE_NORMAL) 682 if (size == 768 && test_type == TEST_TYPE_NORMAL)
diff --git a/src/regress/lib/libcrypto/mlkem/mlkem_tests_util.c b/src/regress/lib/libcrypto/mlkem/mlkem_tests_util.c
index 5ec8c08585..68bd5d4871 100644
--- a/src/regress/lib/libcrypto/mlkem/mlkem_tests_util.c
+++ b/src/regress/lib/libcrypto/mlkem/mlkem_tests_util.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: mlkem_tests_util.c,v 1.7 2025/05/19 07:53:00 beck Exp $ */ 1/* $OpenBSD: mlkem_tests_util.c,v 1.8 2025/05/20 00:33:41 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2024 Google Inc. 3 * Copyright (c) 2024 Google Inc.
4 * Copyright (c) 2024 Bob Beck <beck@obtuse.com> 4 * Copyright (c) 2024 Bob Beck <beck@obtuse.com>
@@ -75,25 +75,10 @@ mlkem768_marshal_public_key(const void *public_key, uint8_t **out_buf,
75} 75}
76 76
77int 77int
78mlkem1024_encode_private_key(const void *private_key, uint8_t **out_buf, 78mlkem1024_marshal_private_key(const void *private_key, uint8_t **out_buf,
79 size_t *out_len) 79 size_t *out_len)
80{ 80{
81 CBB cbb; 81 return MLKEM1024_marshal_private_key(private_key, out_buf, out_len);
82 int ret = 0;
83
84 if (!CBB_init(&cbb, MLKEM1024_PUBLIC_KEY_BYTES))
85 goto err;
86 if (!MLKEM1024_marshal_private_key(&cbb, private_key))
87 goto err;
88 if (!CBB_finish(&cbb, out_buf, out_len))
89 goto err;
90
91 ret = 1;
92
93 err:
94 CBB_cleanup(&cbb);
95
96 return ret;
97} 82}
98 83
99int 84int
diff --git a/src/regress/lib/libcrypto/mlkem/mlkem_tests_util.h b/src/regress/lib/libcrypto/mlkem/mlkem_tests_util.h
index 5c2c400ea5..1235309f60 100644
--- a/src/regress/lib/libcrypto/mlkem/mlkem_tests_util.h
+++ b/src/regress/lib/libcrypto/mlkem/mlkem_tests_util.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: mlkem_tests_util.h,v 1.6 2025/05/19 07:53:00 beck Exp $ */ 1/* $OpenBSD: mlkem_tests_util.h,v 1.7 2025/05/20 00:33:41 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2024 Bob Beck <beck@obtuse.com> 3 * Copyright (c) 2024 Bob Beck <beck@obtuse.com>
4 * Copyright (c) 2024 Theo Buehler <tb@openbsd.org> 4 * Copyright (c) 2024 Theo Buehler <tb@openbsd.org>
@@ -34,7 +34,7 @@ int mlkem768_marshal_private_key(const void *priv, uint8_t **out_buf,
34 size_t *out_len); 34 size_t *out_len);
35int mlkem768_marshal_public_key(const void *pub, uint8_t **out_buf, 35int mlkem768_marshal_public_key(const void *pub, uint8_t **out_buf,
36 size_t *out_len); 36 size_t *out_len);
37int mlkem1024_encode_private_key(const void *priv, uint8_t **out_buf, 37int mlkem1024_marshal_private_key(const void *priv, uint8_t **out_buf,
38 size_t *out_len); 38 size_t *out_len);
39int mlkem1024_marshal_public_key(const void *pub, uint8_t **out_buf, 39int mlkem1024_marshal_public_key(const void *pub, uint8_t **out_buf,
40 size_t *out_len); 40 size_t *out_len);
@@ -69,7 +69,7 @@ int mlkem1024_parse_private_key(void *priv, const uint8_t *in, size_t in_len);
69int mlkem1024_parse_public_key(void *pub, const uint8_t *in, size_t in_len); 69int mlkem1024_parse_public_key(void *pub, const uint8_t *in, size_t in_len);
70void mlkem1024_public_from_private(void *out_public_key, const void *private_key); 70void mlkem1024_public_from_private(void *out_public_key, const void *private_key);
71 71
72typedef int (*mlkem_encode_private_key_fn)(const void *, uint8_t **, size_t *); 72typedef int (*mlkem_marshal_private_key_fn)(const void *, uint8_t **, size_t *);
73typedef int (*mlkem_marshal_public_key_fn)(const void *, uint8_t **, size_t *); 73typedef int (*mlkem_marshal_public_key_fn)(const void *, uint8_t **, size_t *);
74typedef int (*mlkem_decap_fn)(uint8_t [MLKEM_SHARED_SECRET_BYTES], 74typedef int (*mlkem_decap_fn)(uint8_t [MLKEM_SHARED_SECRET_BYTES],
75 const uint8_t *, size_t, const void *); 75 const uint8_t *, size_t, const void *);
diff --git a/src/regress/lib/libcrypto/mlkem/mlkem_unittest.c b/src/regress/lib/libcrypto/mlkem/mlkem_unittest.c
index ce1e797904..3c6aab13c7 100644
--- a/src/regress/lib/libcrypto/mlkem/mlkem_unittest.c
+++ b/src/regress/lib/libcrypto/mlkem/mlkem_unittest.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: mlkem_unittest.c,v 1.9 2025/05/19 07:53:00 beck Exp $ */ 1/* $OpenBSD: mlkem_unittest.c,v 1.10 2025/05/20 00:33:41 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2024 Google Inc. 3 * Copyright (c) 2024 Google Inc.
4 * Copyright (c) 2024 Bob Beck <beck@obtuse.com> 4 * Copyright (c) 2024 Bob Beck <beck@obtuse.com>
@@ -41,7 +41,7 @@ struct unittest_ctx {
41 mlkem_generate_key_fn generate_key; 41 mlkem_generate_key_fn generate_key;
42 mlkem_parse_private_key_fn parse_private_key; 42 mlkem_parse_private_key_fn parse_private_key;
43 mlkem_parse_public_key_fn parse_public_key; 43 mlkem_parse_public_key_fn parse_public_key;
44 mlkem_encode_private_key_fn encode_private_key; 44 mlkem_marshal_private_key_fn marshal_private_key;
45 mlkem_marshal_public_key_fn marshal_public_key; 45 mlkem_marshal_public_key_fn marshal_public_key;
46 mlkem_public_from_private_fn public_from_private; 46 mlkem_public_from_private_fn public_from_private;
47}; 47};
@@ -113,7 +113,7 @@ MlKemUnitTest(struct unittest_ctx *ctx)
113 free(tmp_buf); 113 free(tmp_buf);
114 tmp_buf = NULL; 114 tmp_buf = NULL;
115 115
116 if (!ctx->encode_private_key(ctx->priv, &encoded_private_key, 116 if (!ctx->marshal_private_key(ctx->priv, &encoded_private_key,
117 &encoded_private_key_len)) { 117 &encoded_private_key_len)) {
118 warnx("mlkem768_encode_private_key"); 118 warnx("mlkem768_encode_private_key");
119 failed |= 1; 119 failed |= 1;
@@ -137,7 +137,7 @@ MlKemUnitTest(struct unittest_ctx *ctx)
137 failed |= 1; 137 failed |= 1;
138 } 138 }
139 139
140 if (!ctx->encode_private_key(ctx->priv2, &tmp_buf, &tmp_buf_len)) { 140 if (!ctx->marshal_private_key(ctx->priv2, &tmp_buf, &tmp_buf_len)) {
141 warnx("encode_private_key"); 141 warnx("encode_private_key");
142 failed |= 1; 142 failed |= 1;
143 } 143 }
@@ -205,7 +205,7 @@ mlkem768_unittest(void)
205 .generate_key = mlkem768_generate_key, 205 .generate_key = mlkem768_generate_key,
206 .parse_private_key = mlkem768_parse_private_key, 206 .parse_private_key = mlkem768_parse_private_key,
207 .parse_public_key = mlkem768_parse_public_key, 207 .parse_public_key = mlkem768_parse_public_key,
208 .encode_private_key = mlkem768_marshal_private_key, 208 .marshal_private_key = mlkem768_marshal_private_key,
209 .marshal_public_key = mlkem768_marshal_public_key, 209 .marshal_public_key = mlkem768_marshal_public_key,
210 .public_from_private = mlkem768_public_from_private, 210 .public_from_private = mlkem768_public_from_private,
211 }; 211 };
@@ -234,7 +234,7 @@ mlkem1024_unittest(void)
234 .generate_key = mlkem1024_generate_key, 234 .generate_key = mlkem1024_generate_key,
235 .parse_private_key = mlkem1024_parse_private_key, 235 .parse_private_key = mlkem1024_parse_private_key,
236 .parse_public_key = mlkem1024_parse_public_key, 236 .parse_public_key = mlkem1024_parse_public_key,
237 .encode_private_key = mlkem1024_encode_private_key, 237 .marshal_private_key = mlkem1024_marshal_private_key,
238 .marshal_public_key = mlkem1024_marshal_public_key, 238 .marshal_public_key = mlkem1024_marshal_public_key,
239 .public_from_private = mlkem1024_public_from_private, 239 .public_from_private = mlkem1024_public_from_private,
240 }; 240 };