diff options
Diffstat (limited to 'src/lib/libcrypto/mlkem/mlkem1024.c')
-rw-r--r-- | src/lib/libcrypto/mlkem/mlkem1024.c | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/src/lib/libcrypto/mlkem/mlkem1024.c b/src/lib/libcrypto/mlkem/mlkem1024.c index 04e106299a..27e34898d1 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.8 2025/05/19 06:47:40 beck Exp $ */ | 1 | /* $OpenBSD: mlkem1024.c,v 1.9 2025/05/19 07:40:17 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> |
@@ -1088,10 +1088,11 @@ mlkem_parse_public_key_no_hash(struct public_key *pub, CBS *in) | |||
1088 | { | 1088 | { |
1089 | CBS t_bytes; | 1089 | CBS t_bytes; |
1090 | 1090 | ||
1091 | if (!CBS_get_bytes(in, &t_bytes, kEncodedVectorSize) || | 1091 | if (!CBS_get_bytes(in, &t_bytes, kEncodedVectorSize)) |
1092 | !vector_decode(&pub->t, CBS_data(&t_bytes), kLog2Prime)) { | ||
1093 | return 0; | 1092 | return 0; |
1094 | } | 1093 | if (!vector_decode(&pub->t, CBS_data(&t_bytes), kLog2Prime)) |
1094 | return 0; | ||
1095 | |||
1095 | memcpy(pub->rho, CBS_data(in), sizeof(pub->rho)); | 1096 | memcpy(pub->rho, CBS_data(in), sizeof(pub->rho)); |
1096 | if (!CBS_skip(in, sizeof(pub->rho))) | 1097 | if (!CBS_skip(in, sizeof(pub->rho))) |
1097 | return 0; | 1098 | return 0; |
@@ -1107,10 +1108,11 @@ MLKEM1024_parse_public_key(struct MLKEM1024_public_key *public_key, | |||
1107 | CBS cbs; | 1108 | CBS cbs; |
1108 | 1109 | ||
1109 | CBS_init(&cbs, input, input_len); | 1110 | CBS_init(&cbs, input, input_len); |
1110 | if (!mlkem_parse_public_key_no_hash(pub, &cbs) || | 1111 | if (!mlkem_parse_public_key_no_hash(pub, &cbs)) |
1111 | CBS_len(&cbs) != 0) { | ||
1112 | return 0; | 1112 | return 0; |
1113 | } | 1113 | if (CBS_len(&cbs) != 0) |
1114 | return 0; | ||
1115 | |||
1114 | hash_h(pub->public_key_hash, input, input_len); | 1116 | hash_h(pub->public_key_hash, input, input_len); |
1115 | 1117 | ||
1116 | return 1; | 1118 | return 1; |
@@ -1129,13 +1131,15 @@ MLKEM1024_marshal_private_key(CBB *out, | |||
1129 | return 0; | 1131 | return 0; |
1130 | } | 1132 | } |
1131 | vector_encode(s_output, &priv->s, kLog2Prime); | 1133 | vector_encode(s_output, &priv->s, kLog2Prime); |
1132 | if (!mlkem_marshal_public_key(out, &priv->pub) || | 1134 | if (!mlkem_marshal_public_key(out, &priv->pub)) |
1133 | !CBB_add_bytes(out, priv->pub.public_key_hash, | ||
1134 | sizeof(priv->pub.public_key_hash)) || | ||
1135 | !CBB_add_bytes(out, priv->fo_failure_secret, | ||
1136 | sizeof(priv->fo_failure_secret))) { | ||
1137 | return 0; | 1135 | return 0; |
1138 | } | 1136 | if (!CBB_add_bytes(out, priv->pub.public_key_hash, |
1137 | sizeof(priv->pub.public_key_hash))) | ||
1138 | return 0; | ||
1139 | if (!CBB_add_bytes(out, priv->fo_failure_secret, | ||
1140 | sizeof(priv->fo_failure_secret))) | ||
1141 | return 0; | ||
1142 | |||
1139 | return 1; | 1143 | return 1; |
1140 | } | 1144 | } |
1141 | 1145 | ||
@@ -1149,11 +1153,13 @@ MLKEM1024_parse_private_key(struct MLKEM1024_private_key *out_private_key, | |||
1149 | 1153 | ||
1150 | CBS_init(&cbs, input, input_len); | 1154 | CBS_init(&cbs, input, input_len); |
1151 | 1155 | ||
1152 | if (!CBS_get_bytes(&cbs, &s_bytes, kEncodedVectorSize) || | 1156 | if (!CBS_get_bytes(&cbs, &s_bytes, kEncodedVectorSize)) |
1153 | !vector_decode(&priv->s, CBS_data(&s_bytes), kLog2Prime) || | ||
1154 | !mlkem_parse_public_key_no_hash(&priv->pub, &cbs)) { | ||
1155 | return 0; | 1157 | return 0; |
1156 | } | 1158 | if (!vector_decode(&priv->s, CBS_data(&s_bytes), kLog2Prime)) |
1159 | return 0; | ||
1160 | if (!mlkem_parse_public_key_no_hash(&priv->pub, &cbs)) | ||
1161 | return 0; | ||
1162 | |||
1157 | memcpy(priv->pub.public_key_hash, CBS_data(&cbs), | 1163 | memcpy(priv->pub.public_key_hash, CBS_data(&cbs), |
1158 | sizeof(priv->pub.public_key_hash)); | 1164 | sizeof(priv->pub.public_key_hash)); |
1159 | if (!CBS_skip(&cbs, sizeof(priv->pub.public_key_hash))) | 1165 | if (!CBS_skip(&cbs, sizeof(priv->pub.public_key_hash))) |