Skip to content

Commit ece2b25

Browse files
committed
Zeroize intermediate values - ML-KEM
1 parent 4a63c90 commit ece2b25

3 files changed

Lines changed: 55 additions & 1 deletion

File tree

prepare_source

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
git_src -b debian/openssl-3.5.5-1 https://salsa.debian.org/debian/openssl.git
22
import_upstream_patches
33

4-
version_suffix="gl51"
4+
version_suffix="gl52"
55
fips_version_suffix="${version_suffix}"
66
sed "s/SED_MARKER_FOR_FIPS_VERSION/$fips_version_suffix/" <patches-debian/rules.patch.tpl > patches-debian/rules.patch
77
apply_patches patches-debian
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
--- a/crypto/ml_kem/ml_kem.c
2+
+++ b/crypto/ml_kem/ml_kem.c
3+
@@ -1309,6 +1309,7 @@ static __owur int matrix_expand(EVP_MD_CTX *mdctx, ML_KEM_KEY *key)
4+
uint8_t input[ML_KEM_RANDOM_BYTES + 2];
5+
int rank = key->vinfo->rank;
6+
int i, j;
7+
+ int ret = 0;
8+
9+
memcpy(input, key->rho, ML_KEM_RANDOM_BYTES);
10+
for (i = 0; i < rank; i++) {
11+
@@ -1318,10 +1319,13 @@ static __owur int matrix_expand(EVP_MD_CTX *mdctx, ML_KEM_KEY *key)
12+
if (!EVP_DigestInit_ex(mdctx, key->shake128_md, NULL)
13+
|| !EVP_DigestUpdate(mdctx, input, sizeof(input))
14+
|| !sample_scalar(out++, mdctx))
15+
- return 0;
16+
+ goto end;
17+
}
18+
}
19+
- return 1;
20+
+ ret = 1;
21+
+end:
22+
+ OPENSSL_cleanse(input, sizeof(input));
23+
+ return ret;
24+
}
25+
26+
/*
27+
@@ -1739,6 +1743,7 @@ static __owur int genkey(const uint8_t seed[ML_KEM_SEED_BYTES],
28+
end:
29+
OPENSSL_cleanse((void *)augmented_seed, ML_KEM_RANDOM_BYTES);
30+
OPENSSL_cleanse((void *)sigma, ML_KEM_RANDOM_BYTES);
31+
+ OPENSSL_cleanse((void *)hashed, ML_KEM_RANDOM_BYTES);
32+
if (ret == 0) {
33+
ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_INTERNAL_ERROR,
34+
"internal error while generating %s private key",
35+
@@ -2323,6 +2328,7 @@ int ossl_ml_kem_decap(uint8_t *shared_secret, size_t slen,
36+
*/
37+
if (!hash_h_pubkey(expected_pkhash, mdctx, (ML_KEM_KEY *)key)) {
38+
EVP_MD_CTX_free(mdctx);
39+
+ OPENSSL_cleanse((void *)expected_pkhash, ML_KEM_PKHASH_BYTES);
40+
return 0;
41+
}
42+
if (memcmp(expected_pkhash, key->pkhash, ML_KEM_PKHASH_BYTES) != 0) {
43+
@@ -2330,8 +2336,10 @@ int ossl_ml_kem_decap(uint8_t *shared_secret, size_t slen,
44+
ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_PASSED_INVALID_ARGUMENT,
45+
"%s decapsulation key hash mismatch",
46+
vinfo->algorithm_name);
47+
+ OPENSSL_cleanse((void *)expected_pkhash, ML_KEM_PKHASH_BYTES);
48+
return 0;
49+
}
50+
+ OPENSSL_cleanse((void *)expected_pkhash, ML_KEM_PKHASH_BYTES);
51+
#if defined(OPENSSL_CONSTANT_TIME_VALIDATION)
52+
/*
53+
* Data derived from |s| and |z| defaults secret, and to avoid side-channel

upstream_patches/series

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,4 @@ CVE-2026-45446.patch
6868
CVE-2026-45447.patch
6969
CVE-2026-7383.patch
7070
CVE-2026-9076.patch
71+
0051-zeroize-vars-mlkem.patch

0 commit comments

Comments
 (0)