Accepting request 1270033 from security:tls
OBS-URL: https://build.opensuse.org/request/show/1270033 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/openssl-3?expand=0&rev=40
This commit is contained in:
@@ -1,570 +0,0 @@
|
||||
From 5f4f350ce797a7cd2fdca84c474ee196da9d6fae Mon Sep 17 00:00:00 2001
|
||||
From: Clemens Lang <cllang@redhat.com>
|
||||
Date: Wed, 18 May 2022 17:25:59 +0200
|
||||
Subject: [PATCH] Deny SHA-1 signature verification in FIPS provider
|
||||
|
||||
For RHEL, we already disable SHA-1 signatures by default in the default
|
||||
provider, so it is unexpected that the FIPS provider would have a more
|
||||
lenient configuration in this regard. Additionally, we do not think
|
||||
continuing to accept SHA-1 signatures is a good idea due to the
|
||||
published chosen-prefix collision attacks.
|
||||
|
||||
As a consequence, disable verification of SHA-1 signatures in the FIPS
|
||||
provider.
|
||||
|
||||
This requires adjusting a few tests that would otherwise fail:
|
||||
- 30-test_acvp: Remove the test vectors that use SHA-1.
|
||||
- 30-test_evp: Mark tests in evppkey_rsa_common.txt and
|
||||
evppkey_ecdsa.txt that use SHA-1 digests as "Availablein = default",
|
||||
which will not run them when the FIPS provider is enabled.
|
||||
- 80-test_cms: Re-create all certificates in test/smime-certificates
|
||||
with SHA256 signatures while keeping the same private keys. These
|
||||
certificates were signed with SHA-1 and thus fail verification in the
|
||||
FIPS provider.
|
||||
Fix some other tests by explicitly running them in the default
|
||||
provider, where SHA-1 is available.
|
||||
- 80-test_ssl_old: Skip tests that rely on SSLv3 and SHA-1 when run with
|
||||
the FIPS provider.
|
||||
|
||||
Signed-off-by: Clemens Lang <cllang@redhat.com>
|
||||
---
|
||||
providers/implementations/signature/dsa_sig.c | 4 --
|
||||
.../implementations/signature/ecdsa_sig.c | 4 --
|
||||
providers/implementations/signature/rsa_sig.c | 8 +--
|
||||
test/acvp_test.inc | 20 -------
|
||||
.../30-test_evp_data/evppkey_ecdsa.txt | 7 +++
|
||||
.../30-test_evp_data/evppkey_rsa_common.txt | 51 +++++++++++++++-
|
||||
test/recipes/80-test_cms.t | 4 +-
|
||||
test/recipes/80-test_ssl_old.t | 4 ++
|
||||
test/smime-certs/smdh.pem | 18 +++---
|
||||
test/smime-certs/smdsa1.pem | 60 +++++++++----------
|
||||
test/smime-certs/smdsa2.pem | 60 +++++++++----------
|
||||
test/smime-certs/smdsa3.pem | 60 +++++++++----------
|
||||
test/smime-certs/smec1.pem | 30 +++++-----
|
||||
test/smime-certs/smec2.pem | 30 +++++-----
|
||||
test/smime-certs/smec3.pem | 30 +++++-----
|
||||
test/smime-certs/smroot.pem | 38 ++++++------
|
||||
test/smime-certs/smrsa1.pem | 38 ++++++------
|
||||
test/smime-certs/smrsa2.pem | 38 ++++++------
|
||||
test/smime-certs/smrsa3.pem | 38 ++++++------
|
||||
19 files changed, 286 insertions(+), 256 deletions(-)
|
||||
|
||||
Index: openssl-3.2.3/providers/implementations/signature/dsa_sig.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/signature/dsa_sig.c
|
||||
+++ openssl-3.2.3/providers/implementations/signature/dsa_sig.c
|
||||
@@ -129,11 +129,7 @@ static int dsa_setup_md(PROV_DSA_CTX *ct
|
||||
EVP_MD *md = EVP_MD_fetch(ctx->libctx, mdname, mdprops);
|
||||
int md_nid;
|
||||
size_t mdname_len = strlen(mdname);
|
||||
-#ifdef FIPS_MODULE
|
||||
- int sha1_allowed = (ctx->operation != EVP_PKEY_OP_SIGN);
|
||||
-#else
|
||||
int sha1_allowed = 0;
|
||||
-#endif
|
||||
md_nid = ossl_digest_get_approved_nid_with_sha1(ctx->libctx, md,
|
||||
sha1_allowed);
|
||||
|
||||
Index: openssl-3.2.3/providers/implementations/signature/ecdsa_sig.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/signature/ecdsa_sig.c
|
||||
+++ openssl-3.2.3/providers/implementations/signature/ecdsa_sig.c
|
||||
@@ -247,11 +247,7 @@ static int ecdsa_setup_md(PROV_ECDSA_CTX
|
||||
"%s could not be fetched", mdname);
|
||||
return 0;
|
||||
}
|
||||
-#ifdef FIPS_MODULE
|
||||
- sha1_allowed = (ctx->operation != EVP_PKEY_OP_SIGN);
|
||||
-#else
|
||||
sha1_allowed = 0;
|
||||
-#endif
|
||||
md_nid = ossl_digest_get_approved_nid_with_sha1(ctx->libctx, md,
|
||||
sha1_allowed);
|
||||
if (md_nid < 0) {
|
||||
Index: openssl-3.2.3/providers/implementations/signature/rsa_sig.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/signature/rsa_sig.c
|
||||
+++ openssl-3.2.3/providers/implementations/signature/rsa_sig.c
|
||||
@@ -321,11 +321,7 @@ static int rsa_setup_md(PROV_RSA_CTX *ct
|
||||
EVP_MD *md = EVP_MD_fetch(ctx->libctx, mdname, mdprops);
|
||||
int md_nid;
|
||||
size_t mdname_len = strlen(mdname);
|
||||
-#ifdef FIPS_MODULE
|
||||
- int sha1_allowed = (ctx->operation != EVP_PKEY_OP_SIGN);
|
||||
-#else
|
||||
int sha1_allowed = 0;
|
||||
-#endif
|
||||
md_nid = ossl_digest_rsa_sign_get_md_nid(ctx->libctx, md,
|
||||
sha1_allowed);
|
||||
|
||||
@@ -1416,8 +1412,10 @@ static int rsa_set_ctx_params(void *vprs
|
||||
|
||||
if (prsactx->md == NULL && pmdname == NULL
|
||||
&& pad_mode == RSA_PKCS1_PSS_PADDING) {
|
||||
+#ifdef FIPS_MODULE
|
||||
+ pmdname = RSA_DEFAULT_DIGEST_NAME_NONLEGACY;
|
||||
+#else
|
||||
pmdname = RSA_DEFAULT_DIGEST_NAME;
|
||||
-#ifndef FIPS_MODULE
|
||||
if (!ossl_ctx_legacy_digest_signatures_allowed(prsactx->libctx, 0)) {
|
||||
pmdname = RSA_DEFAULT_DIGEST_NAME_NONLEGACY;
|
||||
}
|
||||
Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_ecdsa.txt
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/30-test_evp_data/evppkey_ecdsa.txt
|
||||
+++ openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_ecdsa.txt
|
||||
@@ -37,12 +37,14 @@ PrivPubKeyPair = P-256:P-256-PUBLIC
|
||||
|
||||
Title = ECDSA tests
|
||||
|
||||
+Availablein = default
|
||||
Verify = P-256
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
Output = 3045022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec8
|
||||
|
||||
# Digest too long
|
||||
+Availablein = default
|
||||
Verify = P-256
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF12345"
|
||||
@@ -50,6 +52,7 @@ Output = 3045022100b1d1cb1a577035bccdd5a
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
# Digest too short
|
||||
+Availablein = default
|
||||
Verify = P-256
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF123"
|
||||
@@ -57,6 +60,7 @@ Output = 3045022100b1d1cb1a577035bccdd5a
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
# Digest invalid
|
||||
+Availablein = default
|
||||
Verify = P-256
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1235"
|
||||
@@ -64,6 +68,7 @@ Output = 3045022100b1d1cb1a577035bccdd5a
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
# Invalid signature
|
||||
+Availablein = default
|
||||
Verify = P-256
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
@@ -79,12 +84,14 @@ Output = 3045022100b1d1cb1a577035bccdd5a
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
# BER signature
|
||||
+Availablein = default
|
||||
Verify = P-256
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
Output = 3080022100b1d1cb1a577035bccdd5a86c6148c2cc7c633cd42b7234139b593076d041e15202201898cdd52b41ca502098184b409cf83a21bc945006746e3b7cea52234e043ec80000
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
+Availablein = default
|
||||
Verify = P-256-PUBLIC
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
+++ openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
@@ -96,6 +96,7 @@ NDL6WCBbets=
|
||||
|
||||
Title = RSA tests
|
||||
|
||||
+Availablein = default
|
||||
Verify = RSA-2048
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
@@ -112,24 +113,28 @@ Ctrl = digest:SHA512-224
|
||||
Input = "0123456789ABCDEF123456789ABC"
|
||||
Output = 5f720e9488139bb21e1c2f027fd5ce5993e6d31c5a8faaee833487b3a944d66891178868ace8070cad3ee2ffbe54aa4885a15fd1a7cc5166970fe1fd8c0423e72bd3e3b56fc4a53ed80aaaeca42497f0ec3c62113edc05cd006608f5eef7ce3ad4cba1069f68731dd28a524a1f93fcdc5547112d48d45586dd943ba0d443be9635720d8a61697c54c96627f0d85c5fbeaa3b4af86a65cf2fc3800dd5de34c046985f25d0efc0bb6edccc1d08b3a4fb9c8faffe181c7e68b31e374ad1440a4a664eec9ca0dc53a9d2f5bc7d9940d866f64201bcbc63612754df45727ea24b531d7de83d1bb707444859fa35521320c33bf6f4dbeb6fb56e653adbf7af15843f17
|
||||
|
||||
+Availablein = default
|
||||
VerifyRecover = RSA-2048
|
||||
Ctrl = digest:SHA1
|
||||
Input = c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad
|
||||
Output = "0123456789ABCDEF1234"
|
||||
|
||||
# Leading zero in the signature
|
||||
+Availablein = default
|
||||
Verify = RSA-2048
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
Output = 00c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
+Availablein = default
|
||||
VerifyRecover = RSA-2048
|
||||
Ctrl = digest:SHA1
|
||||
Input = 00c09d402423cbf233d26cae21f954547bc43fe80fd41360a0336cfdbe9aedad05bef6fd2eaee6cd60089a52482d4809a238149520df3bdde4cb9e23d9307b05c0a6f327052325a29adf2cc95b66523be7024e2a585c3d4db15dfbe146efe0ecdc0402e33fe5d40324ee96c5c3edd374a15cdc0f5d84aa243c0f07e188c6518fbfceae158a9943be398e31097da81b62074f626eff738be6160741d5a26957a482b3251fd85d8df78b98148459de10aa93305dbb4a5230aa1da291a9b0e481918f99b7638d72bb687f97661d304ae145d64a474437a4ef39d7b8059332ddeb07e92bf6e0e3acaf8afedc93795e4511737ec1e7aab6d5bc9466afc950c1c17b48ad
|
||||
Result = KEYOP_ERROR
|
||||
|
||||
# Mismatched digest
|
||||
+Availablein = default
|
||||
Verify = RSA-2048
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1233"
|
||||
@@ -137,6 +142,7 @@ Output = c09d402423cbf233d26cae21f954547
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
# Corrupted signature
|
||||
+Availablein = default
|
||||
Verify = RSA-2048
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1233"
|
||||
@@ -144,6 +150,7 @@ Output = c09d402423cbf233d26cae21f954547
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
# parameter is not NULLt
|
||||
+Availablein = default
|
||||
Verify = RSA-2048
|
||||
Ctrl = digest:sha1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
@@ -151,42 +158,49 @@ Output = 3ec3fc29eb6e122bd7aa361cd09fe1b
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
# embedded digest too long
|
||||
+Availablein = default
|
||||
Verify = RSA-2048
|
||||
Ctrl = digest:sha1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
Output = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
+Availablein = default
|
||||
VerifyRecover = RSA-2048
|
||||
Ctrl = digest:sha1
|
||||
Input = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d
|
||||
Result = KEYOP_ERROR
|
||||
|
||||
# embedded digest too short
|
||||
+Availablein = default
|
||||
Verify = RSA-2048
|
||||
Ctrl = digest:sha1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
Output = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
+Availablein = default
|
||||
VerifyRecover = RSA-2048
|
||||
Ctrl = digest:sha1
|
||||
Input = afec9a0d5330a08f54283bb4a9d4e7e7e70fc1342336c4c766fba713f66970151c6e27413c48c33864ea45a0238787004f338ed3e21b53b0fe9c1151c42c388cbc7cba5a06b706c407a5b48324fbe994dc7afc3a19fb3d2841e66222596c14cd72a0f0a7455a019d8eb554f59c0183f9552b75aa96fee8bf935945e079ca283d2bd3534a86f11351f6d6181fbf433e5b01a6d1422145c7a72214d3aacdd5d3af12b2d6bf6438f9f9a64010d8aeed801c87f0859412b236150b86a545f7239be022f4a7ad246b59df87514294cb4a4c7c5a997ee53c66054d9f38ca4e76c1f7af83c30f737ef70f83a45aebe18238ddb95e1998814ca4fc72388f1533147c169d
|
||||
Result = KEYOP_ERROR
|
||||
|
||||
# Garbage after DigestInfo
|
||||
+Availablein = default
|
||||
Verify = RSA-2048
|
||||
Ctrl = digest:sha1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
Output = 9ee34872d4271a7d8808af0a4052a145a6d6a8437d00da3ed14428c7f087cd39f4d43334c41af63e7fa1ba363fee7bcef401d9d36a662abbab55ce89a696e1be0dfa19a5d09ca617dd488787b6048baaefeb29bc8688b2fe3882de2b77c905b5a8b56cf9616041e5ec934ba6de863efe93acc4eef783fe7f72a00fa65d6093ed32bf98ce527e62ccb1d56317f4be18b7e0f55d7c36617d2d0678a306e3350956b662ac15df45215dd8f6b314babb9788e6c272fa461e4c9b512a11a4b92bc77c3a4c95c903fccb238794eca5c750477bf56ea6ee6a167367d881b485ae3889e7c489af8fdf38e0c0f2aed780831182e34abedd43c39281b290774bf35cc25274
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
+Availablein = default
|
||||
VerifyRecover = RSA-2048
|
||||
Ctrl = digest:sha1
|
||||
Input = 9ee34872d4271a7d8808af0a4052a145a6d6a8437d00da3ed14428c7f087cd39f4d43334c41af63e7fa1ba363fee7bcef401d9d36a662abbab55ce89a696e1be0dfa19a5d09ca617dd488787b6048baaefeb29bc8688b2fe3882de2b77c905b5a8b56cf9616041e5ec934ba6de863efe93acc4eef783fe7f72a00fa65d6093ed32bf98ce527e62ccb1d56317f4be18b7e0f55d7c36617d2d0678a306e3350956b662ac15df45215dd8f6b314babb9788e6c272fa461e4c9b512a11a4b92bc77c3a4c95c903fccb238794eca5c750477bf56ea6ee6a167367d881b485ae3889e7c489af8fdf38e0c0f2aed780831182e34abedd43c39281b290774bf35cc25274
|
||||
Result = KEYOP_ERROR
|
||||
|
||||
# invalid tag for parameter
|
||||
+Availablein = default
|
||||
Verify = RSA-2048
|
||||
Ctrl = digest:sha1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
@@ -195,6 +209,7 @@ Result = VERIFY_ERROR
|
||||
|
||||
# Verify using public key
|
||||
|
||||
+Availablein = default
|
||||
Verify = RSA-2048-PUBLIC
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
@@ -858,6 +873,8 @@ Input="0123456789ABCDEF0123456789ABCDEF"
|
||||
Output=4DE433D5844043EF08D354DA03CB29068780D52706D7D1E4D50EFB7D58C9D547D83A747DDD0635A96B28F854E50145518482CB49E963054621B53C60C498D07C16E9C2789C893CF38D4D86900DE71BDE463BD2761D1271E358C7480A1AC0BAB930DDF39602AD1BC165B5D7436B516B7A7858E8EB7AB1C420EEB482F4D207F0E462B1724959320A084E13848D11D10FB593E66BF680BF6D3F345FC3E9C3DE60ABBAC37E1C6EC80A268C8D9FC49626C679097AA690BC1AA662B95EB8DB70390861AA0898229F9349B4B5FDD030D4928C47084708A933144BE23BD3C6E661B85B2C0EF9ED36D498D5B7320E8194D363D4AD478C059BAE804181965E0B81B663158A
|
||||
|
||||
# Verify using salt length auto detect
|
||||
+# In the FIPS provider on SUSE/openSUSE, the default digest for PSS signatures is SHA-256
|
||||
+Availablein = default
|
||||
Verify = RSA-2048-PUBLIC
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_pss_saltlen:auto
|
||||
@@ -892,6 +909,10 @@ Output=4DE433D5844043EF08D354DA03CB29068
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
# Verify using default parameters, explicitly setting parameters
|
||||
+# NOTE: RSA-PSS-DEFAULT contains a restriction to use SHA1 as digest, which
|
||||
+# SUSE/openSUSE do not support in FIPS mode; all these tests are thus marked
|
||||
+# Availablein = default.
|
||||
+Availablein = default
|
||||
Verify = RSA-PSS-DEFAULT
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_pss_saltlen:20
|
||||
@@ -900,6 +921,7 @@ Input="0123456789ABCDEF0123"
|
||||
Output = 3EFE09D88509027D837BFA5F8471CF7B69E6DF395DD999BB9CA42021F15722D9AC76670507C6BCFB73F64FB2211B611B8F140E76EBDB064BD762FDBA89D019E304A0D6B274E1C2FE1DF50005598A0306AF805416094E2A5BA60BC72BDE38CE061E853ED40F14967A8B9CA4DC739B462F89558F12FDF2D8D19FBEF16AD66FE2DDDA8BEE983ECBD873064244849D8D94B5B33F45E076871A47ED653E73257A2BE2DB3C0878094B0D2B6B682C8007DFD989425FB39A1FEEC9EED5876414601A49176EC344F5E3EDEE81CA2DDD29B7364F4638112CB3A547E2BC170E28CB66BDABE863754BE8AD5BA230567B575266F4B6B4CF81F28310ABF05351CC9E2DB85D00BF
|
||||
|
||||
# Verify explicitly setting parameters "digest" salt length
|
||||
+Availablein = default
|
||||
Verify = RSA-PSS-DEFAULT
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_pss_saltlen:digest
|
||||
@@ -908,18 +930,21 @@ Input="0123456789ABCDEF0123"
|
||||
Output = 3EFE09D88509027D837BFA5F8471CF7B69E6DF395DD999BB9CA42021F15722D9AC76670507C6BCFB73F64FB2211B611B8F140E76EBDB064BD762FDBA89D019E304A0D6B274E1C2FE1DF50005598A0306AF805416094E2A5BA60BC72BDE38CE061E853ED40F14967A8B9CA4DC739B462F89558F12FDF2D8D19FBEF16AD66FE2DDDA8BEE983ECBD873064244849D8D94B5B33F45E076871A47ED653E73257A2BE2DB3C0878094B0D2B6B682C8007DFD989425FB39A1FEEC9EED5876414601A49176EC344F5E3EDEE81CA2DDD29B7364F4638112CB3A547E2BC170E28CB66BDABE863754BE8AD5BA230567B575266F4B6B4CF81F28310ABF05351CC9E2DB85D00BF
|
||||
|
||||
# Verify using salt length larger than minimum
|
||||
+Availablein = default
|
||||
Verify = RSA-PSS-DEFAULT
|
||||
Ctrl = rsa_pss_saltlen:30
|
||||
Input="0123456789ABCDEF0123"
|
||||
Output = 6BF7EDC63A0BA184EEEC7F3020FEC8F5EBF38C2B76481881F48BCCE5796E7AB294548BA9AE810457C7723CABD1BDE94CF59CF7C0FC7461B22760C8ED703DD98E97BFDD61FA8D1181C411F6DEE5FF159F4850746D78EDEE385A363DC28E2CB373D5CAD7953F3BD5E639BE345732C03A1BDEA268814DA036EB1891C82D4012F3B903D86636055F87B96FC98806AD1B217685A4D754046A5DE0B0D7870664BE07902153EC85BA457BE7D7F89D7FE0F626D02A9CBBB2BB479DDA1A5CAE75247FB7BF6BFB15C1D3FD9E6B1573CCDBC72011C3B97716058BB11C7EA2E4E56ADAFE1F5DE6A7FD405AC5890100F9C3408EFFB5C73BF73F48177FF743B4B819D0699D507B
|
||||
|
||||
# Verify using maximum salt length
|
||||
+Availablein = default
|
||||
Verify = RSA-PSS-DEFAULT
|
||||
Ctrl = rsa_pss_saltlen:max
|
||||
Input="0123456789ABCDEF0123"
|
||||
Output = 4470DCFE812DEE2E58E4301D4ED274AB348FE040B724B2CD1D8CD0914BFF375F0B86FCB32BFA8AEA9BD22BD7C4F1ADD4F3D215A5CFCC99055BAFECFC23800E9BECE19A08C66BEBC5802122D13A732E5958FC228DCC0B49B5B4B1154F032D8FA2F3564AA949C1310CC9266B0C47F86D449AC9D2E7678347E7266E2D7C888CCE1ADF44A109A293F8516AE2BD94CE220F26E137DB8E7A66BB9FCE052CDC1D0BE24D8CEBB20D10125F26B069F117044B9E1D16FDDAABCA5340AE1702F37D0E1C08A2E93801C0A41035C6C73DA02A0E32227EAFB0B85E79107B59650D0EE7DC32A6772CCCE90F06369B2880FE87ED76997BA61F5EA818091EE88F8B0D6F24D02A3FC6
|
||||
|
||||
# Attempt to change salt length below minimum
|
||||
+Availablein = default
|
||||
Verify = RSA-PSS-DEFAULT
|
||||
Ctrl = rsa_pss_saltlen:0
|
||||
Result = PKEY_CTRL_ERROR
|
||||
@@ -927,21 +952,25 @@ Result = PKEY_CTRL_ERROR
|
||||
# Attempt to change padding mode
|
||||
# Note this used to return PKEY_CTRL_INVALID
|
||||
# but it is limited because setparams only returns 0 or 1.
|
||||
+Availablein = default
|
||||
Verify = RSA-PSS-DEFAULT
|
||||
Ctrl = rsa_padding_mode:pkcs1
|
||||
Result = PKEY_CTRL_ERROR
|
||||
|
||||
# Attempt to change digest
|
||||
+Availablein = default
|
||||
Verify = RSA-PSS-DEFAULT
|
||||
Ctrl = digest:sha256
|
||||
Result = PKEY_CTRL_ERROR
|
||||
|
||||
# Invalid key: rejected when we try to init
|
||||
+Availablein = default
|
||||
Verify = RSA-PSS-BAD
|
||||
Result = KEYOP_INIT_ERROR
|
||||
Reason = invalid salt length
|
||||
|
||||
# Invalid key: rejected when we try to init
|
||||
+Availablein = default
|
||||
Verify = RSA-PSS-BAD2
|
||||
Result = KEYOP_INIT_ERROR
|
||||
Reason = invalid salt length
|
||||
@@ -960,36 +989,42 @@ CAltWyuLbfXWce9jd8CSHLI8Jwpw4lmOb/idGfEF
|
||||
4fINDOjP+yJJvZohNwIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-1
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=cd8b6538cb8e8de566b68bd067569dbf1ee2718e
|
||||
Output=9074308fb598e9701b2294388e52f971faac2b60a5145af185df5287b5ed2887e57ce7fd44dc8634e407c8e0e4360bc226f3ec227f9d9e54638e8d31f5051215df6ebb9c2f9579aa77598a38f914b5b9c1bd83c4e2f9f382a0d0aa3542ffee65984a601bc69eb28deb27dca12c82c2d4c3f66cd500f1ff2b994d8a4e30cbb33c
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-1
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=e35befc17a1d160b9ce35fbd8eb16e7ee491d3fd
|
||||
Output=3ef7f46e831bf92b32274142a585ffcefbdca7b32ae90d10fb0f0c729984f04ef29a9df0780775ce43739b97838390db0a5505e63de927028d9d29b219ca2c4517832558a55d694a6d25b9dab66003c4cccd907802193be5170d26147d37b93590241be51c25055f47ef62752cfbe21418fafe98c22c4d4d47724fdb5669e843
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-1
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=0652ec67bcee30f9d2699122b91c19abdba89f91
|
||||
Output=666026fba71bd3e7cf13157cc2c51a8e4aa684af9778f91849f34335d141c00154c4197621f9624a675b5abc22ee7d5baaffaae1c9baca2cc373b3f33e78e6143c395a91aa7faca664eb733afd14d8827259d99a7550faca501ef2b04e33c23aa51f4b9e8282efdb728cc0ab09405a91607c6369961bc8270d2d4f39fce612b1
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-1
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=39c21c4cceda9c1adf839c744e1212a6437575ec
|
||||
Output=4609793b23e9d09362dc21bb47da0b4f3a7622649a47d464019b9aeafe53359c178c91cd58ba6bcb78be0346a7bc637f4b873d4bab38ee661f199634c547a1ad8442e03da015b136e543f7ab07c0c13e4225b8de8cce25d4f6eb8400f81f7e1833b7ee6e334d370964ca79fdb872b4d75223b5eeb08101591fb532d155a6de87
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-1
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=36dae913b77bd17cae6e7b09453d24544cebb33c
|
||||
Output=1d2aad221ca4d31ddf13509239019398e3d14b32dc34dc5af4aeaea3c095af73479cf0a45e5629635a53a018377615b16cb9b13b3e09d671eb71e387b8545c5960da5a64776e768e82b2c93583bf104c3fdb23512b7b4e89f633dd0063a530db4524b01c3f384c09310e315a79dcd3d684022a7f31c865a664e316978b759fad
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-1
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
@@ -1005,36 +1040,42 @@ swU7R97S7NSkyu/WFIM9yLtiLzF+0Ha4BX/o3j+E
|
||||
0w5GMTmBXG/U/VrFuBcqRSMOy2MYoE8UVdhOWosCAwEAAQ==
|
||||
-----END PUBLIC KEY-----
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-9
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=2715a49b8b0012cd7aee84c116446e6dfe3faec0
|
||||
Output=586107226c3ce013a7c8f04d1a6a2959bb4b8e205ba43a27b50f124111bc35ef589b039f5932187cb696d7d9a32c0c38300a5cdda4834b62d2eb240af33f79d13dfbf095bf599e0d9686948c1964747b67e89c9aba5cd85016236f566cc5802cb13ead51bc7ca6bef3b94dcbdbb1d570469771df0e00b1a8a06777472d2316279edae86474668d4e1efff95f1de61c6020da32ae92bbf16520fef3cf4d88f61121f24bbd9fe91b59caf1235b2a93ff81fc403addf4ebdea84934a9cdaf8e1a9e
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-9
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=2dac956d53964748ac364d06595827c6b4f143cd
|
||||
Output=80b6d643255209f0a456763897ac9ed259d459b49c2887e5882ecb4434cfd66dd7e1699375381e51cd7f554f2c271704b399d42b4be2540a0eca61951f55267f7c2878c122842dadb28b01bd5f8c025f7e228418a673c03d6bc0c736d0a29546bd67f786d9d692ccea778d71d98c2063b7a71092187a4d35af108111d83e83eae46c46aa34277e06044589903788f1d5e7cee25fb485e92949118814d6f2c3ee361489016f327fb5bc517eb50470bffa1afa5f4ce9aa0ce5b8ee19bf5501b958
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-9
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=28d98c46cccafbd3bc04e72f967a54bd3ea12298
|
||||
Output=484408f3898cd5f53483f80819efbf2708c34d27a8b2a6fae8b322f9240237f981817aca1846f1084daa6d7c0795f6e5bf1af59c38e1858437ce1f7ec419b98c8736adf6dd9a00b1806d2bd3ad0a73775e05f52dfef3a59ab4b08143f0df05cd1ad9d04bececa6daa4a2129803e200cbc77787caf4c1d0663a6c5987b605952019782caf2ec1426d68fb94ed1d4be816a7ed081b77e6ab330b3ffc073820fecde3727fcbe295ee61a050a343658637c3fd659cfb63736de32d9f90d3c2f63eca
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-9
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=0866d2ff5a79f25ef668cd6f31b42dee421e4c0e
|
||||
Output=84ebeb481be59845b46468bafb471c0112e02b235d84b5d911cbd1926ee5074ae0424495cb20e82308b8ebb65f419a03fb40e72b78981d88aad143053685172c97b29c8b7bf0ae73b5b2263c403da0ed2f80ff7450af7828eb8b86f0028bd2a8b176a4d228cccea18394f238b09ff758cc00bc04301152355742f282b54e663a919e709d8da24ade5500a7b9aa50226e0ca52923e6c2d860ec50ff480fa57477e82b0565f4379f79c772d5c2da80af9fbf325ece6fc20b00961614bee89a183e
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-9
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=6a5b4be4cd36cc97dfde9995efbf8f097a4a991a
|
||||
Output=82102df8cb91e7179919a04d26d335d64fbc2f872c44833943241de8454810274cdf3db5f42d423db152af7135f701420e39b494a67cbfd19f9119da233a23da5c6439b5ba0d2bc373eee3507001378d4a4073856b7fe2aba0b5ee93b27f4afec7d4d120921c83f606765b02c19e4d6a1a3b95fa4c422951be4f52131077ef17179729cddfbdb56950dbaceefe78cb16640a099ea56d24389eef10f8fecb31ba3ea3b227c0a86698bb89e3e9363905bf22777b2a3aa521b65b4cef76d83bde4c
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-9
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
@@ -1052,36 +1093,42 @@ F7jfF3jbOB3OCctK0FilEQAac4GY7ifPVaE7dUU5
|
||||
BQIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-10
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=9596bb630cf6a8d4ea4600422b9eba8b13675dd4
|
||||
Output=82c2b160093b8aa3c0f7522b19f87354066c77847abf2a9fce542d0e84e920c5afb49ffdfdace16560ee94a1369601148ebad7a0e151cf16331791a5727d05f21e74e7eb811440206935d744765a15e79f015cb66c532c87a6a05961c8bfad741a9a6657022894393e7223739796c02a77455d0f555b0ec01ddf259b6207fd0fd57614cef1a5573baaff4ec00069951659b85f24300a25160ca8522dc6e6727e57d019d7e63629b8fe5e89e25cc15beb3a647577559299280b9b28f79b0409000be25bbd96408ba3b43cc486184dd1c8e62553fa1af4040f60663de7f5e49c04388e257f1ce89c95dab48a315d9b66b1b7628233876ff2385230d070d07e1666
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-10
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=b503319399277fd6c1c8f1033cbf04199ea21716
|
||||
Output=14ae35d9dd06ba92f7f3b897978aed7cd4bf5ff0b585a40bd46ce1b42cd2703053bb9044d64e813d8f96db2dd7007d10118f6f8f8496097ad75e1ff692341b2892ad55a633a1c55e7f0a0ad59a0e203a5b8278aec54dd8622e2831d87174f8caff43ee6c46445345d84a59659bfb92ecd4c818668695f34706f66828a89959637f2bf3e3251c24bdba4d4b7649da0022218b119c84e79a6527ec5b8a5f861c159952e23ec05e1e717346faefe8b1686825bd2b262fb2531066c0de09acde2e4231690728b5d85e115a2f6b92b79c25abc9bd9399ff8bcf825a52ea1f56ea76dd26f43baafa18bfa92a504cbd35699e26d1dcc5a2887385f3c63232f06f3244c3
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-10
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=50aaede8536b2c307208b275a67ae2df196c7628
|
||||
Output=6e3e4d7b6b15d2fb46013b8900aa5bbb3939cf2c095717987042026ee62c74c54cffd5d7d57efbbf950a0f5c574fa09d3fc1c9f513b05b4ff50dd8df7edfa20102854c35e592180119a70ce5b085182aa02d9ea2aa90d1df03f2daae885ba2f5d05afdac97476f06b93b5bc94a1a80aa9116c4d615f333b098892b25fface266f5db5a5a3bcc10a824ed55aad35b727834fb8c07da28fcf416a5d9b2224f1f8b442b36f91e456fdea2d7cfe3367268de0307a4c74e924159ed33393d5e0655531c77327b89821bdedf880161c78cd4196b5419f7acc3f13e5ebf161b6e7c6724716ca33b85c2e25640192ac2859651d50bde7eb976e51cec828b98b6563b86bb
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-10
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=aa0b72b8b371ddd10c8ae474425ccccf8842a294
|
||||
Output=34047ff96c4dc0dc90b2d4ff59a1a361a4754b255d2ee0af7d8bf87c9bc9e7ddeede33934c63ca1c0e3d262cb145ef932a1f2c0a997aa6a34f8eaee7477d82ccf09095a6b8acad38d4eec9fb7eab7ad02da1d11d8e54c1825e55bf58c2a23234b902be124f9e9038a8f68fa45dab72f66e0945bf1d8bacc9044c6f07098c9fcec58a3aab100c805178155f030a124c450e5acbda47d0e4f10b80a23f803e774d023b0015c20b9f9bbe7c91296338d5ecb471cafb032007b67a60be5f69504a9f01abb3cb467b260e2bce860be8d95bf92c0c8e1496ed1e528593a4abb6df462dde8a0968dffe4683116857a232f5ebf6c85be238745ad0f38f767a5fdbf486fb
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-10
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Input=fad3902c9750622a2bc672622c48270cc57d3ea8
|
||||
Output=7e0935ea18f4d6c1d17ce82eb2b3836c55b384589ce19dfe743363ac9948d1f346b7bfddfe92efd78adb21faefc89ade42b10f374003fe122e67429a1cb8cbd1f8d9014564c44d120116f4990f1a6e38774c194bd1b8213286b077b0499d2e7b3f434ab12289c556684deed78131934bb3dd6537236f7c6f3dcb09d476be07721e37e1ceed9b2f7b406887bd53157305e1c8b4f84d733bc1e186fe06cc59b6edb8f4bd7ffefdf4f7ba9cfb9d570689b5a1a4109a746a690893db3799255a0cb9215d2d1cd490590e952e8c8786aa0011265252470c041dfbc3eec7c3cbf71c24869d115c0cb4a956f56d530b80ab589acfefc690751ddf36e8d383f83cedd2cc
|
||||
|
||||
+Availablein = default
|
||||
Verify=RSA-PSS-10
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
@@ -1817,11 +1864,13 @@ Title = RSA FIPS tests
|
||||
|
||||
# FIPS tests
|
||||
|
||||
-# Verifying with SHA1 is permitted in fips mode for older applications
|
||||
+# Verifying with SHA1 is not permitted on SUSE/openSUSE in FIPS mode
|
||||
+Availablein = fips
|
||||
DigestVerify = SHA1
|
||||
Key = RSA-2048
|
||||
Input = "Hello "
|
||||
Output = 87ea0e2226ef35e5a2aec9ca1222fcbe39ba723f05b3203564f671dd3601271806ead3240e61d424359ee3b17bd3e32f54b82df83998a8ac4148410710361de0400f9ddf98278618fbc87747a0531972543e6e5f18ab2fdfbfda02952f6ac69690e43864690af271bf43d4be9705b303d4ff994ab3abd4d5851562b73e59be3edc01cec41a4cc13b68206329bad1a46c6608d3609e951faa321d0fdbc765d54e9a7c59248d2f67913c9903e932b769c9c8a45520cabea06e8c0b231dd3bcc7f7ec55b46b0157ccb5fc5011fa57353cd3df32edcbadcb8d168133cbd0acfb64444cb040e1298f621508a38f79e14ae8c2c5c857f90aa9d24ef5fc07d34bf23859
|
||||
+Result = DIGESTVERIFYINIT_ERROR
|
||||
|
||||
# Verifying with a 1024 bit key is permitted in fips mode for older applications
|
||||
DigestVerify = SHA256
|
||||
Index: openssl-3.2.3/test/recipes/80-test_cms.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/80-test_cms.t
|
||||
+++ openssl-3.2.3/test/recipes/80-test_cms.t
|
||||
@@ -163,7 +163,7 @@ my @smime_pkcs7_tests = (
|
||||
[ "{cmd1}", @defaultprov, "-sign", "-in", $smcont, "-md", "sha1",
|
||||
"-certfile", $smroot,
|
||||
"-signer", $smrsa1, "-out", "{output}.cms" ],
|
||||
- [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms",
|
||||
+ [ "{cmd2}", @defaultprov, "-verify", "-in", "{output}.cms",
|
||||
"-CAfile", $smroot, "-out", "{output}.txt" ],
|
||||
\&final_compare
|
||||
],
|
||||
@@ -171,7 +171,7 @@ my @smime_pkcs7_tests = (
|
||||
[ "signed zero-length content S/MIME format, RSA key SHA1",
|
||||
[ "{cmd1}", @defaultprov, "-sign", "-in", $smcont_zero, "-md", "sha1",
|
||||
"-certfile", $smroot, "-signer", $smrsa1, "-out", "{output}.cms" ],
|
||||
- [ "{cmd2}", @prov, "-verify", "-in", "{output}.cms",
|
||||
+ [ "{cmd2}", @defaultprov, "-verify", "-in", "{output}.cms",
|
||||
"-CAfile", $smroot, "-out", "{output}.txt" ],
|
||||
\&zero_compare
|
||||
],
|
||||
Index: openssl-3.2.3/test/recipes/80-test_ssl_old.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/80-test_ssl_old.t
|
||||
+++ openssl-3.2.3/test/recipes/80-test_ssl_old.t
|
||||
@@ -394,6 +394,9 @@ sub testssl {
|
||||
'test sslv2/sslv3 with 1024bit DHE via BIO pair');
|
||||
}
|
||||
|
||||
+ SKIP: {
|
||||
+ skip "SSLv3 is not supported by the FIPS provider", 4
|
||||
+ if $provider eq "fips";
|
||||
ok(run(test([@ssltest, "-bio_pair", "-server_auth", @CA])),
|
||||
'test sslv2/sslv3 with server authentication');
|
||||
ok(run(test([@ssltest, "-bio_pair", "-client_auth", @CA])),
|
||||
@@ -402,6 +405,7 @@ sub testssl {
|
||||
'test sslv2/sslv3 with both client and server authentication via BIO pair');
|
||||
ok(run(test([@ssltest, "-bio_pair", "-server_auth", "-client_auth", "-app_verify", @CA])),
|
||||
'test sslv2/sslv3 with both client and server authentication via BIO pair and app verify');
|
||||
+ }
|
||||
|
||||
SKIP: {
|
||||
skip "No IPv4 available on this machine", 4
|
||||
Index: openssl-3.2.3/test/acvp_test.inc
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/acvp_test.inc
|
||||
+++ openssl-3.2.3/test/acvp_test.inc
|
||||
@@ -1844,17 +1844,6 @@ static const struct rsa_sigver_st rsa_si
|
||||
{
|
||||
"x931",
|
||||
3072,
|
||||
- "SHA1",
|
||||
- ITM(rsa_sigverx931_0_msg),
|
||||
- ITM(rsa_sigverx931_0_n),
|
||||
- ITM(rsa_sigverx931_0_e),
|
||||
- ITM(rsa_sigverx931_0_sig),
|
||||
- NO_PSS_SALT_LEN,
|
||||
- PASS
|
||||
- },
|
||||
- {
|
||||
- "x931",
|
||||
- 3072,
|
||||
"SHA256",
|
||||
ITM(rsa_sigverx931_1_msg),
|
||||
ITM(rsa_sigverx931_1_n),
|
@@ -1,98 +0,0 @@
|
||||
From 589eb3898896c1ac916bc20069ecd5adb8534850 Mon Sep 17 00:00:00 2001
|
||||
From: Clemens Lang <cllang@redhat.com>
|
||||
Date: Fri, 17 Feb 2023 15:31:08 +0100
|
||||
Subject: [PATCH] GCM: Implement explicit FIPS indicator for IV gen
|
||||
|
||||
Implementation Guidance for FIPS 140-3 and the Cryptographic Module
|
||||
Verification Program, Section C.H requires guarantees about the
|
||||
uniqueness of key/iv pairs, and proposes a few approaches to ensure
|
||||
this. Provide an indicator for option 2 "The IV may be generated
|
||||
internally at its entirety randomly."
|
||||
|
||||
Resolves: rhbz#2168289
|
||||
Signed-off-by: Clemens Lang <cllang@redhat.com>
|
||||
---
|
||||
include/openssl/core_names.h | 1 +
|
||||
include/openssl/evp.h | 4 +++
|
||||
.../implementations/ciphers/ciphercommon.c | 4 +++
|
||||
.../ciphers/ciphercommon_gcm.c | 25 +++++++++++++++++++
|
||||
4 files changed, 34 insertions(+)
|
||||
|
||||
Index: openssl-3.2.3/include/openssl/evp.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/include/openssl/evp.h
|
||||
+++ openssl-3.2.3/include/openssl/evp.h
|
||||
@@ -753,6 +753,10 @@ void EVP_CIPHER_CTX_set_flags(EVP_CIPHER
|
||||
void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags);
|
||||
int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags);
|
||||
|
||||
+# define EVP_CIPHER_SUSE_FIPS_INDICATOR_UNDETERMINED 0
|
||||
+# define EVP_CIPHER_SUSE_FIPS_INDICATOR_APPROVED 1
|
||||
+# define EVP_CIPHER_SUSE_FIPS_INDICATOR_NOT_APPROVED 2
|
||||
+
|
||||
__owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
|
||||
const unsigned char *key, const unsigned char *iv);
|
||||
__owur int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx,
|
||||
Index: openssl-3.2.3/providers/implementations/ciphers/ciphercommon.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/ciphers/ciphercommon.c
|
||||
+++ openssl-3.2.3/providers/implementations/ciphers/ciphercommon.c
|
||||
@@ -152,6 +152,10 @@ static const OSSL_PARAM cipher_aead_know
|
||||
OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG, NULL, 0),
|
||||
OSSL_PARAM_size_t(OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD, NULL),
|
||||
OSSL_PARAM_octet_string(OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN, NULL, 0),
|
||||
+ /* normally we would hide this under an #ifdef FIPS_MODULE, but that does
|
||||
+ * not work in ciphercommon.c because it is compiled only once into
|
||||
+ * libcommon.a */
|
||||
+ OSSL_PARAM_int(OSSL_CIPHER_PARAM_SUSE_FIPS_INDICATOR, NULL),
|
||||
OSSL_PARAM_END
|
||||
};
|
||||
const OSSL_PARAM *ossl_cipher_aead_gettable_ctx_params(
|
||||
Index: openssl-3.2.3/providers/implementations/ciphers/ciphercommon_gcm.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/ciphers/ciphercommon_gcm.c
|
||||
+++ openssl-3.2.3/providers/implementations/ciphers/ciphercommon_gcm.c
|
||||
@@ -238,6 +238,31 @@ int ossl_gcm_get_ctx_params(void *vctx,
|
||||
break;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ /* We would usually hide this under #ifdef FIPS_MODULE, but
|
||||
+ * ciphercommon_gcm.c is only compiled once into libcommon.a, so ifdefs do
|
||||
+ * not work here. */
|
||||
+ p = OSSL_PARAM_locate(params, OSSL_CIPHER_PARAM_SUSE_FIPS_INDICATOR);
|
||||
+ if (p != NULL) {
|
||||
+ int fips_indicator = EVP_CIPHER_SUSE_FIPS_INDICATOR_APPROVED;
|
||||
+
|
||||
+ /* Implementation Guidance for FIPS 140-3 and the Cryptographic Module
|
||||
+ * Verification Program, Section C.H requires guarantees about the
|
||||
+ * uniqueness of key/iv pairs, and proposes a few approaches to ensure
|
||||
+ * this. This provides an indicator for option 2 "The IV may be
|
||||
+ * generated internally at its entirety randomly." Note that one of the
|
||||
+ * conditions of this option is that "The IV length shall be at least
|
||||
+ * 96 bits (per SP 800-38D)." We do not specically check for this
|
||||
+ * condition here, because gcm_iv_generate will fail in this case. */
|
||||
+ if (ctx->enc && !ctx->iv_gen_rand)
|
||||
+ fips_indicator = EVP_CIPHER_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+
|
||||
+ if (!OSSL_PARAM_set_int(p, fips_indicator)) {
|
||||
+ ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
return 1;
|
||||
}
|
||||
|
||||
Index: openssl-3.2.3/util/perl/OpenSSL/paramnames.pm
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/util/perl/OpenSSL/paramnames.pm
|
||||
+++ openssl-3.2.3/util/perl/OpenSSL/paramnames.pm
|
||||
@@ -102,6 +102,7 @@ my %params = (
|
||||
'CIPHER_PARAM_CTS_MODE' => "cts_mode", # utf8_string
|
||||
# For passing the AlgorithmIdentifier parameter in DER form
|
||||
'CIPHER_PARAM_ALGORITHM_ID_PARAMS' => "alg_id_param",# octet_string
|
||||
+ 'CIPHER_PARAM_SUSE_FIPS_INDICATOR' => "suse-fips-indicator",# int
|
||||
'CIPHER_PARAM_XTS_STANDARD' => "xts_standard",# utf8_string
|
||||
|
||||
'CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT' => "tls1multi_maxsndfrag",# uint
|
@@ -1,82 +0,0 @@
|
||||
commit 518b53b139d7b4ac082ccedd401d2ee08fc66985
|
||||
Author: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
Date: Wed Jan 31 16:26:52 2024 +0100
|
||||
|
||||
s390x: Add defines for new CPACF functions
|
||||
|
||||
Add defines for new CPACF functions codes, its required MSA levels, and
|
||||
document how to disable these functions via the OPENSSL_s390xcap environment
|
||||
variable.
|
||||
|
||||
Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Paul Dale <ppzgs1@gmail.com>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/25161)
|
||||
|
||||
diff --git a/crypto/s390x_arch.h b/crypto/s390x_arch.h
|
||||
index fdc682af06..88ed866b0d 100644
|
||||
--- a/crypto/s390x_arch.h
|
||||
+++ b/crypto/s390x_arch.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * Copyright 2017-2023 The OpenSSL Project Authors. All Rights Reserved.
|
||||
+ * Copyright 2017-2024 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
@@ -115,6 +115,7 @@ extern int OPENSSL_s390xcex;
|
||||
# define S390X_MSA5 57 /* message-security-assist-ext. 5 */
|
||||
# define S390X_MSA3 76 /* message-security-assist-ext. 3 */
|
||||
# define S390X_MSA4 77 /* message-security-assist-ext. 4 */
|
||||
+# define S390X_MSA12 86 /* message-security-assist-ext. 12 */
|
||||
# define S390X_VX 129 /* vector */
|
||||
# define S390X_VXD 134 /* vector packed decimal */
|
||||
# define S390X_VXE 135 /* vector enhancements 1 */
|
||||
@@ -150,6 +151,14 @@ extern int OPENSSL_s390xcex;
|
||||
/* km */
|
||||
# define S390X_XTS_AES_128 50
|
||||
# define S390X_XTS_AES_256 52
|
||||
+# define S390X_XTS_AES_128_MSA10 82
|
||||
+# define S390X_XTS_AES_256_MSA10 84
|
||||
+
|
||||
+/* kmac */
|
||||
+# define S390X_HMAC_SHA_224 112
|
||||
+# define S390X_HMAC_SHA_256 113
|
||||
+# define S390X_HMAC_SHA_384 114
|
||||
+# define S390X_HMAC_SHA_512 115
|
||||
|
||||
/* prno */
|
||||
# define S390X_SHA_512_DRNG 3
|
||||
diff --git a/doc/man3/OPENSSL_s390xcap.pod b/doc/man3/OPENSSL_s390xcap.pod
|
||||
index d7185530ec..363003d8d3 100644
|
||||
--- a/doc/man3/OPENSSL_s390xcap.pod
|
||||
+++ b/doc/man3/OPENSSL_s390xcap.pod
|
||||
@@ -74,6 +74,7 @@ the numbering is continuous across 64-bit mask boundaries.
|
||||
:
|
||||
# 76 1<<51 message-security assist extension 3
|
||||
# 77 1<<50 message-security assist extension 4
|
||||
+ # 86 1<<41 message-security-assist extension 12
|
||||
:
|
||||
#129 1<<62 vector facility
|
||||
#134 1<<57 vector packed decimal facility
|
||||
@@ -110,6 +111,8 @@ the numbering is continuous across 64-bit mask boundaries.
|
||||
# 50 1<<13 KM-XTS-AES-128
|
||||
# 52 1<<11 KM-XTS-AES-256
|
||||
:
|
||||
+ # 82 1<<45 KM-XTS-AES-128-MSA10
|
||||
+ # 84 1<<43 KM-XTS-AES-256-MSA10
|
||||
|
||||
kmc :
|
||||
# 18 1<<45 KMC-AES-128
|
||||
@@ -122,6 +125,10 @@ the numbering is continuous across 64-bit mask boundaries.
|
||||
# 19 1<<44 KMAC-AES-192
|
||||
# 20 1<<43 KMAC-AES-256
|
||||
:
|
||||
+ # 112 1<<15 KMAC-SHA-224
|
||||
+ # 113 1<<14 KMAC-SHA-256
|
||||
+ # 114 1<<13 KMAC-SHA-384
|
||||
+ # 115 1<<12 KMAC-SHA-512
|
||||
|
||||
kmctr:
|
||||
:
|
@@ -1,506 +0,0 @@
|
||||
commit 0499de5adda26b1ef09660f70c12b4710b5f7c8a
|
||||
Author: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
Date: Thu Feb 1 15:15:27 2024 +0100
|
||||
|
||||
s390x: Add hardware acceleration for HMAC
|
||||
|
||||
The CPACF instruction KMAC provides support for accelerating the HMAC
|
||||
algorithm on newer machines for HMAC with SHA-224, SHA-256, SHA-384, and
|
||||
SHA-512.
|
||||
|
||||
Preliminary measurements showed performance improvements of up to a factor
|
||||
of 2, dependent on the message size, whether chunking is used and the size
|
||||
of the chunks.
|
||||
|
||||
Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Paul Dale <ppzgs1@gmail.com>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/25161)
|
||||
|
||||
Index: openssl-3.2.3/crypto/hmac/build.info
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/hmac/build.info
|
||||
+++ openssl-3.2.3/crypto/hmac/build.info
|
||||
@@ -2,5 +2,22 @@ LIBS=../../libcrypto
|
||||
|
||||
$COMMON=hmac.c
|
||||
|
||||
-SOURCE[../../libcrypto]=$COMMON
|
||||
-SOURCE[../../providers/libfips.a]=$COMMON
|
||||
+IF[{- !$disabled{asm} -}]
|
||||
+ IF[{- ($target{perlasm_scheme} // '') ne '31' -}]
|
||||
+ $HMACASM_s390x=hmac_s390x.c
|
||||
+ $HMACDEF_s390x=OPENSSL_HMAC_S390X
|
||||
+ ENDIF
|
||||
+
|
||||
+ # Now that we have defined all the arch specific variables, use the
|
||||
+ # appropriate ones, and define the appropriate macros
|
||||
+ IF[$HMACASM_{- $target{asm_arch} -}]
|
||||
+ $HMACASM=$HMACASM_{- $target{asm_arch} -}
|
||||
+ $HMACDEF=$HMACDEF_{- $target{asm_arch} -}
|
||||
+ ENDIF
|
||||
+ENDIF
|
||||
+
|
||||
+DEFINE[../../libcrypto]=$HMACDEF
|
||||
+DEFINE[../../providers/libfips.a]=$HMACDEF
|
||||
+
|
||||
+SOURCE[../../libcrypto]=$COMMON $HMACASM
|
||||
+SOURCE[../../providers/libfips.a]=$COMMON $HMACASM
|
||||
Index: openssl-3.2.3/crypto/hmac/hmac.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/hmac/hmac.c
|
||||
+++ openssl-3.2.3/crypto/hmac/hmac.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
|
||||
+ * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
@@ -49,6 +49,12 @@ int HMAC_Init_ex(HMAC_CTX *ctx, const vo
|
||||
if ((EVP_MD_get_flags(md) & EVP_MD_FLAG_XOF) != 0)
|
||||
return 0;
|
||||
|
||||
+#ifdef OPENSSL_HMAC_S390X
|
||||
+ rv = s390x_HMAC_init(ctx, key, len, impl);
|
||||
+ if (rv >= 1)
|
||||
+ return rv;
|
||||
+#endif
|
||||
+
|
||||
if (key != NULL) {
|
||||
reset = 1;
|
||||
|
||||
@@ -111,6 +117,12 @@ int HMAC_Update(HMAC_CTX *ctx, const uns
|
||||
{
|
||||
if (!ctx->md)
|
||||
return 0;
|
||||
+
|
||||
+#ifdef OPENSSL_HMAC_S390X
|
||||
+ if (ctx->plat.s390x.fc)
|
||||
+ return s390x_HMAC_update(ctx, data, len);
|
||||
+#endif
|
||||
+
|
||||
return EVP_DigestUpdate(ctx->md_ctx, data, len);
|
||||
}
|
||||
|
||||
@@ -122,6 +134,11 @@ int HMAC_Final(HMAC_CTX *ctx, unsigned c
|
||||
if (!ctx->md)
|
||||
goto err;
|
||||
|
||||
+#ifdef OPENSSL_HMAC_S390X
|
||||
+ if (ctx->plat.s390x.fc)
|
||||
+ return s390x_HMAC_final(ctx, md, len);
|
||||
+#endif
|
||||
+
|
||||
if (!EVP_DigestFinal_ex(ctx->md_ctx, buf, &i))
|
||||
goto err;
|
||||
if (!EVP_MD_CTX_copy_ex(ctx->md_ctx, ctx->o_ctx))
|
||||
@@ -161,6 +178,10 @@ static void hmac_ctx_cleanup(HMAC_CTX *c
|
||||
EVP_MD_CTX_reset(ctx->o_ctx);
|
||||
EVP_MD_CTX_reset(ctx->md_ctx);
|
||||
ctx->md = NULL;
|
||||
+
|
||||
+#ifdef OPENSSL_HMAC_S390X
|
||||
+ s390x_HMAC_CTX_cleanup(ctx);
|
||||
+#endif
|
||||
}
|
||||
|
||||
void HMAC_CTX_free(HMAC_CTX *ctx)
|
||||
@@ -212,6 +233,12 @@ int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_C
|
||||
if (!EVP_MD_CTX_copy_ex(dctx->md_ctx, sctx->md_ctx))
|
||||
goto err;
|
||||
dctx->md = sctx->md;
|
||||
+
|
||||
+#ifdef OPENSSL_HMAC_S390X
|
||||
+ if (s390x_HMAC_CTX_copy(dctx, sctx) == 0)
|
||||
+ goto err;
|
||||
+#endif
|
||||
+
|
||||
return 1;
|
||||
err:
|
||||
hmac_ctx_cleanup(dctx);
|
||||
Index: openssl-3.2.3/crypto/hmac/hmac_local.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/hmac/hmac_local.h
|
||||
+++ openssl-3.2.3/crypto/hmac/hmac_local.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
|
||||
+ * Copyright 1995-2024 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
@@ -10,6 +10,10 @@
|
||||
#ifndef OSSL_CRYPTO_HMAC_LOCAL_H
|
||||
# define OSSL_CRYPTO_HMAC_LOCAL_H
|
||||
|
||||
+# include "internal/common.h"
|
||||
+# include "internal/numbers.h"
|
||||
+# include "openssl/sha.h"
|
||||
+
|
||||
/* The current largest case is for SHA3-224 */
|
||||
#define HMAC_MAX_MD_CBLOCK_SIZE 144
|
||||
|
||||
@@ -18,6 +22,45 @@ struct hmac_ctx_st {
|
||||
EVP_MD_CTX *md_ctx;
|
||||
EVP_MD_CTX *i_ctx;
|
||||
EVP_MD_CTX *o_ctx;
|
||||
+
|
||||
+ /* Platform specific data */
|
||||
+ union {
|
||||
+ int dummy;
|
||||
+# ifdef OPENSSL_HMAC_S390X
|
||||
+ struct {
|
||||
+ unsigned int fc; /* 0 if not supported by kmac instruction */
|
||||
+ int blk_size;
|
||||
+ int ikp;
|
||||
+ int iimp;
|
||||
+ unsigned char *buf;
|
||||
+ size_t size; /* must be multiple of digest block size */
|
||||
+ size_t num;
|
||||
+ union {
|
||||
+ OSSL_UNION_ALIGN;
|
||||
+ struct {
|
||||
+ uint32_t h[8];
|
||||
+ uint64_t imbl;
|
||||
+ unsigned char key[64];
|
||||
+ } hmac_224_256;
|
||||
+ struct {
|
||||
+ uint64_t h[8];
|
||||
+ uint128_t imbl;
|
||||
+ unsigned char key[128];
|
||||
+ } hmac_384_512;
|
||||
+ } param;
|
||||
+ } s390x;
|
||||
+# endif /* OPENSSL_HMAC_S390X */
|
||||
+ } plat;
|
||||
};
|
||||
|
||||
+# ifdef OPENSSL_HMAC_S390X
|
||||
+# define HMAC_S390X_BUF_NUM_BLOCKS 64
|
||||
+
|
||||
+int s390x_HMAC_init(HMAC_CTX *ctx, const void *key, int key_len, ENGINE *impl);
|
||||
+int s390x_HMAC_update(HMAC_CTX *ctx, const unsigned char *data, size_t len);
|
||||
+int s390x_HMAC_final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len);
|
||||
+int s390x_HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx);
|
||||
+int s390x_HMAC_CTX_cleanup(HMAC_CTX *ctx);
|
||||
+# endif /* OPENSSL_HMAC_S390X */
|
||||
+
|
||||
#endif
|
||||
Index: openssl-3.2.3/crypto/hmac/hmac_s390x.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ openssl-3.2.3/crypto/hmac/hmac_s390x.c
|
||||
@@ -0,0 +1,298 @@
|
||||
+/*
|
||||
+ * Copyright 2024 The OpenSSL Project Authors. All Rights Reserved.
|
||||
+ *
|
||||
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
+ * this file except in compliance with the License. You can obtain a copy
|
||||
+ * in the file LICENSE in the source distribution or at
|
||||
+ * https://www.openssl.org/source/license.html
|
||||
+ */
|
||||
+
|
||||
+#include "crypto/s390x_arch.h"
|
||||
+#include "hmac_local.h"
|
||||
+#include "openssl/obj_mac.h"
|
||||
+#include "openssl/evp.h"
|
||||
+
|
||||
+#ifdef OPENSSL_HMAC_S390X
|
||||
+
|
||||
+static int s390x_fc_from_md(const EVP_MD *md)
|
||||
+{
|
||||
+ int fc;
|
||||
+
|
||||
+ switch (EVP_MD_get_type(md)) {
|
||||
+ case NID_sha224:
|
||||
+ fc = S390X_HMAC_SHA_224;
|
||||
+ break;
|
||||
+ case NID_sha256:
|
||||
+ fc = S390X_HMAC_SHA_256;
|
||||
+ break;
|
||||
+ case NID_sha384:
|
||||
+ fc = S390X_HMAC_SHA_384;
|
||||
+ break;
|
||||
+ case NID_sha512:
|
||||
+ fc = S390X_HMAC_SHA_512;
|
||||
+ break;
|
||||
+ default:
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if ((OPENSSL_s390xcap_P.kmac[1] & S390X_CAPBIT(fc)) == 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ return fc;
|
||||
+}
|
||||
+
|
||||
+static void s390x_call_kmac(HMAC_CTX *ctx, const unsigned char *in, size_t len)
|
||||
+{
|
||||
+ unsigned int fc = ctx->plat.s390x.fc;
|
||||
+
|
||||
+ if (ctx->plat.s390x.ikp)
|
||||
+ fc |= S390X_KMAC_IKP;
|
||||
+
|
||||
+ if (ctx->plat.s390x.iimp)
|
||||
+ fc |= S390X_KMAC_IIMP;
|
||||
+
|
||||
+ switch (ctx->plat.s390x.fc) {
|
||||
+ case S390X_HMAC_SHA_224:
|
||||
+ case S390X_HMAC_SHA_256:
|
||||
+ ctx->plat.s390x.param.hmac_224_256.imbl += ((uint64_t)len * 8);
|
||||
+ break;
|
||||
+ case S390X_HMAC_SHA_384:
|
||||
+ case S390X_HMAC_SHA_512:
|
||||
+ ctx->plat.s390x.param.hmac_384_512.imbl += ((uint128_t)len * 8);
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ s390x_kmac(in, len, fc, &ctx->plat.s390x.param);
|
||||
+
|
||||
+ ctx->plat.s390x.ikp = 1;
|
||||
+}
|
||||
+
|
||||
+int s390x_HMAC_init(HMAC_CTX *ctx, const void *key, int key_len, ENGINE *impl)
|
||||
+{
|
||||
+ unsigned char *key_param;
|
||||
+ unsigned int key_param_len;
|
||||
+
|
||||
+ ctx->plat.s390x.fc = s390x_fc_from_md(ctx->md);
|
||||
+ if (ctx->plat.s390x.fc == 0)
|
||||
+ return -1; /* Not supported by kmac instruction */
|
||||
+
|
||||
+ ctx->plat.s390x.blk_size = EVP_MD_get_block_size(ctx->md);
|
||||
+ if (ctx->plat.s390x.blk_size < 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (ctx->plat.s390x.size !=
|
||||
+ (size_t)(ctx->plat.s390x.blk_size * HMAC_S390X_BUF_NUM_BLOCKS)) {
|
||||
+ OPENSSL_clear_free(ctx->plat.s390x.buf, ctx->plat.s390x.size);
|
||||
+ ctx->plat.s390x.size = 0;
|
||||
+ ctx->plat.s390x.buf = OPENSSL_zalloc(ctx->plat.s390x.blk_size *
|
||||
+ HMAC_S390X_BUF_NUM_BLOCKS);
|
||||
+ if (ctx->plat.s390x.buf == NULL)
|
||||
+ return 0;
|
||||
+ ctx->plat.s390x.size = ctx->plat.s390x.blk_size *
|
||||
+ HMAC_S390X_BUF_NUM_BLOCKS;
|
||||
+ }
|
||||
+ ctx->plat.s390x.num = 0;
|
||||
+
|
||||
+ ctx->plat.s390x.ikp = 0;
|
||||
+ ctx->plat.s390x.iimp = 1;
|
||||
+
|
||||
+ switch (ctx->plat.s390x.fc) {
|
||||
+ case S390X_HMAC_SHA_224:
|
||||
+ case S390X_HMAC_SHA_256:
|
||||
+ ctx->plat.s390x.param.hmac_224_256.imbl = 0;
|
||||
+ OPENSSL_cleanse(ctx->plat.s390x.param.hmac_224_256.h,
|
||||
+ sizeof(ctx->plat.s390x.param.hmac_224_256.h));
|
||||
+ break;
|
||||
+ case S390X_HMAC_SHA_384:
|
||||
+ case S390X_HMAC_SHA_512:
|
||||
+ ctx->plat.s390x.param.hmac_384_512.imbl = 0;
|
||||
+ OPENSSL_cleanse(ctx->plat.s390x.param.hmac_384_512.h,
|
||||
+ sizeof(ctx->plat.s390x.param.hmac_384_512.h));
|
||||
+ break;
|
||||
+ default:
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (key != NULL) {
|
||||
+ switch (ctx->plat.s390x.fc) {
|
||||
+ case S390X_HMAC_SHA_224:
|
||||
+ case S390X_HMAC_SHA_256:
|
||||
+ OPENSSL_cleanse(&ctx->plat.s390x.param.hmac_224_256.key,
|
||||
+ sizeof(ctx->plat.s390x.param.hmac_224_256.key));
|
||||
+ key_param = ctx->plat.s390x.param.hmac_224_256.key;
|
||||
+ key_param_len = sizeof(ctx->plat.s390x.param.hmac_224_256.key);
|
||||
+ break;
|
||||
+ case S390X_HMAC_SHA_384:
|
||||
+ case S390X_HMAC_SHA_512:
|
||||
+ OPENSSL_cleanse(&ctx->plat.s390x.param.hmac_384_512.key,
|
||||
+ sizeof(ctx->plat.s390x.param.hmac_384_512.key));
|
||||
+ key_param = ctx->plat.s390x.param.hmac_384_512.key;
|
||||
+ key_param_len = sizeof(ctx->plat.s390x.param.hmac_384_512.key);
|
||||
+ break;
|
||||
+ default:
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (!ossl_assert(ctx->plat.s390x.blk_size <= (int)key_param_len))
|
||||
+ return 0;
|
||||
+
|
||||
+ if (key_len > ctx->plat.s390x.blk_size) {
|
||||
+ if (!EVP_DigestInit_ex(ctx->md_ctx, ctx->md, impl)
|
||||
+ || !EVP_DigestUpdate(ctx->md_ctx, key, key_len)
|
||||
+ || !EVP_DigestFinal_ex(ctx->md_ctx, key_param,
|
||||
+ &key_param_len))
|
||||
+ return 0;
|
||||
+ } else {
|
||||
+ if (key_len < 0 || key_len > (int)key_param_len)
|
||||
+ return 0;
|
||||
+ memcpy(key_param, key, key_len);
|
||||
+ /* remaining key bytes already zeroed out above */
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+int s390x_HMAC_update(HMAC_CTX *ctx, const unsigned char *data, size_t len)
|
||||
+{
|
||||
+ size_t remain, num;
|
||||
+
|
||||
+ if (len == 0)
|
||||
+ return 1;
|
||||
+
|
||||
+ /* buffer is full, process it now */
|
||||
+ if (ctx->plat.s390x.num == ctx->plat.s390x.size) {
|
||||
+ s390x_call_kmac(ctx, ctx->plat.s390x.buf, ctx->plat.s390x.num);
|
||||
+
|
||||
+ ctx->plat.s390x.num = 0;
|
||||
+ }
|
||||
+
|
||||
+ remain = ctx->plat.s390x.size - ctx->plat.s390x.num;
|
||||
+ if (len > remain) {
|
||||
+ /* data does not fit into buffer */
|
||||
+ if (ctx->plat.s390x.num > 0) {
|
||||
+ /* first fill buffer and process it */
|
||||
+ memcpy(&ctx->plat.s390x.buf[ctx->plat.s390x.num], data, remain);
|
||||
+ ctx->plat.s390x.num += remain;
|
||||
+
|
||||
+ s390x_call_kmac(ctx, ctx->plat.s390x.buf, ctx->plat.s390x.num);
|
||||
+
|
||||
+ ctx->plat.s390x.num = 0;
|
||||
+
|
||||
+ data += remain;
|
||||
+ len -= remain;
|
||||
+ }
|
||||
+
|
||||
+ if (!ossl_assert(ctx->plat.s390x.num == 0))
|
||||
+ return 0;
|
||||
+
|
||||
+ if (len > ctx->plat.s390x.size) {
|
||||
+ /*
|
||||
+ * remaining data is still larger than buffer, process remaining
|
||||
+ * full blocks of input directly
|
||||
+ */
|
||||
+ remain = len % ctx->plat.s390x.blk_size;
|
||||
+ num = len - remain;
|
||||
+
|
||||
+ s390x_call_kmac(ctx, data, num);
|
||||
+
|
||||
+ data += num;
|
||||
+ len -= num;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* add remaining input data (which is < buffer size) to buffer */
|
||||
+ if (!ossl_assert(len <= ctx->plat.s390x.size))
|
||||
+ return 0;
|
||||
+
|
||||
+ if (len > 0) {
|
||||
+ memcpy(&ctx->plat.s390x.buf[ctx->plat.s390x.num], data, len);
|
||||
+ ctx->plat.s390x.num += len;
|
||||
+ }
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+int s390x_HMAC_final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len)
|
||||
+{
|
||||
+ void *result;
|
||||
+ unsigned int res_len;
|
||||
+
|
||||
+ ctx->plat.s390x.iimp = 0; /* last block */
|
||||
+ s390x_call_kmac(ctx, ctx->plat.s390x.buf, ctx->plat.s390x.num);
|
||||
+
|
||||
+ ctx->plat.s390x.num = 0;
|
||||
+
|
||||
+ switch (ctx->plat.s390x.fc) {
|
||||
+ case S390X_HMAC_SHA_224:
|
||||
+ result = &ctx->plat.s390x.param.hmac_224_256.h[0];
|
||||
+ res_len = SHA224_DIGEST_LENGTH;
|
||||
+ break;
|
||||
+ case S390X_HMAC_SHA_256:
|
||||
+ result = &ctx->plat.s390x.param.hmac_224_256.h[0];
|
||||
+ res_len = SHA256_DIGEST_LENGTH;
|
||||
+ break;
|
||||
+ case S390X_HMAC_SHA_384:
|
||||
+ result = &ctx->plat.s390x.param.hmac_384_512.h[0];
|
||||
+ res_len = SHA384_DIGEST_LENGTH;
|
||||
+ break;
|
||||
+ case S390X_HMAC_SHA_512:
|
||||
+ result = &ctx->plat.s390x.param.hmac_384_512.h[0];
|
||||
+ res_len = SHA512_DIGEST_LENGTH;
|
||||
+ break;
|
||||
+ default:
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ memcpy(md, result, res_len);
|
||||
+ if (len != NULL)
|
||||
+ *len = res_len;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+int s390x_HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx)
|
||||
+{
|
||||
+ dctx->plat.s390x.fc = sctx->plat.s390x.fc;
|
||||
+ dctx->plat.s390x.blk_size = sctx->plat.s390x.blk_size;
|
||||
+ dctx->plat.s390x.ikp = sctx->plat.s390x.ikp;
|
||||
+ dctx->plat.s390x.iimp = sctx->plat.s390x.iimp;
|
||||
+
|
||||
+ memcpy(&dctx->plat.s390x.param, &sctx->plat.s390x.param,
|
||||
+ sizeof(dctx->plat.s390x.param));
|
||||
+
|
||||
+ dctx->plat.s390x.buf = NULL;
|
||||
+ if (sctx->plat.s390x.buf != NULL) {
|
||||
+ dctx->plat.s390x.buf = OPENSSL_memdup(sctx->plat.s390x.buf,
|
||||
+ sctx->plat.s390x.size);
|
||||
+ if (dctx->plat.s390x.buf == NULL)
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ dctx->plat.s390x.size = sctx->plat.s390x.size;
|
||||
+ dctx->plat.s390x.num = sctx->plat.s390x.num;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+int s390x_HMAC_CTX_cleanup(HMAC_CTX *ctx)
|
||||
+{
|
||||
+ OPENSSL_clear_free(ctx->plat.s390x.buf, ctx->plat.s390x.size);
|
||||
+ ctx->plat.s390x.buf = NULL;
|
||||
+ ctx->plat.s390x.size = 0;
|
||||
+ ctx->plat.s390x.num = 0;
|
||||
+
|
||||
+ OPENSSL_cleanse(&ctx->plat.s390x.param, sizeof(ctx->plat.s390x.param));
|
||||
+
|
||||
+ ctx->plat.s390x.blk_size = 0;
|
||||
+ ctx->plat.s390x.ikp = 0;
|
||||
+ ctx->plat.s390x.iimp = 1;
|
||||
+
|
||||
+ ctx->plat.s390x.fc = 0;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
Index: openssl-3.2.3/crypto/s390x_arch.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/s390x_arch.h
|
||||
+++ openssl-3.2.3/crypto/s390x_arch.h
|
||||
@@ -192,5 +192,8 @@ extern int OPENSSL_s390xcex;
|
||||
# define S390X_KMA_HS 0x400
|
||||
# define S390X_KDSA_D 0x80
|
||||
# define S390X_KLMD_PS 0x100
|
||||
+# define S390X_KMAC_IKP 0x8000
|
||||
+# define S390X_KMAC_IIMP 0x4000
|
||||
+# define S390X_KMAC_CCUP 0x2000
|
||||
|
||||
#endif
|
@@ -1,32 +0,0 @@
|
||||
commit 1337b50936ed190a98af1ee6601d857b42a3d296
|
||||
Author: Holger Dengler <dengler@linux.ibm.com>
|
||||
Date: Wed Sep 27 21:54:34 2023 +0200
|
||||
|
||||
Add xof state handing for generic sha3 absorb.
|
||||
|
||||
The digest life-cycle diagram specifies state transitions to `updated`
|
||||
(aka XOF_STATE_ABSORB) only from `initialised` and `updated`. Add this
|
||||
checking to the generic sha3 absorb implementation.
|
||||
|
||||
Signed-off-by: Holger Dengler <dengler@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
|
||||
Reviewed-by: Todd Short <todd.short@me.com>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/22221)
|
||||
|
||||
Index: openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/digests/sha3_prov.c
|
||||
+++ openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
@@ -143,6 +143,10 @@ static size_t generic_sha3_absorb(void *
|
||||
{
|
||||
KECCAK1600_CTX *ctx = vctx;
|
||||
|
||||
+ if (!(ctx->xof_state == XOF_STATE_INIT ||
|
||||
+ ctx->xof_state == XOF_STATE_ABSORB))
|
||||
+ return 0;
|
||||
+ ctx->xof_state = XOF_STATE_ABSORB;
|
||||
return SHA3_absorb(ctx->A, inp, len, ctx->block_size);
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,90 +0,0 @@
|
||||
commit a75d62637aa165a7f37e39a3a36e2a8b089913bc
|
||||
Author: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
Date: Mon Aug 26 11:26:03 2024 +0200
|
||||
|
||||
s390x: Disable HMAC hardware acceleration when an engine is used for the digest
|
||||
|
||||
The TLSProxy uses the 'ossltest' engine to produce known output for digests
|
||||
and HMAC calls. However, when running on a s390x system that supports
|
||||
hardware acceleration of HMAC, the engine is not used for calculating HMACs,
|
||||
but the s390x specific HMAC implementation is used, which does produce correct
|
||||
output, but not the known output that the engine would produce. This causes
|
||||
some tests (i.e. test_key_share, test_sslextension, test_sslrecords,
|
||||
test_sslvertol, and test_tlsextms) to fail.
|
||||
|
||||
Disable the s390x HMAC hardware acceleration if an engine is used for the
|
||||
digest of the HMAC calculation. This provides compatibility for engines that
|
||||
provide digest implementations, and assume that these implementations are also
|
||||
used when calculating an HMAC.
|
||||
|
||||
Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Neil Horman <nhorman@openssl.org>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/25287)
|
||||
|
||||
diff --git a/crypto/hmac/hmac_s390x.c b/crypto/hmac/hmac_s390x.c
|
||||
index 5db7e9a221..02e1cd1dd6 100644
|
||||
--- a/crypto/hmac/hmac_s390x.c
|
||||
+++ b/crypto/hmac/hmac_s390x.c
|
||||
@@ -7,10 +7,16 @@
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
+/* We need to use some engine deprecated APIs */
|
||||
+#define OPENSSL_SUPPRESS_DEPRECATED
|
||||
+
|
||||
#include "crypto/s390x_arch.h"
|
||||
#include "hmac_local.h"
|
||||
#include "openssl/obj_mac.h"
|
||||
#include "openssl/evp.h"
|
||||
+#if !defined(OPENSSL_NO_ENGINE) && !defined(FIPS_MODULE)
|
||||
+# include <openssl/engine.h>
|
||||
+#endif
|
||||
|
||||
#ifdef OPENSSL_HMAC_S390X
|
||||
|
||||
@@ -63,6 +69,31 @@ static void s390x_call_kmac(HMAC_CTX *ctx, const unsigned char *in, size_t len)
|
||||
ctx->plat.s390x.ikp = 1;
|
||||
}
|
||||
|
||||
+static int s390x_check_engine_used(const EVP_MD *md, ENGINE *impl)
|
||||
+{
|
||||
+# if !defined(OPENSSL_NO_ENGINE) && !defined(FIPS_MODULE)
|
||||
+ const EVP_MD *d;
|
||||
+
|
||||
+ if (impl != NULL) {
|
||||
+ if (!ENGINE_init(impl))
|
||||
+ return 0;
|
||||
+ } else {
|
||||
+ impl = ENGINE_get_digest_engine(EVP_MD_get_type(md));
|
||||
+ }
|
||||
+
|
||||
+ if (impl == NULL)
|
||||
+ return 0;
|
||||
+
|
||||
+ d = ENGINE_get_digest(impl, EVP_MD_get_type(md));
|
||||
+ ENGINE_finish(impl);
|
||||
+
|
||||
+ if (d != NULL)
|
||||
+ return 1;
|
||||
+# endif
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
int s390x_HMAC_init(HMAC_CTX *ctx, const void *key, int key_len, ENGINE *impl)
|
||||
{
|
||||
unsigned char *key_param;
|
||||
@@ -72,6 +103,11 @@ int s390x_HMAC_init(HMAC_CTX *ctx, const void *key, int key_len, ENGINE *impl)
|
||||
if (ctx->plat.s390x.fc == 0)
|
||||
return -1; /* Not supported by kmac instruction */
|
||||
|
||||
+ if (s390x_check_engine_used(ctx->md, impl)) {
|
||||
+ ctx->plat.s390x.fc = 0;
|
||||
+ return -1; /* An engine handles the digest, disable acceleration */
|
||||
+ }
|
||||
+
|
||||
ctx->plat.s390x.blk_size = EVP_MD_get_block_size(ctx->md);
|
||||
if (ctx->plat.s390x.blk_size < 0)
|
||||
return 0;
|
@@ -1,49 +0,0 @@
|
||||
commit d5b3c0e24bc56614e92ffafdd705622beaef420a
|
||||
Author: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
Date: Wed Aug 28 14:56:33 2024 +0200
|
||||
|
||||
s390x: Fix HMAC digest detection
|
||||
|
||||
Use EVP_MD_is_a() instead of EVP_MD_get_type() to detect the digest
|
||||
type. EVP_MD_get_type() does not always return the expected NID, e.g.
|
||||
when running in the FIPS provider, EVP_MD_get_type() returns zero,
|
||||
causing to skip the HMAC acceleration path.
|
||||
|
||||
Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Paul Dale <ppzgs1@gmail.com>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/25304)
|
||||
|
||||
diff --git a/crypto/hmac/hmac_s390x.c b/crypto/hmac/hmac_s390x.c
|
||||
index 8b0da0d59d..5db7e9a221 100644
|
||||
--- a/crypto/hmac/hmac_s390x.c
|
||||
+++ b/crypto/hmac/hmac_s390x.c
|
||||
@@ -18,22 +18,16 @@ static int s390x_fc_from_md(const EVP_MD *md)
|
||||
{
|
||||
int fc;
|
||||
|
||||
- switch (EVP_MD_get_type(md)) {
|
||||
- case NID_sha224:
|
||||
+ if (EVP_MD_is_a(md, "SHA2-224"))
|
||||
fc = S390X_HMAC_SHA_224;
|
||||
- break;
|
||||
- case NID_sha256:
|
||||
+ else if (EVP_MD_is_a(md, "SHA2-256"))
|
||||
fc = S390X_HMAC_SHA_256;
|
||||
- break;
|
||||
- case NID_sha384:
|
||||
+ else if (EVP_MD_is_a(md, "SHA2-384"))
|
||||
fc = S390X_HMAC_SHA_384;
|
||||
- break;
|
||||
- case NID_sha512:
|
||||
+ else if (EVP_MD_is_a(md, "SHA2-512"))
|
||||
fc = S390X_HMAC_SHA_512;
|
||||
- break;
|
||||
- default:
|
||||
+ else
|
||||
return 0;
|
||||
- }
|
||||
|
||||
if ((OPENSSL_s390xcap_P.kmac[1] & S390X_CAPBIT(fc)) == 0)
|
||||
return 0;
|
@@ -1,28 +0,0 @@
|
||||
commit 19b87d2d2b022c20dd9043c3b6d021315011b45f
|
||||
Author: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
Date: Tue Aug 20 11:35:20 2024 +0200
|
||||
|
||||
s390x: Fix memory leak in s390x_HMAC_CTX_copy()
|
||||
|
||||
When s390x_HMAC_CTX_copy() is called, but the destination context already
|
||||
has a buffer allocated, it is not freed before duplicating the buffer from
|
||||
the source context.
|
||||
|
||||
Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Paul Dale <ppzgs1@gmail.com>
|
||||
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
|
||||
(Merged from https://github.com/openssl/openssl/pull/25238)
|
||||
|
||||
diff --git a/crypto/hmac/hmac_s390x.c b/crypto/hmac/hmac_s390x.c
|
||||
index 1124d9bc5d..8b0da0d59d 100644
|
||||
--- a/crypto/hmac/hmac_s390x.c
|
||||
+++ b/crypto/hmac/hmac_s390x.c
|
||||
@@ -263,6 +263,7 @@ int s390x_HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx)
|
||||
memcpy(&dctx->plat.s390x.param, &sctx->plat.s390x.param,
|
||||
sizeof(dctx->plat.s390x.param));
|
||||
|
||||
+ OPENSSL_clear_free(dctx->plat.s390x.buf, dctx->plat.s390x.size);
|
||||
dctx->plat.s390x.buf = NULL;
|
||||
if (sctx->plat.s390x.buf != NULL) {
|
||||
dctx->plat.s390x.buf = OPENSSL_memdup(sctx->plat.s390x.buf,
|
@@ -1,25 +0,0 @@
|
||||
From b5795e3ed3ec38ef4686a5b7ff03bfd60183cb71 Mon Sep 17 00:00:00 2001
|
||||
From: "Randall S. Becker" <randall.becker@nexbridge.ca>
|
||||
Date: Mon, 20 May 2024 22:23:04 +0000
|
||||
Subject: [PATCH] Added an explicit yield (OP_SLEEP) to QUIC testing for
|
||||
cooperative threading.
|
||||
|
||||
Fixes: #24442
|
||||
|
||||
Signed-off-by: Randall S. Becker <randall.becker@nexbridge.ca>
|
||||
---
|
||||
test/quic_multistream_test.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: openssl-3.2.3/test/quic_multistream_test.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/quic_multistream_test.c
|
||||
+++ openssl-3.2.3/test/quic_multistream_test.c
|
||||
@@ -2397,6 +2397,7 @@ static const struct script_op script_13_
|
||||
|
||||
OP_C_ACCEPT_STREAM_WAIT (a)
|
||||
OP_C_READ_EXPECT (a, "foo", 3)
|
||||
+ OP_SLEEP (10)
|
||||
OP_C_EXPECT_FIN (a)
|
||||
OP_C_FREE_STREAM (a)
|
||||
|
@@ -1,50 +0,0 @@
|
||||
From 979dc530010e3c0f045edf6e38c7ab894ffba7f2 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
Date: Thu, 5 Sep 2024 08:45:29 +0200
|
||||
Subject: [PATCH] s390x: Fix s390x_sha3_absorb() when no data is processed by
|
||||
KIMD
|
||||
|
||||
If the data to absorb is less than a block, then the KIMD instruction is
|
||||
called with zero bytes. This is superfluous, and causes incorrect hash
|
||||
output later on if this is the very first absorb call, i.e. when the
|
||||
xof_state is still XOF_STATE_INIT and MSA 12 is available. In this case
|
||||
the NIP flag is set in the function code for KIMD, but KIMD ignores the
|
||||
NIP flag when it is called with zero bytes to process.
|
||||
|
||||
Skip any KIMD calls for zero length data. Also do not set the xof_state
|
||||
to XOF_STATE_ABSORB until the first call to KIMD with data. That way,
|
||||
the next KIMD (with non-zero length data) or KLMD call will get the NIP
|
||||
flag set and will then honor it to produce correct output.
|
||||
|
||||
Fixes: https://github.com/openssl/openssl/commit/25f5d7b85f6657cd2f9f1ab7ae87f319d9bafe54
|
||||
|
||||
Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/25388)
|
||||
---
|
||||
providers/implementations/digests/sha3_prov.c | 10 ++++++----
|
||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/digests/sha3_prov.c
|
||||
+++ openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
@@ -192,10 +192,12 @@ static size_t s390x_sha3_absorb(void *vc
|
||||
if (!(ctx->xof_state == XOF_STATE_INIT ||
|
||||
ctx->xof_state == XOF_STATE_ABSORB))
|
||||
return 0;
|
||||
- fc = ctx->pad;
|
||||
- fc |= ctx->xof_state == XOF_STATE_INIT ? S390X_KIMD_NIP : 0;
|
||||
- ctx->xof_state = XOF_STATE_ABSORB;
|
||||
- s390x_kimd(inp, len - rem, fc, ctx->A);
|
||||
+ if (len - rem > 0) {
|
||||
+ fc = ctx->pad;
|
||||
+ fc |= ctx->xof_state == XOF_STATE_INIT ? S390X_KIMD_NIP : 0;
|
||||
+ ctx->xof_state = XOF_STATE_ABSORB;
|
||||
+ s390x_kimd(inp, len - rem, fc, ctx->A);
|
||||
+ }
|
||||
return rem;
|
||||
}
|
||||
|
@@ -1,98 +0,0 @@
|
||||
From dc5afb7e87ee448f4fecad0dc624c643505ba7f1 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
Date: Wed, 4 Sep 2024 13:42:09 +0200
|
||||
Subject: [PATCH] s390x: Fix s390x_shake_squeeze() when MSA 12 is available
|
||||
|
||||
On the first squeeze call, when finishing the absorb process, also set
|
||||
the NIP flag, if we are still in XOF_STATE_INIT state. When MSA 12 is
|
||||
available, the state buffer A has not been zeroed during initialization,
|
||||
thus we must also pass the NIP flag here. This situation can happen
|
||||
when a squeeze is performed without a preceding absorb (i.e. a SHAKE
|
||||
of the empty message).
|
||||
|
||||
Add a test that performs a squeeze without a preceding absorb and check
|
||||
if the result is correct.
|
||||
|
||||
Fixes: https://github.com/openssl/openssl/commit/25f5d7b85f6657cd2f9f1ab7ae87f319d9bafe54
|
||||
|
||||
Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/25388)
|
||||
---
|
||||
providers/implementations/digests/sha3_prov.c | 5 +++-
|
||||
test/evp_xof_test.c | 29 +++++++++++++++++++
|
||||
2 files changed, 33 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/digests/sha3_prov.c
|
||||
+++ openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
@@ -239,6 +239,7 @@ static int s390x_shake_final(void *vctx,
|
||||
static int s390x_shake_squeeze(void *vctx, unsigned char *out, size_t outlen)
|
||||
{
|
||||
KECCAK1600_CTX *ctx = vctx;
|
||||
+ unsigned int fc;
|
||||
size_t len;
|
||||
|
||||
if (!ossl_prov_is_running())
|
||||
@@ -249,8 +250,10 @@ static int s390x_shake_squeeze(void *vct
|
||||
* On the first squeeze call, finish the absorb process (incl. padding).
|
||||
*/
|
||||
if (ctx->xof_state != XOF_STATE_SQUEEZE) {
|
||||
+ fc = ctx->pad;
|
||||
+ fc |= ctx->xof_state == XOF_STATE_INIT ? S390X_KLMD_NIP : 0;
|
||||
ctx->xof_state = XOF_STATE_SQUEEZE;
|
||||
- s390x_klmd(ctx->buf, ctx->bufsz, out, outlen, ctx->pad, ctx->A);
|
||||
+ s390x_klmd(ctx->buf, ctx->bufsz, out, outlen, fc, ctx->A);
|
||||
ctx->bufsz = outlen % ctx->block_size;
|
||||
/* reuse ctx->bufsz to count bytes squeezed from current sponge */
|
||||
return 1;
|
||||
Index: openssl-3.2.3/test/evp_xof_test.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/evp_xof_test.c
|
||||
+++ openssl-3.2.3/test/evp_xof_test.c
|
||||
@@ -479,6 +479,34 @@ err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+/* Test that a squeeze without a preceding absorb works */
|
||||
+static int shake_squeeze_no_absorb_test(void)
|
||||
+{
|
||||
+ int ret = 0;
|
||||
+ EVP_MD_CTX *ctx = NULL;
|
||||
+ unsigned char out[1000];
|
||||
+ unsigned char out2[1000];
|
||||
+ const char *alg = "SHAKE128";
|
||||
+
|
||||
+ if (!TEST_ptr(ctx = shake_setup(alg))
|
||||
+ || !TEST_true(EVP_DigestFinalXOF(ctx, out, sizeof(out))))
|
||||
+ goto err;
|
||||
+
|
||||
+ if (!TEST_true(EVP_DigestInit_ex2(ctx, NULL, NULL))
|
||||
+ || !TEST_true(EVP_DigestSqueeze(ctx, out2, sizeof(out2) / 2))
|
||||
+ || !TEST_true(EVP_DigestSqueeze(ctx, out2 + sizeof(out2) / 2,
|
||||
+ sizeof(out2) / 2)))
|
||||
+ goto err;
|
||||
+
|
||||
+ if (!TEST_mem_eq(out2, sizeof(out2), out, sizeof(out)))
|
||||
+ goto err;
|
||||
+ ret = 1;
|
||||
+
|
||||
+err:
|
||||
+ EVP_MD_CTX_free(ctx);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
int setup_tests(void)
|
||||
{
|
||||
ADD_TEST(shake_kat_test);
|
||||
@@ -488,5 +516,7 @@ int setup_tests(void)
|
||||
ADD_ALL_TESTS(shake_squeeze_kat_test, OSSL_NELEM(stride_tests));
|
||||
ADD_ALL_TESTS(shake_squeeze_large_test, OSSL_NELEM(stride_tests));
|
||||
ADD_ALL_TESTS(shake_squeeze_dup_test, OSSL_NELEM(dupoffset_tests));
|
||||
+ ADD_TEST(shake_squeeze_no_absorb_test);
|
||||
+
|
||||
return 1;
|
||||
}
|
@@ -1,31 +0,0 @@
|
||||
commit ed5e478261127cafe9c3f86c4992eab1e5c7ebb1
|
||||
Author: Rohan McLure <rmclure@linux.ibm.com>
|
||||
Date: Tue Nov 14 14:14:33 2023 +1100
|
||||
|
||||
ppc64: Fix SHA3_squeeze
|
||||
|
||||
Fix the conditional on the 'next' parameter passed into SHA3_squeeze.
|
||||
|
||||
Reported-by: David Benjamin <davidben@davidben.net>
|
||||
Signed-off-by: Rohan McLure <rmclure@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
|
||||
Reviewed-by: Paul Dale <pauli@openssl.org>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/22722)
|
||||
|
||||
diff --git a/crypto/sha/asm/keccak1600-ppc64.pl b/crypto/sha/asm/keccak1600-ppc64.pl
|
||||
index 3f8ba817f8..fe7d6db20e 100755
|
||||
--- a/crypto/sha/asm/keccak1600-ppc64.pl
|
||||
+++ b/crypto/sha/asm/keccak1600-ppc64.pl
|
||||
@@ -668,8 +668,8 @@ SHA3_squeeze:
|
||||
subi $out,r4,1 ; prepare for stbu
|
||||
mr $len,r5
|
||||
mr $bsz,r6
|
||||
- ${UCMP}i r7,1 ; r7 = 'next' argument
|
||||
- blt .Lnext_block
|
||||
+ ${UCMP}i r7,0 ; r7 = 'next' argument
|
||||
+ bne .Lnext_block
|
||||
b .Loop_squeeze
|
||||
|
||||
.align 4
|
@@ -1,32 +0,0 @@
|
||||
commit 1022131d16e30cfbf896e02419019de48e8e1149
|
||||
Author: Holger Dengler <dengler@linux.ibm.com>
|
||||
Date: Wed Sep 27 15:43:18 2023 +0200
|
||||
|
||||
Fix state handling of keccak_final for s390x.
|
||||
|
||||
The digest life-cycle state diagram has been updated for XOF. Fix the
|
||||
state handling in s390x_keccac_final() according to the updated state
|
||||
diagram.
|
||||
|
||||
Signed-off-by: Holger Dengler <dengler@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
|
||||
Reviewed-by: Todd Short <todd.short@me.com>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/22221)
|
||||
|
||||
diff --git a/providers/implementations/digests/sha3_prov.c b/providers/implementations/digests/sha3_prov.c
|
||||
index 34620cf95a..f691273baf 100644
|
||||
--- a/providers/implementations/digests/sha3_prov.c
|
||||
+++ b/providers/implementations/digests/sha3_prov.c
|
||||
@@ -235,6 +235,10 @@ static int s390x_keccakc_final(void *vctx, unsigned char *out, size_t outlen,
|
||||
|
||||
if (!ossl_prov_is_running())
|
||||
return 0;
|
||||
+ if (!(ctx->xof_state == XOF_STATE_INIT ||
|
||||
+ ctx->xof_state == XOF_STATE_ABSORB))
|
||||
+ return 0;
|
||||
+ ctx->xof_state = XOF_STATE_FINAL;
|
||||
if (outlen == 0)
|
||||
return 1;
|
||||
memset(ctx->buf + num, 0, bsz - num);
|
@@ -1,32 +0,0 @@
|
||||
commit 7aa45b8bb3269e881d0378aa785ff344efdd2897
|
||||
Author: Holger Dengler <dengler@linux.ibm.com>
|
||||
Date: Wed Sep 27 15:36:23 2023 +0200
|
||||
|
||||
Fix state handling of sha3_absorb for s390x.
|
||||
|
||||
The digest life-cycle state diagram has been updated for XOF. Fix the
|
||||
state handling in s390x_sha3_aborb() according to the updated state
|
||||
diagram.
|
||||
|
||||
Signed-off-by: Holger Dengler <dengler@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
|
||||
Reviewed-by: Todd Short <todd.short@me.com>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/22221)
|
||||
|
||||
Index: openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/digests/sha3_prov.c
|
||||
+++ openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
@@ -188,6 +188,10 @@ static size_t s390x_sha3_absorb(void *vc
|
||||
KECCAK1600_CTX *ctx = vctx;
|
||||
size_t rem = len % ctx->block_size;
|
||||
|
||||
+ if (!(ctx->xof_state == XOF_STATE_INIT ||
|
||||
+ ctx->xof_state == XOF_STATE_ABSORB))
|
||||
+ return 0;
|
||||
+ ctx->xof_state = XOF_STATE_ABSORB;
|
||||
s390x_kimd(inp, len - rem, ctx->pad, ctx->A);
|
||||
return rem;
|
||||
}
|
@@ -1,32 +0,0 @@
|
||||
commit 017acc58f6b67d5b347db411a7a1c4e890434f42
|
||||
Author: Holger Dengler <dengler@linux.ibm.com>
|
||||
Date: Wed Sep 27 15:36:59 2023 +0200
|
||||
|
||||
Fix state handling of sha3_final for s390x.
|
||||
|
||||
The digest life-cycle state diagram has been updated for XOF. Fix the
|
||||
state handling in s390x_sha3_final() according to the updated state
|
||||
diagram.
|
||||
|
||||
Signed-off-by: Holger Dengler <dengler@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
|
||||
Reviewed-by: Todd Short <todd.short@me.com>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/22221)
|
||||
|
||||
Index: openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/digests/sha3_prov.c
|
||||
+++ openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
@@ -202,6 +202,10 @@ static int s390x_sha3_final(void *vctx,
|
||||
|
||||
if (!ossl_prov_is_running())
|
||||
return 0;
|
||||
+ if (!(ctx->xof_state == XOF_STATE_INIT ||
|
||||
+ ctx->xof_state == XOF_STATE_ABSORB))
|
||||
+ return 0;
|
||||
+ ctx->xof_state = XOF_STATE_FINAL;
|
||||
s390x_klmd(ctx->buf, ctx->bufsz, NULL, 0, ctx->pad, ctx->A);
|
||||
memcpy(out, ctx->A, outlen);
|
||||
return 1;
|
@@ -1,32 +0,0 @@
|
||||
commit 288fbb4b71343516cee6f6a44b9ec55d82fb1532
|
||||
Author: Holger Dengler <dengler@linux.ibm.com>
|
||||
Date: Wed Sep 27 15:37:29 2023 +0200
|
||||
|
||||
Fix state handling of shake_final for s390x.
|
||||
|
||||
The digest life-cycle state diagram has been updated for XOF. Fix the
|
||||
state handling in s390x_shake_final() according to the updated state
|
||||
diagram.
|
||||
|
||||
Signed-off-by: Holger Dengler <dengler@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
|
||||
Reviewed-by: Todd Short <todd.short@me.com>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/22221)
|
||||
|
||||
Index: openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/digests/sha3_prov.c
|
||||
+++ openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
@@ -217,6 +217,10 @@ static int s390x_shake_final(void *vctx,
|
||||
|
||||
if (!ossl_prov_is_running())
|
||||
return 0;
|
||||
+ if (!(ctx->xof_state == XOF_STATE_INIT ||
|
||||
+ ctx->xof_state == XOF_STATE_ABSORB))
|
||||
+ return 0;
|
||||
+ ctx->xof_state = XOF_STATE_FINAL;
|
||||
s390x_klmd(ctx->buf, ctx->bufsz, out, outlen, ctx->pad, ctx->A);
|
||||
return 1;
|
||||
}
|
@@ -1,327 +0,0 @@
|
||||
commit 9cd4051e47c8da8398f93f42f0f56750552965f4
|
||||
Author: Holger Dengler <dengler@linux.ibm.com>
|
||||
Date: Tue Aug 6 14:00:49 2024 +0200
|
||||
|
||||
s390x: Add hardware acceleration for full AES-XTS
|
||||
|
||||
The CPACF instruction KM provides support for accelerating the full
|
||||
AES-XTS algorithm on newer machines for AES_XTS_128 and AES_XTS_256.
|
||||
|
||||
Preliminary measurements showed performance improvements of up to 50%,
|
||||
dependent on the message size.
|
||||
|
||||
Signed-off-by: Holger Dengler <dengler@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
Reviewed-by: Paul Dale <pauli@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/25414)
|
||||
|
||||
diff --git a/providers/implementations/ciphers/build.info b/providers/implementations/ciphers/build.info
|
||||
index 5eb705969f..1837070c21 100644
|
||||
--- a/providers/implementations/ciphers/build.info
|
||||
+++ b/providers/implementations/ciphers/build.info
|
||||
@@ -71,6 +71,19 @@ IF[{- !$disabled{asm} -}]
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
+IF[{- !$disabled{asm} -}]
|
||||
+ IF[{- ($target{perlasm_scheme} // '') ne '31' -}]
|
||||
+ $AESXTSDEF_s390x=AES_XTS_S390X
|
||||
+ ENDIF
|
||||
+
|
||||
+ # Now that we have defined all the arch specific variables, use the
|
||||
+ # appropriate one, and define the appropriate macros
|
||||
+
|
||||
+ IF[$AESXTSDEF_{- $target{asm_arch} -}]
|
||||
+ $AESXTSDEF=$AESXTSDEF_{- $target{asm_arch} -}
|
||||
+ ENDIF
|
||||
+ENDIF
|
||||
+
|
||||
# This source is common building blocks for all ciphers in all our providers.
|
||||
SOURCE[$COMMON_GOAL]=\
|
||||
ciphercommon.c ciphercommon_hw.c ciphercommon_block.c \
|
||||
@@ -93,6 +106,7 @@ SOURCE[$AES_GOAL]=\
|
||||
cipher_aes_cbc_hmac_sha.c \
|
||||
cipher_aes_cbc_hmac_sha256_hw.c cipher_aes_cbc_hmac_sha1_hw.c \
|
||||
cipher_cts.c
|
||||
+DEFINE[$AES_GOAL]=$AESXTSDEF
|
||||
|
||||
# Extra code to satisfy the FIPS and non-FIPS separation.
|
||||
# When the AES-xxx-XTS moves to legacy, cipher_aes_xts_fips.c can be removed.
|
||||
diff --git a/providers/implementations/ciphers/cipher_aes_xts.c b/providers/implementations/ciphers/cipher_aes_xts.c
|
||||
index cce2537ea7..2287834d62 100644
|
||||
--- a/providers/implementations/ciphers/cipher_aes_xts.c
|
||||
+++ b/providers/implementations/ciphers/cipher_aes_xts.c
|
||||
@@ -62,6 +62,10 @@ static int aes_xts_check_keys_differ(const unsigned char *key, size_t bytes,
|
||||
return 1;
|
||||
}
|
||||
|
||||
+#ifdef AES_XTS_S390X
|
||||
+# include "cipher_aes_xts_s390x.inc"
|
||||
+#endif
|
||||
+
|
||||
/*-
|
||||
* Provider dispatch functions
|
||||
*/
|
||||
@@ -98,6 +102,10 @@ static int aes_xts_einit(void *vctx, const unsigned char *key, size_t keylen,
|
||||
const unsigned char *iv, size_t ivlen,
|
||||
const OSSL_PARAM params[])
|
||||
{
|
||||
+#ifdef AES_XTS_S390X
|
||||
+ if (s390x_aes_xts_einit(vctx, key, keylen, iv, ivlen, params) == 1)
|
||||
+ return 1;
|
||||
+#endif
|
||||
return aes_xts_init(vctx, key, keylen, iv, ivlen, params, 1);
|
||||
}
|
||||
|
||||
@@ -105,6 +113,10 @@ static int aes_xts_dinit(void *vctx, const unsigned char *key, size_t keylen,
|
||||
const unsigned char *iv, size_t ivlen,
|
||||
const OSSL_PARAM params[])
|
||||
{
|
||||
+#ifdef AES_XTS_S390X
|
||||
+ if (s390x_aes_xts_dinit(vctx, key, keylen, iv, ivlen, params) == 1)
|
||||
+ return 1;
|
||||
+#endif
|
||||
return aes_xts_init(vctx, key, keylen, iv, ivlen, params, 0);
|
||||
}
|
||||
|
||||
@@ -137,6 +149,11 @@ static void *aes_xts_dupctx(void *vctx)
|
||||
if (!ossl_prov_is_running())
|
||||
return NULL;
|
||||
|
||||
+#ifdef AES_XTS_S390X
|
||||
+ if (in->plat.s390x.fc)
|
||||
+ return s390x_aes_xts_dupctx(vctx);
|
||||
+#endif
|
||||
+
|
||||
if (in->xts.key1 != NULL) {
|
||||
if (in->xts.key1 != &in->ks1)
|
||||
return NULL;
|
||||
@@ -157,6 +174,11 @@ static int aes_xts_cipher(void *vctx, unsigned char *out, size_t *outl,
|
||||
{
|
||||
PROV_AES_XTS_CTX *ctx = (PROV_AES_XTS_CTX *)vctx;
|
||||
|
||||
+#ifdef AES_XTS_S390X
|
||||
+ if (ctx->plat.s390x.fc)
|
||||
+ return s390x_aes_xts_cipher(vctx, out, outl, outsize, in, inl);
|
||||
+#endif
|
||||
+
|
||||
if (!ossl_prov_is_running()
|
||||
|| ctx->xts.key1 == NULL
|
||||
|| ctx->xts.key2 == NULL
|
||||
diff --git a/providers/implementations/ciphers/cipher_aes_xts.h b/providers/implementations/ciphers/cipher_aes_xts.h
|
||||
index afc42ef444..56891ca98c 100644
|
||||
--- a/providers/implementations/ciphers/cipher_aes_xts.h
|
||||
+++ b/providers/implementations/ciphers/cipher_aes_xts.h
|
||||
@@ -22,6 +22,14 @@ PROV_CIPHER_FUNC(void, xts_stream,
|
||||
const AES_KEY *key1, const AES_KEY *key2,
|
||||
const unsigned char iv[16]));
|
||||
|
||||
+#if defined(OPENSSL_CPUID_OBJ) && defined(__s390__)
|
||||
+typedef struct S390X_km_xts_params_st {
|
||||
+ unsigned char key[64];
|
||||
+ unsigned char tweak[16];
|
||||
+ unsigned char nap[16];
|
||||
+} S390X_KM_XTS_PARAMS;
|
||||
+#endif
|
||||
+
|
||||
typedef struct prov_aes_xts_ctx_st {
|
||||
PROV_CIPHER_CTX base; /* Must be first */
|
||||
union {
|
||||
@@ -30,6 +38,23 @@ typedef struct prov_aes_xts_ctx_st {
|
||||
} ks1, ks2; /* AES key schedules to use */
|
||||
XTS128_CONTEXT xts;
|
||||
OSSL_xts_stream_fn stream;
|
||||
+
|
||||
+ /* Platform specific data */
|
||||
+ union {
|
||||
+ int dummy;
|
||||
+#if defined(OPENSSL_CPUID_OBJ) && defined(__s390__)
|
||||
+ struct {
|
||||
+ union {
|
||||
+ OSSL_UNION_ALIGN;
|
||||
+ S390X_KM_XTS_PARAMS km;
|
||||
+ } param;
|
||||
+ size_t offset;
|
||||
+ unsigned int fc;
|
||||
+ unsigned int iv_set : 1;
|
||||
+ unsigned int key_set : 1;
|
||||
+ } s390x;
|
||||
+#endif
|
||||
+ } plat;
|
||||
} PROV_AES_XTS_CTX;
|
||||
|
||||
const PROV_CIPHER_HW *ossl_prov_cipher_hw_aes_xts(size_t keybits);
|
||||
diff --git a/providers/implementations/ciphers/cipher_aes_xts_s390x.inc b/providers/implementations/ciphers/cipher_aes_xts_s390x.inc
|
||||
new file mode 100644
|
||||
index 0000000000..77341b3bbd
|
||||
--- /dev/null
|
||||
+++ b/providers/implementations/ciphers/cipher_aes_xts_s390x.inc
|
||||
@@ -0,0 +1,167 @@
|
||||
+/*
|
||||
+ * Copyright 2024 The OpenSSL Project Authors. All Rights Reserved.
|
||||
+ *
|
||||
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
+ * this file except in compliance with the License. You can obtain a copy
|
||||
+ * in the file LICENSE in the source distribution or at
|
||||
+ * https://www.openssl.org/source/license.html
|
||||
+ */
|
||||
+
|
||||
+#include "crypto/s390x_arch.h"
|
||||
+
|
||||
+static OSSL_FUNC_cipher_encrypt_init_fn s390x_aes_xts_einit;
|
||||
+static OSSL_FUNC_cipher_decrypt_init_fn s390x_aes_xts_dinit;
|
||||
+static OSSL_FUNC_cipher_cipher_fn s390x_aes_xts_cipher;
|
||||
+static OSSL_FUNC_cipher_dupctx_fn s390x_aes_xts_dupctx;
|
||||
+
|
||||
+static int s390x_aes_xts_init(void *vctx, const unsigned char *key,
|
||||
+ size_t keylen, const unsigned char *iv,
|
||||
+ size_t ivlen, const OSSL_PARAM params[],
|
||||
+ unsigned int dec)
|
||||
+{
|
||||
+ PROV_AES_XTS_CTX *xctx = (PROV_AES_XTS_CTX *)vctx;
|
||||
+ S390X_KM_XTS_PARAMS *km = &xctx->plat.s390x.param.km;
|
||||
+ unsigned int fc, offs;
|
||||
+
|
||||
+ switch (xctx->base.keylen) {
|
||||
+ case 128 / 8 * 2:
|
||||
+ fc = S390X_XTS_AES_128_MSA10;
|
||||
+ offs = 32;
|
||||
+ break;
|
||||
+ case 256 / 8 * 2:
|
||||
+ fc = S390X_XTS_AES_256_MSA10;
|
||||
+ offs = 0;
|
||||
+ break;
|
||||
+ default:
|
||||
+ goto not_supported;
|
||||
+ }
|
||||
+
|
||||
+ if (!(OPENSSL_s390xcap_P.km[1] && S390X_CAPBIT(fc)))
|
||||
+ goto not_supported;
|
||||
+
|
||||
+ if (iv != NULL) {
|
||||
+ if (ivlen != xctx->base.ivlen
|
||||
+ || ivlen > sizeof(km->tweak)) {
|
||||
+ ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_IV_LENGTH);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ memcpy(km->tweak, iv, ivlen);
|
||||
+ xctx->plat.s390x.iv_set = 1;
|
||||
+ }
|
||||
+
|
||||
+ if (key != NULL) {
|
||||
+ if (keylen != xctx->base.keylen) {
|
||||
+ ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_KEY_LENGTH);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ if (!aes_xts_check_keys_differ(key, keylen / 2, !dec))
|
||||
+ return 0;
|
||||
+
|
||||
+ memcpy(km->key + offs, key, keylen);
|
||||
+ xctx->plat.s390x.key_set = 1;
|
||||
+ }
|
||||
+
|
||||
+ xctx->plat.s390x.fc = fc | dec;
|
||||
+ xctx->plat.s390x.offset = offs;
|
||||
+
|
||||
+ memset(km->nap, 0, sizeof(km->nap));
|
||||
+ km->nap[0] = 0x1;
|
||||
+
|
||||
+ return aes_xts_set_ctx_params(xctx, params);
|
||||
+
|
||||
+not_supported:
|
||||
+ xctx->plat.s390x.fc = 0;
|
||||
+ xctx->plat.s390x.offset = 0;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int s390x_aes_xts_einit(void *vctx, const unsigned char *key,
|
||||
+ size_t keylen, const unsigned char *iv,
|
||||
+ size_t ivlen, const OSSL_PARAM params[])
|
||||
+{
|
||||
+ return s390x_aes_xts_init(vctx, key, keylen, iv, ivlen, params, 0);
|
||||
+}
|
||||
+
|
||||
+static int s390x_aes_xts_dinit(void *vctx, const unsigned char *key,
|
||||
+ size_t keylen, const unsigned char *iv,
|
||||
+ size_t ivlen, const OSSL_PARAM params[])
|
||||
+{
|
||||
+ return s390x_aes_xts_init(vctx, key, keylen, iv, ivlen, params,
|
||||
+ S390X_DECRYPT);
|
||||
+}
|
||||
+
|
||||
+static void *s390x_aes_xts_dupctx(void *vctx)
|
||||
+{
|
||||
+ PROV_AES_XTS_CTX *in = (PROV_AES_XTS_CTX *)vctx;
|
||||
+ PROV_AES_XTS_CTX *ret = OPENSSL_zalloc(sizeof(*in));
|
||||
+
|
||||
+ if (ret != NULL)
|
||||
+ *ret = *in;
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int s390x_aes_xts_cipher(void *vctx, unsigned char *out, size_t *outl,
|
||||
+ size_t outsize, const unsigned char *in,
|
||||
+ size_t inl)
|
||||
+{
|
||||
+ PROV_AES_XTS_CTX *xctx = (PROV_AES_XTS_CTX *)vctx;
|
||||
+ S390X_KM_XTS_PARAMS *km = &xctx->plat.s390x.param.km;
|
||||
+ unsigned char *param = (unsigned char *)km + xctx->plat.s390x.offset;
|
||||
+ unsigned int fc = xctx->plat.s390x.fc;
|
||||
+ unsigned char tmp[2][AES_BLOCK_SIZE];
|
||||
+ unsigned char nap_n1[AES_BLOCK_SIZE];
|
||||
+ unsigned char drop[AES_BLOCK_SIZE];
|
||||
+ size_t len_incomplete, len_complete;
|
||||
+
|
||||
+ if (!ossl_prov_is_running()
|
||||
+ || inl < AES_BLOCK_SIZE
|
||||
+ || in == NULL
|
||||
+ || out == NULL
|
||||
+ || !xctx->plat.s390x.iv_set
|
||||
+ || !xctx->plat.s390x.key_set)
|
||||
+ return 0;
|
||||
+
|
||||
+ /*
|
||||
+ * Impose a limit of 2^20 blocks per data unit as specified by
|
||||
+ * IEEE Std 1619-2018. The earlier and obsolete IEEE Std 1619-2007
|
||||
+ * indicated that this was a SHOULD NOT rather than a MUST NOT.
|
||||
+ * NIST SP 800-38E mandates the same limit.
|
||||
+ */
|
||||
+ if (inl > XTS_MAX_BLOCKS_PER_DATA_UNIT * AES_BLOCK_SIZE) {
|
||||
+ ERR_raise(ERR_LIB_PROV, PROV_R_XTS_DATA_UNIT_IS_TOO_LARGE);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ len_incomplete = inl % AES_BLOCK_SIZE;
|
||||
+ len_complete = (len_incomplete == 0) ? inl :
|
||||
+ (inl / AES_BLOCK_SIZE - 1) * AES_BLOCK_SIZE;
|
||||
+
|
||||
+ if (len_complete > 0)
|
||||
+ s390x_km(in, len_complete, out, fc, param);
|
||||
+ if (len_incomplete == 0)
|
||||
+ goto out;
|
||||
+
|
||||
+ memcpy(tmp, in + len_complete, AES_BLOCK_SIZE + len_incomplete);
|
||||
+ /* swap NAP for decrypt */
|
||||
+ if (fc & S390X_DECRYPT) {
|
||||
+ memcpy(nap_n1, km->nap, AES_BLOCK_SIZE);
|
||||
+ s390x_km(tmp[0], AES_BLOCK_SIZE, drop, fc, param);
|
||||
+ }
|
||||
+ s390x_km(tmp[0], AES_BLOCK_SIZE, tmp[0], fc, param);
|
||||
+ if (fc & S390X_DECRYPT)
|
||||
+ memcpy(km->nap, nap_n1, AES_BLOCK_SIZE);
|
||||
+
|
||||
+ memcpy(tmp[1] + len_incomplete, tmp[0] + len_incomplete,
|
||||
+ AES_BLOCK_SIZE - len_incomplete);
|
||||
+ s390x_km(tmp[1], AES_BLOCK_SIZE, out + len_complete, fc, param);
|
||||
+ memcpy(out + len_complete + AES_BLOCK_SIZE, tmp[0], len_incomplete);
|
||||
+
|
||||
+ /* do not expose temporary data */
|
||||
+ OPENSSL_cleanse(tmp, sizeof(tmp));
|
||||
+out:
|
||||
+ memcpy(xctx->base.iv, km->tweak, AES_BLOCK_SIZE);
|
||||
+ *outl = inl;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
@@ -1,364 +0,0 @@
|
||||
Index: openssl-3.2.3/Configurations/00-base-templates.conf
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/Configurations/00-base-templates.conf
|
||||
+++ openssl-3.2.3/Configurations/00-base-templates.conf
|
||||
@@ -88,6 +88,7 @@ my %targets=(
|
||||
sub {
|
||||
my @libs = ();
|
||||
push(@libs, "-lz") if !defined($disabled{zlib}) && defined($disabled{"zlib-dynamic"});
|
||||
+ push(@libs, "-ljitterentropy") if !defined($disabled{jitterentropy});
|
||||
if (!defined($disabled{brotli}) && defined($disabled{"brotli-dynamic"})) {
|
||||
push(@libs, "-lbrotlienc");
|
||||
push(@libs, "-lbrotlidec");
|
||||
Index: openssl-3.2.3/crypto/rand/rand_jitter_entropy.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ openssl-3.2.3/crypto/rand/rand_jitter_entropy.c
|
||||
@@ -0,0 +1,97 @@
|
||||
+# include "jitterentropy.h"
|
||||
+# include "prov/jitter_entropy.h"
|
||||
+
|
||||
+struct rand_data* ec = NULL;
|
||||
+CRYPTO_RWLOCK *jent_lock = NULL;
|
||||
+int stop = 0;
|
||||
+
|
||||
+struct rand_data* FIPS_entropy_init(void)
|
||||
+{
|
||||
+ if (ec != NULL) {
|
||||
+ /* Entropy source has been initiated and collector allocated */
|
||||
+ return ec;
|
||||
+ }
|
||||
+ if (stop != 0) {
|
||||
+ /* FIPS_entropy_cleanup() already called, don't initialize it again */
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ if (jent_lock == NULL) {
|
||||
+ /* Allocates a new lock to serialize access to jent library */
|
||||
+ jent_lock = CRYPTO_THREAD_lock_new();
|
||||
+ if (jent_lock == NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ }
|
||||
+ if (CRYPTO_THREAD_write_lock(jent_lock) == 0) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ /* If the initialization is successful, the call returns with 0 */
|
||||
+ if (jent_entropy_init_ex(1, JENT_FORCE_FIPS) == 0) {
|
||||
+ /* Allocate entropy collector */
|
||||
+ ec = jent_entropy_collector_alloc(1, JENT_FORCE_FIPS);
|
||||
+ } else {
|
||||
+ /* abort if jitter rng fails initialization */
|
||||
+ abort();
|
||||
+ }
|
||||
+ if (ec == NULL) {
|
||||
+ /* abort if jitter rng fails initialization */
|
||||
+ abort();
|
||||
+ }
|
||||
+ CRYPTO_THREAD_unlock(jent_lock);
|
||||
+
|
||||
+ return ec;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * The following error codes can be returned by jent_read_entropy_safe():
|
||||
+ * -1 entropy_collector is NULL
|
||||
+ * -2 RCT failed
|
||||
+ * -3 APT failed
|
||||
+ * -4 The timer cannot be initialized
|
||||
+ * -5 LAG failure
|
||||
+ * -6 RCT permanent failure
|
||||
+ * -7 APT permanent failure
|
||||
+ * -8 LAG permanent failure
|
||||
+ */
|
||||
+ssize_t FIPS_jitter_entropy(unsigned char *buf, size_t buflen)
|
||||
+{
|
||||
+ ssize_t ent_bytes = -1;
|
||||
+
|
||||
+ /*
|
||||
+ * Order is important. We need to call FIPS_entropy_init() before we
|
||||
+ * acquire jent_lock, otherwise it can lead to deadlock. Once we have
|
||||
+ * jent_lock, we need to ensure that FIPS_entropy_cleanup() was not called
|
||||
+ * in the meantime. Then it's safe to read entropy.
|
||||
+ */
|
||||
+ if (buf != NULL
|
||||
+ && buflen != 0
|
||||
+ && FIPS_entropy_init()
|
||||
+ && CRYPTO_THREAD_write_lock(jent_lock) != 0
|
||||
+ && stop == 0) {
|
||||
+ /* Get entropy */
|
||||
+ ent_bytes = jent_read_entropy_safe(&ec, (char *)buf, buflen);
|
||||
+ if (ent_bytes < 0) {
|
||||
+ /* abort if jitter rng fails entropy gathering because health tests failed. */
|
||||
+ abort();
|
||||
+ }
|
||||
+ CRYPTO_THREAD_unlock(jent_lock);
|
||||
+ }
|
||||
+
|
||||
+ return ent_bytes;
|
||||
+}
|
||||
+
|
||||
+void FIPS_entropy_cleanup(void)
|
||||
+{
|
||||
+ if (jent_lock != NULL && stop == 0) {
|
||||
+ CRYPTO_THREAD_write_lock(jent_lock);
|
||||
+ }
|
||||
+ /* Disable re-initialization in FIPS_entropy_init() */
|
||||
+ stop = 1;
|
||||
+ /* Free entropy collector */
|
||||
+ if (ec != NULL) {
|
||||
+ jent_entropy_collector_free(ec);
|
||||
+ ec = NULL;
|
||||
+ }
|
||||
+ CRYPTO_THREAD_lock_free(jent_lock);
|
||||
+ jent_lock = NULL;
|
||||
+}
|
||||
Index: openssl-3.2.3/providers/implementations/rands/seeding/rand_unix.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/rands/seeding/rand_unix.c
|
||||
+++ openssl-3.2.3/providers/implementations/rands/seeding/rand_unix.c
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "internal/dso.h"
|
||||
#include "internal/nelem.h"
|
||||
#include "prov/seeding.h"
|
||||
+#include "prov/jitter_entropy.h"
|
||||
|
||||
#ifdef __linux
|
||||
# include <sys/syscall.h>
|
||||
@@ -633,6 +634,31 @@ size_t ossl_pool_acquire_entropy(RAND_PO
|
||||
|
||||
(void)entropy_available; /* avoid compiler warning */
|
||||
|
||||
+ /* Use jitter entropy in FIPS mode */
|
||||
+ if (EVP_default_properties_is_fips_enabled(NULL))
|
||||
+ {
|
||||
+ size_t bytes_needed;
|
||||
+ unsigned char *buffer;
|
||||
+ ssize_t bytes;
|
||||
+ /* Maximum allowed number of consecutive unsuccessful attempts */
|
||||
+ int attempts = 3;
|
||||
+
|
||||
+ bytes_needed = ossl_rand_pool_bytes_needed(pool, 1 /*entropy_factor*/);
|
||||
+ while (bytes_needed != 0 && attempts-- > 0) {
|
||||
+ buffer = ossl_rand_pool_add_begin(pool, bytes_needed);
|
||||
+ bytes = FIPS_jitter_entropy(buffer, bytes_needed);
|
||||
+ if (bytes > 0) {
|
||||
+ ossl_rand_pool_add_end(pool, bytes, 8 * bytes);
|
||||
+ bytes_needed -= bytes;
|
||||
+ attempts = 3; /* reset counter after successful attempt */
|
||||
+ } else if (bytes < 0) {
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ entropy_available = ossl_rand_pool_entropy_available(pool);
|
||||
+ return entropy_available;
|
||||
+ }
|
||||
+
|
||||
# if defined(OPENSSL_RAND_SEED_GETRANDOM)
|
||||
{
|
||||
size_t bytes_needed;
|
||||
Index: openssl-3.2.3/providers/implementations/include/prov/jitter_entropy.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ openssl-3.2.3/providers/implementations/include/prov/jitter_entropy.h
|
||||
@@ -0,0 +1,17 @@
|
||||
+#ifndef OSSL_PROVIDERS_JITTER_ENTROPY_H
|
||||
+# define OSSL_PROVIDERS_JITTER_ENTROPY_H
|
||||
+
|
||||
+# include <openssl/core.h>
|
||||
+# include <openssl/types.h>
|
||||
+# include <openssl/crypto.h>
|
||||
+# include <openssl/fips.h>
|
||||
+
|
||||
+extern struct rand_data* ec;
|
||||
+extern CRYPTO_RWLOCK *jent_lock;
|
||||
+extern int stop;
|
||||
+
|
||||
+struct rand_data* FIPS_entropy_init(void);
|
||||
+ssize_t FIPS_jitter_entropy(unsigned char *buf, size_t buflen);
|
||||
+void FIPS_entropy_cleanup(void);
|
||||
+
|
||||
+#endif
|
||||
Index: openssl-3.2.3/providers/fips/self_test.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/fips/self_test.c
|
||||
+++ openssl-3.2.3/providers/fips/self_test.c
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "internal/tsan_assist.h"
|
||||
#include "prov/providercommon.h"
|
||||
#include "crypto/rand.h"
|
||||
+#include "prov/jitter_entropy.h"
|
||||
|
||||
/*
|
||||
* We're cheating here. Normally we don't allow RUN_ONCE usage inside the FIPS
|
||||
@@ -498,6 +499,11 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ if (!FIPS_entropy_init()) {
|
||||
+ ERR_raise(ERR_LIB_PROV, PROV_R_FIPS_ENTROPY_INIT_FAILED);
|
||||
+ goto end;
|
||||
+ }
|
||||
+
|
||||
if (st == NULL) {
|
||||
ERR_raise(ERR_LIB_PROV, PROV_R_MISSING_CONFIG_DATA);
|
||||
goto end;
|
||||
Index: openssl-3.2.3/include/openssl/proverr.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/include/openssl/proverr.h
|
||||
+++ openssl-3.2.3/include/openssl/proverr.h
|
||||
@@ -44,6 +44,7 @@
|
||||
# define PROV_R_FAILED_TO_GET_PARAMETER 103
|
||||
# define PROV_R_FAILED_TO_SET_PARAMETER 104
|
||||
# define PROV_R_FAILED_TO_SIGN 175
|
||||
+# define PROV_R_FIPS_ENTROPY_INIT_FAILED 234
|
||||
# define PROV_R_FIPS_MODULE_CONDITIONAL_ERROR 227
|
||||
# define PROV_R_FIPS_MODULE_ENTERING_ERROR_STATE 224
|
||||
# define PROV_R_FIPS_MODULE_IN_ERROR_STATE 225
|
||||
Index: openssl-3.2.3/providers/common/provider_err.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/common/provider_err.c
|
||||
+++ openssl-3.2.3/providers/common/provider_err.c
|
||||
@@ -54,6 +54,8 @@ static const ERR_STRING_DATA PROV_str_re
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FAILED_TO_SET_PARAMETER),
|
||||
"failed to set parameter"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FAILED_TO_SIGN), "failed to sign"},
|
||||
+ {ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FIPS_ENTROPY_INIT_FAILED),
|
||||
+ "fips module jitter entropy init failed"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FIPS_MODULE_CONDITIONAL_ERROR),
|
||||
"fips module conditional error"},
|
||||
{ERR_PACK(ERR_LIB_PROV, 0, PROV_R_FIPS_MODULE_ENTERING_ERROR_STATE),
|
||||
Index: openssl-3.2.3/crypto/rand/build.info
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/rand/build.info
|
||||
+++ openssl-3.2.3/crypto/rand/build.info
|
||||
@@ -1,6 +1,6 @@
|
||||
LIBS=../../libcrypto
|
||||
|
||||
-$COMMON=rand_lib.c
|
||||
+$COMMON=rand_lib.c rand_jitter_entropy.c
|
||||
$CRYPTO=randfile.c rand_err.c rand_deprecated.c prov_seed.c rand_pool.c \
|
||||
rand_uniform.c
|
||||
|
||||
Index: openssl-3.2.3/providers/fips/fipsprov.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/fips/fipsprov.c
|
||||
+++ openssl-3.2.3/providers/fips/fipsprov.c
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "crypto/context.h"
|
||||
#include "internal/core.h"
|
||||
#include "indicator.h"
|
||||
+#include "prov/jitter_entropy.h"
|
||||
|
||||
static const char FIPS_DEFAULT_PROPERTIES[] = "provider=fips,fips=yes";
|
||||
static const char FIPS_UNAPPROVED_PROPERTIES[] = "provider=fips,fips=no";
|
||||
@@ -609,6 +610,7 @@ const OSSL_SUSE_FIPSINDICATOR_ALGORITHM
|
||||
|
||||
static void fips_teardown(void *provctx)
|
||||
{
|
||||
+ FIPS_entropy_cleanup();
|
||||
OSSL_LIB_CTX_free(PROV_LIBCTX_OF(provctx));
|
||||
ossl_prov_ctx_free(provctx);
|
||||
}
|
||||
Index: openssl-3.2.3/util/libcrypto.num
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/util/libcrypto.num
|
||||
+++ openssl-3.2.3/util/libcrypto.num
|
||||
@@ -5539,3 +5539,5 @@ BIO_ADDR_copy
|
||||
ossl_safe_getenv ? 3_2_0 EXIST::FUNCTION:
|
||||
ossl_ctx_legacy_digest_signatures_allowed ? 3_0_1 EXIST::FUNCTION:
|
||||
ossl_ctx_legacy_digest_signatures_allowed_set ? 3_0_1 EXIST::FUNCTION:
|
||||
+FIPS_entropy_init ? 3_1_4 EXIST::FUNCTION:
|
||||
+FIPS_entropy_cleanup ? 3_1_4 EXIST::FUNCTION:
|
||||
Index: openssl-3.2.3/Configure
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/Configure
|
||||
+++ openssl-3.2.3/Configure
|
||||
@@ -469,6 +469,7 @@ my @disablables = (
|
||||
"gost",
|
||||
"http",
|
||||
"idea",
|
||||
+ "jitterentropy",
|
||||
"ktls",
|
||||
"legacy",
|
||||
"loadereng",
|
||||
@@ -573,6 +574,7 @@ our %disabled = ( # "what" => "c
|
||||
"external-tests" => "default",
|
||||
"fuzz-afl" => "default",
|
||||
"fuzz-libfuzzer" => "default",
|
||||
+ "jitterentropy" => "default",
|
||||
"ktls" => "default",
|
||||
"md2" => "default",
|
||||
"msan" => "default",
|
||||
@@ -801,7 +803,7 @@ my %cmdvars = (); # Stores
|
||||
my %unsupported_options = ();
|
||||
my %deprecated_options = ();
|
||||
# If you change this, update apps/version.c
|
||||
-my @known_seed_sources = qw(getrandom devrandom os egd none rdcpu librandom);
|
||||
+my @known_seed_sources = qw(getrandom devrandom os egd none rdcpu librandom jitterentropy);
|
||||
my @seed_sources = ();
|
||||
while (@argvcopy)
|
||||
{
|
||||
@@ -1291,6 +1293,9 @@ if (scalar(@seed_sources) == 0) {
|
||||
if (scalar(grep { $_ eq 'egd' } @seed_sources) > 0) {
|
||||
delete $disabled{'egd'};
|
||||
}
|
||||
+if (scalar(grep { $_ eq 'jitterentropy' } @seed_sources) > 0) {
|
||||
+ delete $disabled{'jitterentropy'};
|
||||
+}
|
||||
if (scalar(grep { $_ eq 'none' } @seed_sources) > 0) {
|
||||
die "Cannot seed with none and anything else" if scalar(@seed_sources) > 1;
|
||||
warn <<_____ if scalar(@seed_sources) == 1;
|
||||
Index: openssl-3.2.3/crypto/info.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/info.c
|
||||
+++ openssl-3.2.3/crypto/info.c
|
||||
@@ -15,6 +15,9 @@
|
||||
#include "internal/e_os.h"
|
||||
#include "buildinf.h"
|
||||
|
||||
+# include <stdio.h>
|
||||
+# include <jitterentropy.h>
|
||||
+
|
||||
#if defined(__arm__) || defined(__arm) || defined(__aarch64__)
|
||||
# include "arm_arch.h"
|
||||
# define CPU_INFO_STR_LEN 128
|
||||
@@ -128,6 +131,14 @@ DEFINE_RUN_ONCE_STATIC(init_info_strings
|
||||
OPENSSL_strlcat(seeds, ")", sizeof(seeds)); \
|
||||
} while (0)
|
||||
|
||||
+ /* In FIPS mode, only jitterentropy is used for seeding and
|
||||
+ * reseeding the primary DRBG.
|
||||
+ */
|
||||
+ if (EVP_default_properties_is_fips_enabled(NULL)) {
|
||||
+ char jent_version_string[32];
|
||||
+ sprintf(jent_version_string, "jitterentropy (%d)", jent_version());
|
||||
+ add_seeds_string(jent_version_string);
|
||||
+ } else {
|
||||
#ifdef OPENSSL_RAND_SEED_NONE
|
||||
add_seeds_string("none");
|
||||
#endif
|
||||
@@ -156,6 +167,7 @@ DEFINE_RUN_ONCE_STATIC(init_info_strings
|
||||
#ifdef OPENSSL_RAND_SEED_OS
|
||||
add_seeds_string("os-specific");
|
||||
#endif
|
||||
+ }
|
||||
seed_sources = seeds;
|
||||
}
|
||||
return 1;
|
||||
Index: openssl-3.2.3/INSTALL.md
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/INSTALL.md
|
||||
+++ openssl-3.2.3/INSTALL.md
|
||||
@@ -511,6 +511,12 @@ if provided by the CPU.
|
||||
Use librandom (not implemented yet).
|
||||
This source is ignored by the FIPS provider.
|
||||
|
||||
+### jitterentropy
|
||||
+
|
||||
+Use [jitterentropy-library](https://github.com/smuellerDD/jitterentropy-library)
|
||||
+dynamically linked. In FIPS mode, only the jitter RNG is used to seed and reseed
|
||||
+the primary DRBG.
|
||||
+
|
||||
### none
|
||||
|
||||
Disable automatic seeding. This is the default on some operating systems where
|
@@ -1,196 +0,0 @@
|
||||
From 25f5d7b85f6657cd2f9f1ab7ae87f319d9bafe54 Mon Sep 17 00:00:00 2001
|
||||
From: Joerg Schmidbauer <jschmidb@de.ibm.com>
|
||||
Date: Thu, 29 Feb 2024 12:50:05 +0100
|
||||
Subject: [PATCH] s390x: support CPACF sha3/shake performance improvements
|
||||
|
||||
On newer machines the SHA3/SHAKE performance of CPACF instructions KIMD and KLMD
|
||||
can be enhanced by using additional modifier bits. This allows the application
|
||||
to omit initializing the ICV, but also affects the internal processing of the
|
||||
instructions. Performance is mostly gained when processing short messages.
|
||||
|
||||
The new CPACF feature is backwards compatible with older machines, i.e. the new
|
||||
modifier bits are ignored on older machines. However, to save the ICV
|
||||
initialization, the application must detect the MSA level and omit the ICV
|
||||
initialization only if this feature is supported.
|
||||
|
||||
Signed-off-by: Joerg Schmidbauer <jschmidb@de.ibm.com>
|
||||
|
||||
Reviewed-by: Paul Dale <ppzgs1@gmail.com>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/25235)
|
||||
---
|
||||
crypto/s390x_arch.h | 3 ++
|
||||
crypto/s390xcpuid.pl | 4 +--
|
||||
crypto/sha/sha3.c | 8 +++++-
|
||||
providers/implementations/digests/sha3_prov.c | 28 +++++++++++++++----
|
||||
4 files changed, 34 insertions(+), 9 deletions(-)
|
||||
|
||||
Index: openssl-3.2.3/crypto/s390x_arch.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/s390x_arch.h
|
||||
+++ openssl-3.2.3/crypto/s390x_arch.h
|
||||
@@ -191,6 +191,9 @@ extern int OPENSSL_s390xcex;
|
||||
# define S390X_KMA_LAAD 0x200
|
||||
# define S390X_KMA_HS 0x400
|
||||
# define S390X_KDSA_D 0x80
|
||||
+# define S390X_KIMD_NIP 0x8000
|
||||
+# define S390X_KLMD_DUFOP 0x4000
|
||||
+# define S390X_KLMD_NIP 0x8000
|
||||
# define S390X_KLMD_PS 0x100
|
||||
# define S390X_KMAC_IKP 0x8000
|
||||
# define S390X_KMAC_IIMP 0x4000
|
||||
Index: openssl-3.2.3/crypto/s390xcpuid.pl
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/s390xcpuid.pl
|
||||
+++ openssl-3.2.3/crypto/s390xcpuid.pl
|
||||
@@ -308,7 +308,7 @@ s390x_kimd:
|
||||
llgfr %r0,$fc
|
||||
lgr %r1,$param
|
||||
|
||||
- .long 0xb93e0002 # kimd %r0,%r2
|
||||
+ .long 0xb93e8002 # kimd %r0,%r2[,M3]
|
||||
brc 1,.-4 # pay attention to "partial completion"
|
||||
|
||||
br $ra
|
||||
@@ -329,7 +329,7 @@ s390x_klmd:
|
||||
llgfr %r0,$fc
|
||||
l${g} %r1,$stdframe($sp)
|
||||
|
||||
- .long 0xb93f0042 # klmd %r4,%r2
|
||||
+ .long 0xb93f8042 # klmd %r4,%r2[,M3]
|
||||
brc 1,.-4 # pay attention to "partial completion"
|
||||
|
||||
br $ra
|
||||
Index: openssl-3.2.3/crypto/sha/sha3.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/sha/sha3.c
|
||||
+++ openssl-3.2.3/crypto/sha/sha3.c
|
||||
@@ -8,13 +8,19 @@
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
+#if defined(__s390x__) && defined(OPENSSL_CPUID_OBJ)
|
||||
+# include "crypto/s390x_arch.h"
|
||||
+#endif
|
||||
#include "internal/sha3.h"
|
||||
|
||||
void SHA3_squeeze(uint64_t A[5][5], unsigned char *out, size_t len, size_t r, int next);
|
||||
|
||||
void ossl_sha3_reset(KECCAK1600_CTX *ctx)
|
||||
{
|
||||
- memset(ctx->A, 0, sizeof(ctx->A));
|
||||
+#if defined(__s390x__) && defined(OPENSSL_CPUID_OBJ)
|
||||
+ if (!(OPENSSL_s390xcap_P.stfle[1] & S390X_CAPBIT(S390X_MSA12)))
|
||||
+#endif
|
||||
+ memset(ctx->A, 0, sizeof(ctx->A));
|
||||
ctx->bufsz = 0;
|
||||
ctx->xof_state = XOF_STATE_INIT;
|
||||
}
|
||||
Index: openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/digests/sha3_prov.c
|
||||
+++ openssl-3.2.3/providers/implementations/digests/sha3_prov.c
|
||||
@@ -187,26 +187,32 @@ static size_t s390x_sha3_absorb(void *vc
|
||||
{
|
||||
KECCAK1600_CTX *ctx = vctx;
|
||||
size_t rem = len % ctx->block_size;
|
||||
+ unsigned int fc;
|
||||
|
||||
if (!(ctx->xof_state == XOF_STATE_INIT ||
|
||||
ctx->xof_state == XOF_STATE_ABSORB))
|
||||
return 0;
|
||||
+ fc = ctx->pad;
|
||||
+ fc |= ctx->xof_state == XOF_STATE_INIT ? S390X_KIMD_NIP : 0;
|
||||
ctx->xof_state = XOF_STATE_ABSORB;
|
||||
- s390x_kimd(inp, len - rem, ctx->pad, ctx->A);
|
||||
+ s390x_kimd(inp, len - rem, fc, ctx->A);
|
||||
return rem;
|
||||
}
|
||||
|
||||
static int s390x_sha3_final(void *vctx, unsigned char *out, size_t outlen)
|
||||
{
|
||||
KECCAK1600_CTX *ctx = vctx;
|
||||
+ unsigned int fc;
|
||||
|
||||
if (!ossl_prov_is_running())
|
||||
return 0;
|
||||
if (!(ctx->xof_state == XOF_STATE_INIT ||
|
||||
ctx->xof_state == XOF_STATE_ABSORB))
|
||||
return 0;
|
||||
+ fc = ctx->pad | S390X_KLMD_DUFOP;
|
||||
+ fc |= ctx->xof_state == XOF_STATE_INIT ? S390X_KLMD_NIP : 0;
|
||||
ctx->xof_state = XOF_STATE_FINAL;
|
||||
- s390x_klmd(ctx->buf, ctx->bufsz, NULL, 0, ctx->pad, ctx->A);
|
||||
+ s390x_klmd(ctx->buf, ctx->bufsz, NULL, 0, fc, ctx->A);
|
||||
memcpy(out, ctx->A, outlen);
|
||||
return 1;
|
||||
}
|
||||
@@ -214,14 +220,17 @@ static int s390x_sha3_final(void *vctx,
|
||||
static int s390x_shake_final(void *vctx, unsigned char *out, size_t outlen)
|
||||
{
|
||||
KECCAK1600_CTX *ctx = vctx;
|
||||
+ unsigned int fc;
|
||||
|
||||
if (!ossl_prov_is_running())
|
||||
return 0;
|
||||
if (!(ctx->xof_state == XOF_STATE_INIT ||
|
||||
ctx->xof_state == XOF_STATE_ABSORB))
|
||||
return 0;
|
||||
+ fc = ctx->pad | S390X_KLMD_DUFOP;
|
||||
+ fc |= ctx->xof_state == XOF_STATE_INIT ? S390X_KLMD_NIP : 0;
|
||||
ctx->xof_state = XOF_STATE_FINAL;
|
||||
- s390x_klmd(ctx->buf, ctx->bufsz, out, outlen, ctx->pad, ctx->A);
|
||||
+ s390x_klmd(ctx->buf, ctx->bufsz, out, outlen, fc, ctx->A);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -271,24 +280,28 @@ static int s390x_keccakc_final(void *vct
|
||||
size_t bsz = ctx->block_size;
|
||||
size_t num = ctx->bufsz;
|
||||
size_t needed = outlen;
|
||||
+ unsigned int fc;
|
||||
|
||||
if (!ossl_prov_is_running())
|
||||
return 0;
|
||||
if (!(ctx->xof_state == XOF_STATE_INIT ||
|
||||
ctx->xof_state == XOF_STATE_ABSORB))
|
||||
return 0;
|
||||
+ fc = ctx->pad;
|
||||
+ fc |= ctx->xof_state == XOF_STATE_INIT ? S390X_KIMD_NIP : 0;
|
||||
ctx->xof_state = XOF_STATE_FINAL;
|
||||
if (outlen == 0)
|
||||
return 1;
|
||||
memset(ctx->buf + num, 0, bsz - num);
|
||||
ctx->buf[num] = padding;
|
||||
ctx->buf[bsz - 1] |= 0x80;
|
||||
- s390x_kimd(ctx->buf, bsz, ctx->pad, ctx->A);
|
||||
+ s390x_kimd(ctx->buf, bsz, fc, ctx->A);
|
||||
num = needed > bsz ? bsz : needed;
|
||||
memcpy(out, ctx->A, num);
|
||||
needed -= num;
|
||||
if (needed > 0)
|
||||
- s390x_klmd(NULL, 0, out + bsz, needed, ctx->pad | S390X_KLMD_PS, ctx->A);
|
||||
+ s390x_klmd(NULL, 0, out + bsz, needed,
|
||||
+ ctx->pad | S390X_KLMD_PS | S390X_KLMD_DUFOP, ctx->A);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -308,6 +321,7 @@ static int s390x_keccakc_squeeze(void *v
|
||||
{
|
||||
KECCAK1600_CTX *ctx = vctx;
|
||||
size_t len;
|
||||
+ unsigned int fc;
|
||||
|
||||
if (!ossl_prov_is_running())
|
||||
return 0;
|
||||
@@ -323,7 +337,9 @@ static int s390x_keccakc_squeeze(void *v
|
||||
memset(ctx->buf + ctx->bufsz, 0, len);
|
||||
ctx->buf[ctx->bufsz] = padding;
|
||||
ctx->buf[ctx->block_size - 1] |= 0x80;
|
||||
- s390x_kimd(ctx->buf, ctx->block_size, ctx->pad, ctx->A);
|
||||
+ fc = ctx->pad;
|
||||
+ fc |= ctx->xof_state == XOF_STATE_INIT ? S390X_KIMD_NIP : 0;
|
||||
+ s390x_kimd(ctx->buf, ctx->block_size, fc, ctx->A);
|
||||
ctx->bufsz = 0;
|
||||
/* reuse ctx->bufsz to count bytes squeezed from current sponge */
|
||||
}
|
@@ -1,160 +0,0 @@
|
||||
commit 94898923538f686b74b6ddef34571f804d9b3811
|
||||
Author: Holger Dengler <dengler@linux.ibm.com>
|
||||
Date: Wed Sep 27 15:40:47 2023 +0200
|
||||
|
||||
Support EVP_DigestSqueeze() for in the digest provider for s390x.
|
||||
|
||||
The new EVP_DigestSqueeze() API requires changes to all keccak-based
|
||||
digest provider implementations. Update the s390x-part of the SHA3
|
||||
digest provider.
|
||||
|
||||
Squeeze for SHA3 is not supported, so add an empty function pointer
|
||||
(NULL).
|
||||
|
||||
Signed-off-by: Holger Dengler <dengler@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
|
||||
Reviewed-by: Todd Short <todd.short@me.com>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/22221)
|
||||
|
||||
diff --git a/providers/implementations/digests/sha3_prov.c b/providers/implementations/digests/sha3_prov.c
|
||||
index f691273baf..2fd0f928e7 100644
|
||||
--- a/providers/implementations/digests/sha3_prov.c
|
||||
+++ b/providers/implementations/digests/sha3_prov.c
|
||||
@@ -225,6 +225,45 @@ static int s390x_shake_final(void *vctx, unsigned char *out, size_t outlen)
|
||||
return 1;
|
||||
}
|
||||
|
||||
+static int s390x_shake_squeeze(void *vctx, unsigned char *out, size_t outlen)
|
||||
+{
|
||||
+ KECCAK1600_CTX *ctx = vctx;
|
||||
+ size_t len;
|
||||
+
|
||||
+ if (!ossl_prov_is_running())
|
||||
+ return 0;
|
||||
+ if (ctx->xof_state == XOF_STATE_FINAL)
|
||||
+ return 0;
|
||||
+ /*
|
||||
+ * On the first squeeze call, finish the absorb process (incl. padding).
|
||||
+ */
|
||||
+ if (ctx->xof_state != XOF_STATE_SQUEEZE) {
|
||||
+ ctx->xof_state = XOF_STATE_SQUEEZE;
|
||||
+ s390x_klmd(ctx->buf, ctx->bufsz, out, outlen, ctx->pad, ctx->A);
|
||||
+ ctx->bufsz = outlen % ctx->block_size;
|
||||
+ /* reuse ctx->bufsz to count bytes squeezed from current sponge */
|
||||
+ return 1;
|
||||
+ }
|
||||
+ ctx->xof_state = XOF_STATE_SQUEEZE;
|
||||
+ if (ctx->bufsz != 0) {
|
||||
+ len = ctx->block_size - ctx->bufsz;
|
||||
+ if (outlen < len)
|
||||
+ len = outlen;
|
||||
+ memcpy(out, (char *)ctx->A + ctx->bufsz, len);
|
||||
+ out += len;
|
||||
+ outlen -= len;
|
||||
+ ctx->bufsz += len;
|
||||
+ if (ctx->bufsz == ctx->block_size)
|
||||
+ ctx->bufsz = 0;
|
||||
+ }
|
||||
+ if (outlen == 0)
|
||||
+ return 1;
|
||||
+ s390x_klmd(NULL, 0, out, outlen, ctx->pad | S390X_KLMD_PS, ctx->A);
|
||||
+ ctx->bufsz = outlen % ctx->block_size;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
static int s390x_keccakc_final(void *vctx, unsigned char *out, size_t outlen,
|
||||
int padding)
|
||||
{
|
||||
@@ -264,28 +303,86 @@ static int s390x_kmac_final(void *vctx, unsigned char *out, size_t outlen)
|
||||
return s390x_keccakc_final(vctx, out, outlen, 0x04);
|
||||
}
|
||||
|
||||
+static int s390x_keccakc_squeeze(void *vctx, unsigned char *out, size_t outlen,
|
||||
+ int padding)
|
||||
+{
|
||||
+ KECCAK1600_CTX *ctx = vctx;
|
||||
+ size_t len;
|
||||
+
|
||||
+ if (!ossl_prov_is_running())
|
||||
+ return 0;
|
||||
+ if (ctx->xof_state == XOF_STATE_FINAL)
|
||||
+ return 0;
|
||||
+ /*
|
||||
+ * On the first squeeze call, finish the absorb process
|
||||
+ * by adding the trailing padding and then doing
|
||||
+ * a final absorb.
|
||||
+ */
|
||||
+ if (ctx->xof_state != XOF_STATE_SQUEEZE) {
|
||||
+ len = ctx->block_size - ctx->bufsz;
|
||||
+ memset(ctx->buf + ctx->bufsz, 0, len);
|
||||
+ ctx->buf[ctx->bufsz] = padding;
|
||||
+ ctx->buf[ctx->block_size - 1] |= 0x80;
|
||||
+ s390x_kimd(ctx->buf, ctx->block_size, ctx->pad, ctx->A);
|
||||
+ ctx->bufsz = 0;
|
||||
+ /* reuse ctx->bufsz to count bytes squeezed from current sponge */
|
||||
+ }
|
||||
+ if (ctx->bufsz != 0 || ctx->xof_state != XOF_STATE_SQUEEZE) {
|
||||
+ len = ctx->block_size - ctx->bufsz;
|
||||
+ if (outlen < len)
|
||||
+ len = outlen;
|
||||
+ memcpy(out, (char *)ctx->A + ctx->bufsz, len);
|
||||
+ out += len;
|
||||
+ outlen -= len;
|
||||
+ ctx->bufsz += len;
|
||||
+ if (ctx->bufsz == ctx->block_size)
|
||||
+ ctx->bufsz = 0;
|
||||
+ }
|
||||
+ ctx->xof_state = XOF_STATE_SQUEEZE;
|
||||
+ if (outlen == 0)
|
||||
+ return 1;
|
||||
+ s390x_klmd(NULL, 0, out, outlen, ctx->pad | S390X_KLMD_PS, ctx->A);
|
||||
+ ctx->bufsz = outlen % ctx->block_size;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+static int s390x_keccak_squeeze(void *vctx, unsigned char *out, size_t outlen)
|
||||
+{
|
||||
+ return s390x_keccakc_squeeze(vctx, out, outlen, 0x01);
|
||||
+}
|
||||
+
|
||||
+static int s390x_kmac_squeeze(void *vctx, unsigned char *out, size_t outlen)
|
||||
+{
|
||||
+ return s390x_keccakc_squeeze(vctx, out, outlen, 0x04);
|
||||
+}
|
||||
+
|
||||
static PROV_SHA3_METHOD sha3_s390x_md =
|
||||
{
|
||||
s390x_sha3_absorb,
|
||||
- s390x_sha3_final
|
||||
+ s390x_sha3_final,
|
||||
+ NULL,
|
||||
};
|
||||
|
||||
static PROV_SHA3_METHOD keccak_s390x_md =
|
||||
{
|
||||
s390x_sha3_absorb,
|
||||
s390x_keccak_final,
|
||||
+ s390x_keccak_squeeze,
|
||||
};
|
||||
|
||||
static PROV_SHA3_METHOD shake_s390x_md =
|
||||
{
|
||||
s390x_sha3_absorb,
|
||||
- s390x_shake_final
|
||||
+ s390x_shake_final,
|
||||
+ s390x_shake_squeeze,
|
||||
};
|
||||
|
||||
static PROV_SHA3_METHOD kmac_s390x_md =
|
||||
{
|
||||
s390x_sha3_absorb,
|
||||
- s390x_kmac_final
|
||||
+ s390x_kmac_final,
|
||||
+ s390x_kmac_squeeze,
|
||||
};
|
||||
|
||||
# define SHAKE_SET_MD(uname, typ) \
|
@@ -1,46 +0,0 @@
|
||||
commit bff62480333680463c82e88fdc67ed5ec14a0017
|
||||
Author: Holger Dengler <dengler@linux.ibm.com>
|
||||
Date: Wed Sep 27 11:18:18 2023 +0200
|
||||
|
||||
Support multiple calls of low level SHA3_squeeze() for s390x.
|
||||
|
||||
The low level SHA3_Squeeze() function needed to change slightly so
|
||||
that it can handle multiple squeezes. Support this on s390x
|
||||
architecture as well.
|
||||
|
||||
Signed-off-by: Holger Dengler <dengler@linux.ibm.com>
|
||||
|
||||
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
|
||||
Reviewed-by: Todd Short <todd.short@me.com>
|
||||
Reviewed-by: Tomas Mraz <tomas@openssl.org>
|
||||
(Merged from https://github.com/openssl/openssl/pull/22221)
|
||||
|
||||
diff --git a/crypto/sha/asm/keccak1600-s390x.pl b/crypto/sha/asm/keccak1600-s390x.pl
|
||||
index 86233c7e38..7d5ebde117 100755
|
||||
--- a/crypto/sha/asm/keccak1600-s390x.pl
|
||||
+++ b/crypto/sha/asm/keccak1600-s390x.pl
|
||||
@@ -472,7 +472,7 @@ SHA3_absorb:
|
||||
.size SHA3_absorb,.-SHA3_absorb
|
||||
___
|
||||
}
|
||||
-{ my ($A_flat,$out,$len,$bsz) = map("%r$_",(2..5));
|
||||
+{ my ($A_flat,$out,$len,$bsz,$next) = map("%r$_",(2..6));
|
||||
|
||||
$code.=<<___;
|
||||
.globl SHA3_squeeze
|
||||
@@ -484,6 +484,7 @@ SHA3_squeeze:
|
||||
lghi %r14,8
|
||||
st${g} $bsz,5*$SIZE_T($sp)
|
||||
la %r1,0($A_flat)
|
||||
+ cijne $next,0,.Lnext_block
|
||||
|
||||
j .Loop_squeeze
|
||||
|
||||
@@ -501,6 +502,7 @@ SHA3_squeeze:
|
||||
|
||||
brct $bsz,.Loop_squeeze # bsz--
|
||||
|
||||
+.Lnext_block:
|
||||
stm${g} $out,$len,3*$SIZE_T($sp)
|
||||
bras %r14,.LKeccakF1600
|
||||
lm${g} $out,$bsz,3*$SIZE_T($sp)
|
BIN
openssl-3.2.4.tar.gz
(Stored with Git LFS)
BIN
openssl-3.2.4.tar.gz
(Stored with Git LFS)
Binary file not shown.
@@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEEulRzorBYewf7J88tIWCU39DLge8FAmerYbgACgkQIWCU39DL
|
||||
ge+LMhAAmVXO6X5r3P5P8czf4kT8jFp9xRkp+jlzLZ7+Vt0GOc+8JZRJ/Fmi4fsD
|
||||
6nMScDzpJAv/KxOsRCC3l+Fz7eIRWvf+qeSTQggCYAlUF+3Y9qXbnOcCj+8/HPYa
|
||||
bAXq7S4hFi3T7NXFyOOx38KxUuhNpcC/tUvMEmYoR8HTm0n1Utf/h/IC9IVoc7at
|
||||
raUOo2qTZqwMNFue8fXC7lj6wL81MRD3TYOjePNZAKe2tuPCLoyR+sN8twVbNOLH
|
||||
9TDwMZLeCRaLebL9x14knhUOT4+/gsTGH84KS56Ry0YYSDGc2u+58HRaGFBbAEId
|
||||
hy4DYrYMCRlcSofPYlzMaFAZ3PSar+6ZPvvEl+OrOzY9DPoXzj0gXQ/NCWqJu9lg
|
||||
EQvE6/TnuhXEUxO25eWnIXGBWcmJtECut/rY1sV9OZwaOUPxDWZTxkDuv1dNDqug
|
||||
EmrfJHM7KdYVwy7JONReF0ODnNIVAa4HoAZ0EF3K3oySA5KmbA3YkkDGo5aqhpAD
|
||||
LZu4+fEmemq1fsEjAxdAk2Vmx4YUElcHEoQGQxSdPlIgl/z/KQ6ONuYoGIgXUXH8
|
||||
omXxceapMLP3DkHEpFxOYACCderAxDsZAjgFxM2Rlvp8afCq/C2wFYFDERU9XNIS
|
||||
SIc4N+NAoDAxSk6ScGSzORO78lFIGzBIX3pLSCCIezGCyfeHtYo=
|
||||
=HqP/
|
||||
-----END PGP SIGNATURE-----
|
BIN
openssl-3.5.0.tar.gz
(Stored with Git LFS)
Normal file
BIN
openssl-3.5.0.tar.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
16
openssl-3.5.0.tar.gz.asc
Normal file
16
openssl-3.5.0.tar.gz.asc
Normal file
@@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEEulRzorBYewf7J88tIWCU39DLge8FAmf1ITQACgkQIWCU39DL
|
||||
ge+kyhAAjicxaMPBhcQqgnp3RyZhf4hOwVEzkUu3ouEjdIccz8NMxwV4Kf298ivL
|
||||
DHF/0HZQuHzIjcO/vQLLG66XCeiS0bDDIxEj457iYDr/lbWvGOqKgH+e5u7fo4iG
|
||||
f3aRZ/ACVuFXQ9LWjtR0M15HGJ/fKCCJQgIFwZ103tz4ptO6PBtUFK3PNGUpVjbV
|
||||
00oJ0msl2NDwrKpymVNKp9gXva7RfzIggPDl6MC80m54T7aruXhqur4dxkcyD+pa
|
||||
WmYKd4659jhCHRlXGZzz8XcLUsa3gQzP8W2RIqMZY8hdaaGnPEZY942s7KwRsdq0
|
||||
Blr54GBTpK8TLAUfBuFkFejS5bSbGsCGgAt9lP8ZkscRiG5tGdBYV/KUcOD7a1Xa
|
||||
VnsLlePtWlJGAWZt54JhQz5/dQtI51xJmhzbcHB5mTtDY0SZ7EnHNgTo1UY4cZZd
|
||||
sI3QhEgCOEh9UCMBQrxpaR9+chFaTd4hlYfbJAZgfI6XZyx8uSvngl3K/22anJmR
|
||||
Js1q8sE0G4hbtaSM5YecdX+RAMAwfujwqDY6BEM032kAO9eGe0PEnCRC8b23bRxF
|
||||
Vqmuwv7VpUMxCjo0k5GUC4Bj502r3H9ArPTVTI/E9Elhrc2jGfrU6bPdMmaz3qAi
|
||||
nKMjtRtsg81LwSlxg2ypi2L+liv6md2QkaQswMS6k+JGRaR5sVc=
|
||||
=pAni
|
||||
-----END PGP SIGNATURE-----
|
@@ -1,3 +1,205 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 4 13:34:27 UTC 2025 - Lucas Mulling <lucas.mulling@suse.com>
|
||||
|
||||
- Update to 3.5.0:
|
||||
* Changes:
|
||||
- Default encryption cipher for the req, cms, and smime applications
|
||||
changed from des-ede3-cbc to aes-256-cbc.
|
||||
- The default TLS supported groups list has been changed to include
|
||||
and prefer hybrid PQC KEM groups. Some practically unused groups
|
||||
were removed from the default list.
|
||||
- The default TLS keyshares have been changed to offer X25519MLKEM768
|
||||
and and X25519.
|
||||
- All BIO_meth_get_*() functions were deprecated.
|
||||
* New features:
|
||||
- Support for server side QUIC (RFC 9000)
|
||||
- Support for 3rd party QUIC stacks including 0-RTT support
|
||||
- Support for PQC algorithms (ML-KEM, ML-DSA and SLH-DSA)
|
||||
- A new configuration option no-tls-deprecated-ec to disable support
|
||||
for TLS groups deprecated in RFC8422
|
||||
- A new configuration option enable-fips-jitter to make the FIPS
|
||||
provider to use the JITTER seed source
|
||||
- Support for central key generation in CMP
|
||||
- Support added for opaque symmetric key objects (EVP_SKEY)
|
||||
- Support for multiple TLS keyshares and improved TLS key establishment
|
||||
group configurability
|
||||
- API support for pipelining in provided cipher algorithms
|
||||
* Remove patches:
|
||||
- openssl-3-disable-hmac-hw-acceleration-with-engine-digest.patch
|
||||
- openssl-3-support-CPACF-sha3-shake-perf-improvement.patch
|
||||
- openssl-3-add-defines-CPACF-funcs.patch
|
||||
- openssl-3-fix-memleak-s390x_HMAC_CTX_copy.patch
|
||||
- openssl-3-add-xof-state-handling-s3_absorb.patch
|
||||
- openssl-3-fix-state-handling-sha3_absorb_s390x.patch
|
||||
- openssl-3-fix-s390x_shake_squeeze.patch
|
||||
- openssl-3-hw-acceleration-aes-xts-s390x.patch
|
||||
- openssl-3-support-EVP_DigestSqueeze-in-digest-prov-s390x.patch
|
||||
- openssl-3-fix-state-handling-keccak_final_s390x.patch
|
||||
- openssl-3-add-hw-acceleration-hmac.patch
|
||||
- openssl-3-fix-state-handling-sha3_final_s390x.patch
|
||||
- openssl-3-fix-hmac-digest-detection-s390x.patch
|
||||
- openssl-3-support-multiple-sha3_squeeze_s390x.patch
|
||||
- openssl-3-fix-sha3-squeeze-ppc64.patch
|
||||
- openssl-3-fix-s390x_sha3_absorb.patch
|
||||
- openssl-3-fix-state-handling-shake_final_s390x.patch
|
||||
- openssl-3-add_EVP_DigestSqueeze_api.patch
|
||||
- openssl-FIPS-enforce-security-checks-during-initialization.patch
|
||||
- openssl-FIPS-140-3-zeroization.patch
|
||||
- openssl-FIPS-Add-explicit-indicator-for-key-length.patch
|
||||
- openssl-FIPS-Mark-SHA1-as-nonapproved.patch
|
||||
- openssl-Remove-EC-curves.patch
|
||||
- openssl-FIPS-services-minimize.patch
|
||||
- openssl-Revert-Improve-FIPS-RSA-keygen-performance.patch
|
||||
- openssl-3-FIPS-GCM-Implement-explicit-indicator-for-IV-gen.patch
|
||||
- openssl-3-fix-quic_multistream_test.patch
|
||||
- openssl-3-jitterentropy-3.4.0.patch
|
||||
- openssl-Add-FIPS-indicator-parameter-to-HKDF.patch
|
||||
- openssl-FIPS-140-3-DRBG.patch
|
||||
- openssl-FIPS-Use-FFDHE2048-in-self-test.patch
|
||||
- openssl-FIPS-Use-digest_sign-digest_verify-in-self-test.patch
|
||||
- openssl-FIPS-signature-Add-indicator-for-PSS-salt-length.patch
|
||||
- openssl-pbkdf2-Set-indicator-if-pkcs5-param-disabled-checks.patch
|
||||
- openssl-FIPS-enforce-EMS-support.patch
|
||||
- openssl-Allow-disabling-of-SHA1-signatures.patch
|
||||
- openssl-3-FIPS-Deny-SHA-1-sigver-in-FIPS-provider.patch
|
||||
* Rebased patches:
|
||||
- openssl-pkgconfig.patch
|
||||
- openssl-Add-support-for-PROFILE-SYSTEM-system-default-cipher.patch
|
||||
- openssl-Add-Kernel-FIPS-mode-flag-support.patch
|
||||
- openssl-Force-FIPS.patch
|
||||
- openssl-disable-fipsinstall.patch
|
||||
- openssl-FIPS-embed-hmac.patch
|
||||
- openssl-Add-changes-to-ectest-and-eccurve.patch
|
||||
- openssl-Disable-explicit-ec.patch
|
||||
- openssl-skipped-tests-EC-curves.patch
|
||||
- openssl-FIPS-140-3-keychecks.patch
|
||||
- openssl-FIPS-early-KATS.patch
|
||||
- openssl-FIPS-limit-rsa-encrypt.patch
|
||||
- openssl-FIPS-Expose-a-FIPS-indicator.patch
|
||||
- openssl-FIPS-Use-OAEP-in-KATs-support-fixed-OAEP-seed.patch
|
||||
- openssl-rand-Forbid-truncated-hashes-SHA-3-in-FIPS-prov.patch
|
||||
- openssl-pbkdf2-Set-minimum-password-length-of-8-bytes.patch
|
||||
- openssl-FIPS-RSA-disable-shake.patch
|
||||
- openssl-DH-Disable-FIPS-186-4-type-parameters-in-FIPS-mode.patch
|
||||
- openssl-FIPS-Enforce-error-state.patch
|
||||
- openssl-FIPS-Remove-X9.31-padding-from-FIPS-prov.patch
|
||||
- openssl-FIPS-enforce-EMS-support.patch
|
||||
- openssl-TESTS-Disable-default-provider-crypto-policies.patch
|
||||
- openssl-skip-quic-pairwise.patch
|
||||
* Add patches:
|
||||
- openssl-FIPS-Fix-encoder-decoder-negative-test.patch
|
||||
- openssl-FIPS-SUSE-FIPS-module-version.patch
|
||||
- openssl-FIPS-EC-disable-weak-curves.patch
|
||||
- openssl-FIPS-NO-DES-support.patch
|
||||
- openssl-FIPS-NO-DSA-Support.patch
|
||||
- openssl-FIPS-NO-Kmac.patch
|
||||
- openssl-FIPS-NO-PQ-ML-SLH-DSA.patch
|
||||
- openssl-shared-jitterentropy.patch
|
||||
- openssl-rh-allow-sha1-signatures.patch
|
||||
- openssl-disable-75-test_quicapi-test.patch
|
||||
|
||||
- Changes between 3.3.0 and 3.4.0:
|
||||
* Changes:
|
||||
- Deprecation of TS_VERIFY_CTX_set_* functions and addition of
|
||||
replacement TS_VERIFY_CTX_set0_* functions with improved semantics
|
||||
- The X25519 and X448 key exchange implementation in the FIPS provider
|
||||
is unapproved and has fips=no property.
|
||||
- SHAKE-128 and SHAKE-256 implementations have no default digest length
|
||||
anymore. That means these algorithms cannot be used with
|
||||
EVP_DigestFinal/_ex() unless the xoflen param is set before.
|
||||
- Setting config_diagnostics=1 in the config file will cause errors to
|
||||
be returned from SSL_CTX_new() and SSL_CTX_new_ex() if there is an
|
||||
error in the ssl module configuration.
|
||||
- An empty renegotiate extension will be used in TLS client hellos
|
||||
instead of the empty renegotiation SCSV, for all connections with a
|
||||
minimum TLS version > 1.0.
|
||||
- Deprecation of SSL_SESSION_get_time(), SSL_SESSION_set_time() and
|
||||
SSL_CTX_flush_sessions() functions in favor of their respective _ex
|
||||
functions which are Y2038-safe on platforms with Y2038-safe time_t
|
||||
* New features:
|
||||
- Support for directly fetched composite signature algorithms such as
|
||||
RSA-SHA2-256 including new API functions
|
||||
- FIPS indicators support in the FIPS provider and various updates of
|
||||
the FIPS provider required for future FIPS 140-3 validations
|
||||
- Implementation of RFC 9579 (PBMAC1) in PKCS#12
|
||||
- An optional additional random seed source RNG JITTER using a statically
|
||||
linked jitterentropy library
|
||||
- New options -not_before and -not_after for explicit setting start and
|
||||
end dates of certificates created with the req and x509 apps
|
||||
- Support for integrity-only cipher suites TLS_SHA256_SHA256 and
|
||||
TLS_SHA384_SHA384 in TLS 1.3, as defined in RFC 9150
|
||||
- Support for retrieving certificate request templates and CRLs in CMP
|
||||
- Support for additional X.509v3 extensions related to Attribute Certificates
|
||||
- Initial Attribute Certificate (RFC 5755) support
|
||||
- Possibility to customize ECC groups initialization to use precomputed
|
||||
values to save CPU time and use of this feature by the P-256 implementation
|
||||
|
||||
- Changes between 3.2.0 and 3.3.0:
|
||||
* Changes:
|
||||
- Optimized AES-CTR for ARM Neoverse V1 and V2
|
||||
- Various optimizations for cryptographic routines using RISC-V vector
|
||||
crypto extensions
|
||||
- Added assembly implementation for md5 on loongarch64
|
||||
- Accept longer context for TLS 1.2 exporters
|
||||
- The activate and soft_load configuration settings for providers in
|
||||
openssl.cnf have been updated to require a value of [1|yes|true|on]
|
||||
(in lower or UPPER case) to enable the setting. Conversely a value of
|
||||
[0|no|false|off] will disable the setting.
|
||||
- In openssl speed, changed the default hash function used with hmac from
|
||||
md5 to sha256.
|
||||
- The -verify option to the openssl crl and openssl req will make the
|
||||
program exit with 1 on failure.
|
||||
- The d2i_ASN1_GENERALIZEDTIME(), d2i_ASN1_UTCTIME(), ASN1_TIME_check(),
|
||||
and related functions have been augmented to check for a minimum length
|
||||
of the input string, in accordance with ITU-T X.690 section 11.7 and 11.8.
|
||||
- OPENSSL_sk_push() and sk__push() functions now return 0 instead of -1
|
||||
if called with a NULL stack argument.
|
||||
- New limit on HTTP response headers is introduced to HTTP client.
|
||||
The default limit is set to 256 header lines.
|
||||
* Bug fixes and mitigations:
|
||||
- The BIO_get_new_index() function can only be called 127 times before
|
||||
it reaches its upper bound of BIO_TYPE_MASK and will now return -1
|
||||
once its exhausted.
|
||||
* new features:
|
||||
- Support for qlog for tracing QUIC connections has been added
|
||||
- Added APIs to allow configuring the negotiated idle timeout for QUIC
|
||||
connections, and to allow determining the number of additional streams
|
||||
that can currently be created for a QUIC connection.
|
||||
- Added APIs to allow disabling implicit QUIC event processing for QUIC
|
||||
SSL objects
|
||||
- Added APIs to allow querying the size and utilisation of a QUIC
|
||||
stream's write buffer
|
||||
- New API SSL_write_ex2, which can be used to send an end-of-stream (FIN)
|
||||
condition in an optimised way when using QUIC.
|
||||
- Limited support for polling of QUIC connection and stream objects in a
|
||||
non-blocking manner.
|
||||
- Added a new EVP_DigestSqueeze() API. This allows SHAKE to squeeze multiple
|
||||
times with different output sizes.
|
||||
- The BLAKE2s hash algorithm matches BLAKE2b's support for configurable
|
||||
output length.
|
||||
- The EVP_PKEY_fromdata function has been augmented to allow for the
|
||||
derivation of CRT (Chinese Remainder Theorem) parameters when requested
|
||||
- Added API functions SSL_SESSION_get_time_ex(), SSL_SESSION_set_time_ex()
|
||||
using time_t which is Y2038 safe on 32 bit systems when 64 bit time
|
||||
is enabled.
|
||||
- Unknown entries in TLS SignatureAlgorithms, ClientSignatureAlgorithms
|
||||
config
|
||||
options and the respective calls to SSL[_CTX]_set1_sigalgs() and
|
||||
SSL[_CTX]_set1_client_sigalgs() that start with ? character are ignored
|
||||
and the configuration will still be used.
|
||||
- Added -set_issuer and -set_subject options to openssl x509 to override
|
||||
the Issuer and Subject when creating a certificate. The -subj option
|
||||
now is an alias for -set_subject.
|
||||
- Added several new features of CMPv3 defined in RFC 9480 and RFC 9483
|
||||
- New option SSL_OP_PREFER_NO_DHE_KEX, which allows configuring a TLS1.3
|
||||
server to prefer session resumption using PSK-only key exchange over
|
||||
PSK with DHE, if both are available.
|
||||
- New atexit configuration switch, which controls whether the OPENSSL_cleanup
|
||||
is registered when libcrypto is unloaded.
|
||||
- Added X509_STORE_get1_objects to avoid issues with the existing
|
||||
X509_STORE_get0_objects API in multi-threaded applications.
|
||||
- Support for using certificate profiles and extened delayed delivery in CMP
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Mar 21 17:19:40 UTC 2025 - Lucas Mulling <lucas.mulling@suse.com>
|
||||
|
||||
|
148
openssl-3.spec
148
openssl-3.spec
@@ -26,11 +26,19 @@
|
||||
%define _lto_cflags %{nil}
|
||||
%endif
|
||||
|
||||
%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150400
|
||||
%global sle_needs_crypto_policies 1
|
||||
%endif
|
||||
|
||||
%if 0%{?suse_version} > 1600
|
||||
%global openssl_test_flags HARNESS_JOBS=${RPM_BUILD_NCPUS}
|
||||
%endif
|
||||
|
||||
# Enable userspace livepatching.
|
||||
%define livepatchable 1
|
||||
|
||||
Name: openssl-3
|
||||
Version: 3.2.4
|
||||
Version: 3.5.0
|
||||
Release: 0
|
||||
Summary: Secure Sockets and Transport Layer Security
|
||||
License: Apache-2.0
|
||||
@@ -51,7 +59,7 @@ Patch2: openssl-truststore.patch
|
||||
Patch3: openssl-pkgconfig.patch
|
||||
Patch4: openssl-ppc64-config.patch
|
||||
Patch5: openssl-no-date.patch
|
||||
# Add crypto-policies support
|
||||
# PATCH-FIX-FEDORA Add crypto-policies support
|
||||
Patch6: openssl-Add-support-for-PROFILE-SYSTEM-system-default-cipher.patch
|
||||
# PATCH-FIX-FEDORA Add FIPS_mode compatibility macro and flag support
|
||||
Patch7: openssl-Add-FIPS_mode-compatibility-macro.patch
|
||||
@@ -66,91 +74,50 @@ Patch11: openssl-load-legacy-provider.patch
|
||||
Patch12: openssl-FIPS-embed-hmac.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221786 FIPS: Use of non-Approved Elliptic Curves
|
||||
Patch13: openssl-Add-changes-to-ectest-and-eccurve.patch
|
||||
Patch14: openssl-Remove-EC-curves.patch
|
||||
Patch15: openssl-Disable-explicit-ec.patch
|
||||
Patch16: openssl-skipped-tests-EC-curves.patch
|
||||
Patch14: openssl-Disable-explicit-ec.patch
|
||||
Patch15: openssl-skipped-tests-EC-curves.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221753 bsc#1221760 bsc#1221822 FIPS: Extra public/private key checks required by FIPS-140-3
|
||||
Patch17: openssl-FIPS-140-3-keychecks.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221365 bsc#1221786 bsc#1221787 FIPS: Minimize fips services
|
||||
Patch18: openssl-FIPS-services-minimize.patch
|
||||
Patch16: openssl-FIPS-140-3-keychecks.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221760 FIPS: Execute KATS before HMAC verification
|
||||
Patch19: openssl-FIPS-early-KATS.patch
|
||||
# PATCH-FIX-SUSE bsc#1221787 FIPS: Approved Modulus Sizes for RSA Digital Signature for FIPS 186-4
|
||||
Patch20: openssl-Revert-Improve-FIPS-RSA-keygen-performance.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221787 FIPS: Selectively disallow SHA1 signatures
|
||||
Patch21: openssl-Allow-disabling-of-SHA1-signatures.patch
|
||||
# # PATCH-FIX-FEDORA bsc#1221365 FIPS: Deny SHA-1 signature verification in FIPS provider
|
||||
Patch22: openssl-3-FIPS-Deny-SHA-1-sigver-in-FIPS-provider.patch
|
||||
Patch17: openssl-FIPS-early-KATS.patch
|
||||
# PATCH-FIX-SUSE NOOP rh-allow-sha1-signatures from crypto-policies
|
||||
Patch18: openssl-rh-allow-sha1-signatures.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221365 bsc#1221824 FIPS: Service Level Indicator is needed
|
||||
Patch23: openssl-FIPS-limit-rsa-encrypt.patch
|
||||
Patch24: openssl-FIPS-Expose-a-FIPS-indicator.patch
|
||||
Patch19: openssl-FIPS-limit-rsa-encrypt.patch
|
||||
Patch20: openssl-FIPS-Expose-a-FIPS-indicator.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221760 FIPS: Execute KATS before HMAC verification
|
||||
Patch25: openssl-FIPS-Use-OAEP-in-KATs-support-fixed-OAEP-seed.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221365 bsc#1221760 FIPS: Selftests are required
|
||||
Patch26: openssl-FIPS-Use-digest_sign-digest_verify-in-self-test.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221760 FIPS: Selftests are required
|
||||
Patch27: openssl-FIPS-Use-FFDHE2048-in-self-test.patch
|
||||
# PATCH-FIX-FEDORA bsc#1220690 bsc#1220693 bsc#1220696 FIPS: Reseed DRBG
|
||||
Patch28: openssl-FIPS-140-3-DRBG.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221752 FIPS: Zeroisation is required
|
||||
Patch29: openssl-FIPS-140-3-zeroization.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221365 FIPS: Service Level Indicator is needed
|
||||
Patch30: openssl-Add-FIPS-indicator-parameter-to-HKDF.patch
|
||||
Patch31: openssl-rand-Forbid-truncated-hashes-SHA-3-in-FIPS-prov.patch
|
||||
Patch21: openssl-FIPS-Use-OAEP-in-KATs-support-fixed-OAEP-seed.patch
|
||||
Patch22: openssl-rand-Forbid-truncated-hashes-SHA-3-in-FIPS-prov.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221365 bsc#1221365 FIPS: Service Level Indicator is needed
|
||||
Patch32: openssl-FIPS-Remove-X9.31-padding-from-FIPS-prov.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221365 FIPS: Service Level Indicator is needed
|
||||
Patch33: openssl-FIPS-Add-explicit-indicator-for-key-length.patch
|
||||
Patch23: openssl-FIPS-Remove-X9.31-padding-from-FIPS-prov.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221827 FIPS: Recommendation for Password-Based Key Derivation
|
||||
Patch34: openssl-pbkdf2-Set-minimum-password-length-of-8-bytes.patch
|
||||
Patch24: openssl-pbkdf2-Set-minimum-password-length-of-8-bytes.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221365 FIPS: Service Level Indicator is needed
|
||||
Patch35: openssl-FIPS-RSA-disable-shake.patch
|
||||
Patch36: openssl-FIPS-signature-Add-indicator-for-PSS-salt-length.patch
|
||||
Patch25: openssl-FIPS-RSA-disable-shake.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221824 FIPS: NIST SP 800-56Brev2 Section 6.4.1.2.1
|
||||
Patch37: openssl-FIPS-RSA-encapsulate.patch
|
||||
Patch26: openssl-FIPS-RSA-encapsulate.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221821 FIPS: Disable FIPS 186-4 Domain Parameters
|
||||
Patch38: openssl-DH-Disable-FIPS-186-4-type-parameters-in-FIPS-mode.patch
|
||||
# PATCH-FIX-SUSE bsc#1221365 FIPS: Service Level Indicator is needed
|
||||
Patch39: openssl-3-FIPS-GCM-Implement-explicit-indicator-for-IV-gen.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221827 FIPS: Recommendation for Password-Based Key Derivation
|
||||
Patch40: openssl-pbkdf2-Set-indicator-if-pkcs5-param-disabled-checks.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221365 FIPS: Service Level Indicator is needed
|
||||
Patch41: openssl-FIPS-enforce-EMS-support.patch
|
||||
Patch27: openssl-DH-Disable-FIPS-186-4-type-parameters-in-FIPS-mode.patch
|
||||
# PATCH-FIX-SUSE bsc#1221824 FIPS: Add check for SP 800-56Brev2 Section 6.4.1.2.1
|
||||
Patch42: openssl-FIPS-Add-SP800-56Br2-6.4.1.2.1-3.c-check.patch
|
||||
# PATCH-FIX-SUSE bsc#1220523 FIPS: Port openssl to use jitterentropy
|
||||
Patch43: openssl-3-jitterentropy-3.4.0.patch
|
||||
Patch28: openssl-FIPS-Add-SP800-56Br2-6.4.1.2.1-3.c-check.patch
|
||||
# PATCH-FIX-SUSE bsc#1221753 FIPS: Enforce error state
|
||||
Patch44: openssl-FIPS-Enforce-error-state.patch
|
||||
# PATCH-FIX-SUSE bsc#1221365 FIPS: Service Level Indicator is needed
|
||||
Patch45: openssl-FIPS-enforce-security-checks-during-initialization.patch
|
||||
Patch29: openssl-FIPS-Enforce-error-state.patch
|
||||
# PATCH-FIX-FEDORA Adapt pairwise tests
|
||||
Patch46: openssl-skip-quic-pairwise.patch
|
||||
# PATCH-FIX-UPSTREAM support MSA 12 (SHA3) jsc#PED-10280
|
||||
Patch48: openssl-3-add_EVP_DigestSqueeze_api.patch
|
||||
Patch49: openssl-3-support-multiple-sha3_squeeze_s390x.patch
|
||||
Patch50: openssl-3-add-xof-state-handling-s3_absorb.patch
|
||||
Patch51: openssl-3-fix-state-handling-sha3_absorb_s390x.patch
|
||||
Patch52: openssl-3-fix-state-handling-sha3_final_s390x.patch
|
||||
Patch53: openssl-3-fix-state-handling-shake_final_s390x.patch
|
||||
Patch54: openssl-3-fix-state-handling-keccak_final_s390x.patch
|
||||
Patch55: openssl-3-support-EVP_DigestSqueeze-in-digest-prov-s390x.patch
|
||||
Patch56: openssl-3-add-defines-CPACF-funcs.patch
|
||||
Patch57: openssl-3-add-hw-acceleration-hmac.patch
|
||||
Patch58: openssl-3-support-CPACF-sha3-shake-perf-improvement.patch
|
||||
Patch59: openssl-3-fix-s390x_sha3_absorb.patch
|
||||
Patch60: openssl-3-fix-s390x_shake_squeeze.patch
|
||||
# PATCH-FIX-UPSTREAM: support MSA 10 XTS jsc#PED-10273
|
||||
Patch61: openssl-3-hw-acceleration-aes-xts-s390x.patch
|
||||
# PATCH-FIX-UPSTREAM: support MSA 11 HMAC jsc#PED-10274
|
||||
Patch62: openssl-3-disable-hmac-hw-acceleration-with-engine-digest.patch
|
||||
Patch63: openssl-3-fix-hmac-digest-detection-s390x.patch
|
||||
Patch64: openssl-3-fix-memleak-s390x_HMAC_CTX_copy.patch
|
||||
# PATCH-FIX-UPSTREAM: Fix failing tests on ppc64 jsc#PED-10280
|
||||
Patch65: openssl-3-fix-sha3-squeeze-ppc64.patch
|
||||
Patch66: openssl-3-fix-quic_multistream_test.patch
|
||||
# PATCH-FIX-SUSE jsc#PED-12224 FIPS: Mark SHA1 as nonapproved in the SLI
|
||||
Patch67: openssl-FIPS-Mark-SHA1-as-nonapproved.patch
|
||||
Patch30: openssl-skip-quic-pairwise.patch
|
||||
# PATCH-FIX-FEDORA Fix broken selftests in fips provider init
|
||||
Patch31: openssl-FIPS-Fix-encoder-decoder-negative-test.patch
|
||||
Patch32: openssl-FIPS-SUSE-FIPS-module-version.patch
|
||||
Patch33: openssl-FIPS-EC-disable-weak-curves.patch
|
||||
Patch34: openssl-FIPS-NO-DSA-Support.patch
|
||||
Patch35: openssl-FIPS-NO-DES-support.patch
|
||||
Patch36: openssl-FIPS-NO-Kmac.patch
|
||||
Patch37: openssl-FIPS-NO-PQ-ML-SLH-DSA.patch
|
||||
# PATCH-FIX-SUSE Use the shared jitterentropy library instead of static
|
||||
Patch38: openssl-shared-jitterentropy.patch
|
||||
# PATCH-FIX-SUSE Disable dubious broken test
|
||||
Patch39: openssl-disable-75-test_quicapi-test.patch
|
||||
# PATCH-FIX-FEDORA bsc#1221365 FIPS: Service Level Indicator is needed
|
||||
Patch40: openssl-FIPS-enforce-EMS-support.patch
|
||||
|
||||
# ulp-macros is available according to SUSE version.
|
||||
%ifarch x86_64
|
||||
@@ -158,12 +125,6 @@ Patch67: openssl-FIPS-Mark-SHA1-as-nonapproved.patch
|
||||
BuildRequires: ulp-macros
|
||||
%endif
|
||||
%endif
|
||||
%ifarch ppc64le
|
||||
%if 0%{?sle_version} >= 150700 || 0%{?suse_version} >= 1570
|
||||
BuildRequires: gcc13
|
||||
BuildRequires: ulp-macros
|
||||
%endif
|
||||
%endif
|
||||
BuildRequires: pkgconfig
|
||||
BuildRequires: pkgconfig(zlib)
|
||||
Requires: libopenssl3 = %{version}-%{release}
|
||||
@@ -174,9 +135,10 @@ Obsoletes: openssl-1_0_0
|
||||
# Needed for clean upgrade from former openssl-1_1_0, boo#1081335
|
||||
Obsoletes: openssl-1_1_0
|
||||
%{?suse_build_hwcaps_libs}
|
||||
%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150400
|
||||
%if 0%{?sle_needs_crypto_policies}
|
||||
Requires: crypto-policies
|
||||
%endif
|
||||
BuildRequires: jitterentropy-devel >= 3.4.0
|
||||
|
||||
%description
|
||||
OpenSSL is a software library to be used in applications that need to
|
||||
@@ -190,7 +152,7 @@ Recommends: ca-certificates-mozilla
|
||||
Conflicts: %{name} < %{version}-%{release}
|
||||
# Needed for clean upgrade from former openssl-1_1_0, boo#1081335
|
||||
Obsoletes: libopenssl1_1_0
|
||||
%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150400
|
||||
%if 0%{?sle_needs_crypto_policies}
|
||||
Requires: crypto-policies
|
||||
%endif
|
||||
# Merge back the hmac files bsc#1185116
|
||||
@@ -257,25 +219,20 @@ export MACHINE=armv5el
|
||||
export MACHINE=armv6l
|
||||
%endif
|
||||
|
||||
# In ppc64le we need gcc-13 for userspace livepatching until we have the
|
||||
# required -fpatchable-functions-entry patch merged into the mainline
|
||||
%ifarch ppc64le
|
||||
%if 0%{?sle_version} >= 150700 || 0%{?suse_version} >= 1570
|
||||
export CC=gcc-13
|
||||
export CXX=g++-13
|
||||
%endif
|
||||
%endif
|
||||
./Configure \
|
||||
enable-camellia \
|
||||
%ifarch x86_64 aarch64 ppc64le
|
||||
enable-ec_nistp_64_gcc_128 \
|
||||
%endif
|
||||
enable-fips \
|
||||
enable-jitterentropy \
|
||||
enable-fips-jitter \
|
||||
enable-jitter \
|
||||
enable-ktls \
|
||||
enable-pie \
|
||||
enable-rfc3779 \
|
||||
enable-seed \
|
||||
no-afalgeng \
|
||||
no-atexit \
|
||||
no-ec2m \
|
||||
no-mdc2 \
|
||||
zlib \
|
||||
@@ -290,11 +247,11 @@ export CXX=g++-13
|
||||
-DTERMIO \
|
||||
-DPURIFY \
|
||||
-D_GNU_SOURCE \
|
||||
-DOPENSSL_PEDANTIC_ZEROIZATION \
|
||||
'-DSUSE_OPENSSL_RELEASE="\"%{release}\""' \
|
||||
-DOPENSSL_NO_BUF_FREELISTS \
|
||||
$(getconf LFS_CFLAGS) \
|
||||
-Wall \
|
||||
--with-rand-seed=getrandom,jitterentropy \
|
||||
--system-ciphers-file=%{_sysconfdir}/crypto-policies/back-ends/openssl.config
|
||||
|
||||
# Show build configuration
|
||||
@@ -320,7 +277,7 @@ objcopy --update-section .rodata1=providers/fips.so.hmac providers/fips.so provi
|
||||
mv providers/fips.so.mac providers/fips.so
|
||||
|
||||
# Run the tests in non FIPS mode
|
||||
LD_LIBRARY_PATH="$PWD" make test -j16
|
||||
LD_LIBRARY_PATH="$PWD" make test %{?_smp_mflags} %{?openssl_test_flags}
|
||||
|
||||
# Run the tests also in FIPS mode
|
||||
# OPENSSL_FORCE_FIPS_MODE=1 LD_LIBRARY_PATH="$PWD" make TESTS='-test_evp_fetch_prov -test_tsa' test -j16 || :
|
||||
@@ -433,6 +390,9 @@ fi
|
||||
%{_includedir}/ssl
|
||||
%{_libdir}/*.so
|
||||
%{_libdir}/pkgconfig/*.pc
|
||||
%dir %{_libdir}/cmake
|
||||
%{_libdir}/cmake/OpenSSL
|
||||
%{_libdir}/cmake/OpenSSL/*.cmake
|
||||
|
||||
%files doc
|
||||
%doc README.md
|
||||
|
@@ -1,911 +0,0 @@
|
||||
From 2290280617183863eb15425b8925765966723725 Mon Sep 17 00:00:00 2001
|
||||
From: Clemens Lang <cllang@redhat.com>
|
||||
Date: Thu, 11 Aug 2022 09:27:12 +0200
|
||||
Subject: KDF: Add FIPS indicators
|
||||
|
||||
FIPS requires a number of restrictions on the parameters of the various
|
||||
key derivation functions implemented in OpenSSL. The KDFs that use
|
||||
digest algorithms usually should not allow SHAKE (due to FIPS 140-3 IG
|
||||
C.C). Additionally, some application-specific KDFs have further
|
||||
restrictions defined in SP 800-135r1.
|
||||
|
||||
Generally, all KDFs shall use a key-derivation key length of at least
|
||||
112 bits due to SP 800-131Ar2 section 8. Additionally any use of a KDF
|
||||
to generate and output length of less than 112 bits will also set the
|
||||
indicator to unapproved.
|
||||
|
||||
Add explicit indicators to all KDFs usable in FIPS mode except for
|
||||
PBKDF2 (which has its specific FIPS limits already implemented). The
|
||||
indicator can be queried using EVP_KDF_CTX_get_params() after setting
|
||||
the required parameters and keys for the KDF.
|
||||
|
||||
Our FIPS provider implements SHA1, SHA2 (both -256 and -512, and the
|
||||
truncated variants -224 and -384) and SHA3 (-256 and -512, and the
|
||||
truncated versions -224 and -384), as well as SHAKE-128 and -256.
|
||||
|
||||
The SHAKE functions are generally not allowed in KDFs. For the rest, the
|
||||
support matrix is:
|
||||
|
||||
KDF | SHA-1 | SHA-2 | SHA-2 truncated | SHA-3 | SHA-3 truncated
|
||||
==========================================================================
|
||||
KBKDF | x | x | x | x | x
|
||||
HKDF | x | x | x | x | x
|
||||
TLS1PRF | | SHA-{256,384,512} only | |
|
||||
SSHKDF | x | x | x | |
|
||||
SSKDF | x | x | x | x | x
|
||||
X9.63KDF | | x | x | x | x
|
||||
X9.42-ASN1 | x | x | x | x | x
|
||||
TLS1.3PRF | | SHA-{256,384} only | |
|
||||
|
||||
Signed-off-by: Clemens Lang <cllang@redhat.com>
|
||||
Resolves: rhbz#2160733 rhbz#2164763
|
||||
Related: rhbz#2114772 rhbz#2141695
|
||||
---
|
||||
include/crypto/evp.h | 7 ++
|
||||
include/openssl/kdf.h | 4 +
|
||||
providers/implementations/kdfs/hkdf.c | 100 +++++++++++++++++++++-
|
||||
providers/implementations/kdfs/kbkdf.c | 82 ++++++++++++++++--
|
||||
providers/implementations/kdfs/sshkdf.c | 75 +++++++++++++++-
|
||||
providers/implementations/kdfs/sskdf.c | 100 +++++++++++++++++++++-
|
||||
providers/implementations/kdfs/tls1_prf.c | 74 +++++++++++++++-
|
||||
providers/implementations/kdfs/x942kdf.c | 66 +++++++++++++-
|
||||
util/perl/OpenSSL/paramnames.pm | 1 +
|
||||
9 files changed, 487 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/include/crypto/evp.h b/include/crypto/evp.h
|
||||
index e70d8e9e84..76fb990de4 100644
|
||||
--- a/include/crypto/evp.h
|
||||
+++ b/include/crypto/evp.h
|
||||
@@ -219,6 +219,13 @@ struct evp_mac_st {
|
||||
OSSL_FUNC_mac_set_ctx_params_fn *set_ctx_params;
|
||||
};
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+/* According to NIST Special Publication 800-131Ar2, Section 8: Deriving
|
||||
+ * Additional Keys from a Cryptographic Key, "[t]he length of the
|
||||
+ * key-derivation key [i.e., the input key] shall be at least 112 bits". */
|
||||
+# define EVP_KDF_FIPS_MIN_KEY_LEN (112 / 8)
|
||||
+#endif
|
||||
+
|
||||
struct evp_kdf_st {
|
||||
OSSL_PROVIDER *prov;
|
||||
int name_id;
|
||||
diff --git a/include/openssl/kdf.h b/include/openssl/kdf.h
|
||||
index 0983230a48..86171635ea 100644
|
||||
--- a/include/openssl/kdf.h
|
||||
+++ b/include/openssl/kdf.h
|
||||
@@ -63,6 +63,10 @@ int EVP_KDF_names_do_all(const EVP_KDF *kdf,
|
||||
# define EVP_KDF_HKDF_MODE_EXTRACT_ONLY 1
|
||||
# define EVP_KDF_HKDF_MODE_EXPAND_ONLY 2
|
||||
|
||||
+# define EVP_KDF_SUSE_FIPS_INDICATOR_UNDETERMINED 0
|
||||
+# define EVP_KDF_SUSE_FIPS_INDICATOR_APPROVED 1
|
||||
+# define EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED 2
|
||||
+
|
||||
#define EVP_KDF_SSHKDF_TYPE_INITIAL_IV_CLI_TO_SRV 65
|
||||
#define EVP_KDF_SSHKDF_TYPE_INITIAL_IV_SRV_TO_CLI 66
|
||||
#define EVP_KDF_SSHKDF_TYPE_ENCRYPTION_KEY_CLI_TO_SRV 67
|
||||
diff --git a/providers/implementations/kdfs/hkdf.c b/providers/implementations/kdfs/hkdf.c
|
||||
index dfa7786bde..f01e40ff5a 100644
|
||||
--- a/providers/implementations/kdfs/hkdf.c
|
||||
+++ b/providers/implementations/kdfs/hkdf.c
|
||||
@@ -42,6 +42,7 @@ static OSSL_FUNC_kdf_settable_ctx_params_fn kdf_hkdf_settable_ctx_params;
|
||||
static OSSL_FUNC_kdf_set_ctx_params_fn kdf_hkdf_set_ctx_params;
|
||||
static OSSL_FUNC_kdf_gettable_ctx_params_fn kdf_hkdf_gettable_ctx_params;
|
||||
static OSSL_FUNC_kdf_get_ctx_params_fn kdf_hkdf_get_ctx_params;
|
||||
+static OSSL_FUNC_kdf_newctx_fn kdf_tls1_3_new;
|
||||
static OSSL_FUNC_kdf_derive_fn kdf_tls1_3_derive;
|
||||
static OSSL_FUNC_kdf_settable_ctx_params_fn kdf_tls1_3_settable_ctx_params;
|
||||
static OSSL_FUNC_kdf_set_ctx_params_fn kdf_tls1_3_set_ctx_params;
|
||||
@@ -85,6 +86,10 @@ typedef struct {
|
||||
size_t data_len;
|
||||
unsigned char *info;
|
||||
size_t info_len;
|
||||
+ int is_tls13;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ int fips_indicator;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
} KDF_HKDF;
|
||||
|
||||
static void *kdf_hkdf_new(void *provctx)
|
||||
@@ -170,6 +175,11 @@ static int kdf_hkdf_derive(void *vctx, unsigned char *key, size_t keylen,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (keylen < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ ctx->fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+
|
||||
switch (ctx->mode) {
|
||||
case EVP_KDF_HKDF_MODE_EXTRACT_AND_EXPAND:
|
||||
default:
|
||||
@@ -318,22 +318,85 @@ static int kdf_hkdf_get_ctx_params(void
|
||||
{
|
||||
KDF_HKDF *ctx = (KDF_HKDF *)vctx;
|
||||
OSSL_PARAM *p;
|
||||
+ int any_valid = 0; /* set to 1 when at least one parameter was valid */
|
||||
|
||||
if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SIZE)) != NULL) {
|
||||
size_t sz = kdf_hkdf_size(ctx);
|
||||
|
||||
+ any_valid = 1;
|
||||
if (sz == 0)
|
||||
return 0;
|
||||
return OSSL_PARAM_set_size_t(p, sz);
|
||||
}
|
||||
if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_INFO)) != NULL) {
|
||||
+ any_valid = 1;
|
||||
if (ctx->info == NULL || ctx->info_len == 0) {
|
||||
p->return_size = 0;
|
||||
return 1;
|
||||
}
|
||||
return OSSL_PARAM_set_octet_string(p, ctx->info, ctx->info_len);
|
||||
}
|
||||
- return -2;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR))
|
||||
+ != NULL) {
|
||||
+ int fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_APPROVED;
|
||||
+ const EVP_MD *md = ossl_prov_digest_md(&ctx->digest);
|
||||
+
|
||||
+ any_valid = 1;
|
||||
+
|
||||
+ /* According to NIST Special Publication 800-131Ar2, Section 8:
|
||||
+ * Deriving Additional Keys from a Cryptographic Key, "[t]he length of
|
||||
+ * the key-derivation key [i.e., the input key] shall be at least 112
|
||||
+ * bits". */
|
||||
+ if (ctx->key_len < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+
|
||||
+ /* Implementation Guidance for FIPS 140-3 and the Cryptographic Module
|
||||
+ * Verification Program, Section D.B and NIST Special Publication
|
||||
+ * 800-131Ar2, Section 1.2.2 say that any algorithm at a security
|
||||
+ * strength < 112 bits is legacy use only, so all derived keys should
|
||||
+ * be longer than that. If a derived key has ever been shorter than
|
||||
+ * that, ctx->output_keyelen_indicator will be NOT_APPROVED, and we
|
||||
+ * should also set the returned FIPS indicator to unapproved. */
|
||||
+ if (ctx->fips_indicator == EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED)
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+
|
||||
+ if (ctx->is_tls13) {
|
||||
+ if (md != NULL
|
||||
+ && !EVP_MD_is_a(md, "SHA2-256")
|
||||
+ && !EVP_MD_is_a(md, "SHA2-384")) {
|
||||
+ /* Implementation Guidance for FIPS 140-3 and the Cryptographic
|
||||
+ * Module Validation Program, Section 2.4.B, (5): "The TLS 1.3
|
||||
+ * key derivation function documented in Section 7.1 of RFC
|
||||
+ * 8446. This is considered an approved CVL because the
|
||||
+ * underlying functions performed within the TLS 1.3 KDF map to
|
||||
+ * NIST approved standards, namely: SP 800-133rev2 (Section 6.3
|
||||
+ * Option #3), SP 800-56Crev2, and SP 800-108."
|
||||
+ *
|
||||
+ * RFC 8446 appendix B.4 only lists SHA-256 and SHA-384. */
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (md != NULL
|
||||
+ && (EVP_MD_is_a(md, "SHAKE-128") ||
|
||||
+ EVP_MD_is_a(md, "SHAKE-256"))) {
|
||||
+ /* HKDF is a SP 800-56Cr2 TwoStep KDF, for which all SHA-1,
|
||||
+ * SHA-2 and SHA-3 are approved. SHAKE is not approved, because
|
||||
+ * of FIPS 140-3 IG, section C.C: "The SHAKE128 and SHAKE256
|
||||
+ * extendable-output functions may only be used as the
|
||||
+ * standalone algorithms." */
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+ }
|
||||
+ }
|
||||
+ if (!OSSL_PARAM_set_int(p, fips_indicator))
|
||||
+ return 0;
|
||||
+ }
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+
|
||||
+ if (!any_valid)
|
||||
+ return -2;
|
||||
+
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
static const OSSL_PARAM *kdf_hkdf_gettable_ctx_params(ossl_unused void *ctx,
|
||||
@@ -348,6 +421,9 @@ static const OSSL_PARAM *kdf_hkdf_gettable_ctx_params(ossl_unused void *ctx,
|
||||
static const OSSL_PARAM known_gettable_ctx_params[] = {
|
||||
OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL),
|
||||
OSSL_PARAM_octet_string(OSSL_KDF_PARAM_INFO, NULL, 0),
|
||||
+#ifdef FIPS_MODULE
|
||||
+ OSSL_PARAM_int(OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR, NULL),
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
OSSL_PARAM_END
|
||||
};
|
||||
return known_gettable_ctx_params;
|
||||
@@ -677,6 +753,17 @@ static int prov_tls13_hkdf_generate_secret(OSSL_LIB_CTX *libctx,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static void *kdf_tls1_3_new(void *provctx)
|
||||
+{
|
||||
+ KDF_HKDF *hkdf = kdf_hkdf_new(provctx);
|
||||
+
|
||||
+ if (hkdf != NULL)
|
||||
+ hkdf->is_tls13 = 1;
|
||||
+
|
||||
+ return hkdf;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static int kdf_tls1_3_derive(void *vctx, unsigned char *key, size_t keylen,
|
||||
const OSSL_PARAM params[])
|
||||
{
|
||||
@@ -692,6 +779,11 @@ static int kdf_tls1_3_derive(void *vctx, unsigned char *key, size_t keylen,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (keylen < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ ctx->fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+
|
||||
switch (ctx->mode) {
|
||||
default:
|
||||
return 0;
|
||||
@@ -769,7 +861,7 @@ static const OSSL_PARAM *kdf_tls1_3_settable_ctx_params(ossl_unused void *ctx,
|
||||
}
|
||||
|
||||
const OSSL_DISPATCH ossl_kdf_tls1_3_kdf_functions[] = {
|
||||
- { OSSL_FUNC_KDF_NEWCTX, (void(*)(void))kdf_hkdf_new },
|
||||
+ { OSSL_FUNC_KDF_NEWCTX, (void(*)(void))kdf_tls1_3_new },
|
||||
{ OSSL_FUNC_KDF_DUPCTX, (void(*)(void))kdf_hkdf_dup },
|
||||
{ OSSL_FUNC_KDF_FREECTX, (void(*)(void))kdf_hkdf_free },
|
||||
{ OSSL_FUNC_KDF_RESET, (void(*)(void))kdf_hkdf_reset },
|
||||
diff --git a/providers/implementations/kdfs/kbkdf.c b/providers/implementations/kdfs/kbkdf.c
|
||||
index a542f84dfa..6b6dfb94ac 100644
|
||||
--- a/providers/implementations/kdfs/kbkdf.c
|
||||
+++ b/providers/implementations/kdfs/kbkdf.c
|
||||
@@ -59,6 +59,9 @@ typedef struct {
|
||||
kbkdf_mode mode;
|
||||
EVP_MAC_CTX *ctx_init;
|
||||
|
||||
+ /* HMAC digest algorithm, if any; used to compute FIPS indicator */
|
||||
+ PROV_DIGEST digest;
|
||||
+
|
||||
/* Names are lowercased versions of those found in SP800-108. */
|
||||
int r;
|
||||
unsigned char *ki;
|
||||
@@ -73,6 +76,9 @@ typedef struct {
|
||||
int use_l;
|
||||
int is_kmac;
|
||||
int use_separator;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ int fips_indicator;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
} KBKDF;
|
||||
|
||||
/* Definitions needed for typechecking. */
|
||||
@@ -138,6 +144,7 @@ static void kbkdf_reset(void *vctx)
|
||||
void *provctx = ctx->provctx;
|
||||
|
||||
EVP_MAC_CTX_free(ctx->ctx_init);
|
||||
+ ossl_prov_digest_reset(&ctx->digest);
|
||||
OPENSSL_clear_free(ctx->context, ctx->context_len);
|
||||
OPENSSL_clear_free(ctx->label, ctx->label_len);
|
||||
OPENSSL_clear_free(ctx->ki, ctx->ki_len);
|
||||
@@ -240,6 +247,11 @@ static int kbkdf_derive(void *vctx, unsigned char *key, size_t keylen,
|
||||
goto done;
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (keylen < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ ctx->fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+
|
||||
h = EVP_MAC_CTX_get_mac_size(ctx->ctx_init);
|
||||
if (h == 0)
|
||||
goto done;
|
||||
@@ -297,6 +309,9 @@ static int kbkdf_set_ctx_params(void *vctx, const OSSL_PARAM params[])
|
||||
}
|
||||
}
|
||||
|
||||
+ if (!ossl_prov_digest_load_from_params(&ctx->digest, params, libctx))
|
||||
+ return 0;
|
||||
+
|
||||
p = OSSL_PARAM_locate_const(params, OSSL_KDF_PARAM_MODE);
|
||||
if (p != NULL
|
||||
&& OPENSSL_strncasecmp("counter", p->data, p->data_size) == 0) {
|
||||
@@ -363,20 +378,77 @@ static const OSSL_PARAM *kbkdf_settable_ctx_params(ossl_unused void *ctx,
|
||||
static int kbkdf_get_ctx_params(void *vctx, OSSL_PARAM params[])
|
||||
{
|
||||
OSSL_PARAM *p;
|
||||
+ int any_valid = 0; /* set to 1 when at least one parameter was valid */
|
||||
|
||||
p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SIZE);
|
||||
- if (p == NULL)
|
||||
+ if (p != NULL) {
|
||||
+ any_valid = 1;
|
||||
+
|
||||
+ /* KBKDF can produce results as large as you like. */
|
||||
+ if (!OSSL_PARAM_set_size_t(p, SIZE_MAX))
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+#ifdef FIPS_MODULE
|
||||
+ p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR);
|
||||
+ if (p != NULL) {
|
||||
+ KBKDF *ctx = (KBKDF *)vctx;
|
||||
+ int fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_APPROVED;
|
||||
+
|
||||
+ any_valid = 1;
|
||||
+
|
||||
+ /* According to NIST Special Publication 800-131Ar2, Section 8:
|
||||
+ * Deriving Additional Keys from a Cryptographic Key, "[t]he length of
|
||||
+ * the key-derivation key [i.e., the input key] shall be at least 112
|
||||
+ * bits". */
|
||||
+ if (ctx->ki_len < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+
|
||||
+ /* Implementation Guidance for FIPS 140-3 and the Cryptographic Module
|
||||
+ * Verification Program, Section D.B and NIST Special Publication
|
||||
+ * 800-131Ar2, Section 1.2.2 say that any algorithm at a security
|
||||
+ * strength < 112 bits is legacy use only, so all derived keys should
|
||||
+ * be longer than that. If a derived key has ever been shorter than
|
||||
+ * that, ctx->output_keyelen_indicator will be NOT_APPROVED, and we
|
||||
+ * should also set the returned FIPS indicator to unapproved. */
|
||||
+ if (ctx->fips_indicator == EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED)
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+
|
||||
+ /* Implementation Guidance for FIPS 140-3 and the Cryptographic Module
|
||||
+ * Validation Program, Section C.C: "The SHAKE128 and SHAKE256
|
||||
+ * extendable-output functions may only be used as the standalone
|
||||
+ * algorithms." Note that the digest is only used when the MAC
|
||||
+ * algorithm is HMAC. */
|
||||
+ if (ctx->ctx_init != NULL
|
||||
+ && EVP_MAC_is_a(EVP_MAC_CTX_get0_mac(ctx->ctx_init), OSSL_MAC_NAME_HMAC)) {
|
||||
+ const EVP_MD *md = ossl_prov_digest_md(&ctx->digest);
|
||||
+ if (md != NULL
|
||||
+ && (EVP_MD_is_a(md, "SHAKE-128") || EVP_MD_is_a(md, "SHAKE-256"))) {
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (!OSSL_PARAM_set_int(p, fips_indicator))
|
||||
+ return 0;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ if (!any_valid)
|
||||
return -2;
|
||||
|
||||
- /* KBKDF can produce results as large as you like. */
|
||||
- return OSSL_PARAM_set_size_t(p, SIZE_MAX);
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
static const OSSL_PARAM *kbkdf_gettable_ctx_params(ossl_unused void *ctx,
|
||||
ossl_unused void *provctx)
|
||||
{
|
||||
- static const OSSL_PARAM known_gettable_ctx_params[] =
|
||||
- { OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL), OSSL_PARAM_END };
|
||||
+ static const OSSL_PARAM known_gettable_ctx_params[] = {
|
||||
+ OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL),
|
||||
+#ifdef FIPS_MODULE
|
||||
+ OSSL_PARAM_int(OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR, NULL),
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+ OSSL_PARAM_END
|
||||
+ };
|
||||
return known_gettable_ctx_params;
|
||||
}
|
||||
|
||||
diff --git a/providers/implementations/kdfs/sshkdf.c b/providers/implementations/kdfs/sshkdf.c
|
||||
index c592ba72f1..4a52b38266 100644
|
||||
--- a/providers/implementations/kdfs/sshkdf.c
|
||||
+++ b/providers/implementations/kdfs/sshkdf.c
|
||||
@@ -48,6 +48,9 @@ typedef struct {
|
||||
char type; /* X */
|
||||
unsigned char *session_id;
|
||||
size_t session_id_len;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ int fips_indicator;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
} KDF_SSHKDF;
|
||||
|
||||
static void *kdf_sshkdf_new(void *provctx)
|
||||
@@ -126,6 +129,12 @@ static int kdf_sshkdf_derive(void *vctx, unsigned char *key, size_t keylen,
|
||||
ERR_raise(ERR_LIB_PROV, PROV_R_MISSING_TYPE);
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (keylen < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ ctx->fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+
|
||||
return SSHKDF(md, ctx->key, ctx->key_len,
|
||||
ctx->xcghash, ctx->xcghash_len,
|
||||
ctx->session_id, ctx->session_id_len,
|
||||
@@ -194,10 +203,67 @@ static const OSSL_PARAM *kdf_sshkdf_settable_ctx_params(ossl_unused void *ctx,
|
||||
static int kdf_sshkdf_get_ctx_params(void *vctx, OSSL_PARAM params[])
|
||||
{
|
||||
OSSL_PARAM *p;
|
||||
+ int any_valid = 0; /* set to 1 when at least one parameter was valid */
|
||||
|
||||
- if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SIZE)) != NULL)
|
||||
- return OSSL_PARAM_set_size_t(p, SIZE_MAX);
|
||||
- return -2;
|
||||
+ if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SIZE)) != NULL) {
|
||||
+ any_valid = 1;
|
||||
+
|
||||
+ if (!OSSL_PARAM_set_size_t(p, SIZE_MAX))
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+#ifdef FIPS_MODULE
|
||||
+ p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR);
|
||||
+ if (p != NULL) {
|
||||
+ KDF_SSHKDF *ctx = vctx;
|
||||
+ int fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_APPROVED;
|
||||
+
|
||||
+ any_valid = 1;
|
||||
+
|
||||
+ /* According to NIST Special Publication 800-131Ar2, Section 8:
|
||||
+ * Deriving Additional Keys from a Cryptographic Key, "[t]he length of
|
||||
+ * the key-derivation key [i.e., the input key] shall be at least 112
|
||||
+ * bits". */
|
||||
+ if (ctx->key_len < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+
|
||||
+ /* Implementation Guidance for FIPS 140-3 and the Cryptographic Module
|
||||
+ * Verification Program, Section D.B and NIST Special Publication
|
||||
+ * 800-131Ar2, Section 1.2.2 say that any algorithm at a security
|
||||
+ * strength < 112 bits is legacy use only, so all derived keys should
|
||||
+ * be longer than that. If a derived key has ever been shorter than
|
||||
+ * that, ctx->output_keyelen_indicator will be NOT_APPROVED, and we
|
||||
+ * should also set the returned FIPS indicator to unapproved. */
|
||||
+ if (ctx->fips_indicator == EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED)
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+
|
||||
+ /* Implementation Guidance for FIPS 140-3 and the Cryptographic Module
|
||||
+ * Validation Program, Section C.C: "The SHAKE128 and SHAKE256
|
||||
+ * extendable-output functions may only be used as the standalone
|
||||
+ * algorithms."
|
||||
+ *
|
||||
+ * Additionally, SP 800-135r1 section 5.2 specifies that the hash
|
||||
+ * function used in SSHKDF "is one of the hash functions specified in
|
||||
+ * FIPS 180-3.", which rules out SHA-3 and truncated variants of SHA-2.
|
||||
+ * */
|
||||
+ if (ctx->digest.md != NULL
|
||||
+ && !EVP_MD_is_a(ctx->digest.md, "SHA-1")
|
||||
+ && !EVP_MD_is_a(ctx->digest.md, "SHA2-224")
|
||||
+ && !EVP_MD_is_a(ctx->digest.md, "SHA2-256")
|
||||
+ && !EVP_MD_is_a(ctx->digest.md, "SHA2-384")
|
||||
+ && !EVP_MD_is_a(ctx->digest.md, "SHA2-512")) {
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+ }
|
||||
+
|
||||
+ if (!OSSL_PARAM_set_int(p, fips_indicator))
|
||||
+ return 0;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ if (!any_valid)
|
||||
+ return -2;
|
||||
+
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
static const OSSL_PARAM *kdf_sshkdf_gettable_ctx_params(ossl_unused void *ctx,
|
||||
@@ -205,6 +271,9 @@ static const OSSL_PARAM *kdf_sshkdf_gettable_ctx_params(ossl_unused void *ctx,
|
||||
{
|
||||
static const OSSL_PARAM known_gettable_ctx_params[] = {
|
||||
OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL),
|
||||
+#ifdef FIPS_MODULE
|
||||
+ OSSL_PARAM_int(OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR, NULL),
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
OSSL_PARAM_END
|
||||
};
|
||||
return known_gettable_ctx_params;
|
||||
diff --git a/providers/implementations/kdfs/sskdf.c b/providers/implementations/kdfs/sskdf.c
|
||||
index eb54972e1c..23865cd70f 100644
|
||||
--- a/providers/implementations/kdfs/sskdf.c
|
||||
+++ b/providers/implementations/kdfs/sskdf.c
|
||||
@@ -64,6 +64,10 @@ typedef struct {
|
||||
size_t salt_len;
|
||||
size_t out_len; /* optional KMAC parameter */
|
||||
int is_kmac;
|
||||
+ int is_x963kdf;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ int fips_indicator;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
} KDF_SSKDF;
|
||||
|
||||
#define SSKDF_MAX_INLEN (1<<30)
|
||||
@@ -73,6 +77,7 @@ typedef struct {
|
||||
static const unsigned char kmac_custom_str[] = { 0x4B, 0x44, 0x46 };
|
||||
|
||||
static OSSL_FUNC_kdf_newctx_fn sskdf_new;
|
||||
+static OSSL_FUNC_kdf_newctx_fn x963kdf_new;
|
||||
static OSSL_FUNC_kdf_dupctx_fn sskdf_dup;
|
||||
static OSSL_FUNC_kdf_freectx_fn sskdf_free;
|
||||
static OSSL_FUNC_kdf_reset_fn sskdf_reset;
|
||||
@@ -296,6 +301,16 @@ static void *sskdf_new(void *provctx)
|
||||
return ctx;
|
||||
}
|
||||
|
||||
+static void *x963kdf_new(void *provctx)
|
||||
+{
|
||||
+ KDF_SSKDF *ctx = sskdf_new(provctx);
|
||||
+
|
||||
+ if (ctx)
|
||||
+ ctx->is_x963kdf = 1;
|
||||
+
|
||||
+ return ctx;
|
||||
+}
|
||||
+
|
||||
static void sskdf_reset(void *vctx)
|
||||
{
|
||||
KDF_SSKDF *ctx = (KDF_SSKDF *)vctx;
|
||||
@@ -361,6 +376,11 @@ static int sskdf_derive(void *vctx, unsigned char *key, size_t keylen,
|
||||
}
|
||||
md = ossl_prov_digest_md(&ctx->digest);
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (keylen < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ ctx->fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+
|
||||
if (ctx->macctx != NULL) {
|
||||
/* H(x) = KMAC or H(x) = HMAC */
|
||||
int ret;
|
||||
@@ -442,6 +462,11 @@ static int x963kdf_derive(void *vctx, unsigned char *key, size_t keylen,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (keylen < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ ctx->fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+
|
||||
return SSKDF_hash_kdm(md, ctx->secret, ctx->secret_len,
|
||||
ctx->info, ctx->info_len, 1, key, keylen);
|
||||
}
|
||||
@@ -514,10 +539,74 @@ static int sskdf_get_ctx_params(void *vctx, OSSL_PARAM params[])
|
||||
{
|
||||
KDF_SSKDF *ctx = (KDF_SSKDF *)vctx;
|
||||
OSSL_PARAM *p;
|
||||
+ int any_valid = 0; /* set to 1 when at least one parameter was valid */
|
||||
+
|
||||
+ if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SIZE)) != NULL) {
|
||||
+ any_valid = 1;
|
||||
+
|
||||
+ if (!OSSL_PARAM_set_size_t(p, sskdf_size(ctx)))
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
- if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SIZE)) != NULL)
|
||||
- return OSSL_PARAM_set_size_t(p, sskdf_size(ctx));
|
||||
- return -2;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR);
|
||||
+ if (p != NULL) {
|
||||
+ int fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_APPROVED;
|
||||
+
|
||||
+ any_valid = 1;
|
||||
+
|
||||
+ /* According to NIST Special Publication 800-131Ar2, Section 8:
|
||||
+ * Deriving Additional Keys from a Cryptographic Key, "[t]he length of
|
||||
+ * the key-derivation key [i.e., the input key] shall be at least 112
|
||||
+ * bits". */
|
||||
+ if (ctx->secret_len < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+
|
||||
+ /* Implementation Guidance for FIPS 140-3 and the Cryptographic Module
|
||||
+ * Verification Program, Section D.B and NIST Special Publication
|
||||
+ * 800-131Ar2, Section 1.2.2 say that any algorithm at a security
|
||||
+ * strength < 112 bits is legacy use only, so all derived keys should
|
||||
+ * be longer than that. If a derived key has ever been shorter than
|
||||
+ * that, ctx->output_keyelen_indicator will be NOT_APPROVED, and we
|
||||
+ * should also set the returned FIPS indicator to unapproved. */
|
||||
+ if (ctx->fips_indicator == EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED)
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+
|
||||
+ /* Implementation Guidance for FIPS 140-3 and the Cryptographic Module
|
||||
+ * Validation Program, Section C.C: "The SHAKE128 and SHAKE256
|
||||
+ * extendable-output functions may only be used as the standalone
|
||||
+ * algorithms." */
|
||||
+ if (ctx->macctx == NULL
|
||||
+ || (ctx->macctx != NULL &&
|
||||
+ EVP_MAC_is_a(EVP_MAC_CTX_get0_mac(ctx->macctx), OSSL_MAC_NAME_HMAC))) {
|
||||
+ if (ctx->digest.md != NULL
|
||||
+ && (EVP_MD_is_a(ctx->digest.md, "SHAKE-128") ||
|
||||
+ EVP_MD_is_a(ctx->digest.md, "SHAKE-256"))) {
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+ }
|
||||
+
|
||||
+ /* Table H-3 in ANS X9.63-2001 says that 160-bit hash functions
|
||||
+ * should only be used for 80-bit key agreement, but FIPS 140-3
|
||||
+ * requires a security strength of 112 bits, so SHA-1 cannot be
|
||||
+ * used with X9.63. See the discussion in
|
||||
+ * https://github.com/usnistgov/ACVP/issues/1403#issuecomment-1435300395.
|
||||
+ */
|
||||
+ if (ctx->is_x963kdf
|
||||
+ && ctx->digest.md != NULL
|
||||
+ && EVP_MD_is_a(ctx->digest.md, "SHA-1")) {
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (!OSSL_PARAM_set_int(p, fips_indicator))
|
||||
+ return 0;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ if (!any_valid)
|
||||
+ return -2;
|
||||
+
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
static const OSSL_PARAM *sskdf_gettable_ctx_params(ossl_unused void *ctx,
|
||||
@@ -525,6 +614,9 @@ static const OSSL_PARAM *sskdf_gettable_ctx_params(ossl_unused void *ctx,
|
||||
{
|
||||
static const OSSL_PARAM known_gettable_ctx_params[] = {
|
||||
OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL),
|
||||
+#ifdef FIPS_MODULE
|
||||
+ OSSL_PARAM_int(OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR, 0),
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
OSSL_PARAM_END
|
||||
};
|
||||
return known_gettable_ctx_params;
|
||||
@@ -545,7 +637,7 @@ const OSSL_DISPATCH ossl_kdf_sskdf_functions[] = {
|
||||
};
|
||||
|
||||
const OSSL_DISPATCH ossl_kdf_x963_kdf_functions[] = {
|
||||
- { OSSL_FUNC_KDF_NEWCTX, (void(*)(void))sskdf_new },
|
||||
+ { OSSL_FUNC_KDF_NEWCTX, (void(*)(void))x963kdf_new },
|
||||
{ OSSL_FUNC_KDF_DUPCTX, (void(*)(void))sskdf_dup },
|
||||
{ OSSL_FUNC_KDF_FREECTX, (void(*)(void))sskdf_free },
|
||||
{ OSSL_FUNC_KDF_RESET, (void(*)(void))sskdf_reset },
|
||||
diff --git a/providers/implementations/kdfs/tls1_prf.c b/providers/implementations/kdfs/tls1_prf.c
|
||||
index a4d64b9352..f6782a6ca2 100644
|
||||
--- a/providers/implementations/kdfs/tls1_prf.c
|
||||
+++ b/providers/implementations/kdfs/tls1_prf.c
|
||||
@@ -93,6 +93,13 @@ typedef struct {
|
||||
/* Buffer of concatenated seed data */
|
||||
unsigned char seed[TLS1_PRF_MAXBUF];
|
||||
size_t seedlen;
|
||||
+
|
||||
+ /* MAC digest algorithm; used to compute FIPS indicator */
|
||||
+ PROV_DIGEST digest;
|
||||
+
|
||||
+#ifdef FIPS_MODULE
|
||||
+ int fips_indicator;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
} TLS1_PRF;
|
||||
|
||||
static void *kdf_tls1_prf_new(void *provctx)
|
||||
@@ -129,6 +136,7 @@ static void kdf_tls1_prf_reset(void *vctx)
|
||||
EVP_MAC_CTX_free(ctx->P_sha1);
|
||||
OPENSSL_clear_free(ctx->sec, ctx->seclen);
|
||||
OPENSSL_cleanse(ctx->seed, ctx->seedlen);
|
||||
+ ossl_prov_digest_reset(&ctx->digest);
|
||||
memset(ctx, 0, sizeof(*ctx));
|
||||
ctx->provctx = provctx;
|
||||
}
|
||||
@@ -157,6 +165,10 @@ static int kdf_tls1_prf_derive(void *vctx, unsigned char *key, size_t keylen,
|
||||
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_KEY_LENGTH);
|
||||
return 0;
|
||||
}
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (keylen < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ ctx->fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
|
||||
/*
|
||||
* The seed buffer is prepended with a label.
|
||||
@@ -191,6 +203,9 @@ static int kdf_tls1_prf_set_ctx_params(void *vctx, const OSSL_PARAM params[])
|
||||
}
|
||||
}
|
||||
|
||||
+ if (!ossl_prov_digest_load_from_params(&ctx->digest, params, libctx))
|
||||
+ return 0;
|
||||
+
|
||||
if ((p = OSSL_PARAM_locate_const(params, OSSL_KDF_PARAM_SECRET)) != NULL) {
|
||||
OPENSSL_clear_free(ctx->sec, ctx->seclen);
|
||||
ctx->sec = NULL;
|
||||
@@ -232,10 +247,60 @@ static const OSSL_PARAM *kdf_tls1_prf_settable_ctx_params(
|
||||
static int kdf_tls1_prf_get_ctx_params(void *vctx, OSSL_PARAM params[])
|
||||
{
|
||||
OSSL_PARAM *p;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ TLS1_PRF *ctx = vctx;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+ int any_valid = 0; /* set to 1 when at least one parameter was valid */
|
||||
+
|
||||
+ if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SIZE)) != NULL) {
|
||||
+ any_valid = 1;
|
||||
+
|
||||
+ if (!OSSL_PARAM_set_size_t(p, SIZE_MAX))
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+#ifdef FIPS_MODULE
|
||||
+ p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR);
|
||||
+ if (p != NULL) {
|
||||
+ int fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_APPROVED;
|
||||
+
|
||||
+ any_valid = 1;
|
||||
+
|
||||
+ /* According to NIST Special Publication 800-131Ar2, Section 8:
|
||||
+ * Deriving Additional Keys from a Cryptographic Key, "[t]he length of
|
||||
+ * the key-derivation key [i.e., the input key] shall be at least 112
|
||||
+ * bits". */
|
||||
+ if (ctx->seclen < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+
|
||||
+ /* Implementation Guidance for FIPS 140-3 and the Cryptographic Module
|
||||
+ * Verification Program, Section D.B and NIST Special Publication
|
||||
+ * 800-131Ar2, Section 1.2.2 say that any algorithm at a security
|
||||
+ * strength < 112 bits is legacy use only, so all derived keys should
|
||||
+ * be longer than that. If a derived key has ever been shorter than
|
||||
+ * that, ctx->output_keyelen_indicator will be NOT_APPROVED, and we
|
||||
+ * should also set the returned FIPS indicator to unapproved. */
|
||||
+ if (ctx->fips_indicator == EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED)
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+
|
||||
+ /* SP 800-135r1 section 4.2.2 says TLS 1.2 KDF is approved when "(3)
|
||||
+ * P_HASH uses either SHA-256, SHA-384 or SHA-512." */
|
||||
+ if (ctx->digest.md != NULL
|
||||
+ && !EVP_MD_is_a(ctx->digest.md, "SHA2-256")
|
||||
+ && !EVP_MD_is_a(ctx->digest.md, "SHA2-384")
|
||||
+ && !EVP_MD_is_a(ctx->digest.md, "SHA2-512")) {
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+ }
|
||||
+
|
||||
+ if (!OSSL_PARAM_set_int(p, fips_indicator))
|
||||
+ return 0;
|
||||
+ }
|
||||
+#endif
|
||||
|
||||
- if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SIZE)) != NULL)
|
||||
- return OSSL_PARAM_set_size_t(p, SIZE_MAX);
|
||||
- return -2;
|
||||
+ if (!any_valid)
|
||||
+ return -2;
|
||||
+
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
static const OSSL_PARAM *kdf_tls1_prf_gettable_ctx_params(
|
||||
@@ -243,6 +308,9 @@ static const OSSL_PARAM *kdf_tls1_prf_gettable_ctx_params(
|
||||
{
|
||||
static const OSSL_PARAM known_gettable_ctx_params[] = {
|
||||
OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL),
|
||||
+#ifdef FIPS_MODULE
|
||||
+ OSSL_PARAM_int(OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR, 0),
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
OSSL_PARAM_END
|
||||
};
|
||||
return known_gettable_ctx_params;
|
||||
diff --git a/providers/implementations/kdfs/x942kdf.c b/providers/implementations/kdfs/x942kdf.c
|
||||
index b1bc6f7e1b..8173fc2cc7 100644
|
||||
--- a/providers/implementations/kdfs/x942kdf.c
|
||||
+++ b/providers/implementations/kdfs/x942kdf.c
|
||||
@@ -13,11 +13,13 @@
|
||||
#include <openssl/core_dispatch.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/evp.h>
|
||||
+#include <openssl/kdf.h>
|
||||
#include <openssl/params.h>
|
||||
#include <openssl/proverr.h>
|
||||
#include "internal/packet.h"
|
||||
#include "internal/der.h"
|
||||
#include "internal/nelem.h"
|
||||
+#include "crypto/evp.h"
|
||||
#include "prov/provider_ctx.h"
|
||||
#include "prov/providercommon.h"
|
||||
#include "prov/implementations.h"
|
||||
@@ -47,6 +50,9 @@ typedef struct {
|
||||
const unsigned char *cek_oid;
|
||||
size_t cek_oid_len;
|
||||
int use_keybits;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ int fips_indicator;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
} KDF_X942;
|
||||
|
||||
/*
|
||||
@@ -460,6 +466,10 @@ static int x942kdf_derive(void *vctx, unsigned char *key, size_t keylen,
|
||||
ERR_raise(ERR_LIB_PROV, PROV_R_BAD_ENCODING);
|
||||
return 0;
|
||||
}
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (keylen < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ ctx->fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
ret = x942kdf_hash_kdm(md, ctx->secret, ctx->secret_len,
|
||||
der, der_len, ctr, key, keylen);
|
||||
OPENSSL_free(der);
|
||||
@@ -563,10 +573,58 @@ static int x942kdf_get_ctx_params(void *vctx, OSSL_PARAM params[])
|
||||
{
|
||||
KDF_X942 *ctx = (KDF_X942 *)vctx;
|
||||
OSSL_PARAM *p;
|
||||
+ int any_valid = 0; /* set to 1 when at least one parameter was valid */
|
||||
|
||||
- if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SIZE)) != NULL)
|
||||
- return OSSL_PARAM_set_size_t(p, x942kdf_size(ctx));
|
||||
- return -2;
|
||||
+ if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SIZE)) != NULL) {
|
||||
+ any_valid = 1;
|
||||
+
|
||||
+ if (!OSSL_PARAM_set_size_t(p, x942kdf_size(ctx)))
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+#ifdef FIPS_MODULE
|
||||
+ p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR);
|
||||
+ if (p != NULL) {
|
||||
+ int fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_APPROVED;
|
||||
+
|
||||
+ any_valid = 1;
|
||||
+
|
||||
+ /* According to NIST Special Publication 800-131Ar2, Section 8:
|
||||
+ * Deriving Additional Keys from a Cryptographic Key, "[t]he length of
|
||||
+ * the key-derivation key [i.e., the input key] shall be at least 112
|
||||
+ * bits". */
|
||||
+ if (ctx->secret_len < EVP_KDF_FIPS_MIN_KEY_LEN)
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+
|
||||
+ /* Implementation Guidance for FIPS 140-3 and the Cryptographic Module
|
||||
+ * Verification Program, Section D.B and NIST Special Publication
|
||||
+ * 800-131Ar2, Section 1.2.2 say that any algorithm at a security
|
||||
+ * strength < 112 bits is legacy use only, so all derived keys should
|
||||
+ * be longer than that. If a derived key has ever been shorter than
|
||||
+ * that, ctx->output_keyelen_indicator will be NOT_APPROVED, and we
|
||||
+ * should also set the returned FIPS indicator to unapproved. */
|
||||
+ if (ctx->fips_indicator == EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED)
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+
|
||||
+ /* Implementation Guidance for FIPS 140-3 and the Cryptographic Module
|
||||
+ * Validation Program, Section C.C: "The SHAKE128 and SHAKE256
|
||||
+ * extendable-output functions may only be used as the standalone
|
||||
+ * algorithms." */
|
||||
+ if (ctx->digest.md != NULL
|
||||
+ && (EVP_MD_is_a(ctx->digest.md, "SHAKE-128") ||
|
||||
+ EVP_MD_is_a(ctx->digest.md, "SHAKE-256"))) {
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+ }
|
||||
+
|
||||
+ if (!OSSL_PARAM_set_int(p, fips_indicator))
|
||||
+ return 0;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ if (!any_valid)
|
||||
+ return -2;
|
||||
+
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
static const OSSL_PARAM *x942kdf_gettable_ctx_params(ossl_unused void *ctx,
|
||||
@@ -574,6 +632,9 @@ static const OSSL_PARAM *x942kdf_gettable_ctx_params(ossl_unused void *ctx,
|
||||
{
|
||||
static const OSSL_PARAM known_gettable_ctx_params[] = {
|
||||
OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL),
|
||||
+#ifdef FIPS_MODULE
|
||||
+ OSSL_PARAM_int(OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR, 0),
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
OSSL_PARAM_END
|
||||
};
|
||||
return known_gettable_ctx_params;
|
||||
diff --git a/util/perl/OpenSSL/paramnames.pm b/util/perl/OpenSSL/paramnames.pm
|
||||
index 70f7c50fe4..6618122417 100644
|
||||
--- a/util/perl/OpenSSL/paramnames.pm
|
||||
+++ b/util/perl/OpenSSL/paramnames.pm
|
||||
@@ -183,6 +183,7 @@ my %params = (
|
||||
'KDF_PARAM_X942_SUPP_PUBINFO' => "supp-pubinfo",
|
||||
'KDF_PARAM_X942_SUPP_PRIVINFO' => "supp-privinfo",
|
||||
'KDF_PARAM_X942_USE_KEYBITS' => "use-keybits",
|
||||
+ 'KDF_PARAM_SUSE_FIPS_INDICATOR' => "suse-fips-indicator",
|
||||
'KDF_PARAM_HMACDRBG_ENTROPY' => "entropy",
|
||||
'KDF_PARAM_HMACDRBG_NONCE' => "nonce",
|
||||
'KDF_PARAM_THREADS' => "threads", # uint32_t
|
||||
--
|
||||
2.39.2
|
||||
|
@@ -1,23 +1,31 @@
|
||||
From aa3aebf132959e7e44876042efaf9ff24ffe0f2b Mon Sep 17 00:00:00 2001
|
||||
From 0e3f6972299bc243023c6ce38663948317bd6794 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Mon, 31 Jul 2023 09:41:27 +0200
|
||||
Subject: [PATCH 09/35] 0009-Add-Kernel-FIPS-mode-flag-support.patch
|
||||
Date: Wed, 6 Mar 2024 19:17:15 +0100
|
||||
Subject: [PATCH 10/53] RH: Add Kernel FIPS mode flag support - FIXSTYLE
|
||||
|
||||
Patch-name: 0009-Add-Kernel-FIPS-mode-flag-support.patch
|
||||
Patch-id: 9
|
||||
Patch-status: |
|
||||
# Add check to see if fips flag is enabled in kernel
|
||||
From-dist-git-commit: 9409bc7044cf4b5773639cce20f51399888c45fd
|
||||
# # Add check to see if fips flag is enabled in kernel
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
---
|
||||
crypto/context.c | 36 ++++++++++++++++++++++++++++++++++++
|
||||
crypto/context.c | 35 +++++++++++++++++++++++++++++++++++
|
||||
include/internal/provider.h | 3 +++
|
||||
2 files changed, 39 insertions(+)
|
||||
2 files changed, 38 insertions(+)
|
||||
|
||||
Index: openssl-3.2.3/crypto/context.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/context.c
|
||||
+++ openssl-3.2.3/crypto/context.c
|
||||
@@ -17,6 +17,40 @@
|
||||
diff --git a/crypto/context.c b/crypto/context.c
|
||||
index f15bc3d755..614c8a2c88 100644
|
||||
--- a/crypto/context.c
|
||||
+++ b/crypto/context.c
|
||||
@@ -7,6 +7,7 @@
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
+#define _GNU_SOURCE /* needed for secure_getenv */
|
||||
#include "crypto/cryptlib.h"
|
||||
#include <openssl/conf.h>
|
||||
#include <openssl/trace.h>
|
||||
@@ -19,6 +20,38 @@
|
||||
#include "crypto/decoder.h"
|
||||
#include "crypto/context.h"
|
||||
|
||||
@@ -36,7 +44,7 @@ Index: openssl-3.2.3/crypto/context.c
|
||||
+ char buf[2] = "0";
|
||||
+ int fd;
|
||||
+
|
||||
+ if (ossl_safe_getenv("OPENSSL_FORCE_FIPS_MODE") != NULL) {
|
||||
+ if (secure_getenv("OPENSSL_FORCE_FIPS_MODE") != NULL) {
|
||||
+ buf[0] = '1';
|
||||
+ } else if ((fd = open(FIPS_MODE_SWITCH_FILE, O_RDONLY)) >= 0) {
|
||||
+ while (read(fd, buf, sizeof(buf)) < 0 && errno == EINTR) ;
|
||||
@@ -46,8 +54,6 @@ Index: openssl-3.2.3/crypto/context.c
|
||||
+ if (buf[0] == '1') {
|
||||
+ kernel_fips_flag = 1;
|
||||
+ }
|
||||
+
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
+int ossl_get_kernel_fips_flag()
|
||||
@@ -56,21 +62,22 @@ Index: openssl-3.2.3/crypto/context.c
|
||||
+}
|
||||
+
|
||||
struct ossl_lib_ctx_st {
|
||||
CRYPTO_RWLOCK *lock, *rand_crngt_lock;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
OSSL_EX_DATA_GLOBAL global;
|
||||
@@ -368,6 +402,7 @@ static int default_context_inited = 0;
|
||||
@@ -393,6 +426,8 @@ static int default_context_inited = 0;
|
||||
|
||||
DEFINE_RUN_ONCE_STATIC(default_context_do_init)
|
||||
{
|
||||
+ read_kernel_fips_flag();
|
||||
+
|
||||
if (!CRYPTO_THREAD_init_local(&default_context_thread_local, NULL))
|
||||
goto err;
|
||||
|
||||
Index: openssl-3.2.3/include/internal/provider.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/include/internal/provider.h
|
||||
+++ openssl-3.2.3/include/internal/provider.h
|
||||
@@ -112,6 +112,9 @@ int ossl_provider_init_as_child(OSSL_LIB
|
||||
diff --git a/include/internal/provider.h b/include/internal/provider.h
|
||||
index 6909a1919c..9d2e355251 100644
|
||||
--- a/include/internal/provider.h
|
||||
+++ b/include/internal/provider.h
|
||||
@@ -111,6 +111,9 @@ int ossl_provider_init_as_child(OSSL_LIB_CTX *ctx,
|
||||
const OSSL_DISPATCH *in);
|
||||
void ossl_provider_deinit_child(OSSL_LIB_CTX *ctx);
|
||||
|
||||
@@ -80,3 +87,6 @@ Index: openssl-3.2.3/include/internal/provider.h
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
--
|
||||
2.49.0
|
||||
|
||||
|
@@ -1,29 +1,79 @@
|
||||
From 37fae351c6fef272baf383469181aecfcac87592 Mon Sep 17 00:00:00 2001
|
||||
From bdb62f3f3184852ff6aac39ab3940b5dc7791fbb Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Mon, 31 Jul 2023 09:41:27 +0200
|
||||
Subject: [PATCH 10/35] 0010-Add-changes-to-ectest-and-eccurve.patch
|
||||
Date: Wed, 6 Mar 2024 19:17:15 +0100
|
||||
Subject: [PATCH 11/53] RH: Drop weak curve definitions - RENAMED/SQUASHED
|
||||
|
||||
Patch-name: 0010-Add-changes-to-ectest-and-eccurve.patch
|
||||
Patch-id: 10
|
||||
Patch-status: |
|
||||
# Instead of replacing ectest.c and ec_curve.c, add the changes as a patch so
|
||||
# that new modifications made to these files by upstream are not lost.
|
||||
From-dist-git-commit: 9409bc7044cf4b5773639cce20f51399888c45fd
|
||||
---
|
||||
crypto/ec/ec_curve.c | 844 -------------------------------------------
|
||||
test/ectest.c | 174 +--------
|
||||
2 files changed, 8 insertions(+), 1010 deletions(-)
|
||||
# # Instead of replacing ectest.c and ec_curve.c, add the changes as a patch so
|
||||
# # that new modifications made to these files by upstream are not lost.
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
|
||||
diff --git a/crypto/ec/ec_curve.c b/crypto/ec/ec_curve.c
|
||||
index b5b2f3342d..d32a768fe6 100644
|
||||
--- a/crypto/ec/ec_curve.c
|
||||
+++ b/crypto/ec/ec_curve.c
|
||||
@@ -30,38 +30,6 @@ typedef struct {
|
||||
} EC_CURVE_DATA;
|
||||
commit #2:
|
||||
Patch-name: 0011-Remove-EC-curves.patch
|
||||
Patch-id: 11
|
||||
Patch-status: |
|
||||
# # remove unsupported EC curves
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
---
|
||||
apps/speed.c | 8 +-
|
||||
crypto/ec/ec_curve.c | 844 -----------------------------------
|
||||
crypto/evp/ec_support.c | 87 ----
|
||||
test/acvp_test.inc | 9 -
|
||||
test/ecdsatest.h | 17 -
|
||||
test/ectest.c | 174 +-------
|
||||
test/recipes/15-test_genec.t | 27 --
|
||||
7 files changed, 9 insertions(+), 1157 deletions(-)
|
||||
|
||||
Index: openssl-3.5.0-beta1/apps/speed.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/apps/speed.c
|
||||
+++ openssl-3.5.0-beta1/apps/speed.c
|
||||
@@ -405,7 +405,7 @@ static double ffdh_results[FFDH_NUM][1];
|
||||
#endif /* OPENSSL_NO_DH */
|
||||
|
||||
enum ec_curves_t {
|
||||
- R_EC_P160, R_EC_P192, R_EC_P224, R_EC_P256, R_EC_P384, R_EC_P521,
|
||||
+ R_EC_P224, R_EC_P256, R_EC_P384, R_EC_P521,
|
||||
#ifndef OPENSSL_NO_EC2M
|
||||
R_EC_K163, R_EC_K233, R_EC_K283, R_EC_K409, R_EC_K571,
|
||||
R_EC_B163, R_EC_B233, R_EC_B283, R_EC_B409, R_EC_B571,
|
||||
@@ -415,8 +415,6 @@ enum ec_curves_t {
|
||||
};
|
||||
/* list of ecdsa curves */
|
||||
static const OPT_PAIR ecdsa_choices[ECDSA_NUM] = {
|
||||
- {"ecdsap160", R_EC_P160},
|
||||
- {"ecdsap192", R_EC_P192},
|
||||
{"ecdsap224", R_EC_P224},
|
||||
{"ecdsap256", R_EC_P256},
|
||||
{"ecdsap384", R_EC_P384},
|
||||
@@ -449,8 +447,6 @@ enum {
|
||||
};
|
||||
/* list of ecdh curves, extension of |ecdsa_choices| list above */
|
||||
static const OPT_PAIR ecdh_choices[EC_NUM] = {
|
||||
- {"ecdhp160", R_EC_P160},
|
||||
- {"ecdhp192", R_EC_P192},
|
||||
{"ecdhp224", R_EC_P224},
|
||||
{"ecdhp256", R_EC_P256},
|
||||
{"ecdhp384", R_EC_P384},
|
||||
@@ -1966,8 +1962,6 @@ int speed_main(int argc, char **argv)
|
||||
*/
|
||||
static const EC_CURVE ec_curves[EC_NUM] = {
|
||||
/* Prime Curves */
|
||||
- {"secp160r1", NID_secp160r1, 160},
|
||||
- {"nistp192", NID_X9_62_prime192v1, 192},
|
||||
{"nistp224", NID_secp224r1, 224},
|
||||
{"nistp256", NID_X9_62_prime256v1, 256},
|
||||
{"nistp384", NID_secp384r1, 384},
|
||||
Index: openssl-3.5.0-beta1/crypto/ec/ec_curve.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/crypto/ec/ec_curve.c
|
||||
+++ openssl-3.5.0-beta1/crypto/ec/ec_curve.c
|
||||
@@ -32,38 +32,6 @@ typedef struct {
|
||||
/* the nist prime curves */
|
||||
-static const struct {
|
||||
- EC_CURVE_DATA h;
|
||||
static const struct {
|
||||
EC_CURVE_DATA h;
|
||||
- unsigned char data[20 + 24 * 6];
|
||||
-} _EC_NIST_PRIME_192 = {
|
||||
- {
|
||||
@@ -54,9 +104,11 @@ index b5b2f3342d..d32a768fe6 100644
|
||||
- }
|
||||
-};
|
||||
-
|
||||
static const struct {
|
||||
EC_CURVE_DATA h;
|
||||
-static const struct {
|
||||
- EC_CURVE_DATA h;
|
||||
unsigned char data[20 + 28 * 6];
|
||||
} _EC_NIST_PRIME_224 = {
|
||||
{
|
||||
@@ -200,187 +168,6 @@ static const struct {
|
||||
}
|
||||
};
|
||||
@@ -244,13 +296,11 @@ index b5b2f3342d..d32a768fe6 100644
|
||||
-
|
||||
static const struct {
|
||||
EC_CURVE_DATA h;
|
||||
unsigned char data[20 + 32 * 6];
|
||||
@@ -421,294 +208,6 @@ static const struct {
|
||||
|
||||
#ifndef FIPS_MODULE
|
||||
unsigned char data[20 + 32 * 8];
|
||||
@@ -431,294 +218,6 @@ static const struct {
|
||||
/* the secg prime curves (minus the nist and x9.62 prime curves) */
|
||||
-static const struct {
|
||||
- EC_CURVE_DATA h;
|
||||
static const struct {
|
||||
EC_CURVE_DATA h;
|
||||
- unsigned char data[20 + 14 * 6];
|
||||
-} _EC_SECG_PRIME_112R1 = {
|
||||
- {
|
||||
@@ -537,10 +587,12 @@ index b5b2f3342d..d32a768fe6 100644
|
||||
- }
|
||||
-};
|
||||
-
|
||||
static const struct {
|
||||
EC_CURVE_DATA h;
|
||||
-static const struct {
|
||||
- EC_CURVE_DATA h;
|
||||
unsigned char data[0 + 32 * 6];
|
||||
@@ -745,102 +244,6 @@ static const struct {
|
||||
} _EC_SECG_PRIME_256K1 = {
|
||||
{
|
||||
@@ -753,102 +252,6 @@ static const struct {
|
||||
}
|
||||
};
|
||||
|
||||
@@ -643,12 +695,10 @@ index b5b2f3342d..d32a768fe6 100644
|
||||
#endif /* FIPS_MODULE */
|
||||
|
||||
#ifndef OPENSSL_NO_EC2M
|
||||
@@ -2236,198 +1639,6 @@ static const struct {
|
||||
*/
|
||||
|
||||
@@ -2246,198 +1649,6 @@ static const struct {
|
||||
#ifndef FIPS_MODULE
|
||||
-static const struct {
|
||||
- EC_CURVE_DATA h;
|
||||
static const struct {
|
||||
EC_CURVE_DATA h;
|
||||
- unsigned char data[0 + 20 * 6];
|
||||
-} _EC_brainpoolP160r1 = {
|
||||
- {
|
||||
@@ -839,10 +889,12 @@ index b5b2f3342d..d32a768fe6 100644
|
||||
- }
|
||||
-};
|
||||
-
|
||||
static const struct {
|
||||
EC_CURVE_DATA h;
|
||||
-static const struct {
|
||||
- EC_CURVE_DATA h;
|
||||
unsigned char data[0 + 32 * 6];
|
||||
@@ -2854,8 +2065,6 @@ static const ec_list_element curve_list[] = {
|
||||
} _EC_brainpoolP256r1 = {
|
||||
{
|
||||
@@ -2864,8 +2075,6 @@ static const ec_list_element curve_list[
|
||||
"NIST/SECG curve over a 521 bit prime field"},
|
||||
|
||||
/* X9.62 curves */
|
||||
@@ -851,7 +903,7 @@ index b5b2f3342d..d32a768fe6 100644
|
||||
{NID_X9_62_prime256v1, &_EC_X9_62_PRIME_256V1.h,
|
||||
# if defined(ECP_NISTZ256_ASM)
|
||||
EC_GFp_nistz256_method,
|
||||
@@ -2899,25 +2108,6 @@ static const ec_list_element curve_list[] = {
|
||||
@@ -2909,25 +2118,6 @@ static const ec_list_element curve_list[
|
||||
static const ec_list_element curve_list[] = {
|
||||
/* prime field curves */
|
||||
/* secg curves */
|
||||
@@ -877,7 +929,7 @@ index b5b2f3342d..d32a768fe6 100644
|
||||
# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
|
||||
{NID_secp224r1, &_EC_NIST_PRIME_224.h, EC_GFp_nistp224_method,
|
||||
"NIST/SECG curve over a 224 bit prime field"},
|
||||
@@ -2945,18 +2135,6 @@ static const ec_list_element curve_list[] = {
|
||||
@@ -2957,18 +2147,6 @@ static const ec_list_element curve_list[
|
||||
# endif
|
||||
"NIST/SECG curve over a 521 bit prime field"},
|
||||
/* X9.62 curves */
|
||||
@@ -896,7 +948,7 @@ index b5b2f3342d..d32a768fe6 100644
|
||||
{NID_X9_62_prime256v1, &_EC_X9_62_PRIME_256V1.h,
|
||||
# if defined(ECP_NISTZ256_ASM)
|
||||
EC_GFp_nistz256_method,
|
||||
@@ -3053,22 +2231,12 @@ static const ec_list_element curve_list[] = {
|
||||
@@ -3065,22 +2243,12 @@ static const ec_list_element curve_list[
|
||||
{NID_wap_wsg_idm_ecid_wtls5, &_EC_X9_62_CHAR2_163V1.h, 0,
|
||||
"X9.62 curve over a 163 bit binary field"},
|
||||
# endif
|
||||
@@ -919,7 +971,7 @@ index b5b2f3342d..d32a768fe6 100644
|
||||
# ifndef OPENSSL_NO_EC2M
|
||||
/* IPSec curves */
|
||||
{NID_ipsec3, &_EC_IPSEC_155_ID3.h, 0,
|
||||
@@ -3079,18 +2247,6 @@ static const ec_list_element curve_list[] = {
|
||||
@@ -3091,18 +2259,6 @@ static const ec_list_element curve_list[
|
||||
"\tNot suitable for ECDSA.\n\tQuestionable extension field!"},
|
||||
# endif
|
||||
/* brainpool curves */
|
||||
@@ -938,10 +990,170 @@ index b5b2f3342d..d32a768fe6 100644
|
||||
{NID_brainpoolP256r1, &_EC_brainpoolP256r1.h, 0,
|
||||
"RFC 5639 curve over a 256 bit prime field"},
|
||||
{NID_brainpoolP256t1, &_EC_brainpoolP256t1.h, 0,
|
||||
diff --git a/test/ectest.c b/test/ectest.c
|
||||
index afef85b0e6..4890b0555e 100644
|
||||
--- a/test/ectest.c
|
||||
+++ b/test/ectest.c
|
||||
Index: openssl-3.5.0-beta1/crypto/evp/ec_support.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/crypto/evp/ec_support.c
|
||||
+++ openssl-3.5.0-beta1/crypto/evp/ec_support.c
|
||||
@@ -20,89 +20,15 @@ typedef struct ec_name2nid_st {
|
||||
static const EC_NAME2NID curve_list[] = {
|
||||
/* prime field curves */
|
||||
/* secg curves */
|
||||
- {"secp112r1", NID_secp112r1 },
|
||||
- {"secp112r2", NID_secp112r2 },
|
||||
- {"secp128r1", NID_secp128r1 },
|
||||
- {"secp128r2", NID_secp128r2 },
|
||||
- {"secp160k1", NID_secp160k1 },
|
||||
- {"secp160r1", NID_secp160r1 },
|
||||
- {"secp160r2", NID_secp160r2 },
|
||||
- {"secp192k1", NID_secp192k1 },
|
||||
- {"secp224k1", NID_secp224k1 },
|
||||
{"secp224r1", NID_secp224r1 },
|
||||
{"secp256k1", NID_secp256k1 },
|
||||
{"secp384r1", NID_secp384r1 },
|
||||
{"secp521r1", NID_secp521r1 },
|
||||
/* X9.62 curves */
|
||||
- {"prime192v1", NID_X9_62_prime192v1 },
|
||||
- {"prime192v2", NID_X9_62_prime192v2 },
|
||||
- {"prime192v3", NID_X9_62_prime192v3 },
|
||||
- {"prime239v1", NID_X9_62_prime239v1 },
|
||||
- {"prime239v2", NID_X9_62_prime239v2 },
|
||||
- {"prime239v3", NID_X9_62_prime239v3 },
|
||||
{"prime256v1", NID_X9_62_prime256v1 },
|
||||
/* characteristic two field curves */
|
||||
/* NIST/SECG curves */
|
||||
- {"sect113r1", NID_sect113r1 },
|
||||
- {"sect113r2", NID_sect113r2 },
|
||||
- {"sect131r1", NID_sect131r1 },
|
||||
- {"sect131r2", NID_sect131r2 },
|
||||
- {"sect163k1", NID_sect163k1 },
|
||||
- {"sect163r1", NID_sect163r1 },
|
||||
- {"sect163r2", NID_sect163r2 },
|
||||
- {"sect193r1", NID_sect193r1 },
|
||||
- {"sect193r2", NID_sect193r2 },
|
||||
- {"sect233k1", NID_sect233k1 },
|
||||
- {"sect233r1", NID_sect233r1 },
|
||||
- {"sect239k1", NID_sect239k1 },
|
||||
- {"sect283k1", NID_sect283k1 },
|
||||
- {"sect283r1", NID_sect283r1 },
|
||||
- {"sect409k1", NID_sect409k1 },
|
||||
- {"sect409r1", NID_sect409r1 },
|
||||
- {"sect571k1", NID_sect571k1 },
|
||||
- {"sect571r1", NID_sect571r1 },
|
||||
- /* X9.62 curves */
|
||||
- {"c2pnb163v1", NID_X9_62_c2pnb163v1 },
|
||||
- {"c2pnb163v2", NID_X9_62_c2pnb163v2 },
|
||||
- {"c2pnb163v3", NID_X9_62_c2pnb163v3 },
|
||||
- {"c2pnb176v1", NID_X9_62_c2pnb176v1 },
|
||||
- {"c2tnb191v1", NID_X9_62_c2tnb191v1 },
|
||||
- {"c2tnb191v2", NID_X9_62_c2tnb191v2 },
|
||||
- {"c2tnb191v3", NID_X9_62_c2tnb191v3 },
|
||||
- {"c2pnb208w1", NID_X9_62_c2pnb208w1 },
|
||||
- {"c2tnb239v1", NID_X9_62_c2tnb239v1 },
|
||||
- {"c2tnb239v2", NID_X9_62_c2tnb239v2 },
|
||||
- {"c2tnb239v3", NID_X9_62_c2tnb239v3 },
|
||||
- {"c2pnb272w1", NID_X9_62_c2pnb272w1 },
|
||||
- {"c2pnb304w1", NID_X9_62_c2pnb304w1 },
|
||||
- {"c2tnb359v1", NID_X9_62_c2tnb359v1 },
|
||||
- {"c2pnb368w1", NID_X9_62_c2pnb368w1 },
|
||||
- {"c2tnb431r1", NID_X9_62_c2tnb431r1 },
|
||||
- /*
|
||||
- * the WAP/WTLS curves [unlike SECG, spec has its own OIDs for curves
|
||||
- * from X9.62]
|
||||
- */
|
||||
- {"wap-wsg-idm-ecid-wtls1", NID_wap_wsg_idm_ecid_wtls1 },
|
||||
- {"wap-wsg-idm-ecid-wtls3", NID_wap_wsg_idm_ecid_wtls3 },
|
||||
- {"wap-wsg-idm-ecid-wtls4", NID_wap_wsg_idm_ecid_wtls4 },
|
||||
- {"wap-wsg-idm-ecid-wtls5", NID_wap_wsg_idm_ecid_wtls5 },
|
||||
- {"wap-wsg-idm-ecid-wtls6", NID_wap_wsg_idm_ecid_wtls6 },
|
||||
- {"wap-wsg-idm-ecid-wtls7", NID_wap_wsg_idm_ecid_wtls7 },
|
||||
- {"wap-wsg-idm-ecid-wtls8", NID_wap_wsg_idm_ecid_wtls8 },
|
||||
- {"wap-wsg-idm-ecid-wtls9", NID_wap_wsg_idm_ecid_wtls9 },
|
||||
- {"wap-wsg-idm-ecid-wtls10", NID_wap_wsg_idm_ecid_wtls10 },
|
||||
- {"wap-wsg-idm-ecid-wtls11", NID_wap_wsg_idm_ecid_wtls11 },
|
||||
- {"wap-wsg-idm-ecid-wtls12", NID_wap_wsg_idm_ecid_wtls12 },
|
||||
- /* IPSec curves */
|
||||
- {"Oakley-EC2N-3", NID_ipsec3 },
|
||||
- {"Oakley-EC2N-4", NID_ipsec4 },
|
||||
/* brainpool curves */
|
||||
- {"brainpoolP160r1", NID_brainpoolP160r1 },
|
||||
- {"brainpoolP160t1", NID_brainpoolP160t1 },
|
||||
- {"brainpoolP192r1", NID_brainpoolP192r1 },
|
||||
- {"brainpoolP192t1", NID_brainpoolP192t1 },
|
||||
- {"brainpoolP224r1", NID_brainpoolP224r1 },
|
||||
- {"brainpoolP224t1", NID_brainpoolP224t1 },
|
||||
{"brainpoolP256r1", NID_brainpoolP256r1 },
|
||||
{"brainpoolP256t1", NID_brainpoolP256t1 },
|
||||
{"brainpoolP320r1", NID_brainpoolP320r1 },
|
||||
@@ -150,17 +76,6 @@ int ossl_ec_curve_name2nid(const char *n
|
||||
/* Functions to translate between common NIST curve names and NIDs */
|
||||
|
||||
static const EC_NAME2NID nist_curves[] = {
|
||||
- {"B-163", NID_sect163r2},
|
||||
- {"B-233", NID_sect233r1},
|
||||
- {"B-283", NID_sect283r1},
|
||||
- {"B-409", NID_sect409r1},
|
||||
- {"B-571", NID_sect571r1},
|
||||
- {"K-163", NID_sect163k1},
|
||||
- {"K-233", NID_sect233k1},
|
||||
- {"K-283", NID_sect283k1},
|
||||
- {"K-409", NID_sect409k1},
|
||||
- {"K-571", NID_sect571k1},
|
||||
- {"P-192", NID_X9_62_prime192v1},
|
||||
{"P-224", NID_secp224r1},
|
||||
{"P-256", NID_X9_62_prime256v1},
|
||||
{"P-384", NID_secp384r1},
|
||||
Index: openssl-3.5.0-beta1/test/acvp_test.inc
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/acvp_test.inc
|
||||
+++ openssl-3.5.0-beta1/test/acvp_test.inc
|
||||
@@ -218,15 +218,6 @@ static const unsigned char ecdsa_sigver_
|
||||
};
|
||||
static const struct ecdsa_sigver_st ecdsa_sigver_data[] = {
|
||||
{
|
||||
- "SHA-1",
|
||||
- "P-192",
|
||||
- ITM(ecdsa_sigver_msg0),
|
||||
- ITM(ecdsa_sigver_pub0),
|
||||
- ITM(ecdsa_sigver_r0),
|
||||
- ITM(ecdsa_sigver_s0),
|
||||
- PASS,
|
||||
- },
|
||||
- {
|
||||
"SHA2-512",
|
||||
"P-521",
|
||||
ITM(ecdsa_sigver_msg1),
|
||||
Index: openssl-3.5.0-beta1/test/ecdsatest.h
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/ecdsatest.h
|
||||
+++ openssl-3.5.0-beta1/test/ecdsatest.h
|
||||
@@ -32,23 +32,6 @@ typedef struct {
|
||||
} ecdsa_cavs_kat_t;
|
||||
|
||||
static const ecdsa_cavs_kat_t ecdsa_cavs_kats[] = {
|
||||
- /* prime KATs from X9.62 */
|
||||
- {NID_X9_62_prime192v1, NID_sha1,
|
||||
- "616263", /* "abc" */
|
||||
- "1a8d598fc15bf0fd89030b5cb1111aeb92ae8baf5ea475fb",
|
||||
- "0462b12d60690cdcf330babab6e69763b471f994dd702d16a563bf5ec08069705ffff65e"
|
||||
- "5ca5c0d69716dfcb3474373902",
|
||||
- "fa6de29746bbeb7f8bb1e761f85f7dfb2983169d82fa2f4e",
|
||||
- "885052380ff147b734c330c43d39b2c4a89f29b0f749fead",
|
||||
- "e9ecc78106def82bf1070cf1d4d804c3cb390046951df686"},
|
||||
- {NID_X9_62_prime239v1, NID_sha1,
|
||||
- "616263", /* "abc" */
|
||||
- "7ef7c6fabefffdea864206e80b0b08a9331ed93e698561b64ca0f7777f3d",
|
||||
- "045b6dc53bc61a2548ffb0f671472de6c9521a9d2d2534e65abfcbd5fe0c707fd9f1ed2e"
|
||||
- "65f09f6ce0893baf5e8e31e6ae82ea8c3592335be906d38dee",
|
||||
- "656c7196bf87dcc5d1f1020906df2782360d36b2de7a17ece37d503784af",
|
||||
- "2cb7f36803ebb9c427c58d8265f11fc5084747133078fc279de874fbecb0",
|
||||
- "2eeae988104e9c2234a3c2beb1f53bfa5dc11ff36a875d1e3ccb1f7e45cf"},
|
||||
/* prime KATs from NIST CAVP */
|
||||
{NID_secp224r1, NID_sha224,
|
||||
"699325d6fc8fbbb4981a6ded3c3a54ad2e4e3db8a5669201912064c64e700c139248cdc1"
|
||||
Index: openssl-3.5.0-beta1/test/ectest.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/ectest.c
|
||||
+++ openssl-3.5.0-beta1/test/ectest.c
|
||||
@@ -175,184 +175,26 @@ static int prime_field_tests(void)
|
||||
|| !TEST_ptr(p = BN_new())
|
||||
|| !TEST_ptr(a = BN_new())
|
||||
@@ -1134,7 +1346,7 @@ index afef85b0e6..4890b0555e 100644
|
||||
"FFFFFFFF000000000000000000000001"))
|
||||
|| !TEST_int_eq(1, BN_check_prime(p, ctx, NULL))
|
||||
|| !TEST_true(BN_hex2bn(&a, "FFFFFFFFFFFFFFFFFFFFFFFF"
|
||||
@@ -3015,7 +2857,7 @@ int setup_tests(void)
|
||||
@@ -3128,7 +2970,7 @@ int setup_tests(void)
|
||||
|
||||
ADD_TEST(parameter_test);
|
||||
ADD_TEST(ossl_parameter_test);
|
||||
@@ -1143,5 +1355,53 @@ index afef85b0e6..4890b0555e 100644
|
||||
ADD_ALL_TESTS(cardinality_test, crv_len);
|
||||
ADD_TEST(prime_field_tests);
|
||||
#ifndef OPENSSL_NO_EC2M
|
||||
--
|
||||
2.41.0
|
||||
Index: openssl-3.5.0-beta1/test/recipes/15-test_genec.t
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/15-test_genec.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/15-test_genec.t
|
||||
@@ -41,37 +41,11 @@ plan skip_all => "This test is unsupport
|
||||
if disabled("ec");
|
||||
|
||||
my @prime_curves = qw(
|
||||
- secp112r1
|
||||
- secp112r2
|
||||
- secp128r1
|
||||
- secp128r2
|
||||
- secp160k1
|
||||
- secp160r1
|
||||
- secp160r2
|
||||
- secp192k1
|
||||
- secp224k1
|
||||
secp224r1
|
||||
secp256k1
|
||||
secp384r1
|
||||
secp521r1
|
||||
- prime192v1
|
||||
- prime192v2
|
||||
- prime192v3
|
||||
- prime239v1
|
||||
- prime239v2
|
||||
- prime239v3
|
||||
prime256v1
|
||||
- wap-wsg-idm-ecid-wtls6
|
||||
- wap-wsg-idm-ecid-wtls7
|
||||
- wap-wsg-idm-ecid-wtls8
|
||||
- wap-wsg-idm-ecid-wtls9
|
||||
- wap-wsg-idm-ecid-wtls12
|
||||
- brainpoolP160r1
|
||||
- brainpoolP160t1
|
||||
- brainpoolP192r1
|
||||
- brainpoolP192t1
|
||||
- brainpoolP224r1
|
||||
- brainpoolP224t1
|
||||
brainpoolP256r1
|
||||
brainpoolP256t1
|
||||
brainpoolP320r1
|
||||
@@ -136,7 +110,6 @@ push(@other_curves, 'SM2')
|
||||
if !disabled("sm2");
|
||||
|
||||
my @curve_aliases = qw(
|
||||
- P-192
|
||||
P-224
|
||||
P-256
|
||||
P-384
|
||||
|
@@ -15,11 +15,11 @@ Subject: Add support for PROFILE=SYSTEM system default cipherlist
|
||||
util/libcrypto.num | 1
|
||||
8 files changed, 110 insertions(+), 14 deletions(-)
|
||||
|
||||
Index: openssl-3.2.3/Configurations/unix-Makefile.tmpl
|
||||
Index: openssl-3.5.0-beta1/Configurations/unix-Makefile.tmpl
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/Configurations/unix-Makefile.tmpl
|
||||
+++ openssl-3.2.3/Configurations/unix-Makefile.tmpl
|
||||
@@ -324,6 +324,10 @@ MANDIR=$(INSTALLTOP)/share/man
|
||||
--- openssl-3.5.0-beta1.orig/Configurations/unix-Makefile.tmpl
|
||||
+++ openssl-3.5.0-beta1/Configurations/unix-Makefile.tmpl
|
||||
@@ -344,6 +344,10 @@ MANDIR=$(INSTALLTOP)/share/man
|
||||
DOCDIR=$(INSTALLTOP)/share/doc/$(BASENAME)
|
||||
HTMLDIR=$(DOCDIR)/html
|
||||
|
||||
@@ -30,7 +30,7 @@ Index: openssl-3.2.3/Configurations/unix-Makefile.tmpl
|
||||
# MANSUFFIX is for the benefit of anyone who may want to have a suffix
|
||||
# appended after the manpage file section number. "ssl" is popular,
|
||||
# resulting in files such as config.5ssl rather than config.5.
|
||||
@@ -347,6 +351,7 @@ CC=$(CROSS_COMPILE){- $config{CC} -}
|
||||
@@ -367,6 +371,7 @@ CC=$(CROSS_COMPILE){- $config{CC} -}
|
||||
CXX={- $config{CXX} ? "\$(CROSS_COMPILE)$config{CXX}" : '' -}
|
||||
CPPFLAGS={- our $cppflags1 = join(" ",
|
||||
(map { "-D".$_} @{$config{CPPDEFINES}}),
|
||||
@@ -38,10 +38,10 @@ Index: openssl-3.2.3/Configurations/unix-Makefile.tmpl
|
||||
(map { "-I".$_} @{$config{CPPINCLUDES}}),
|
||||
@{$config{CPPFLAGS}}) -}
|
||||
CFLAGS={- join(' ', @{$config{CFLAGS}}) -}
|
||||
Index: openssl-3.2.3/Configure
|
||||
Index: openssl-3.5.0-beta1/Configure
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/Configure
|
||||
+++ openssl-3.2.3/Configure
|
||||
--- openssl-3.5.0-beta1.orig/Configure
|
||||
+++ openssl-3.5.0-beta1/Configure
|
||||
@@ -27,7 +27,7 @@ use OpenSSL::config;
|
||||
my $orig_death_handler = $SIG{__DIE__};
|
||||
$SIG{__DIE__} = \&death_handler;
|
||||
@@ -62,7 +62,7 @@ Index: openssl-3.2.3/Configure
|
||||
# --banner=".." Output specified text instead of default completion banner
|
||||
#
|
||||
# -w Don't wait after showing a Configure warning
|
||||
@@ -393,6 +397,7 @@ $config{prefix}="";
|
||||
@@ -408,6 +412,7 @@ $config{prefix}="";
|
||||
$config{openssldir}="";
|
||||
$config{processor}="";
|
||||
$config{libdir}="";
|
||||
@@ -70,7 +70,7 @@ Index: openssl-3.2.3/Configure
|
||||
my $auto_threads=1; # enable threads automatically? true by default
|
||||
my $default_ranlib;
|
||||
|
||||
@@ -1047,6 +1052,10 @@ while (@argvcopy)
|
||||
@@ -1104,6 +1109,10 @@ while (@argvcopy)
|
||||
die "FIPS key too long (64 bytes max)\n"
|
||||
if length $1 > 64;
|
||||
}
|
||||
@@ -81,10 +81,10 @@ Index: openssl-3.2.3/Configure
|
||||
elsif (/^--banner=(.*)$/)
|
||||
{
|
||||
$banner = $1 . "\n";
|
||||
Index: openssl-3.2.3/doc/man1/openssl-ciphers.pod.in
|
||||
Index: openssl-3.5.0-beta1/doc/man1/openssl-ciphers.pod.in
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/doc/man1/openssl-ciphers.pod.in
|
||||
+++ openssl-3.2.3/doc/man1/openssl-ciphers.pod.in
|
||||
--- openssl-3.5.0-beta1.orig/doc/man1/openssl-ciphers.pod.in
|
||||
+++ openssl-3.5.0-beta1/doc/man1/openssl-ciphers.pod.in
|
||||
@@ -190,6 +190,15 @@ As of OpenSSL 1.0.0, the B<ALL> cipher s
|
||||
|
||||
The cipher suites not enabled by B<ALL>, currently B<eNULL>.
|
||||
@@ -101,11 +101,11 @@ Index: openssl-3.2.3/doc/man1/openssl-ciphers.pod.in
|
||||
=item B<HIGH>
|
||||
|
||||
"High" encryption cipher suites. This currently means those with key lengths
|
||||
Index: openssl-3.2.3/include/openssl/ssl.h.in
|
||||
Index: openssl-3.5.0-beta1/include/openssl/ssl.h.in
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/include/openssl/ssl.h.in
|
||||
+++ openssl-3.2.3/include/openssl/ssl.h.in
|
||||
@@ -214,6 +214,11 @@ extern "C" {
|
||||
--- openssl-3.5.0-beta1.orig/include/openssl/ssl.h.in
|
||||
+++ openssl-3.5.0-beta1/include/openssl/ssl.h.in
|
||||
@@ -209,6 +209,11 @@ extern "C" {
|
||||
* throwing out anonymous and unencrypted ciphersuites! (The latter are not
|
||||
* actually enabled by ALL, but "ALL:RSA" would enable some of them.)
|
||||
*/
|
||||
@@ -117,11 +117,11 @@ Index: openssl-3.2.3/include/openssl/ssl.h.in
|
||||
|
||||
/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */
|
||||
# define SSL_SENT_SHUTDOWN 1
|
||||
Index: openssl-3.2.3/ssl/ssl_ciph.c
|
||||
Index: openssl-3.5.0-beta1/ssl/ssl_ciph.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/ssl/ssl_ciph.c
|
||||
+++ openssl-3.2.3/ssl/ssl_ciph.c
|
||||
@@ -1455,6 +1455,53 @@ int SSL_set_ciphersuites(SSL *s, const c
|
||||
--- openssl-3.5.0-beta1.orig/ssl/ssl_ciph.c
|
||||
+++ openssl-3.5.0-beta1/ssl/ssl_ciph.c
|
||||
@@ -1421,6 +1421,53 @@ int SSL_set_ciphersuites(SSL *s, const c
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -175,7 +175,7 @@ Index: openssl-3.2.3/ssl/ssl_ciph.c
|
||||
STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(SSL_CTX *ctx,
|
||||
STACK_OF(SSL_CIPHER) *tls13_ciphersuites,
|
||||
STACK_OF(SSL_CIPHER) **cipher_list,
|
||||
@@ -1469,15 +1516,25 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
@@ -1435,15 +1482,25 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
CIPHER_ORDER *co_list = NULL, *head = NULL, *tail = NULL, *curr;
|
||||
const SSL_CIPHER **ca_list = NULL;
|
||||
const SSL_METHOD *ssl_method = ctx->method;
|
||||
@@ -203,7 +203,7 @@ Index: openssl-3.2.3/ssl/ssl_ciph.c
|
||||
|
||||
/*
|
||||
* To reduce the work to do we only want to process the compiled
|
||||
@@ -1499,7 +1556,7 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
@@ -1465,7 +1522,7 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
if (num_of_ciphers > 0) {
|
||||
co_list = OPENSSL_malloc(sizeof(*co_list) * num_of_ciphers);
|
||||
if (co_list == NULL)
|
||||
@@ -212,7 +212,7 @@ Index: openssl-3.2.3/ssl/ssl_ciph.c
|
||||
}
|
||||
|
||||
ssl_cipher_collect_ciphers(ssl_method, num_of_ciphers,
|
||||
@@ -1565,8 +1622,7 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
@@ -1531,8 +1588,7 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
* in force within each class
|
||||
*/
|
||||
if (!ssl_cipher_strength_sort(&head, &tail)) {
|
||||
@@ -222,7 +222,7 @@ Index: openssl-3.2.3/ssl/ssl_ciph.c
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1610,8 +1666,7 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
@@ -1576,8 +1632,7 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
num_of_alias_max = num_of_ciphers + num_of_group_aliases + 1;
|
||||
ca_list = OPENSSL_malloc(sizeof(*ca_list) * num_of_alias_max);
|
||||
if (ca_list == NULL) {
|
||||
@@ -232,7 +232,7 @@ Index: openssl-3.2.3/ssl/ssl_ciph.c
|
||||
}
|
||||
ssl_cipher_collect_aliases(ca_list, num_of_group_aliases,
|
||||
disabled_mkey, disabled_auth, disabled_enc,
|
||||
@@ -1644,8 +1699,7 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
@@ -1603,8 +1658,7 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
OPENSSL_free(ca_list); /* Not needed anymore */
|
||||
|
||||
if (!ok) { /* Rule processing failure */
|
||||
@@ -242,7 +242,7 @@ Index: openssl-3.2.3/ssl/ssl_ciph.c
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1653,10 +1707,13 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
@@ -1612,10 +1666,13 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
* if we cannot get one.
|
||||
*/
|
||||
if ((cipherstack = sk_SSL_CIPHER_new_null()) == NULL) {
|
||||
@@ -258,7 +258,7 @@ Index: openssl-3.2.3/ssl/ssl_ciph.c
|
||||
/* Add TLSv1.3 ciphers first - we always prefer those if possible */
|
||||
for (i = 0; i < sk_SSL_CIPHER_num(tls13_ciphersuites); i++) {
|
||||
const SSL_CIPHER *sslc = sk_SSL_CIPHER_value(tls13_ciphersuites, i);
|
||||
@@ -1708,6 +1765,14 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
@@ -1667,6 +1724,14 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_
|
||||
*cipher_list = cipherstack;
|
||||
|
||||
return cipherstack;
|
||||
@@ -273,11 +273,11 @@ Index: openssl-3.2.3/ssl/ssl_ciph.c
|
||||
}
|
||||
|
||||
char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len)
|
||||
Index: openssl-3.2.3/ssl/ssl_lib.c
|
||||
Index: openssl-3.5.0-beta1/ssl/ssl_lib.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/ssl/ssl_lib.c
|
||||
+++ openssl-3.2.3/ssl/ssl_lib.c
|
||||
@@ -670,7 +670,7 @@ int SSL_CTX_set_ssl_version(SSL_CTX *ctx
|
||||
--- openssl-3.5.0-beta1.orig/ssl/ssl_lib.c
|
||||
+++ openssl-3.5.0-beta1/ssl/ssl_lib.c
|
||||
@@ -679,7 +679,7 @@ int SSL_CTX_set_ssl_version(SSL_CTX *ctx
|
||||
ctx->tls13_ciphersuites,
|
||||
&(ctx->cipher_list),
|
||||
&(ctx->cipher_list_by_id),
|
||||
@@ -286,7 +286,7 @@ Index: openssl-3.2.3/ssl/ssl_lib.c
|
||||
if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) {
|
||||
ERR_raise(ERR_LIB_SSL, SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
|
||||
return 0;
|
||||
@@ -3955,7 +3955,7 @@ SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *li
|
||||
@@ -4099,7 +4099,7 @@ SSL_CTX *SSL_CTX_new_ex(OSSL_LIB_CTX *li
|
||||
if (!ssl_create_cipher_list(ret,
|
||||
ret->tls13_ciphersuites,
|
||||
&ret->cipher_list, &ret->cipher_list_by_id,
|
||||
@@ -295,10 +295,10 @@ Index: openssl-3.2.3/ssl/ssl_lib.c
|
||||
|| sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
|
||||
ERR_raise(ERR_LIB_SSL, SSL_R_LIBRARY_HAS_NO_CIPHERS);
|
||||
goto err;
|
||||
Index: openssl-3.2.3/test/cipherlist_test.c
|
||||
Index: openssl-3.5.0-beta1/test/cipherlist_test.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/cipherlist_test.c
|
||||
+++ openssl-3.2.3/test/cipherlist_test.c
|
||||
--- openssl-3.5.0-beta1.orig/test/cipherlist_test.c
|
||||
+++ openssl-3.5.0-beta1/test/cipherlist_test.c
|
||||
@@ -261,7 +261,9 @@ end:
|
||||
|
||||
int setup_tests(void)
|
||||
@@ -309,19 +309,22 @@ Index: openssl-3.2.3/test/cipherlist_test.c
|
||||
ADD_TEST(test_default_cipherlist_explicit);
|
||||
ADD_TEST(test_default_cipherlist_clear);
|
||||
ADD_TEST(test_stdname_cipherlist);
|
||||
Index: openssl-3.2.3/util/libcrypto.num
|
||||
Index: openssl-3.5.0-beta1/util/libcrypto.num
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/util/libcrypto.num
|
||||
+++ openssl-3.2.3/util/libcrypto.num
|
||||
@@ -5536,3 +5536,4 @@ X509_STORE_CTX_set_get_crl
|
||||
--- openssl-3.5.0-beta1.orig/util/libcrypto.num
|
||||
+++ openssl-3.5.0-beta1/util/libcrypto.num
|
||||
@@ -5536,6 +5536,7 @@ X509_STORE_CTX_set_get_crl
|
||||
X509_STORE_CTX_set_current_reasons 5664 3_2_0 EXIST::FUNCTION:
|
||||
OSSL_STORE_delete 5665 3_2_0 EXIST::FUNCTION:
|
||||
BIO_ADDR_copy 5666 3_2_0 EXIST::FUNCTION:SOCK
|
||||
+ossl_safe_getenv ? 3_2_0 EXIST::FUNCTION:
|
||||
Index: openssl-3.2.3/apps/openssl.cnf
|
||||
+ossl_safe_getenv ? 3_2_0 EXIST::FUNCTION:
|
||||
OSSL_CMP_CTX_get0_geninfo_ITAVs 5667 3_3_0 EXIST::FUNCTION:CMP
|
||||
OSSL_CMP_HDR_get0_geninfo_ITAVs 5668 3_3_0 EXIST::FUNCTION:CMP
|
||||
OSSL_CMP_ITAV_new0_certProfile 5669 3_3_0 EXIST::FUNCTION:CMP
|
||||
Index: openssl-3.5.0-beta1/apps/openssl.cnf
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/apps/openssl.cnf
|
||||
+++ openssl-3.2.3/apps/openssl.cnf
|
||||
--- openssl-3.5.0-beta1.orig/apps/openssl.cnf
|
||||
+++ openssl-3.5.0-beta1/apps/openssl.cnf
|
||||
@@ -52,6 +52,12 @@ tsa_policy3 = 1.2.3.4.5.7
|
||||
|
||||
[openssl_init]
|
||||
@@ -335,7 +338,7 @@ Index: openssl-3.2.3/apps/openssl.cnf
|
||||
|
||||
# List of providers to load
|
||||
[provider_sect]
|
||||
@@ -71,6 +76,11 @@ default = default_sect
|
||||
@@ -71,6 +77,11 @@ default = default_sect
|
||||
[default_sect]
|
||||
# activate = 1
|
||||
|
||||
|
@@ -1,521 +0,0 @@
|
||||
From 2e8388e06eafb703aeb315498915bf079561bdb5 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Belyavskiy <dbelyavs@redhat.com>
|
||||
Date: Mon, 21 Aug 2023 13:07:07 +0200
|
||||
Subject: 0049-Allow-disabling-of-SHA1-signatures.patch
|
||||
|
||||
Patch-name: 0049-Allow-disabling-of-SHA1-signatures.patch
|
||||
Patch-id: 49
|
||||
Patch-status: |
|
||||
# Selectively disallow SHA1 signatures rhbz#2070977
|
||||
From-dist-git-commit: 9409bc7044cf4b5773639cce20f51399888c45fd
|
||||
---
|
||||
crypto/context.c | 14 ++++
|
||||
crypto/evp/evp_cnf.c | 13 +++
|
||||
crypto/evp/m_sigver.c | 79 +++++++++++++++++++
|
||||
crypto/evp/pmeth_lib.c | 15 ++++
|
||||
doc/man5/config.pod | 13 +++
|
||||
include/crypto/context.h | 3 +
|
||||
include/internal/cryptlib.h | 3 +-
|
||||
include/internal/sslconf.h | 4 +
|
||||
providers/common/securitycheck.c | 20 +++++
|
||||
providers/common/securitycheck_default.c | 9 ++-
|
||||
providers/implementations/signature/dsa_sig.c | 11 ++-
|
||||
.../implementations/signature/ecdsa_sig.c | 4 +
|
||||
providers/implementations/signature/rsa_sig.c | 20 ++++-
|
||||
ssl/t1_lib.c | 8 ++
|
||||
util/libcrypto.num | 2 +
|
||||
15 files changed, 209 insertions(+), 9 deletions(-)
|
||||
|
||||
Index: openssl-3.2.3/crypto/context.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/context.c
|
||||
+++ openssl-3.2.3/crypto/context.c
|
||||
@@ -82,6 +82,8 @@ struct ossl_lib_ctx_st {
|
||||
void *fips_prov;
|
||||
#endif
|
||||
|
||||
+ void *legacy_digest_signatures;
|
||||
+
|
||||
unsigned int ischild:1;
|
||||
};
|
||||
|
||||
@@ -222,6 +224,10 @@ static int context_init(OSSL_LIB_CTX *ct
|
||||
goto err;
|
||||
#endif
|
||||
|
||||
+ ctx->legacy_digest_signatures = ossl_ctx_legacy_digest_signatures_new(ctx);
|
||||
+ if (ctx->legacy_digest_signatures == NULL)
|
||||
+ goto err;
|
||||
+
|
||||
/* Low priority. */
|
||||
#ifndef FIPS_MODULE
|
||||
ctx->child_provider = ossl_child_prov_ctx_new(ctx);
|
||||
@@ -365,6 +371,11 @@ static void context_deinit_objs(OSSL_LIB
|
||||
}
|
||||
#endif
|
||||
|
||||
+ if (ctx->legacy_digest_signatures != NULL) {
|
||||
+ ossl_ctx_legacy_digest_signatures_free(ctx->legacy_digest_signatures);
|
||||
+ ctx->legacy_digest_signatures = NULL;
|
||||
+ }
|
||||
+
|
||||
/* Low priority. */
|
||||
#ifndef FIPS_MODULE
|
||||
if (ctx->child_provider != NULL) {
|
||||
@@ -662,6 +673,9 @@ void *ossl_lib_ctx_get_data(OSSL_LIB_CTX
|
||||
return ctx->fips_prov;
|
||||
#endif
|
||||
|
||||
+ case OSSL_LIB_CTX_LEGACY_DIGEST_SIGNATURES_INDEX:
|
||||
+ return ctx->legacy_digest_signatures;
|
||||
+
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
Index: openssl-3.2.3/crypto/evp/evp_cnf.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/evp/evp_cnf.c
|
||||
+++ openssl-3.2.3/crypto/evp/evp_cnf.c
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <stdio.h>
|
||||
#include <openssl/crypto.h>
|
||||
#include "internal/cryptlib.h"
|
||||
+#include "internal/sslconf.h"
|
||||
#include <openssl/conf.h>
|
||||
#include <openssl/x509.h>
|
||||
#include <openssl/x509v3.h>
|
||||
@@ -57,6 +58,18 @@ static int alg_module_init(CONF_IMODULE
|
||||
ERR_raise(ERR_LIB_EVP, EVP_R_SET_DEFAULT_PROPERTY_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
+ } else if (strcmp(oval->name, "rh-allow-sha1-signatures") == 0) {
|
||||
+ int m;
|
||||
+
|
||||
+ /* Detailed error already reported. */
|
||||
+ if (!X509V3_get_value_bool(oval, &m))
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!ossl_ctx_legacy_digest_signatures_allowed_set(
|
||||
+ NCONF_get0_libctx((CONF *)cnf), m > 0, 0)) {
|
||||
+ ERR_raise(ERR_LIB_EVP, EVP_R_SET_DEFAULT_PROPERTY_FAILURE);
|
||||
+ return 0;
|
||||
+ }
|
||||
} else {
|
||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_UNKNOWN_OPTION,
|
||||
"name=%s, value=%s", oval->name, oval->value);
|
||||
Index: openssl-3.2.3/crypto/evp/m_sigver.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/evp/m_sigver.c
|
||||
+++ openssl-3.2.3/crypto/evp/m_sigver.c
|
||||
@@ -15,6 +15,69 @@
|
||||
#include "internal/provider.h"
|
||||
#include "internal/numbers.h" /* includes SIZE_MAX */
|
||||
#include "evp_local.h"
|
||||
+#include "crypto/context.h"
|
||||
+
|
||||
+typedef struct ossl_legacy_digest_signatures_st {
|
||||
+ int allowed;
|
||||
+} OSSL_LEGACY_DIGEST_SIGNATURES;
|
||||
+
|
||||
+void ossl_ctx_legacy_digest_signatures_free(void *vldsigs)
|
||||
+{
|
||||
+ OSSL_LEGACY_DIGEST_SIGNATURES *ldsigs = vldsigs;
|
||||
+
|
||||
+ if (ldsigs != NULL) {
|
||||
+ OPENSSL_free(ldsigs);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void *ossl_ctx_legacy_digest_signatures_new(OSSL_LIB_CTX *ctx)
|
||||
+{
|
||||
+ OSSL_LEGACY_DIGEST_SIGNATURES* ldsigs = OPENSSL_zalloc(sizeof(OSSL_LEGACY_DIGEST_SIGNATURES));
|
||||
+ /* Default to allow SHA-1 and support disabling it via config. */
|
||||
+ ldsigs->allowed = 1;
|
||||
+ return ldsigs;
|
||||
+}
|
||||
+
|
||||
+static OSSL_LEGACY_DIGEST_SIGNATURES *ossl_ctx_legacy_digest_signatures(
|
||||
+ OSSL_LIB_CTX *libctx, int loadconfig)
|
||||
+{
|
||||
+#ifndef FIPS_MODULE
|
||||
+ if (loadconfig && !OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL))
|
||||
+ return NULL;
|
||||
+#endif
|
||||
+
|
||||
+ return ossl_lib_ctx_get_data(libctx, OSSL_LIB_CTX_LEGACY_DIGEST_SIGNATURES_INDEX);
|
||||
+}
|
||||
+
|
||||
+int ossl_ctx_legacy_digest_signatures_allowed(OSSL_LIB_CTX *libctx, int loadconfig)
|
||||
+{
|
||||
+ OSSL_LEGACY_DIGEST_SIGNATURES *ldsigs
|
||||
+ = ossl_ctx_legacy_digest_signatures(libctx, loadconfig);
|
||||
+
|
||||
+#ifndef FIPS_MODULE
|
||||
+ if (ossl_safe_getenv("OPENSSL_ENABLE_SHA1_SIGNATURES") != NULL)
|
||||
+ /* This is to be used in tests if SHA-1 is disabled. */
|
||||
+ return 1;
|
||||
+#endif
|
||||
+
|
||||
+ /* Default to allow SHA-1 and support disabling it via config. */
|
||||
+ return ldsigs != NULL ? ldsigs->allowed : 1;
|
||||
+}
|
||||
+
|
||||
+int ossl_ctx_legacy_digest_signatures_allowed_set(OSSL_LIB_CTX *libctx, int allow,
|
||||
+ int loadconfig)
|
||||
+{
|
||||
+ OSSL_LEGACY_DIGEST_SIGNATURES *ldsigs
|
||||
+ = ossl_ctx_legacy_digest_signatures(libctx, loadconfig);
|
||||
+
|
||||
+ if (ldsigs == NULL) {
|
||||
+ ERR_raise(ERR_LIB_EVP, ERR_R_INTERNAL_ERROR);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ ldsigs->allowed = allow;
|
||||
+ return 1;
|
||||
+}
|
||||
|
||||
#ifndef FIPS_MODULE
|
||||
|
||||
@@ -253,6 +316,18 @@ static int do_sigver_init(EVP_MD_CTX *ct
|
||||
}
|
||||
}
|
||||
|
||||
+ if (ctx->reqdigest != NULL
|
||||
+ && !EVP_PKEY_is_a(locpctx->pkey, SN_hmac)
|
||||
+ && !EVP_PKEY_is_a(locpctx->pkey, SN_tls1_prf)
|
||||
+ && !EVP_PKEY_is_a(locpctx->pkey, SN_hkdf)) {
|
||||
+ int mdnid = EVP_MD_nid(ctx->reqdigest);
|
||||
+ if (!ossl_ctx_legacy_digest_signatures_allowed(locpctx->libctx, 0)
|
||||
+ && (mdnid == NID_sha1 || mdnid == NID_md5_sha1)) {
|
||||
+ ERR_raise(ERR_LIB_EVP, EVP_R_INVALID_DIGEST);
|
||||
+ goto err;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (ver) {
|
||||
if (signature->digest_verify_init == NULL) {
|
||||
ERR_raise(ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR);
|
||||
Index: openssl-3.2.3/crypto/evp/pmeth_lib.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/evp/pmeth_lib.c
|
||||
+++ openssl-3.2.3/crypto/evp/pmeth_lib.c
|
||||
@@ -33,6 +33,7 @@
|
||||
#include "internal/ffc.h"
|
||||
#include "internal/numbers.h"
|
||||
#include "internal/provider.h"
|
||||
+#include "internal/sslconf.h"
|
||||
#include "evp_local.h"
|
||||
|
||||
#ifndef FIPS_MODULE
|
||||
@@ -951,6 +952,20 @@ static int evp_pkey_ctx_set_md(EVP_PKEY_
|
||||
return -2;
|
||||
}
|
||||
|
||||
+ if (EVP_PKEY_CTX_IS_SIGNATURE_OP(ctx)
|
||||
+ && md != NULL
|
||||
+ && ctx->pkey != NULL
|
||||
+ && !EVP_PKEY_is_a(ctx->pkey, SN_hmac)
|
||||
+ && !EVP_PKEY_is_a(ctx->pkey, SN_tls1_prf)
|
||||
+ && !EVP_PKEY_is_a(ctx->pkey, SN_hkdf)) {
|
||||
+ int mdnid = EVP_MD_nid(md);
|
||||
+ if ((mdnid == NID_sha1 || mdnid == NID_md5_sha1)
|
||||
+ && !ossl_ctx_legacy_digest_signatures_allowed(ctx->libctx, 0)) {
|
||||
+ ERR_raise(ERR_LIB_EVP, EVP_R_INVALID_DIGEST);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (fallback)
|
||||
return EVP_PKEY_CTX_ctrl(ctx, -1, op, ctrl, 0, (void *)(md));
|
||||
|
||||
Index: openssl-3.2.3/doc/man5/config.pod
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/doc/man5/config.pod
|
||||
+++ openssl-3.2.3/doc/man5/config.pod
|
||||
@@ -304,6 +304,21 @@ Within the algorithm properties section,
|
||||
The value may be anything that is acceptable as a property query
|
||||
string for EVP_set_default_properties().
|
||||
|
||||
+=item B<rh-allow-sha1-signatures>
|
||||
+
|
||||
+The value is a boolean that can be B<yes> or B<no>. If the value is not set,
|
||||
+it behaves as if it was set to B<yes>.
|
||||
+
|
||||
+When set to B<no>, any attempt to create or verify a signature with a SHA1
|
||||
+digest will fail. To test whether your software will work with future versions
|
||||
+of OpenSSL, set this option to B<no>. This setting also affects TLS, where
|
||||
+signature algorithms that use SHA1 as digest will no longer be supported if
|
||||
+this option is set to B<no>. Because TLS 1.1 or lower use MD5-SHA1 as
|
||||
+pseudorandom function (PRF) to derive key material, disabling
|
||||
+B<rh-allow-sha1-signatures> requires the use of TLS 1.2 or newer.
|
||||
+
|
||||
+This is a downstream specific option, and normally it should be set up via crypto-policies.
|
||||
+
|
||||
=item B<fips_mode> (deprecated)
|
||||
|
||||
The value is a boolean that can be B<yes> or B<no>. If the value is
|
||||
Index: openssl-3.2.3/include/crypto/context.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/include/crypto/context.h
|
||||
+++ openssl-3.2.3/include/crypto/context.h
|
||||
@@ -46,3 +46,6 @@ void ossl_release_default_drbg_ctx(void)
|
||||
#if defined(OPENSSL_THREADS)
|
||||
void ossl_threads_ctx_free(void *);
|
||||
#endif
|
||||
+
|
||||
+void *ossl_ctx_legacy_digest_signatures_new(OSSL_LIB_CTX *);
|
||||
+void ossl_ctx_legacy_digest_signatures_free(void *);
|
||||
Index: openssl-3.2.3/include/internal/cryptlib.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/include/internal/cryptlib.h
|
||||
+++ openssl-3.2.3/include/internal/cryptlib.h
|
||||
@@ -117,7 +117,8 @@ typedef struct ossl_ex_data_global_st {
|
||||
# define OSSL_LIB_CTX_CHILD_PROVIDER_INDEX 18
|
||||
# define OSSL_LIB_CTX_THREAD_INDEX 19
|
||||
# define OSSL_LIB_CTX_DECODER_CACHE_INDEX 20
|
||||
-# define OSSL_LIB_CTX_MAX_INDEXES 20
|
||||
+# define OSSL_LIB_CTX_LEGACY_DIGEST_SIGNATURES_INDEX 21
|
||||
+# define OSSL_LIB_CTX_MAX_INDEXES 21
|
||||
|
||||
OSSL_LIB_CTX *ossl_lib_ctx_get_concrete(OSSL_LIB_CTX *ctx);
|
||||
int ossl_lib_ctx_is_default(OSSL_LIB_CTX *ctx);
|
||||
Index: openssl-3.2.3/include/internal/sslconf.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/include/internal/sslconf.h
|
||||
+++ openssl-3.2.3/include/internal/sslconf.h
|
||||
@@ -18,4 +18,8 @@ int conf_ssl_name_find(const char *name,
|
||||
void conf_ssl_get_cmd(const SSL_CONF_CMD *cmd, size_t idx, char **cmdstr,
|
||||
char **arg);
|
||||
|
||||
+/* Methods to support disabling all signatures with legacy digests */
|
||||
+int ossl_ctx_legacy_digest_signatures_allowed(OSSL_LIB_CTX *libctx, int loadconfig);
|
||||
+int ossl_ctx_legacy_digest_signatures_allowed_set(OSSL_LIB_CTX *libctx, int allow,
|
||||
+ int loadconfig);
|
||||
#endif
|
||||
Index: openssl-3.2.3/providers/common/securitycheck.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/common/securitycheck.c
|
||||
+++ openssl-3.2.3/providers/common/securitycheck.c
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <openssl/core_names.h>
|
||||
#include <openssl/obj_mac.h>
|
||||
#include "prov/securitycheck.h"
|
||||
+#include "internal/sslconf.h"
|
||||
|
||||
/*
|
||||
* FIPS requires a minimum security strength of 112 bits (for encryption or
|
||||
@@ -243,6 +244,14 @@ int ossl_digest_get_approved_nid_with_sh
|
||||
mdnid = -1; /* disallowed by security checks */
|
||||
}
|
||||
# endif /* OPENSSL_NO_FIPS_SECURITYCHECKS */
|
||||
+
|
||||
+#ifndef FIPS_MODULE
|
||||
+ if (!ossl_ctx_legacy_digest_signatures_allowed(ctx, 0))
|
||||
+ /* SHA1 is globally enabled by default, check whether we want to locally disable it. */
|
||||
+ if (mdnid == NID_sha1 && !sha1_allowed)
|
||||
+ mdnid = -1;
|
||||
+#endif
|
||||
+
|
||||
return mdnid;
|
||||
}
|
||||
|
||||
@@ -252,5 +261,15 @@ int ossl_digest_is_allowed(OSSL_LIB_CTX
|
||||
if (ossl_securitycheck_enabled(ctx))
|
||||
return ossl_digest_get_approved_nid(md) != NID_undef;
|
||||
# endif /* OPENSSL_NO_FIPS_SECURITYCHECKS */
|
||||
+
|
||||
+#ifndef FIPS_MODULE
|
||||
+ {
|
||||
+ int mdnid = EVP_MD_nid(md);
|
||||
+ if ((mdnid == NID_sha1 || mdnid == NID_md5_sha1)
|
||||
+ && !ossl_ctx_legacy_digest_signatures_allowed(ctx, 0))
|
||||
+ return 0;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
return 1;
|
||||
}
|
||||
Index: openssl-3.2.3/providers/common/securitycheck_default.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/common/securitycheck_default.c
|
||||
+++ openssl-3.2.3/providers/common/securitycheck_default.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <openssl/obj_mac.h>
|
||||
#include "prov/securitycheck.h"
|
||||
#include "internal/nelem.h"
|
||||
+#include "internal/sslconf.h"
|
||||
|
||||
/* Disable the security checks in the default provider */
|
||||
int ossl_securitycheck_enabled(OSSL_LIB_CTX *libctx)
|
||||
@@ -29,9 +30,10 @@ int ossl_tls1_prf_ems_check_enabled(OSSL
|
||||
}
|
||||
|
||||
int ossl_digest_rsa_sign_get_md_nid(OSSL_LIB_CTX *ctx, const EVP_MD *md,
|
||||
- ossl_unused int sha1_allowed)
|
||||
+ int sha1_allowed)
|
||||
{
|
||||
int mdnid;
|
||||
+ int ldsigs_allowed;
|
||||
|
||||
static const OSSL_ITEM name_to_nid[] = {
|
||||
{ NID_md5, OSSL_DIGEST_NAME_MD5 },
|
||||
@@ -42,8 +44,11 @@ int ossl_digest_rsa_sign_get_md_nid(OSSL
|
||||
{ NID_ripemd160, OSSL_DIGEST_NAME_RIPEMD160 },
|
||||
};
|
||||
|
||||
- mdnid = ossl_digest_get_approved_nid_with_sha1(ctx, md, 1);
|
||||
+ ldsigs_allowed = ossl_ctx_legacy_digest_signatures_allowed(ctx, 0);
|
||||
+ mdnid = ossl_digest_get_approved_nid_with_sha1(ctx, md, sha1_allowed || ldsigs_allowed);
|
||||
if (mdnid == NID_undef)
|
||||
mdnid = ossl_digest_md_to_nid(md, name_to_nid, OSSL_NELEM(name_to_nid));
|
||||
+ if (mdnid == NID_md5_sha1 && !ldsigs_allowed)
|
||||
+ mdnid = -1;
|
||||
return mdnid;
|
||||
}
|
||||
Index: openssl-3.2.3/providers/implementations/signature/dsa_sig.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/signature/dsa_sig.c
|
||||
+++ openssl-3.2.3/providers/implementations/signature/dsa_sig.c
|
||||
@@ -125,12 +125,17 @@ static int dsa_setup_md(PROV_DSA_CTX *ct
|
||||
mdprops = ctx->propq;
|
||||
|
||||
if (mdname != NULL) {
|
||||
- int sha1_allowed = (ctx->operation != EVP_PKEY_OP_SIGN);
|
||||
WPACKET pkt;
|
||||
EVP_MD *md = EVP_MD_fetch(ctx->libctx, mdname, mdprops);
|
||||
- int md_nid = ossl_digest_get_approved_nid_with_sha1(ctx->libctx, md,
|
||||
- sha1_allowed);
|
||||
+ int md_nid;
|
||||
size_t mdname_len = strlen(mdname);
|
||||
+#ifdef FIPS_MODULE
|
||||
+ int sha1_allowed = (ctx->operation != EVP_PKEY_OP_SIGN);
|
||||
+#else
|
||||
+ int sha1_allowed = 0;
|
||||
+#endif
|
||||
+ md_nid = ossl_digest_get_approved_nid_with_sha1(ctx->libctx, md,
|
||||
+ sha1_allowed);
|
||||
|
||||
if (md == NULL || md_nid < 0) {
|
||||
if (md == NULL)
|
||||
Index: openssl-3.2.3/providers/implementations/signature/ecdsa_sig.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/signature/ecdsa_sig.c
|
||||
+++ openssl-3.2.3/providers/implementations/signature/ecdsa_sig.c
|
||||
@@ -247,7 +247,11 @@ static int ecdsa_setup_md(PROV_ECDSA_CTX
|
||||
"%s could not be fetched", mdname);
|
||||
return 0;
|
||||
}
|
||||
+#ifdef FIPS_MODULE
|
||||
sha1_allowed = (ctx->operation != EVP_PKEY_OP_SIGN);
|
||||
+#else
|
||||
+ sha1_allowed = 0;
|
||||
+#endif
|
||||
md_nid = ossl_digest_get_approved_nid_with_sha1(ctx->libctx, md,
|
||||
sha1_allowed);
|
||||
if (md_nid < 0) {
|
||||
Index: openssl-3.2.3/providers/implementations/signature/rsa_sig.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/signature/rsa_sig.c
|
||||
+++ openssl-3.2.3/providers/implementations/signature/rsa_sig.c
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "internal/cryptlib.h"
|
||||
#include "internal/nelem.h"
|
||||
#include "internal/sizes.h"
|
||||
+#include "internal/sslconf.h"
|
||||
#include "crypto/rsa.h"
|
||||
#include "prov/providercommon.h"
|
||||
#include "prov/implementations.h"
|
||||
@@ -33,6 +34,7 @@
|
||||
#include "prov/securitycheck.h"
|
||||
|
||||
#define RSA_DEFAULT_DIGEST_NAME OSSL_DIGEST_NAME_SHA1
|
||||
+#define RSA_DEFAULT_DIGEST_NAME_NONLEGACY OSSL_DIGEST_NAME_SHA2_256
|
||||
|
||||
OSSL_FUNC_signature_newctx_fn rsa_newctx;
|
||||
static OSSL_FUNC_signature_sign_init_fn rsa_sign_init;
|
||||
@@ -317,10 +319,15 @@ static int rsa_setup_md(PROV_RSA_CTX *ct
|
||||
|
||||
if (mdname != NULL) {
|
||||
EVP_MD *md = EVP_MD_fetch(ctx->libctx, mdname, mdprops);
|
||||
+ int md_nid;
|
||||
+ size_t mdname_len = strlen(mdname);
|
||||
+#ifdef FIPS_MODULE
|
||||
int sha1_allowed = (ctx->operation != EVP_PKEY_OP_SIGN);
|
||||
- int md_nid = ossl_digest_rsa_sign_get_md_nid(ctx->libctx, md,
|
||||
+#else
|
||||
+ int sha1_allowed = 0;
|
||||
+#endif
|
||||
+ md_nid = ossl_digest_rsa_sign_get_md_nid(ctx->libctx, md,
|
||||
sha1_allowed);
|
||||
- size_t mdname_len = strlen(mdname);
|
||||
|
||||
if (md == NULL
|
||||
|| md_nid <= 0
|
||||
@@ -1408,8 +1415,15 @@ static int rsa_set_ctx_params(void *vprs
|
||||
prsactx->pad_mode = pad_mode;
|
||||
|
||||
if (prsactx->md == NULL && pmdname == NULL
|
||||
- && pad_mode == RSA_PKCS1_PSS_PADDING)
|
||||
+ && pad_mode == RSA_PKCS1_PSS_PADDING) {
|
||||
pmdname = RSA_DEFAULT_DIGEST_NAME;
|
||||
+#ifndef FIPS_MODULE
|
||||
+ if (!ossl_ctx_legacy_digest_signatures_allowed(prsactx->libctx, 0)) {
|
||||
+ pmdname = RSA_DEFAULT_DIGEST_NAME_NONLEGACY;
|
||||
+ }
|
||||
+#endif
|
||||
+ }
|
||||
+
|
||||
|
||||
if (pmgf1mdname != NULL
|
||||
&& !rsa_setup_mgf1_md(prsactx, pmgf1mdname, pmgf1mdprops))
|
||||
Index: openssl-3.2.3/ssl/t1_lib.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/ssl/t1_lib.c
|
||||
+++ openssl-3.2.3/ssl/t1_lib.c
|
||||
@@ -20,6 +20,7 @@
|
||||
#include <openssl/bn.h>
|
||||
#include <openssl/provider.h>
|
||||
#include <openssl/param_build.h>
|
||||
+#include "internal/sslconf.h"
|
||||
#include "internal/nelem.h"
|
||||
#include "internal/sizes.h"
|
||||
#include "internal/tlsgroups.h"
|
||||
@@ -1508,6 +1509,7 @@ int ssl_setup_sigalgs(SSL_CTX *ctx)
|
||||
uint16_t *tls12_sigalgs_list = NULL;
|
||||
EVP_PKEY *tmpkey = EVP_PKEY_new();
|
||||
int ret = 0;
|
||||
+ int ldsigs_allowed;
|
||||
|
||||
if (ctx == NULL)
|
||||
goto err;
|
||||
@@ -1523,6 +1525,7 @@ int ssl_setup_sigalgs(SSL_CTX *ctx)
|
||||
goto err;
|
||||
|
||||
ERR_set_mark();
|
||||
+ ldsigs_allowed = ossl_ctx_legacy_digest_signatures_allowed(ctx->libctx, 0);
|
||||
/* First fill cache and tls12_sigalgs list from legacy algorithm list */
|
||||
for (i = 0, lu = sigalg_lookup_tbl;
|
||||
i < OSSL_NELEM(sigalg_lookup_tbl); lu++, i++) {
|
||||
@@ -1544,6 +1547,11 @@ int ssl_setup_sigalgs(SSL_CTX *ctx)
|
||||
cache[i].enabled = 0;
|
||||
continue;
|
||||
}
|
||||
+ if ((lu->hash == NID_sha1 || lu->hash == NID_md5_sha1)
|
||||
+ && !ldsigs_allowed) {
|
||||
+ cache[i].enabled = 0;
|
||||
+ continue;
|
||||
+ }
|
||||
|
||||
if (!EVP_PKEY_set_type(tmpkey, lu->sig)) {
|
||||
cache[i].enabled = 0;
|
||||
Index: openssl-3.2.3/util/libcrypto.num
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/util/libcrypto.num
|
||||
+++ openssl-3.2.3/util/libcrypto.num
|
||||
@@ -5537,3 +5537,5 @@ X509_STORE_CTX_set_current_reasons
|
||||
OSSL_STORE_delete 5665 3_2_0 EXIST::FUNCTION:
|
||||
BIO_ADDR_copy 5666 3_2_0 EXIST::FUNCTION:SOCK
|
||||
ossl_safe_getenv ? 3_2_0 EXIST::FUNCTION:
|
||||
+ossl_ctx_legacy_digest_signatures_allowed ? 3_0_1 EXIST::FUNCTION:
|
||||
+ossl_ctx_legacy_digest_signatures_allowed_set ? 3_0_1 EXIST::FUNCTION:
|
@@ -1,11 +1,29 @@
|
||||
From 590babb35e3aa399c889282747965e301333a656 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Belyavskiy <dbelyavs@redhat.com>
|
||||
Date: Mon, 21 Aug 2023 16:07:18 +0200
|
||||
Subject: [PATCH 43/48]
|
||||
0093-DH-Disable-FIPS-186-4-type-parameters-in-FIPS-mode.patch
|
||||
From 89dbaf8a756111a530f6422679b59bf134acfd66 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Wed, 6 Mar 2024 19:17:17 +0100
|
||||
Subject: [PATCH 39/53] FIPS: DH: Disable FIPS 186-4 type parameters
|
||||
|
||||
Patch-name: 0093-DH-Disable-FIPS-186-4-type-parameters-in-FIPS-mode.patch
|
||||
Patch-id: 93
|
||||
For DH parameter and key pair generation/verification, the DSA
|
||||
procedures specified in FIPS 186-4 are used. With the release of FIPS
|
||||
186-5 and the removal of DSA, the approved status of these groups is in
|
||||
peril. Once the transition for DSA ends (this transition will be 1 year
|
||||
long and start once CMVP has published the guidance), no more
|
||||
submissions claiming DSA will be allowed. Hence, FIPS 186-type
|
||||
parameters will also be automatically non-approved.
|
||||
|
||||
In the FIPS provider, disable validation of any DH parameters that are
|
||||
not well-known groups, and remove DH parameter generation completely.
|
||||
|
||||
Adjust tests to use well-known groups or larger DH groups where this
|
||||
change would now cause failures, and skip tests that are expected to
|
||||
fail due to this change.
|
||||
|
||||
Related: rhbz#2169757, rhbz#2169757
|
||||
Signed-off-by: Clemens Lang <cllang@redhat.com>
|
||||
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
|
||||
NOTE: Dropped changes in test/recipes/80-test_cms.t
|
||||
---
|
||||
crypto/dh/dh_backend.c | 10 ++++
|
||||
crypto/dh/dh_check.c | 12 ++--
|
||||
@@ -17,14 +35,13 @@ Patch-id: 93
|
||||
test/evp_libctx_test.c | 2 +-
|
||||
test/helpers/predefined_dhparams.c | 62 ++++++++++++++++++++
|
||||
test/helpers/predefined_dhparams.h | 1 +
|
||||
test/recipes/80-test_cms.t | 4 +-
|
||||
test/recipes/80-test_ssl_old.t | 3 +
|
||||
12 files changed, 118 insertions(+), 20 deletions(-)
|
||||
11 files changed, 116 insertions(+), 18 deletions(-)
|
||||
|
||||
Index: openssl-3.2.4/crypto/dh/dh_backend.c
|
||||
Index: openssl-3.5.0-beta1/crypto/dh/dh_backend.c
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/crypto/dh/dh_backend.c
|
||||
+++ openssl-3.2.4/crypto/dh/dh_backend.c
|
||||
--- openssl-3.5.0-beta1.orig/crypto/dh/dh_backend.c
|
||||
+++ openssl-3.5.0-beta1/crypto/dh/dh_backend.c
|
||||
@@ -47,6 +47,16 @@ int ossl_dh_params_fromdata(DH *dh, cons
|
||||
if (!dh_ffc_params_fromdata(dh, params))
|
||||
return 0;
|
||||
@@ -42,10 +59,10 @@ Index: openssl-3.2.4/crypto/dh/dh_backend.c
|
||||
param_priv_len =
|
||||
OSSL_PARAM_locate_const(params, OSSL_PKEY_PARAM_DH_PRIV_LEN);
|
||||
if (param_priv_len != NULL
|
||||
Index: openssl-3.2.4/crypto/dh/dh_check.c
|
||||
Index: openssl-3.5.0-beta1/crypto/dh/dh_check.c
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/crypto/dh/dh_check.c
|
||||
+++ openssl-3.2.4/crypto/dh/dh_check.c
|
||||
--- openssl-3.5.0-beta1.orig/crypto/dh/dh_check.c
|
||||
+++ openssl-3.5.0-beta1/crypto/dh/dh_check.c
|
||||
@@ -57,13 +57,15 @@ int DH_check_params(const DH *dh, int *r
|
||||
nid = DH_get_nid((DH *)dh);
|
||||
if (nid != NID_undef)
|
||||
@@ -67,10 +84,10 @@ Index: openssl-3.2.4/crypto/dh/dh_check.c
|
||||
}
|
||||
#else
|
||||
int DH_check_params(const DH *dh, int *ret)
|
||||
Index: openssl-3.2.4/crypto/dh/dh_gen.c
|
||||
Index: openssl-3.5.0-beta1/crypto/dh/dh_gen.c
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/crypto/dh/dh_gen.c
|
||||
+++ openssl-3.2.4/crypto/dh/dh_gen.c
|
||||
--- openssl-3.5.0-beta1.orig/crypto/dh/dh_gen.c
|
||||
+++ openssl-3.5.0-beta1/crypto/dh/dh_gen.c
|
||||
@@ -39,18 +39,26 @@ static int dh_builtin_genparams(DH *ret,
|
||||
int ossl_dh_generate_ffc_parameters(DH *dh, int type, int pbits, int qbits,
|
||||
BN_GENCB *cb)
|
||||
@@ -100,10 +117,10 @@ Index: openssl-3.2.4/crypto/dh/dh_gen.c
|
||||
if (ret > 0)
|
||||
dh->dirty_cnt++;
|
||||
return ret;
|
||||
Index: openssl-3.2.4/crypto/dh/dh_key.c
|
||||
Index: openssl-3.5.0-beta1/crypto/dh/dh_key.c
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/crypto/dh/dh_key.c
|
||||
+++ openssl-3.2.4/crypto/dh/dh_key.c
|
||||
--- openssl-3.5.0-beta1.orig/crypto/dh/dh_key.c
|
||||
+++ openssl-3.5.0-beta1/crypto/dh/dh_key.c
|
||||
@@ -336,8 +336,12 @@ static int generate_key(DH *dh)
|
||||
goto err;
|
||||
} else {
|
||||
@@ -138,10 +155,10 @@ Index: openssl-3.2.4/crypto/dh/dh_key.c
|
||||
}
|
||||
}
|
||||
|
||||
Index: openssl-3.2.4/crypto/dh/dh_pmeth.c
|
||||
Index: openssl-3.5.0-beta1/crypto/dh/dh_pmeth.c
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/crypto/dh/dh_pmeth.c
|
||||
+++ openssl-3.2.4/crypto/dh/dh_pmeth.c
|
||||
--- openssl-3.5.0-beta1.orig/crypto/dh/dh_pmeth.c
|
||||
+++ openssl-3.5.0-beta1/crypto/dh/dh_pmeth.c
|
||||
@@ -303,13 +303,17 @@ static DH *ffc_params_generate(OSSL_LIB_
|
||||
prime_len, subprime_len, &res,
|
||||
pcb);
|
||||
@@ -163,11 +180,11 @@ Index: openssl-3.2.4/crypto/dh/dh_pmeth.c
|
||||
if (rv <= 0) {
|
||||
DH_free(ret);
|
||||
return NULL;
|
||||
Index: openssl-3.2.4/providers/implementations/keymgmt/dh_kmgmt.c
|
||||
Index: openssl-3.5.0-beta1/providers/implementations/keymgmt/dh_kmgmt.c
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/providers/implementations/keymgmt/dh_kmgmt.c
|
||||
+++ openssl-3.2.4/providers/implementations/keymgmt/dh_kmgmt.c
|
||||
@@ -417,6 +417,11 @@ static int dh_validate(const void *keyda
|
||||
--- openssl-3.5.0-beta1.orig/providers/implementations/keymgmt/dh_kmgmt.c
|
||||
+++ openssl-3.5.0-beta1/providers/implementations/keymgmt/dh_kmgmt.c
|
||||
@@ -420,6 +420,11 @@ static int dh_validate(const void *keyda
|
||||
if ((selection & DH_POSSIBLE_SELECTIONS) == 0)
|
||||
return 1; /* nothing to validate */
|
||||
|
||||
@@ -179,11 +196,11 @@ Index: openssl-3.2.4/providers/implementations/keymgmt/dh_kmgmt.c
|
||||
if ((selection & OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS) != 0) {
|
||||
/*
|
||||
* Both of these functions check parameters. DH_check_params_ex()
|
||||
Index: openssl-3.2.4/test/endecode_test.c
|
||||
Index: openssl-3.5.0-beta1/test/endecode_test.c
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/test/endecode_test.c
|
||||
+++ openssl-3.2.4/test/endecode_test.c
|
||||
@@ -84,10 +84,10 @@ static EVP_PKEY *make_template(const cha
|
||||
--- openssl-3.5.0-beta1.orig/test/endecode_test.c
|
||||
+++ openssl-3.5.0-beta1/test/endecode_test.c
|
||||
@@ -85,10 +85,10 @@ static EVP_PKEY *make_template(const cha
|
||||
* for testing only. Use a minimum key size of 2048 for security purposes.
|
||||
*/
|
||||
if (strcmp(type, "DH") == 0)
|
||||
@@ -196,11 +213,11 @@ Index: openssl-3.2.4/test/endecode_test.c
|
||||
# endif
|
||||
|
||||
/*
|
||||
Index: openssl-3.2.4/test/evp_libctx_test.c
|
||||
Index: openssl-3.5.0-beta1/test/evp_libctx_test.c
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/test/evp_libctx_test.c
|
||||
+++ openssl-3.2.4/test/evp_libctx_test.c
|
||||
@@ -189,7 +189,7 @@ static int do_dh_param_keygen(int tstid,
|
||||
--- openssl-3.5.0-beta1.orig/test/evp_libctx_test.c
|
||||
+++ openssl-3.5.0-beta1/test/evp_libctx_test.c
|
||||
@@ -222,7 +222,7 @@ static int do_dh_param_keygen(int tstid,
|
||||
|
||||
if (!TEST_ptr(gen_ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey_parm, NULL))
|
||||
|| !TEST_int_gt(EVP_PKEY_keygen_init(gen_ctx), 0)
|
||||
@@ -209,17 +226,17 @@ Index: openssl-3.2.4/test/evp_libctx_test.c
|
||||
goto err;
|
||||
|
||||
if (expected) {
|
||||
Index: openssl-3.2.4/test/helpers/predefined_dhparams.c
|
||||
Index: openssl-3.5.0-beta1/test/helpers/predefined_dhparams.c
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/test/helpers/predefined_dhparams.c
|
||||
+++ openssl-3.2.4/test/helpers/predefined_dhparams.c
|
||||
--- openssl-3.5.0-beta1.orig/test/helpers/predefined_dhparams.c
|
||||
+++ openssl-3.5.0-beta1/test/helpers/predefined_dhparams.c
|
||||
@@ -116,6 +116,68 @@ EVP_PKEY *get_dhx512(OSSL_LIB_CTX *libct
|
||||
dhx512_q, sizeof(dhx512_q));
|
||||
}
|
||||
|
||||
+EVP_PKEY *get_dhx_ffdhe2048(OSSL_LIB_CTX *libctx)
|
||||
+{
|
||||
+ /* This is RFC 7919 ffdhe2048, since Red Hat removes support for
|
||||
+ /* This is RFC 7919 ffdhe2048, since SUSE/openSUSE removes support for
|
||||
+ * non-well-known groups in FIPS mode. */
|
||||
+ static unsigned char dhx_p[] = {
|
||||
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xad, 0xf8, 0x54, 0x58,
|
||||
@@ -282,10 +299,10 @@ Index: openssl-3.2.4/test/helpers/predefined_dhparams.c
|
||||
EVP_PKEY *get_dh1024dsa(OSSL_LIB_CTX *libctx)
|
||||
{
|
||||
static unsigned char dh1024_p[] = {
|
||||
Index: openssl-3.2.4/test/helpers/predefined_dhparams.h
|
||||
Index: openssl-3.5.0-beta1/test/helpers/predefined_dhparams.h
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/test/helpers/predefined_dhparams.h
|
||||
+++ openssl-3.2.4/test/helpers/predefined_dhparams.h
|
||||
--- openssl-3.5.0-beta1.orig/test/helpers/predefined_dhparams.h
|
||||
+++ openssl-3.5.0-beta1/test/helpers/predefined_dhparams.h
|
||||
@@ -12,6 +12,7 @@
|
||||
#ifndef OPENSSL_NO_DH
|
||||
EVP_PKEY *get_dh512(OSSL_LIB_CTX *libctx);
|
||||
@@ -294,28 +311,11 @@ Index: openssl-3.2.4/test/helpers/predefined_dhparams.h
|
||||
EVP_PKEY *get_dh1024dsa(OSSL_LIB_CTX *libct);
|
||||
EVP_PKEY *get_dh2048(OSSL_LIB_CTX *libctx);
|
||||
EVP_PKEY *get_dh4096(OSSL_LIB_CTX *libctx);
|
||||
Index: openssl-3.2.4/test/recipes/80-test_cms.t
|
||||
Index: openssl-3.5.0-beta1/test/recipes/80-test_ssl_old.t
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/test/recipes/80-test_cms.t
|
||||
+++ openssl-3.2.4/test/recipes/80-test_cms.t
|
||||
@@ -647,10 +647,10 @@ if ($no_fips || $old_fips) {
|
||||
# Only SHA1 supported in dh_cms_encrypt()
|
||||
push(@smime_cms_param_tests,
|
||||
[ "enveloped content test streaming S/MIME format, X9.42 DH",
|
||||
- [ "{cmd1}", @prov, "-encrypt", "-in", $smcont,
|
||||
+ [ "{cmd1}", @defaultprov, "-encrypt", "-in", $smcont,
|
||||
"-stream", "-out", "{output}.cms",
|
||||
"-recip", catfile($smdir, "smdh.pem"), "-aes128" ],
|
||||
- [ "{cmd2}", @prov, "-decrypt", "-recip", catfile($smdir, "smdh.pem"),
|
||||
+ [ "{cmd2}", @defaultprov, "-decrypt", "-recip", catfile($smdir, "smdh.pem"),
|
||||
"-in", "{output}.cms", "-out", "{output}.txt" ],
|
||||
\&final_compare
|
||||
]
|
||||
Index: openssl-3.2.4/test/recipes/80-test_ssl_old.t
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/test/recipes/80-test_ssl_old.t
|
||||
+++ openssl-3.2.4/test/recipes/80-test_ssl_old.t
|
||||
@@ -390,6 +390,9 @@ sub testssl {
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/80-test_ssl_old.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/80-test_ssl_old.t
|
||||
@@ -458,6 +458,9 @@ sub testssl {
|
||||
skip "skipping dhe1024dsa test", 1
|
||||
if ($no_dh);
|
||||
|
||||
|
@@ -1,14 +1,14 @@
|
||||
From 91bdd9b816b22bc1464ec323f3272b866b24114d Mon Sep 17 00:00:00 2001
|
||||
From 9cc542ae6077ca689f7fe2f7e64edb4bb9d72f7f Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Mon, 31 Jul 2023 09:41:28 +0200
|
||||
Subject: [PATCH 12/35] 0012-Disable-explicit-ec.patch
|
||||
Date: Wed, 6 Mar 2024 19:17:15 +0100
|
||||
Subject: [PATCH 12/53] RH: Disable explicit ec curves
|
||||
|
||||
Patch-name: 0012-Disable-explicit-ec.patch
|
||||
Patch-id: 12
|
||||
Patch-status: |
|
||||
# Disable explicit EC curves
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2066412
|
||||
From-dist-git-commit: 9409bc7044cf4b5773639cce20f51399888c45fd
|
||||
# # Disable explicit EC curves
|
||||
# # https://bugzilla.redhat.com/show_bug.cgi?id=2066412
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
---
|
||||
crypto/ec/ec_asn1.c | 11 ++++++++++
|
||||
crypto/ec/ec_lib.c | 6 +++++
|
||||
@@ -18,10 +18,10 @@ From-dist-git-commit: 9409bc7044cf4b5773639cce20f51399888c45fd
|
||||
5 files changed, 39 insertions(+), 32 deletions(-)
|
||||
|
||||
diff --git a/crypto/ec/ec_asn1.c b/crypto/ec/ec_asn1.c
|
||||
index 7a0b35a594..d19d57344e 100644
|
||||
index 643d2d8d7b..5895606176 100644
|
||||
--- a/crypto/ec/ec_asn1.c
|
||||
+++ b/crypto/ec/ec_asn1.c
|
||||
@@ -905,6 +905,12 @@ EC_GROUP *d2i_ECPKParameters(EC_GROUP **a, const unsigned char **in, long len)
|
||||
@@ -901,6 +901,12 @@ EC_GROUP *d2i_ECPKParameters(EC_GROUP **a, const unsigned char **in, long len)
|
||||
if (params->type == ECPKPARAMETERS_TYPE_EXPLICIT)
|
||||
group->decoded_from_explicit_params = 1;
|
||||
|
||||
@@ -34,7 +34,7 @@ index 7a0b35a594..d19d57344e 100644
|
||||
if (a) {
|
||||
EC_GROUP_free(*a);
|
||||
*a = group;
|
||||
@@ -964,6 +970,11 @@ EC_KEY *d2i_ECPrivateKey(EC_KEY **a, const unsigned char **in, long len)
|
||||
@@ -960,6 +966,11 @@ EC_KEY *d2i_ECPrivateKey(EC_KEY **a, const unsigned char **in, long len)
|
||||
goto err;
|
||||
}
|
||||
|
||||
@@ -47,10 +47,10 @@ index 7a0b35a594..d19d57344e 100644
|
||||
|
||||
if (priv_key->privateKey) {
|
||||
diff --git a/crypto/ec/ec_lib.c b/crypto/ec/ec_lib.c
|
||||
index a84e088c19..6c37bf78ae 100644
|
||||
index b55677fb1f..dcfdef408e 100644
|
||||
--- a/crypto/ec/ec_lib.c
|
||||
+++ b/crypto/ec/ec_lib.c
|
||||
@@ -1724,6 +1724,11 @@ EC_GROUP *EC_GROUP_new_from_params(const OSSL_PARAM params[],
|
||||
@@ -1728,6 +1728,11 @@ EC_GROUP *EC_GROUP_new_from_params(const OSSL_PARAM params[],
|
||||
goto err;
|
||||
}
|
||||
if (named_group == group) {
|
||||
@@ -62,7 +62,7 @@ index a84e088c19..6c37bf78ae 100644
|
||||
/*
|
||||
* If we did not find a named group then the encoding should be explicit
|
||||
* if it was specified
|
||||
@@ -1739,6 +1744,7 @@ EC_GROUP *EC_GROUP_new_from_params(const OSSL_PARAM params[],
|
||||
@@ -1743,6 +1748,7 @@ EC_GROUP *EC_GROUP_new_from_params(const OSSL_PARAM params[],
|
||||
goto err;
|
||||
}
|
||||
EC_GROUP_set_asn1_flag(group, OPENSSL_EC_EXPLICIT_CURVE);
|
||||
@@ -71,10 +71,10 @@ index a84e088c19..6c37bf78ae 100644
|
||||
EC_GROUP_free(group);
|
||||
group = named_group;
|
||||
diff --git a/test/ectest.c b/test/ectest.c
|
||||
index 4890b0555e..e11aec5b3b 100644
|
||||
index 0ddbba3b98..f736d13feb 100644
|
||||
--- a/test/ectest.c
|
||||
+++ b/test/ectest.c
|
||||
@@ -2301,10 +2301,11 @@ static int do_test_custom_explicit_fromdata(EC_GROUP *group, BN_CTX *ctx,
|
||||
@@ -2413,10 +2413,11 @@ static int do_test_custom_explicit_fromdata(EC_GROUP *group, BN_CTX *ctx,
|
||||
if (!TEST_ptr(params = OSSL_PARAM_BLD_to_param(bld))
|
||||
|| !TEST_ptr(pctx = EVP_PKEY_CTX_new_from_name(NULL, "EC", NULL))
|
||||
|| !TEST_int_gt(EVP_PKEY_fromdata_init(pctx), 0)
|
||||
@@ -88,7 +88,7 @@ index 4890b0555e..e11aec5b3b 100644
|
||||
/*- Check that all the set values are retrievable -*/
|
||||
|
||||
/* There should be no match to a group name since the generator changed */
|
||||
@@ -2433,6 +2434,7 @@ static int do_test_custom_explicit_fromdata(EC_GROUP *group, BN_CTX *ctx,
|
||||
@@ -2545,6 +2546,7 @@ static int do_test_custom_explicit_fromdata(EC_GROUP *group, BN_CTX *ctx,
|
||||
#endif
|
||||
)
|
||||
goto err;
|
||||
@@ -96,7 +96,7 @@ index 4890b0555e..e11aec5b3b 100644
|
||||
ret = 1;
|
||||
err:
|
||||
BN_free(order_out);
|
||||
@@ -2714,21 +2716,21 @@ static int custom_params_test(int id)
|
||||
@@ -2826,21 +2828,21 @@ static int custom_params_test(int id)
|
||||
|
||||
/* Compute keyexchange in both directions */
|
||||
if (!TEST_ptr(pctx1 = EVP_PKEY_CTX_new(pkey1, NULL))
|
||||
@@ -125,7 +125,7 @@ index 4890b0555e..e11aec5b3b 100644
|
||||
/* Both sides should expect the same shared secret */
|
||||
if (!TEST_mem_eq(buf1, sslen, buf2, t))
|
||||
goto err;
|
||||
@@ -2780,7 +2782,7 @@ static int custom_params_test(int id)
|
||||
@@ -2892,7 +2894,7 @@ static int custom_params_test(int id)
|
||||
/* compare with previous result */
|
||||
|| !TEST_mem_eq(buf1, t, buf2, sslen))
|
||||
goto err;
|
||||
@@ -135,10 +135,10 @@ index 4890b0555e..e11aec5b3b 100644
|
||||
|
||||
err:
|
||||
diff --git a/test/endecode_test.c b/test/endecode_test.c
|
||||
index 14648287eb..9a437d8c64 100644
|
||||
index 028deb4ed1..85c84f6592 100644
|
||||
--- a/test/endecode_test.c
|
||||
+++ b/test/endecode_test.c
|
||||
@@ -62,7 +62,7 @@ static BN_CTX *bnctx = NULL;
|
||||
@@ -63,7 +63,7 @@ static BN_CTX *bnctx = NULL;
|
||||
static OSSL_PARAM_BLD *bld_prime_nc = NULL;
|
||||
static OSSL_PARAM_BLD *bld_prime = NULL;
|
||||
static OSSL_PARAM *ec_explicit_prime_params_nc = NULL;
|
||||
@@ -147,7 +147,7 @@ index 14648287eb..9a437d8c64 100644
|
||||
|
||||
# ifndef OPENSSL_NO_EC2M
|
||||
static OSSL_PARAM_BLD *bld_tri_nc = NULL;
|
||||
@@ -1009,9 +1009,9 @@ IMPLEMENT_TEST_SUITE_LEGACY(EC, "EC")
|
||||
@@ -1027,9 +1027,9 @@ IMPLEMENT_TEST_SUITE_LEGACY(EC, "EC")
|
||||
DOMAIN_KEYS(ECExplicitPrimeNamedCurve);
|
||||
IMPLEMENT_TEST_SUITE(ECExplicitPrimeNamedCurve, "EC", 1)
|
||||
IMPLEMENT_TEST_SUITE_LEGACY(ECExplicitPrimeNamedCurve, "EC")
|
||||
@@ -160,7 +160,7 @@ index 14648287eb..9a437d8c64 100644
|
||||
# ifndef OPENSSL_NO_EC2M
|
||||
DOMAIN_KEYS(ECExplicitTriNamedCurve);
|
||||
IMPLEMENT_TEST_SUITE(ECExplicitTriNamedCurve, "EC", 1)
|
||||
@@ -1352,7 +1352,7 @@ int setup_tests(void)
|
||||
@@ -1445,7 +1445,7 @@ int setup_tests(void)
|
||||
|| !create_ec_explicit_prime_params_namedcurve(bld_prime_nc)
|
||||
|| !create_ec_explicit_prime_params(bld_prime)
|
||||
|| !TEST_ptr(ec_explicit_prime_params_nc = OSSL_PARAM_BLD_to_param(bld_prime_nc))
|
||||
@@ -169,7 +169,7 @@ index 14648287eb..9a437d8c64 100644
|
||||
# ifndef OPENSSL_NO_EC2M
|
||||
|| !TEST_ptr(bld_tri_nc = OSSL_PARAM_BLD_new())
|
||||
|| !TEST_ptr(bld_tri = OSSL_PARAM_BLD_new())
|
||||
@@ -1380,7 +1380,7 @@ int setup_tests(void)
|
||||
@@ -1473,7 +1473,7 @@ int setup_tests(void)
|
||||
TEST_info("Generating EC keys...");
|
||||
MAKE_DOMAIN_KEYS(EC, "EC", EC_params);
|
||||
MAKE_DOMAIN_KEYS(ECExplicitPrimeNamedCurve, "EC", ec_explicit_prime_params_nc);
|
||||
@@ -178,7 +178,7 @@ index 14648287eb..9a437d8c64 100644
|
||||
# ifndef OPENSSL_NO_EC2M
|
||||
MAKE_DOMAIN_KEYS(ECExplicitTriNamedCurve, "EC", ec_explicit_tri_params_nc);
|
||||
MAKE_DOMAIN_KEYS(ECExplicitTri2G, "EC", ec_explicit_tri_params_explicit);
|
||||
@@ -1423,8 +1423,8 @@ int setup_tests(void)
|
||||
@@ -1553,8 +1553,8 @@ int setup_tests(void)
|
||||
ADD_TEST_SUITE_LEGACY(EC);
|
||||
ADD_TEST_SUITE(ECExplicitPrimeNamedCurve);
|
||||
ADD_TEST_SUITE_LEGACY(ECExplicitPrimeNamedCurve);
|
||||
@@ -189,7 +189,7 @@ index 14648287eb..9a437d8c64 100644
|
||||
# ifndef OPENSSL_NO_EC2M
|
||||
ADD_TEST_SUITE(ECExplicitTriNamedCurve);
|
||||
ADD_TEST_SUITE_LEGACY(ECExplicitTriNamedCurve);
|
||||
@@ -1461,7 +1461,7 @@ void cleanup_tests(void)
|
||||
@@ -1631,7 +1631,7 @@ void cleanup_tests(void)
|
||||
{
|
||||
#ifndef OPENSSL_NO_EC
|
||||
OSSL_PARAM_free(ec_explicit_prime_params_nc);
|
||||
@@ -198,7 +198,7 @@ index 14648287eb..9a437d8c64 100644
|
||||
OSSL_PARAM_BLD_free(bld_prime_nc);
|
||||
OSSL_PARAM_BLD_free(bld_prime);
|
||||
# ifndef OPENSSL_NO_EC2M
|
||||
@@ -1483,7 +1483,7 @@ void cleanup_tests(void)
|
||||
@@ -1653,7 +1653,7 @@ void cleanup_tests(void)
|
||||
#ifndef OPENSSL_NO_EC
|
||||
FREE_DOMAIN_KEYS(EC);
|
||||
FREE_DOMAIN_KEYS(ECExplicitPrimeNamedCurve);
|
||||
@@ -208,7 +208,7 @@ index 14648287eb..9a437d8c64 100644
|
||||
FREE_DOMAIN_KEYS(ECExplicitTriNamedCurve);
|
||||
FREE_DOMAIN_KEYS(ECExplicitTri2G);
|
||||
diff --git a/test/recipes/30-test_evp_data/evppkey_ecdsa.txt b/test/recipes/30-test_evp_data/evppkey_ecdsa.txt
|
||||
index ec3c032aba..584ecee0eb 100644
|
||||
index 54b143bead..06ec905be0 100644
|
||||
--- a/test/recipes/30-test_evp_data/evppkey_ecdsa.txt
|
||||
+++ b/test/recipes/30-test_evp_data/evppkey_ecdsa.txt
|
||||
@@ -133,18 +133,6 @@ AAAA//////////+85vqtpxeehPO5ysL8YyVRAgEBBG0wawIBAQQgiUTxtr5vLVjj
|
||||
@@ -231,5 +231,5 @@ index ec3c032aba..584ecee0eb 100644
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUDnQW0mLiHVha/jqFznX/K
|
||||
--
|
||||
2.41.0
|
||||
2.49.0
|
||||
|
||||
|
@@ -1,137 +0,0 @@
|
||||
Index: openssl-3.2.3/crypto/rand/prov_seed.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/rand/prov_seed.c
|
||||
+++ openssl-3.2.3/crypto/rand/prov_seed.c
|
||||
@@ -23,7 +23,14 @@ size_t ossl_rand_get_entropy(ossl_unused
|
||||
size_t entropy_available;
|
||||
RAND_POOL *pool;
|
||||
|
||||
- pool = ossl_rand_pool_new(entropy, 1, min_len, max_len);
|
||||
+ /*
|
||||
+ * OpenSSL still implements an internal entropy pool of
|
||||
+ * some size that is hashed to get seed data.
|
||||
+ * Note that this is a conditioning step for which SP800-90C requires
|
||||
+ * 64 additional bits from the entropy source to claim the requested
|
||||
+ * amount of entropy.
|
||||
+ */
|
||||
+ pool = ossl_rand_pool_new(entropy + 64, 1, min_len, max_len);
|
||||
if (pool == NULL) {
|
||||
ERR_raise(ERR_LIB_RAND, ERR_R_RAND_LIB);
|
||||
return 0;
|
||||
Index: openssl-3.2.3/crypto/rand/rand_lib.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/rand/rand_lib.c
|
||||
+++ openssl-3.2.3/crypto/rand/rand_lib.c
|
||||
@@ -723,15 +723,7 @@ EVP_RAND_CTX *RAND_get0_primary(OSSL_LIB
|
||||
return ret;
|
||||
}
|
||||
|
||||
-#ifndef FIPS_MODULE
|
||||
- if (dgbl->seed == NULL) {
|
||||
- ERR_set_mark();
|
||||
- dgbl->seed = rand_new_seed(ctx);
|
||||
- ERR_pop_to_mark();
|
||||
- }
|
||||
-#endif
|
||||
-
|
||||
- ret = dgbl->primary = rand_new_drbg(ctx, dgbl->seed,
|
||||
+ ret = dgbl->primary = rand_new_drbg(ctx, NULL,
|
||||
PRIMARY_RESEED_INTERVAL,
|
||||
PRIMARY_RESEED_TIME_INTERVAL, 1);
|
||||
/*
|
||||
Index: openssl-3.2.3/providers/implementations/rands/crngt.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/rands/crngt.c
|
||||
+++ openssl-3.2.3/providers/implementations/rands/crngt.c
|
||||
@@ -133,7 +133,11 @@ size_t ossl_crngt_get_entropy(PROV_DRBG
|
||||
* to the nearest byte. If the entropy is of less than full quality,
|
||||
* the amount required should be scaled up appropriately here.
|
||||
*/
|
||||
- bytes_needed = (entropy + 7) / 8;
|
||||
+ /*
|
||||
+ * FIPS 140-3: the yet draft SP800-90C requires requested entropy
|
||||
+ * + 128 bits during initial seeding
|
||||
+ */
|
||||
+ bytes_needed = (entropy + 128 + 7) / 8;
|
||||
if (bytes_needed < min_len)
|
||||
bytes_needed = min_len;
|
||||
if (bytes_needed > max_len)
|
||||
Index: openssl-3.2.3/providers/implementations/rands/drbg.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/rands/drbg.c
|
||||
+++ openssl-3.2.3/providers/implementations/rands/drbg.c
|
||||
@@ -569,6 +569,9 @@ static int ossl_prov_drbg_reseed_unlocke
|
||||
#endif
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+ prediction_resistance = 1;
|
||||
+#endif
|
||||
/* Reseed using our sources in addition */
|
||||
entropylen = get_entropy(drbg, &entropy, drbg->strength,
|
||||
drbg->min_entropylen, drbg->max_entropylen,
|
||||
@@ -690,8 +693,14 @@ int ossl_prov_drbg_generate(PROV_DRBG *d
|
||||
reseed_required = 1;
|
||||
}
|
||||
if (drbg->parent != NULL
|
||||
- && get_parent_reseed_count(drbg) != drbg->parent_reseed_counter)
|
||||
+ && get_parent_reseed_count(drbg) != drbg->parent_reseed_counter) {
|
||||
+#ifdef FIPS_MODULE
|
||||
+ /* SUSE patches provide chain reseeding when necessary so just sync counters*/
|
||||
+ drbg->parent_reseed_counter = get_parent_reseed_count(drbg);
|
||||
+#else
|
||||
reseed_required = 1;
|
||||
+#endif
|
||||
+ }
|
||||
|
||||
if (reseed_required || prediction_resistance) {
|
||||
if (!ossl_prov_drbg_reseed_unlocked(drbg, prediction_resistance, NULL,
|
||||
Index: openssl-3.2.3/providers/implementations/rands/drbg_local.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/rands/drbg_local.h
|
||||
+++ openssl-3.2.3/providers/implementations/rands/drbg_local.h
|
||||
@@ -38,7 +38,7 @@
|
||||
*
|
||||
* The value is in bytes.
|
||||
*/
|
||||
-#define CRNGT_BUFSIZ 16
|
||||
+#define CRNGT_BUFSIZ 32
|
||||
|
||||
/*
|
||||
* Maximum input size for the DRBG (entropy, nonce, personalization string)
|
||||
Index: openssl-3.2.3/providers/implementations/rands/seed_src.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/rands/seed_src.c
|
||||
+++ openssl-3.2.3/providers/implementations/rands/seed_src.c
|
||||
@@ -102,7 +102,14 @@ static int seed_src_generate(void *vseed
|
||||
return 0;
|
||||
}
|
||||
|
||||
- pool = ossl_rand_pool_new(strength, 1, outlen, outlen);
|
||||
+ /*
|
||||
+ * OpenSSL still implements an internal entropy pool of
|
||||
+ * some size that is hashed to get seed data.
|
||||
+ * Note that this is a conditioning step for which SP800-90C requires
|
||||
+ * 64 additional bits from the entropy source to claim the requested
|
||||
+ * amount of entropy.
|
||||
+ */
|
||||
+ pool = ossl_rand_pool_new(strength + 64, 1, outlen, outlen);
|
||||
if (pool == NULL) {
|
||||
ERR_raise(ERR_LIB_PROV, ERR_R_RAND_LIB);
|
||||
return 0;
|
||||
@@ -182,7 +189,14 @@ static size_t seed_get_seed(void *vseed,
|
||||
size_t i;
|
||||
RAND_POOL *pool;
|
||||
|
||||
- pool = ossl_rand_pool_new(entropy, 1, min_len, max_len);
|
||||
+ /*
|
||||
+ * OpenSSL still implements an internal entropy pool of
|
||||
+ * some size that is hashed to get seed data.
|
||||
+ * Note that this is a conditioning step for which SP800-90C requires
|
||||
+ * 64 additional bits from the entropy source to claim the requested
|
||||
+ * amount of entropy.
|
||||
+ */
|
||||
+ pool = ossl_rand_pool_new(entropy + 64, 1, min_len, max_len);
|
||||
if (pool == NULL) {
|
||||
ERR_raise(ERR_LIB_PROV, ERR_R_RAND_LIB);
|
||||
return 0;
|
@@ -1,28 +1,162 @@
|
||||
From 4512f620199126e6b87433ef184f0450652ee28a Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Belyavskiy <dbelyavs@redhat.com>
|
||||
Date: Thu, 4 Apr 2024 11:42:18 +0200
|
||||
Subject: [PATCH 19/50] 0044-FIPS-140-3-keychecks.patch
|
||||
From 36d037a91a3ad76988c4495547c2bca33b525811 Mon Sep 17 00:00:00 2001
|
||||
From: Simo Sorce <simo@redhat.com>
|
||||
Date: Mon, 24 Mar 2025 10:50:37 -0400
|
||||
Subject: [PATCH 27/53] FIPS: RSA: PCTs
|
||||
|
||||
Patch-name: 0044-FIPS-140-3-keychecks.patch
|
||||
Patch-id: 44
|
||||
Patch-status: |
|
||||
# Extra public/private key checks required by FIPS-140-3
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
Signed-off-by: Simo Sorce <simo@redhat.com>
|
||||
---
|
||||
crypto/dh/dh_key.c | 26 ++++++++++
|
||||
crypto/rsa/rsa_gen.c | 3 ++
|
||||
.../implementations/exchange/ecdh_exch.c | 19 ++++++++
|
||||
providers/implementations/keymgmt/ec_kmgmt.c | 24 +++++++++-
|
||||
providers/implementations/keymgmt/rsa_kmgmt.c | 18 +++++++
|
||||
.../implementations/signature/ecdsa_sig.c | 37 +++++++++++++--
|
||||
providers/implementations/signature/rsa_sig.c | 47 +++++++++++++++++--
|
||||
7 files changed, 165 insertions(+), 9 deletions(-)
|
||||
2 files changed, 61 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/crypto/dh/dh_key.c b/crypto/dh/dh_key.c
|
||||
index 7132b9b68e..189bfc3e8b 100644
|
||||
--- a/crypto/dh/dh_key.c
|
||||
+++ b/crypto/dh/dh_key.c
|
||||
@@ -43,6 +43,9 @@ int ossl_dh_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh)
|
||||
Index: openssl-3.5.0-beta1/providers/implementations/keymgmt/rsa_kmgmt.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/providers/implementations/keymgmt/rsa_kmgmt.c
|
||||
+++ openssl-3.5.0-beta1/providers/implementations/keymgmt/rsa_kmgmt.c
|
||||
@@ -433,6 +433,7 @@ struct rsa_gen_ctx {
|
||||
#if defined(FIPS_MODULE) && !defined(OPENSSL_NO_ACVP_TESTS)
|
||||
/* ACVP test parameters */
|
||||
OSSL_PARAM *acvp_test_params;
|
||||
+ void *prov_rsa_ctx;
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -446,6 +447,12 @@ static int rsa_gencb(int p, int n, BN_GE
|
||||
return gctx->cb(params, gctx->cbarg);
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+void *rsa_newctx(void *provctx, const char *propq);
|
||||
+void rsa_freectx(void *vctx);
|
||||
+int do_rsa_pct(void *, const char *, void *);
|
||||
+#endif
|
||||
+
|
||||
static void *gen_init(void *provctx, int selection, int rsa_type,
|
||||
const OSSL_PARAM params[])
|
||||
{
|
||||
@@ -473,6 +480,10 @@ static void *gen_init(void *provctx, int
|
||||
|
||||
if (!rsa_gen_set_params(gctx, params))
|
||||
goto err;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (gctx != NULL)
|
||||
+ gctx->prov_rsa_ctx = rsa_newctx(provctx, NULL);
|
||||
+#endif
|
||||
return gctx;
|
||||
|
||||
err:
|
||||
@@ -629,6 +640,11 @@ static void *rsa_gen(void *genctx, OSSL_
|
||||
|
||||
rsa = rsa_tmp;
|
||||
rsa_tmp = NULL;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ /* Pairwise consistency test */
|
||||
+ if (do_rsa_pct(gctx->prov_rsa_ctx, "sha256", rsa) != 1)
|
||||
+ abort();
|
||||
+#endif
|
||||
err:
|
||||
BN_GENCB_free(gencb);
|
||||
RSA_free(rsa_tmp);
|
||||
@@ -644,6 +660,8 @@ static void rsa_gen_cleanup(void *genctx
|
||||
#if defined(FIPS_MODULE) && !defined(OPENSSL_NO_ACVP_TESTS)
|
||||
ossl_rsa_acvp_test_gen_params_free(gctx->acvp_test_params);
|
||||
gctx->acvp_test_params = NULL;
|
||||
+ rsa_freectx(gctx->prov_rsa_ctx);
|
||||
+ gctx->prov_rsa_ctx = NULL;
|
||||
#endif
|
||||
BN_clear_free(gctx->pub_exp);
|
||||
OPENSSL_free(gctx);
|
||||
Index: openssl-3.5.0-beta1/providers/implementations/signature/rsa_sig.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/providers/implementations/signature/rsa_sig.c
|
||||
+++ openssl-3.5.0-beta1/providers/implementations/signature/rsa_sig.c
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
#define RSA_DEFAULT_DIGEST_NAME OSSL_DIGEST_NAME_SHA1
|
||||
|
||||
-static OSSL_FUNC_signature_newctx_fn rsa_newctx;
|
||||
+OSSL_FUNC_signature_newctx_fn rsa_newctx;
|
||||
static OSSL_FUNC_signature_sign_init_fn rsa_sign_init;
|
||||
static OSSL_FUNC_signature_verify_init_fn rsa_verify_init;
|
||||
static OSSL_FUNC_signature_verify_recover_init_fn rsa_verify_recover_init;
|
||||
@@ -52,7 +52,7 @@ static OSSL_FUNC_signature_digest_sign_f
|
||||
static OSSL_FUNC_signature_digest_verify_init_fn rsa_digest_verify_init;
|
||||
static OSSL_FUNC_signature_digest_verify_update_fn rsa_digest_verify_update;
|
||||
static OSSL_FUNC_signature_digest_verify_final_fn rsa_digest_verify_final;
|
||||
-static OSSL_FUNC_signature_freectx_fn rsa_freectx;
|
||||
+OSSL_FUNC_signature_freectx_fn rsa_freectx;
|
||||
static OSSL_FUNC_signature_dupctx_fn rsa_dupctx;
|
||||
static OSSL_FUNC_signature_query_key_types_fn rsa_sigalg_query_key_types;
|
||||
static OSSL_FUNC_signature_get_ctx_params_fn rsa_get_ctx_params;
|
||||
@@ -224,7 +224,7 @@ static int rsa_check_parameters(PROV_RSA
|
||||
return 1;
|
||||
}
|
||||
|
||||
-static void *rsa_newctx(void *provctx, const char *propq)
|
||||
+void *rsa_newctx(void *provctx, const char *propq)
|
||||
{
|
||||
PROV_RSA_CTX *prsactx = NULL;
|
||||
char *propq_copy = NULL;
|
||||
@@ -1313,7 +1313,7 @@ int rsa_digest_verify_final(void *vprsac
|
||||
return ok;
|
||||
}
|
||||
|
||||
-static void rsa_freectx(void *vprsactx)
|
||||
+void rsa_freectx(void *vprsactx)
|
||||
{
|
||||
PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
|
||||
|
||||
@@ -1858,6 +1858,45 @@ static const OSSL_PARAM *rsa_settable_ct
|
||||
return EVP_MD_settable_ctx_params(prsactx->md);
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+int do_rsa_pct(void *vctx, const char *mdname, void *rsa)
|
||||
+{
|
||||
+ static const unsigned char data[32];
|
||||
+ unsigned char *sigbuf = NULL;
|
||||
+ size_t siglen = 0;
|
||||
+ int ret = 0;
|
||||
+
|
||||
+ if (rsa_digest_sign_init(vctx, mdname, rsa, NULL) <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (rsa_digest_sign_update(vctx, data, sizeof(data)) <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (rsa_digest_sign_final(vctx, NULL, &siglen, 0) <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ if ((sigbuf = OPENSSL_malloc(siglen)) == NULL)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (rsa_digest_sign_final(vctx, sigbuf, &siglen, siglen) <= 0)
|
||||
+ goto err;
|
||||
+
|
||||
+ if (rsa_digest_verify_init(vctx, mdname, rsa, NULL) <= 0)
|
||||
+ goto err;
|
||||
+
|
||||
+ if (rsa_digest_verify_update(vctx, data, sizeof(data)) <= 0)
|
||||
+ goto err;
|
||||
+
|
||||
+ if (rsa_digest_verify_final(vctx, sigbuf, siglen) <= 0)
|
||||
+ goto err;
|
||||
+ ret = 1;
|
||||
+
|
||||
+ err:
|
||||
+ OPENSSL_free(sigbuf);
|
||||
+ return ret;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
const OSSL_DISPATCH ossl_rsa_signature_functions[] = {
|
||||
{ OSSL_FUNC_SIGNATURE_NEWCTX, (void (*)(void))rsa_newctx },
|
||||
{ OSSL_FUNC_SIGNATURE_SIGN_INIT, (void (*)(void))rsa_sign_init },
|
||||
Index: openssl-3.5.0-beta1/crypto/dh/dh_key.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/crypto/dh/dh_key.c
|
||||
+++ openssl-3.5.0-beta1/crypto/dh/dh_key.c
|
||||
@@ -43,6 +43,9 @@ int ossl_dh_compute_key(unsigned char *k
|
||||
BN_MONT_CTX *mont = NULL;
|
||||
BIGNUM *z = NULL, *pminus1;
|
||||
int ret = -1;
|
||||
@@ -32,7 +166,7 @@ index 7132b9b68e..189bfc3e8b 100644
|
||||
|
||||
if (BN_num_bits(dh->params.p) > OPENSSL_DH_MAX_MODULUS_BITS) {
|
||||
ERR_raise(ERR_LIB_DH, DH_R_MODULUS_TOO_LARGE);
|
||||
@@ -60,6 +63,13 @@ int ossl_dh_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh)
|
||||
@@ -60,6 +63,13 @@ int ossl_dh_compute_key(unsigned char *k
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -78,26 +212,12 @@ index 7132b9b68e..189bfc3e8b 100644
|
||||
dh->dirty_cnt++;
|
||||
ok = 1;
|
||||
err:
|
||||
diff --git a/crypto/rsa/rsa_gen.c b/crypto/rsa/rsa_gen.c
|
||||
index 0cdbb3fde2..65ff9d2d47 100644
|
||||
--- a/crypto/rsa/rsa_gen.c
|
||||
+++ b/crypto/rsa/rsa_gen.c
|
||||
@@ -464,6 +464,9 @@ static int rsa_keygen(OSSL_LIB_CTX *libctx, RSA *rsa, int bits, int primes,
|
||||
rsa->dmp1 = NULL;
|
||||
rsa->dmq1 = NULL;
|
||||
rsa->iqmp = NULL;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ abort();
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
}
|
||||
}
|
||||
return ok;
|
||||
diff --git a/providers/implementations/exchange/ecdh_exch.c b/providers/implementations/exchange/ecdh_exch.c
|
||||
index 5b8412aba1..1d98eba132 100644
|
||||
--- a/providers/implementations/exchange/ecdh_exch.c
|
||||
+++ b/providers/implementations/exchange/ecdh_exch.c
|
||||
@@ -489,6 +489,25 @@ int ecdh_plain_derive(void *vpecdhctx, unsigned char *secret,
|
||||
}
|
||||
Index: openssl-3.5.0-beta1/providers/implementations/exchange/ecdh_exch.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/providers/implementations/exchange/ecdh_exch.c
|
||||
+++ openssl-3.5.0-beta1/providers/implementations/exchange/ecdh_exch.c
|
||||
@@ -560,6 +560,25 @@ int ecdh_plain_derive(void *vpecdhctx, u
|
||||
#endif
|
||||
|
||||
ppubkey = EC_KEY_get0_public_key(pecdhctx->peerk);
|
||||
+#ifdef FIPS_MODULE
|
||||
@@ -122,17 +242,18 @@ index 5b8412aba1..1d98eba132 100644
|
||||
|
||||
retlen = ECDH_compute_key(secret, size, ppubkey, privk, NULL);
|
||||
|
||||
diff --git a/providers/implementations/keymgmt/ec_kmgmt.c b/providers/implementations/keymgmt/ec_kmgmt.c
|
||||
index 9390935394..1399be1751 100644
|
||||
--- a/providers/implementations/keymgmt/ec_kmgmt.c
|
||||
+++ b/providers/implementations/keymgmt/ec_kmgmt.c
|
||||
@@ -991,8 +991,17 @@ struct ec_gen_ctx {
|
||||
Index: openssl-3.5.0-beta1/providers/implementations/keymgmt/ec_kmgmt.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/providers/implementations/keymgmt/ec_kmgmt.c
|
||||
+++ openssl-3.5.0-beta1/providers/implementations/keymgmt/ec_kmgmt.c
|
||||
@@ -993,9 +993,18 @@ struct ec_gen_ctx {
|
||||
EC_GROUP *gen_group;
|
||||
unsigned char *dhkem_ikm;
|
||||
size_t dhkem_ikmlen;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ void *ecdsa_sig_ctx;
|
||||
+#endif
|
||||
OSSL_FIPS_IND_DECLARE
|
||||
};
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
@@ -144,7 +265,7 @@ index 9390935394..1399be1751 100644
|
||||
static void *ec_gen_init(void *provctx, int selection,
|
||||
const OSSL_PARAM params[])
|
||||
{
|
||||
@@ -1011,6 +1020,10 @@ static void *ec_gen_init(void *provctx, int selection,
|
||||
@@ -1015,6 +1024,10 @@ static void *ec_gen_init(void *provctx,
|
||||
gctx = NULL;
|
||||
}
|
||||
}
|
||||
@@ -155,7 +276,7 @@ index 9390935394..1399be1751 100644
|
||||
return gctx;
|
||||
}
|
||||
|
||||
@@ -1291,6 +1304,12 @@ static void *ec_gen(void *genctx, OSSL_CALLBACK *osslcb, void *cbarg)
|
||||
@@ -1326,6 +1339,12 @@ static void *ec_gen(void *genctx, OSSL_C
|
||||
|
||||
if (gctx->ecdh_mode != -1)
|
||||
ret = ret && ossl_ec_set_ecdh_cofactor_mode(ec, gctx->ecdh_mode);
|
||||
@@ -168,7 +289,7 @@ index 9390935394..1399be1751 100644
|
||||
|
||||
if (gctx->group_check != NULL)
|
||||
ret = ret && ossl_ec_set_check_group_type_from_name(ec,
|
||||
@@ -1361,7 +1380,10 @@ static void ec_gen_cleanup(void *genctx)
|
||||
@@ -1396,7 +1415,10 @@ static void ec_gen_cleanup(void *genctx)
|
||||
|
||||
if (gctx == NULL)
|
||||
return;
|
||||
@@ -180,87 +301,30 @@ index 9390935394..1399be1751 100644
|
||||
OPENSSL_clear_free(gctx->dhkem_ikm, gctx->dhkem_ikmlen);
|
||||
EC_GROUP_free(gctx->gen_group);
|
||||
BN_free(gctx->p);
|
||||
diff --git a/providers/implementations/keymgmt/rsa_kmgmt.c b/providers/implementations/keymgmt/rsa_kmgmt.c
|
||||
index c24cb8da88..4462afa041 100644
|
||||
--- a/providers/implementations/keymgmt/rsa_kmgmt.c
|
||||
+++ b/providers/implementations/keymgmt/rsa_kmgmt.c
|
||||
@@ -434,6 +434,7 @@ struct rsa_gen_ctx {
|
||||
#if defined(FIPS_MODULE) && !defined(OPENSSL_NO_ACVP_TESTS)
|
||||
/* ACVP test parameters */
|
||||
OSSL_PARAM *acvp_test_params;
|
||||
+ void *prov_rsa_ctx;
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -447,6 +448,12 @@ static int rsa_gencb(int p, int n, BN_GENCB *cb)
|
||||
return gctx->cb(params, gctx->cbarg);
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+void *rsa_newctx(void *provctx, const char *propq);
|
||||
+void rsa_freectx(void *vctx);
|
||||
+int do_rsa_pct(void *, const char *, void *);
|
||||
+#endif
|
||||
+
|
||||
static void *gen_init(void *provctx, int selection, int rsa_type,
|
||||
const OSSL_PARAM params[])
|
||||
{
|
||||
@@ -474,6 +481,10 @@ static void *gen_init(void *provctx, int selection, int rsa_type,
|
||||
|
||||
if (!rsa_gen_set_params(gctx, params))
|
||||
goto err;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (gctx != NULL)
|
||||
+ gctx->prov_rsa_ctx = rsa_newctx(provctx, NULL);
|
||||
+#endif
|
||||
return gctx;
|
||||
|
||||
err:
|
||||
@@ -630,6 +641,11 @@ static void *rsa_gen(void *genctx, OSSL_CALLBACK *osslcb, void *cbarg)
|
||||
|
||||
rsa = rsa_tmp;
|
||||
rsa_tmp = NULL;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ /* Pairwise consistency test */
|
||||
+ if (do_rsa_pct(gctx->prov_rsa_ctx, "sha256", rsa) != 1)
|
||||
+ abort();
|
||||
+#endif
|
||||
err:
|
||||
BN_GENCB_free(gencb);
|
||||
RSA_free(rsa_tmp);
|
||||
@@ -645,6 +661,8 @@ static void rsa_gen_cleanup(void *genctx)
|
||||
#if defined(FIPS_MODULE) && !defined(OPENSSL_NO_ACVP_TESTS)
|
||||
ossl_rsa_acvp_test_gen_params_free(gctx->acvp_test_params);
|
||||
gctx->acvp_test_params = NULL;
|
||||
+ rsa_freectx(gctx->prov_rsa_ctx);
|
||||
+ gctx->prov_rsa_ctx = NULL;
|
||||
#endif
|
||||
BN_clear_free(gctx->pub_exp);
|
||||
OPENSSL_free(gctx);
|
||||
diff --git a/providers/implementations/signature/ecdsa_sig.c b/providers/implementations/signature/ecdsa_sig.c
|
||||
index fe65ed8dc6..f158105e71 100644
|
||||
--- a/providers/implementations/signature/ecdsa_sig.c
|
||||
+++ b/providers/implementations/signature/ecdsa_sig.c
|
||||
Index: openssl-3.5.0-beta1/providers/implementations/signature/ecdsa_sig.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/providers/implementations/signature/ecdsa_sig.c
|
||||
+++ openssl-3.5.0-beta1/providers/implementations/signature/ecdsa_sig.c
|
||||
@@ -33,7 +33,7 @@
|
||||
#include "crypto/ec.h"
|
||||
#include "prov/der_ec.h"
|
||||
#include "crypto/ec.h"
|
||||
|
||||
-static OSSL_FUNC_signature_newctx_fn ecdsa_newctx;
|
||||
+OSSL_FUNC_signature_newctx_fn ecdsa_newctx;
|
||||
static OSSL_FUNC_signature_sign_init_fn ecdsa_sign_init;
|
||||
static OSSL_FUNC_signature_verify_init_fn ecdsa_verify_init;
|
||||
static OSSL_FUNC_signature_sign_fn ecdsa_sign;
|
||||
@@ -44,7 +44,7 @@ static OSSL_FUNC_signature_digest_sign_final_fn ecdsa_digest_sign_final;
|
||||
@@ -48,7 +48,7 @@ static OSSL_FUNC_signature_digest_sign_f
|
||||
static OSSL_FUNC_signature_digest_verify_init_fn ecdsa_digest_verify_init;
|
||||
static OSSL_FUNC_signature_digest_verify_update_fn ecdsa_digest_signverify_update;
|
||||
static OSSL_FUNC_signature_digest_verify_final_fn ecdsa_digest_verify_final;
|
||||
-static OSSL_FUNC_signature_freectx_fn ecdsa_freectx;
|
||||
+OSSL_FUNC_signature_freectx_fn ecdsa_freectx;
|
||||
static OSSL_FUNC_signature_dupctx_fn ecdsa_dupctx;
|
||||
static OSSL_FUNC_signature_query_key_types_fn ecdsa_sigalg_query_key_types;
|
||||
static OSSL_FUNC_signature_get_ctx_params_fn ecdsa_get_ctx_params;
|
||||
static OSSL_FUNC_signature_gettable_ctx_params_fn ecdsa_gettable_ctx_params;
|
||||
@@ -107,7 +107,7 @@ typedef struct {
|
||||
unsigned int nonce_type;
|
||||
@@ -139,7 +139,7 @@ typedef struct {
|
||||
OSSL_FIPS_IND_DECLARE
|
||||
} PROV_ECDSA_CTX;
|
||||
|
||||
-static void *ecdsa_newctx(void *provctx, const char *propq)
|
||||
@@ -268,8 +332,8 @@ index fe65ed8dc6..f158105e71 100644
|
||||
{
|
||||
PROV_ECDSA_CTX *ctx;
|
||||
|
||||
@@ -380,7 +380,7 @@ int ecdsa_digest_verify_final(void *vctx, const unsigned char *sig,
|
||||
return ecdsa_verify(ctx, sig, siglen, digest, (size_t)dlen);
|
||||
@@ -604,7 +604,7 @@ int ecdsa_digest_verify_final(void *vctx
|
||||
return ok;
|
||||
}
|
||||
|
||||
-static void ecdsa_freectx(void *vctx)
|
||||
@@ -277,7 +341,7 @@ index fe65ed8dc6..f158105e71 100644
|
||||
{
|
||||
PROV_ECDSA_CTX *ctx = (PROV_ECDSA_CTX *)vctx;
|
||||
|
||||
@@ -601,6 +601,35 @@ static const OSSL_PARAM *ecdsa_settable_ctx_md_params(void *vctx)
|
||||
@@ -853,6 +853,35 @@ static const OSSL_PARAM *ecdsa_settable_
|
||||
return EVP_MD_settable_ctx_params(ctx->md);
|
||||
}
|
||||
|
||||
@@ -313,92 +377,3 @@ index fe65ed8dc6..f158105e71 100644
|
||||
const OSSL_DISPATCH ossl_ecdsa_signature_functions[] = {
|
||||
{ OSSL_FUNC_SIGNATURE_NEWCTX, (void (*)(void))ecdsa_newctx },
|
||||
{ OSSL_FUNC_SIGNATURE_SIGN_INIT, (void (*)(void))ecdsa_sign_init },
|
||||
diff --git a/providers/implementations/signature/rsa_sig.c b/providers/implementations/signature/rsa_sig.c
|
||||
index 76db37dd02..22d93ead53 100644
|
||||
--- a/providers/implementations/signature/rsa_sig.c
|
||||
+++ b/providers/implementations/signature/rsa_sig.c
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
#define RSA_DEFAULT_DIGEST_NAME OSSL_DIGEST_NAME_SHA1
|
||||
|
||||
-static OSSL_FUNC_signature_newctx_fn rsa_newctx;
|
||||
+OSSL_FUNC_signature_newctx_fn rsa_newctx;
|
||||
static OSSL_FUNC_signature_sign_init_fn rsa_sign_init;
|
||||
static OSSL_FUNC_signature_verify_init_fn rsa_verify_init;
|
||||
static OSSL_FUNC_signature_verify_recover_init_fn rsa_verify_recover_init;
|
||||
@@ -47,7 +47,7 @@ static OSSL_FUNC_signature_digest_sign_final_fn rsa_digest_sign_final;
|
||||
static OSSL_FUNC_signature_digest_verify_init_fn rsa_digest_verify_init;
|
||||
static OSSL_FUNC_signature_digest_verify_update_fn rsa_digest_signverify_update;
|
||||
static OSSL_FUNC_signature_digest_verify_final_fn rsa_digest_verify_final;
|
||||
-static OSSL_FUNC_signature_freectx_fn rsa_freectx;
|
||||
+OSSL_FUNC_signature_freectx_fn rsa_freectx;
|
||||
static OSSL_FUNC_signature_dupctx_fn rsa_dupctx;
|
||||
static OSSL_FUNC_signature_get_ctx_params_fn rsa_get_ctx_params;
|
||||
static OSSL_FUNC_signature_gettable_ctx_params_fn rsa_gettable_ctx_params;
|
||||
@@ -170,7 +170,7 @@ static int rsa_check_parameters(PROV_RSA_CTX *prsactx, int min_saltlen)
|
||||
return 1;
|
||||
}
|
||||
|
||||
-static void *rsa_newctx(void *provctx, const char *propq)
|
||||
+void *rsa_newctx(void *provctx, const char *propq)
|
||||
{
|
||||
PROV_RSA_CTX *prsactx = NULL;
|
||||
char *propq_copy = NULL;
|
||||
@@ -974,7 +974,7 @@ int rsa_digest_verify_final(void *vprsactx, const unsigned char *sig,
|
||||
return rsa_verify(vprsactx, sig, siglen, digest, (size_t)dlen);
|
||||
}
|
||||
|
||||
-static void rsa_freectx(void *vprsactx)
|
||||
+void rsa_freectx(void *vprsactx)
|
||||
{
|
||||
PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
|
||||
|
||||
@@ -1451,6 +1451,45 @@ static const OSSL_PARAM *rsa_settable_ctx_md_params(void *vprsactx)
|
||||
return EVP_MD_settable_ctx_params(prsactx->md);
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+int do_rsa_pct(void *vctx, const char *mdname, void *rsa)
|
||||
+{
|
||||
+ static const unsigned char data[32];
|
||||
+ unsigned char *sigbuf = NULL;
|
||||
+ size_t siglen = 0;
|
||||
+ int ret = 0;
|
||||
+
|
||||
+ if (rsa_digest_sign_init(vctx, mdname, rsa, NULL) <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (rsa_digest_signverify_update(vctx, data, sizeof(data)) <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (rsa_digest_sign_final(vctx, NULL, &siglen, 0) <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ if ((sigbuf = OPENSSL_malloc(siglen)) == NULL)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (rsa_digest_sign_final(vctx, sigbuf, &siglen, siglen) <= 0)
|
||||
+ goto err;
|
||||
+
|
||||
+ if (rsa_digest_verify_init(vctx, mdname, rsa, NULL) <= 0)
|
||||
+ goto err;
|
||||
+
|
||||
+ if (rsa_digest_signverify_update(vctx, data, sizeof(data)) <= 0)
|
||||
+ goto err;
|
||||
+
|
||||
+ if (rsa_digest_verify_final(vctx, sigbuf, siglen) <= 0)
|
||||
+ goto err;
|
||||
+ ret = 1;
|
||||
+
|
||||
+ err:
|
||||
+ OPENSSL_free(sigbuf);
|
||||
+ return ret;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
const OSSL_DISPATCH ossl_rsa_signature_functions[] = {
|
||||
{ OSSL_FUNC_SIGNATURE_NEWCTX, (void (*)(void))rsa_newctx },
|
||||
{ OSSL_FUNC_SIGNATURE_SIGN_INIT, (void (*)(void))rsa_sign_init },
|
||||
--
|
||||
2.44.0
|
||||
|
||||
|
@@ -1,81 +0,0 @@
|
||||
Index: openssl-3.2.3/crypto/ec/ec_lib.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/ec/ec_lib.c
|
||||
+++ openssl-3.2.3/crypto/ec/ec_lib.c
|
||||
@@ -743,12 +743,16 @@ EC_POINT *EC_POINT_new(const EC_GROUP *g
|
||||
|
||||
void EC_POINT_free(EC_POINT *point)
|
||||
{
|
||||
+#ifdef FIPS_MODULE
|
||||
+ EC_POINT_clear_free(point);
|
||||
+#else
|
||||
if (point == NULL)
|
||||
return;
|
||||
|
||||
if (point->meth->point_finish != 0)
|
||||
point->meth->point_finish(point);
|
||||
OPENSSL_free(point);
|
||||
+#endif
|
||||
}
|
||||
|
||||
void EC_POINT_clear_free(EC_POINT *point)
|
||||
Index: openssl-3.2.3/crypto/ffc/ffc_params.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/ffc/ffc_params.c
|
||||
+++ openssl-3.2.3/crypto/ffc/ffc_params.c
|
||||
@@ -27,10 +27,10 @@ void ossl_ffc_params_init(FFC_PARAMS *pa
|
||||
|
||||
void ossl_ffc_params_cleanup(FFC_PARAMS *params)
|
||||
{
|
||||
- BN_free(params->p);
|
||||
- BN_free(params->q);
|
||||
- BN_free(params->g);
|
||||
- BN_free(params->j);
|
||||
+ BN_clear_free(params->p);
|
||||
+ BN_clear_free(params->q);
|
||||
+ BN_clear_free(params->g);
|
||||
+ BN_clear_free(params->j);
|
||||
OPENSSL_free(params->seed);
|
||||
ossl_ffc_params_init(params);
|
||||
}
|
||||
Index: openssl-3.2.3/crypto/rsa/rsa_lib.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/rsa/rsa_lib.c
|
||||
+++ openssl-3.2.3/crypto/rsa/rsa_lib.c
|
||||
@@ -159,8 +159,8 @@ void RSA_free(RSA *r)
|
||||
CRYPTO_THREAD_lock_free(r->lock);
|
||||
CRYPTO_FREE_REF(&r->references);
|
||||
|
||||
- BN_free(r->n);
|
||||
- BN_free(r->e);
|
||||
+ BN_clear_free(r->n);
|
||||
+ BN_clear_free(r->e);
|
||||
BN_clear_free(r->d);
|
||||
BN_clear_free(r->p);
|
||||
BN_clear_free(r->q);
|
||||
Index: openssl-3.2.3/providers/implementations/kdfs/hkdf.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/kdfs/hkdf.c
|
||||
+++ openssl-3.2.3/providers/implementations/kdfs/hkdf.c
|
||||
@@ -117,7 +117,7 @@ static void kdf_hkdf_reset(void *vctx)
|
||||
void *provctx = ctx->provctx;
|
||||
|
||||
ossl_prov_digest_reset(&ctx->digest);
|
||||
- OPENSSL_free(ctx->salt);
|
||||
+ OPENSSL_clear_free(ctx->salt, ctx->salt_len);
|
||||
OPENSSL_free(ctx->prefix);
|
||||
OPENSSL_free(ctx->label);
|
||||
OPENSSL_clear_free(ctx->data, ctx->data_len);
|
||||
Index: openssl-3.2.3/providers/implementations/kdfs/pbkdf2.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/kdfs/pbkdf2.c
|
||||
+++ openssl-3.2.3/providers/implementations/kdfs/pbkdf2.c
|
||||
@@ -90,7 +90,7 @@ static void *kdf_pbkdf2_new(void *provct
|
||||
static void kdf_pbkdf2_cleanup(KDF_PBKDF2 *ctx)
|
||||
{
|
||||
ossl_prov_digest_reset(&ctx->digest);
|
||||
- OPENSSL_free(ctx->salt);
|
||||
+ OPENSSL_clear_free(ctx->salt, ctx->salt_len);
|
||||
OPENSSL_clear_free(ctx->pass, ctx->pass_len);
|
||||
memset(ctx, 0, sizeof(*ctx));
|
||||
}
|
@@ -1,108 +0,0 @@
|
||||
From e1eba21921ceeffa45ffd2115868c14e4c7fb8d9 Mon Sep 17 00:00:00 2001
|
||||
From: Clemens Lang <cllang@redhat.com>
|
||||
Date: Thu, 17 Nov 2022 18:08:24 +0100
|
||||
Subject: [PATCH] hmac: Add explicit FIPS indicator for key length
|
||||
|
||||
NIST SP 800-131Ar2, table 9 "Approval Status of MAC Algorithms"
|
||||
specifies key lengths < 112 bytes are disallowed for HMAC generation and
|
||||
are legacy use for HMAC verification.
|
||||
|
||||
Add an explicit indicator that will mark shorter key lengths as
|
||||
unsupported. The indicator can be queries from the EVP_MAC_CTX object
|
||||
using EVP_MAC_CTX_get_params() with the
|
||||
OSSL_MAC_PARAM_SUSE_FIPS_INDICATOR
|
||||
parameter.
|
||||
|
||||
Signed-off-by: Clemens Lang <cllang@redhat.com>
|
||||
---
|
||||
include/crypto/evp.h | 7 +++++++
|
||||
include/openssl/evp.h | 3 +++
|
||||
providers/implementations/macs/hmac_prov.c | 17 +++++++++++++++++
|
||||
4 files changed, 28 insertions(+)
|
||||
|
||||
Index: openssl-3.2.3/include/crypto/evp.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/include/crypto/evp.h
|
||||
+++ openssl-3.2.3/include/crypto/evp.h
|
||||
@@ -206,6 +206,13 @@ const EVP_PKEY_METHOD *ossl_ed448_pkey_m
|
||||
const EVP_PKEY_METHOD *ossl_rsa_pkey_method(void);
|
||||
const EVP_PKEY_METHOD *ossl_rsa_pss_pkey_method(void);
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+/* NIST SP 800-131Ar2, Table 9: Approval Status of MAC Algorithms specifies key
|
||||
+ * lengths < 112 bytes are disallowed for HMAC generation and legacy use for
|
||||
+ * HMAC verification. */
|
||||
+# define EVP_HMAC_GEN_FIPS_MIN_KEY_LEN (112 / 8)
|
||||
+#endif
|
||||
+
|
||||
struct evp_mac_st {
|
||||
OSSL_PROVIDER *prov;
|
||||
int name_id;
|
||||
Index: openssl-3.2.3/include/openssl/evp.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/include/openssl/evp.h
|
||||
+++ openssl-3.2.3/include/openssl/evp.h
|
||||
@@ -1199,6 +1199,9 @@ void EVP_MD_do_all_provided(OSSL_LIB_CTX
|
||||
void *arg);
|
||||
|
||||
/* MAC stuff */
|
||||
+# define EVP_MAC_SUSE_FIPS_INDICATOR_UNDETERMINED 0
|
||||
+# define EVP_MAC_SUSE_FIPS_INDICATOR_APPROVED 1
|
||||
+# define EVP_MAC_SUSE_FIPS_INDICATOR_NOT_APPROVED 2
|
||||
|
||||
EVP_MAC *EVP_MAC_fetch(OSSL_LIB_CTX *libctx, const char *algorithm,
|
||||
const char *properties);
|
||||
Index: openssl-3.2.3/providers/implementations/macs/hmac_prov.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/macs/hmac_prov.c
|
||||
+++ openssl-3.2.3/providers/implementations/macs/hmac_prov.c
|
||||
@@ -23,6 +23,8 @@
|
||||
|
||||
#include "internal/ssl3_cbc.h"
|
||||
|
||||
+#include "crypto/evp.h"
|
||||
+
|
||||
#include "prov/implementations.h"
|
||||
#include "prov/provider_ctx.h"
|
||||
#include "prov/provider_util.h"
|
||||
@@ -235,6 +237,9 @@ static int hmac_final(void *vmacctx, uns
|
||||
static const OSSL_PARAM known_gettable_ctx_params[] = {
|
||||
OSSL_PARAM_size_t(OSSL_MAC_PARAM_SIZE, NULL),
|
||||
OSSL_PARAM_size_t(OSSL_MAC_PARAM_BLOCK_SIZE, NULL),
|
||||
+#ifdef FIPS_MODULE
|
||||
+ OSSL_PARAM_int(OSSL_MAC_PARAM_SUSE_FIPS_INDICATOR, NULL),
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
OSSL_PARAM_END
|
||||
};
|
||||
static const OSSL_PARAM *hmac_gettable_ctx_params(ossl_unused void *ctx,
|
||||
@@ -256,6 +261,18 @@ static int hmac_get_ctx_params(void *vma
|
||||
&& !OSSL_PARAM_set_int(p, hmac_block_size(macctx)))
|
||||
return 0;
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if ((p = OSSL_PARAM_locate(params, OSSL_MAC_PARAM_SUSE_FIPS_INDICATOR)) != NULL) {
|
||||
+ int fips_indicator = EVP_MAC_SUSE_FIPS_INDICATOR_APPROVED;
|
||||
+ /* NIST SP 800-131Ar2, Table 9: Approval Status of MAC Algorithms
|
||||
+ * specifies key lengths < 112 bytes are disallowed for HMAC generation
|
||||
+ * and legacy use for HMAC verification. */
|
||||
+ if (macctx->keylen < EVP_HMAC_GEN_FIPS_MIN_KEY_LEN)
|
||||
+ fips_indicator = EVP_MAC_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+ return OSSL_PARAM_set_int(p, fips_indicator);
|
||||
+ }
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+
|
||||
return 1;
|
||||
}
|
||||
|
||||
Index: openssl-3.2.3/util/perl/OpenSSL/paramnames.pm
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/util/perl/OpenSSL/paramnames.pm
|
||||
+++ openssl-3.2.3/util/perl/OpenSSL/paramnames.pm
|
||||
@@ -143,6 +143,7 @@ my %params = (
|
||||
'MAC_PARAM_SIZE' => "size", # size_t
|
||||
'MAC_PARAM_BLOCK_SIZE' => "block-size", # size_t
|
||||
'MAC_PARAM_TLS_DATA_SIZE' => "tls-data-size", # size_t
|
||||
+ 'MAC_PARAM_SUSE_FIPS_INDICATOR' => "suse-fips-indicator", # size_t
|
||||
|
||||
# KDF / PRF parameters
|
||||
'KDF_PARAM_SECRET' => "secret", # octet string
|
31
openssl-FIPS-EC-disable-weak-curves.patch
Normal file
31
openssl-FIPS-EC-disable-weak-curves.patch
Normal file
@@ -0,0 +1,31 @@
|
||||
From 8a8265970a7497010b9b39182315f20521e7e15b Mon Sep 17 00:00:00 2001
|
||||
From: Simo Sorce <simo@redhat.com>
|
||||
Date: Fri, 7 Mar 2025 18:06:36 -0500
|
||||
Subject: [PATCH 45/53] FIPS: EC: disable weak curves
|
||||
|
||||
Signed-off-by: Simo Sorce <simo@redhat.com>
|
||||
---
|
||||
apps/ecparam.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/apps/ecparam.c b/apps/ecparam.c
|
||||
index f0879dfb11..a6042e7d2a 100644
|
||||
--- a/apps/ecparam.c
|
||||
+++ b/apps/ecparam.c
|
||||
@@ -77,6 +77,13 @@ static int list_builtin_curves(BIO *out)
|
||||
const char *comment = curves[n].comment;
|
||||
const char *sname = OBJ_nid2sn(curves[n].nid);
|
||||
|
||||
+ if (((curves[n].nid == NID_secp256k1) || (curves[n].nid == NID_brainpoolP256r1)
|
||||
+ || (curves[n].nid == NID_brainpoolP256t1) || (curves[n].nid == NID_brainpoolP320r1)
|
||||
+ || (curves[n].nid == NID_brainpoolP320t1) || (curves[n].nid == NID_brainpoolP384r1)
|
||||
+ || (curves[n].nid == NID_brainpoolP384t1) || (curves[n].nid == NID_brainpoolP512r1)
|
||||
+ || (curves[n].nid == NID_brainpoolP512t1)) && EVP_default_properties_is_fips_enabled(NULL))
|
||||
+ continue;
|
||||
+
|
||||
if (comment == NULL)
|
||||
comment = "CURVE DESCRIPTION NOT AVAILABLE";
|
||||
if (sname == NULL)
|
||||
--
|
||||
2.49.0
|
||||
|
@@ -1,8 +1,8 @@
|
||||
Index: openssl-3.1.4/providers/fips/fipsprov.c
|
||||
Index: openssl-3.5.0-beta1/providers/fips/fipsprov.c
|
||||
===================================================================
|
||||
--- openssl-3.1.4.orig/providers/fips/fipsprov.c
|
||||
+++ openssl-3.1.4/providers/fips/fipsprov.c
|
||||
@@ -805,6 +805,7 @@ int OSSL_provider_init_int(const OSSL_CO
|
||||
--- openssl-3.5.0-beta1.orig/providers/fips/fipsprov.c
|
||||
+++ openssl-3.5.0-beta1/providers/fips/fipsprov.c
|
||||
@@ -988,6 +988,7 @@ int OSSL_provider_init_int(const OSSL_CO
|
||||
/* Error already raised */
|
||||
goto err;
|
||||
}
|
||||
@@ -10,11 +10,11 @@ Index: openssl-3.1.4/providers/fips/fipsprov.c
|
||||
/*
|
||||
* Disable the conditional error check if it's disabled in the fips config
|
||||
* file.
|
||||
@@ -812,6 +813,7 @@ int OSSL_provider_init_int(const OSSL_CO
|
||||
@@ -995,6 +996,7 @@ int OSSL_provider_init_int(const OSSL_CO
|
||||
if (fgbl->selftest_params.conditional_error_check != NULL
|
||||
&& strcmp(fgbl->selftest_params.conditional_error_check, "0") == 0)
|
||||
SELF_TEST_disable_conditional_error_state();
|
||||
+#endif
|
||||
|
||||
/* Enable or disable FIPS provider options */
|
||||
#define FIPS_SET_OPTION(fgbl, field) \
|
||||
#define OSSL_FIPS_PARAM(structname, paramname, unused) \
|
||||
|
@@ -52,11 +52,11 @@ Signed-off-by: Clemens Lang <cllang@redhat.com>
|
||||
create mode 100644 doc/man7/fips_module_indicators.pod
|
||||
create mode 100644 providers/fips/indicator.h
|
||||
|
||||
Index: openssl-3.1.4/doc/build.info
|
||||
Index: openssl-3.5.0-beta1/doc/build.info
|
||||
===================================================================
|
||||
--- openssl-3.1.4.orig/doc/build.info
|
||||
+++ openssl-3.1.4/doc/build.info
|
||||
@@ -4467,6 +4467,10 @@ DEPEND[html/man7/fips_module.html]=man7/
|
||||
--- openssl-3.5.0-beta1.orig/doc/build.info
|
||||
+++ openssl-3.5.0-beta1/doc/build.info
|
||||
@@ -4939,6 +4939,10 @@ DEPEND[html/man7/fips_module.html]=man7/
|
||||
GENERATE[html/man7/fips_module.html]=man7/fips_module.pod
|
||||
DEPEND[man/man7/fips_module.7]=man7/fips_module.pod
|
||||
GENERATE[man/man7/fips_module.7]=man7/fips_module.pod
|
||||
@@ -67,7 +67,7 @@ Index: openssl-3.1.4/doc/build.info
|
||||
DEPEND[html/man7/life_cycle-cipher.html]=man7/life_cycle-cipher.pod
|
||||
GENERATE[html/man7/life_cycle-cipher.html]=man7/life_cycle-cipher.pod
|
||||
DEPEND[man/man7/life_cycle-cipher.7]=man7/life_cycle-cipher.pod
|
||||
@@ -4712,6 +4716,7 @@ html/man7/ct.html \
|
||||
@@ -5266,6 +5270,7 @@ html/man7/ct.html \
|
||||
html/man7/des_modes.html \
|
||||
html/man7/evp.html \
|
||||
html/man7/fips_module.html \
|
||||
@@ -75,7 +75,7 @@ Index: openssl-3.1.4/doc/build.info
|
||||
html/man7/life_cycle-cipher.html \
|
||||
html/man7/life_cycle-digest.html \
|
||||
html/man7/life_cycle-kdf.html \
|
||||
@@ -4838,6 +4843,7 @@ man/man7/ct.7 \
|
||||
@@ -5423,6 +5428,7 @@ man/man7/ct.7 \
|
||||
man/man7/des_modes.7 \
|
||||
man/man7/evp.7 \
|
||||
man/man7/fips_module.7 \
|
||||
@@ -83,10 +83,10 @@ Index: openssl-3.1.4/doc/build.info
|
||||
man/man7/life_cycle-cipher.7 \
|
||||
man/man7/life_cycle-digest.7 \
|
||||
man/man7/life_cycle-kdf.7 \
|
||||
Index: openssl-3.1.4/doc/man7/fips_module_indicators.pod
|
||||
Index: openssl-3.5.0-beta1/doc/man7/fips_module_indicators.pod
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ openssl-3.1.4/doc/man7/fips_module_indicators.pod
|
||||
+++ openssl-3.5.0-beta1/doc/man7/fips_module_indicators.pod
|
||||
@@ -0,0 +1,155 @@
|
||||
+=pod
|
||||
+
|
||||
@@ -243,19 +243,19 @@ Index: openssl-3.1.4/doc/man7/fips_module_indicators.pod
|
||||
+L<https://www.openssl.org/source/license.html>.
|
||||
+
|
||||
+=cut
|
||||
Index: openssl-3.1.4/providers/fips/fipsprov.c
|
||||
Index: openssl-3.5.0-beta1/providers/fips/fipsprov.c
|
||||
===================================================================
|
||||
--- openssl-3.1.4.orig/providers/fips/fipsprov.c
|
||||
+++ openssl-3.1.4/providers/fips/fipsprov.c
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "self_test.h"
|
||||
--- openssl-3.5.0-beta1.orig/providers/fips/fipsprov.c
|
||||
+++ openssl-3.5.0-beta1/providers/fips/fipsprov.c
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "crypto/context.h"
|
||||
#include "fipscommon.h"
|
||||
#include "internal/core.h"
|
||||
+#include "indicator.h"
|
||||
|
||||
static const char FIPS_DEFAULT_PROPERTIES[] = "provider=fips,fips=yes";
|
||||
static const char FIPS_UNAPPROVED_PROPERTIES[] = "provider=fips,fips=no";
|
||||
@@ -438,6 +439,68 @@ static const OSSL_ALGORITHM fips_signatu
|
||||
@@ -542,6 +543,68 @@ static const OSSL_ALGORITHM fips_signatu
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
@@ -324,7 +324,7 @@ Index: openssl-3.1.4/providers/fips/fipsprov.c
|
||||
static const OSSL_ALGORITHM fips_asym_cipher[] = {
|
||||
{ PROV_NAMES_RSA, FIPS_DEFAULT_PROPERTIES, ossl_rsa_asym_cipher_functions },
|
||||
{ NULL, NULL, NULL }
|
||||
@@ -520,6 +583,14 @@ static const OSSL_ALGORITHM *fips_query(
|
||||
@@ -696,6 +759,14 @@ static const OSSL_ALGORITHM *fips_query(
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -337,12 +337,12 @@ Index: openssl-3.1.4/providers/fips/fipsprov.c
|
||||
+ return NULL;
|
||||
+}
|
||||
|
||||
static void fips_teardown(void *provctx)
|
||||
{
|
||||
Index: openssl-3.1.4/providers/fips/indicator.h
|
||||
static const OSSL_ALGORITHM *fips_query_internal(void *provctx, int operation_id,
|
||||
int *no_cache)
|
||||
Index: openssl-3.5.0-beta1/providers/fips/indicator.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ openssl-3.1.4/providers/fips/indicator.h
|
||||
+++ openssl-3.5.0-beta1/providers/fips/indicator.h
|
||||
@@ -0,0 +1,66 @@
|
||||
+/*
|
||||
+ * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
|
||||
@@ -410,11 +410,11 @@ Index: openssl-3.1.4/providers/fips/indicator.h
|
||||
+# endif
|
||||
+
|
||||
+#endif
|
||||
Index: openssl-3.1.4/util/mkdef.pl
|
||||
Index: openssl-3.5.0-beta1/util/mkdef.pl
|
||||
===================================================================
|
||||
--- openssl-3.1.4.orig/util/mkdef.pl
|
||||
+++ openssl-3.1.4/util/mkdef.pl
|
||||
@@ -153,7 +153,8 @@ $ordinal_opts{filter} =
|
||||
--- openssl-3.5.0-beta1.orig/util/mkdef.pl
|
||||
+++ openssl-3.5.0-beta1/util/mkdef.pl
|
||||
@@ -154,7 +154,8 @@ $ordinal_opts{filter} =
|
||||
return
|
||||
$item->exists()
|
||||
&& platform_filter($item)
|
||||
@@ -424,7 +424,7 @@ Index: openssl-3.1.4/util/mkdef.pl
|
||||
};
|
||||
my $ordinals = OpenSSL::Ordinals->new(from => $ordinals_file);
|
||||
|
||||
@@ -209,6 +210,28 @@ sub feature_filter {
|
||||
@@ -210,6 +211,28 @@ sub feature_filter {
|
||||
return $verdict;
|
||||
}
|
||||
|
||||
@@ -453,10 +453,10 @@ Index: openssl-3.1.4/util/mkdef.pl
|
||||
sub sorter_unix {
|
||||
my $by_name = OpenSSL::Ordinals::by_name();
|
||||
my %weight = (
|
||||
Index: openssl-3.1.4/util/providers.num
|
||||
Index: openssl-3.5.0-beta1/util/providers.num
|
||||
===================================================================
|
||||
--- openssl-3.1.4.orig/util/providers.num
|
||||
+++ openssl-3.1.4/util/providers.num
|
||||
--- openssl-3.5.0-beta1.orig/util/providers.num
|
||||
+++ openssl-3.5.0-beta1/util/providers.num
|
||||
@@ -1 +1,2 @@
|
||||
OSSL_provider_init 1 * EXIST::FUNCTION:
|
||||
+suse_ossl_query_fipsindicator 1 * EXIST::FUNCTION:ONLY_PROVIDERS/FIPS
|
||||
|
35
openssl-FIPS-Fix-encoder-decoder-negative-test.patch
Normal file
35
openssl-FIPS-Fix-encoder-decoder-negative-test.patch
Normal file
@@ -0,0 +1,35 @@
|
||||
From fee4537648b335f708e78d15a4c3b6018169b5cd Mon Sep 17 00:00:00 2001
|
||||
From: Simo Sorce <simo@redhat.com>
|
||||
Date: Wed, 5 Mar 2025 13:22:03 -0500
|
||||
Subject: [PATCH 43/53] FIPS: Fix encoder/decoder negative test
|
||||
|
||||
Signed-off-by: Simo Sorce <simo@redhat.com>
|
||||
---
|
||||
test/recipes/04-test_encoder_decoder.t | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
mode change 100644 => 100755 test/recipes/04-test_encoder_decoder.t
|
||||
|
||||
diff --git a/test/recipes/04-test_encoder_decoder.t b/test/recipes/04-test_encoder_decoder.t
|
||||
old mode 100644
|
||||
new mode 100755
|
||||
index 2acc980e90..660d4e1115
|
||||
--- a/test/recipes/04-test_encoder_decoder.t
|
||||
+++ b/test/recipes/04-test_encoder_decoder.t
|
||||
@@ -75,10 +75,10 @@ SKIP: {
|
||||
}
|
||||
my $no_des = disabled("des");
|
||||
SKIP: {
|
||||
- skip "MD5 disabled", 2 if disabled("md5");
|
||||
- ok(run(app([ 'openssl', 'genrsa', '-aes128', '-out', 'epki.pem',
|
||||
- '-traditional', '-passout', 'pass:pass' ])),
|
||||
- "rsa encrypted using a non fips algorithm MD5 in pbe");
|
||||
+ skip "DES disabled", 2 if disabled("des3");
|
||||
+ ok(run(app([ 'openssl', 'genrsa', '-des3', '-out', 'epki.pem',
|
||||
+ '-traditional', '-passout', 'pass:pass'])),
|
||||
+ "rsa encrypted using a non fips algorithm DES3 in pbe");
|
||||
|
||||
my $conf2 = srctop_file("test", "default-and-fips.cnf");
|
||||
ok(run(test(['decoder_propq_test', '-config', $conf2,
|
||||
--
|
||||
2.49.0
|
||||
|
@@ -1,25 +0,0 @@
|
||||
Index: openssl-3.2.4/providers/fips/fipsprov.c
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/providers/fips/fipsprov.c
|
||||
+++ openssl-3.2.4/providers/fips/fipsprov.c
|
||||
@@ -278,7 +278,7 @@ static int fips_self_test(void *provctx)
|
||||
*/
|
||||
static const OSSL_ALGORITHM fips_digests[] = {
|
||||
/* Our primary name:NiST name[:our older names] */
|
||||
- { PROV_NAMES_SHA1, FIPS_DEFAULT_PROPERTIES, ossl_sha1_functions },
|
||||
+ { PROV_NAMES_SHA1, FIPS_UNAPPROVED_PROPERTIES, ossl_sha1_functions },
|
||||
{ PROV_NAMES_SHA2_224, FIPS_DEFAULT_PROPERTIES, ossl_sha224_functions },
|
||||
{ PROV_NAMES_SHA2_256, FIPS_DEFAULT_PROPERTIES, ossl_sha256_functions },
|
||||
{ PROV_NAMES_SHA2_384, FIPS_DEFAULT_PROPERTIES, ossl_sha384_functions },
|
||||
@@ -355,9 +355,9 @@ static const OSSL_ALGORITHM_CAPABLE fips
|
||||
ALG(PROV_NAMES_AES_256_WRAP_PAD_INV, ossl_aes256wrappadinv_functions),
|
||||
ALG(PROV_NAMES_AES_192_WRAP_PAD_INV, ossl_aes192wrappadinv_functions),
|
||||
ALG(PROV_NAMES_AES_128_WRAP_PAD_INV, ossl_aes128wrappadinv_functions),
|
||||
- ALGC(PROV_NAMES_AES_128_CBC_HMAC_SHA1, ossl_aes128cbc_hmac_sha1_functions,
|
||||
+ UNAPPROVED_ALGC(PROV_NAMES_AES_128_CBC_HMAC_SHA1, ossl_aes128cbc_hmac_sha1_functions,
|
||||
ossl_cipher_capable_aes_cbc_hmac_sha1),
|
||||
- ALGC(PROV_NAMES_AES_256_CBC_HMAC_SHA1, ossl_aes256cbc_hmac_sha1_functions,
|
||||
+ UNAPPROVED_ALGC(PROV_NAMES_AES_256_CBC_HMAC_SHA1, ossl_aes256cbc_hmac_sha1_functions,
|
||||
ossl_cipher_capable_aes_cbc_hmac_sha1),
|
||||
ALGC(PROV_NAMES_AES_128_CBC_HMAC_SHA256, ossl_aes128cbc_hmac_sha256_functions,
|
||||
ossl_cipher_capable_aes_cbc_hmac_sha256),
|
152
openssl-FIPS-NO-DES-support.patch
Normal file
152
openssl-FIPS-NO-DES-support.patch
Normal file
@@ -0,0 +1,152 @@
|
||||
From 3a1abccdfc3bb78dd472bbb7ff36313959ef0cdf Mon Sep 17 00:00:00 2001
|
||||
From: Simo Sorce <simo@redhat.com>
|
||||
Date: Fri, 7 Mar 2025 18:15:13 -0500
|
||||
Subject: [PATCH 47/53] FIPS: NO DES support
|
||||
|
||||
Signed-off-by: Simo Sorce <simo@redhat.com>
|
||||
---
|
||||
providers/fips/fipsprov.c | 3 ++-
|
||||
providers/fips/self_test_data.inc | 5 ++++-
|
||||
test/evp_libctx_test.c | 4 +++-
|
||||
.../30-test_evp_data/evpciph_des3_common.txt | 13 ++++---------
|
||||
test/recipes/80-test_cms.t | 2 +-
|
||||
5 files changed, 14 insertions(+), 13 deletions(-)
|
||||
|
||||
Index: openssl-3.5.0-beta1/providers/fips/fipsprov.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/providers/fips/fipsprov.c
|
||||
+++ openssl-3.5.0-beta1/providers/fips/fipsprov.c
|
||||
@@ -358,7 +358,8 @@ static const OSSL_ALGORITHM_CAPABLE fips
|
||||
ossl_cipher_capable_aes_cbc_hmac_sha256),
|
||||
ALGC(PROV_NAMES_AES_256_CBC_HMAC_SHA256, ossl_aes256cbc_hmac_sha256_functions,
|
||||
ossl_cipher_capable_aes_cbc_hmac_sha256),
|
||||
-#ifndef OPENSSL_NO_DES
|
||||
+/* We don't certify 3DES in our FIPS provider */
|
||||
+#if 0 /* ifndef OPENSSL_NO_DES */
|
||||
ALG(PROV_NAMES_DES_EDE3_ECB, ossl_tdes_ede3_ecb_functions),
|
||||
ALG(PROV_NAMES_DES_EDE3_CBC, ossl_tdes_ede3_cbc_functions),
|
||||
#endif /* OPENSSL_NO_DES */
|
||||
Index: openssl-3.5.0-beta1/providers/fips/self_test_data.inc
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/providers/fips/self_test_data.inc
|
||||
+++ openssl-3.5.0-beta1/providers/fips/self_test_data.inc
|
||||
@@ -209,6 +209,7 @@ static const ST_KAT_DIGEST st_kat_digest
|
||||
/*- CIPHER TEST DATA */
|
||||
|
||||
/* DES3 test data */
|
||||
+#if 0
|
||||
static const unsigned char des_ede3_cbc_pt[] = {
|
||||
0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
|
||||
0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
|
||||
@@ -229,7 +230,7 @@ static const unsigned char des_ede3_cbc_
|
||||
0x51, 0x65, 0x70, 0x48, 0x1F, 0x25, 0xB5, 0x0F,
|
||||
0x73, 0xC0, 0xBD, 0xA8, 0x5C, 0x8E, 0x0D, 0xA7
|
||||
};
|
||||
-
|
||||
+#endif
|
||||
/* AES-256 GCM test data */
|
||||
static const unsigned char aes_256_gcm_key[] = {
|
||||
0x92, 0xe1, 0x1d, 0xcd, 0xaa, 0x86, 0x6f, 0x5c,
|
||||
@@ -315,6 +316,7 @@ static const ST_KAT_CIPHER st_kat_cipher
|
||||
CIPHER_MODE_DECRYPT,
|
||||
ITM(aes_128_ecb_key)
|
||||
},
|
||||
+#if 0
|
||||
#ifndef OPENSSL_NO_DES
|
||||
{
|
||||
{
|
||||
@@ -327,6 +329,7 @@ static const ST_KAT_CIPHER st_kat_cipher
|
||||
ITM(tdes_key)
|
||||
}
|
||||
#endif
|
||||
+#endif
|
||||
};
|
||||
|
||||
static const char hkdf_digest[] = "SHA256";
|
||||
Index: openssl-3.5.0-beta1/test/evp_libctx_test.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/evp_libctx_test.c
|
||||
+++ openssl-3.5.0-beta1/test/evp_libctx_test.c
|
||||
@@ -831,7 +831,9 @@ int setup_tests(void)
|
||||
ADD_TEST(kem_invalid_keytype);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_DES
|
||||
- ADD_TEST(test_cipher_tdes_randkey);
|
||||
+ if (strcmp(prov_name, "fips") != 0) {
|
||||
+ ADD_TEST(test_cipher_tdes_randkey);
|
||||
+ }
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
Index: openssl-3.5.0-beta1/test/recipes/30-test_evp_data/evpciph_des3_common.txt
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/30-test_evp_data/evpciph_des3_common.txt
|
||||
+++ openssl-3.5.0-beta1/test/recipes/30-test_evp_data/evpciph_des3_common.txt
|
||||
@@ -14,7 +14,7 @@
|
||||
Title = DES3 Tests
|
||||
|
||||
# DES EDE3 CBC tests (from destest)
|
||||
-FIPSversion = <3.4.0
|
||||
+Availablein = default
|
||||
Cipher = DES-EDE3-CBC
|
||||
Key = 0123456789abcdeff1e0d3c2b5a49786fedcba9876543210
|
||||
IV = fedcba9876543210
|
||||
@@ -24,8 +24,7 @@ NextIV = 1c673812cfde9675
|
||||
|
||||
# DES EDE3 ECB test
|
||||
# FIPS(3.0.0): has a bug in the IV length #17591
|
||||
-FIPSversion = >3.0.0
|
||||
-FIPSversion = <3.4.0
|
||||
+Availablein = default
|
||||
Cipher = DES-EDE3-ECB
|
||||
Key = 0123456789abcdeff1e0d3c2b5a49786fedcba9876543210
|
||||
Plaintext = 37363534333231204E6F77206973207468652074696D6520666F722000000000
|
||||
@@ -42,7 +41,6 @@ Ciphertext = 4d1332e49f380e23d80a0d8b2ba
|
||||
|
||||
# Test that DES3 CBC mode encryption fails because it is not FIPS approved
|
||||
Availablein = fips
|
||||
-FIPSversion = >=3.4.0
|
||||
Cipher = DES-EDE3-CBC
|
||||
Key = 0123456789abcdeff1e0d3c2b5a49786fedcba9876543210
|
||||
IV = fedcba9876543210
|
||||
@@ -52,7 +50,6 @@ Result = CIPHERINIT_ERROR
|
||||
|
||||
# Test that DES3 EBC mode encryption fails because it is not FIPS approved
|
||||
Availablein = fips
|
||||
-FIPSversion = >=3.4.0
|
||||
Cipher = DES-EDE3-ECB
|
||||
Key = 0123456789abcdeff1e0d3c2b5a49786fedcba9876543210
|
||||
Plaintext = 37363534333231204E6F77206973207468652074696D6520666F722000000000
|
||||
@@ -62,8 +59,7 @@ Result = CIPHERINIT_ERROR
|
||||
Title = DES3 FIPS Indicator Tests
|
||||
|
||||
# Test that DES3 CBC mode encryption is not FIPS approved
|
||||
-Availablein = fips
|
||||
-FIPSversion = >=3.4.0
|
||||
+Availablein = none
|
||||
Cipher = DES-EDE3-CBC
|
||||
Unapproved = 1
|
||||
CtrlInit = encrypt-check:0
|
||||
@@ -74,8 +70,7 @@ Plaintext = 37363534333231204E6F77206973
|
||||
Ciphertext = 3FE301C962AC01D02213763C1CBD4CDC799657C064ECF5D41C673812CFDE9675
|
||||
|
||||
# Test that DES3 ECB mode encryption is not FIPS approved
|
||||
-Availablein = fipss
|
||||
-FIPSversion = >=3.4.0
|
||||
+Availablein = none
|
||||
Cipher = DES-EDE3-ECB
|
||||
Operation = ENCRYPT
|
||||
Unapproved = 1
|
||||
Index: openssl-3.5.0-beta1/test/recipes/80-test_cms.t
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/80-test_cms.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/80-test_cms.t
|
||||
@@ -398,7 +398,7 @@ my @smime_cms_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "encrypted content test streaming PEM format, triple DES key",
|
||||
+ [ "encrypted content test streaming PEM format, triple DES key, no SUSE FIPS",
|
||||
[ "{cmd1}", @defaultprov, "-EncryptedData_encrypt", "-in", $smcont, "-outform", "PEM",
|
||||
"-des3", "-secretkey", "000102030405060708090A0B0C0D0E0F1011121314151617",
|
||||
"-stream", "-out", "{output}.cms" ],
|
377
openssl-FIPS-NO-DSA-Support.patch
Normal file
377
openssl-FIPS-NO-DSA-Support.patch
Normal file
@@ -0,0 +1,377 @@
|
||||
From f5c420d8e5eed82bf4a6712085a18746d2bc7aff Mon Sep 17 00:00:00 2001
|
||||
From: Simo Sorce <simo@redhat.com>
|
||||
Date: Fri, 7 Mar 2025 18:10:52 -0500
|
||||
Subject: [PATCH 46/53] FIPS: NO DSA Support
|
||||
|
||||
Signed-off-by: Simo Sorce <simo@redhat.com>
|
||||
---
|
||||
providers/fips/fipsprov.c | 8 +++++---
|
||||
providers/fips/self_test_data.inc | 6 +++++-
|
||||
test/acvp_test.c | 2 ++
|
||||
test/endecode_test.c | 2 ++
|
||||
test/recipes/15-test_gendsa.t | 2 +-
|
||||
test/recipes/20-test_cli_fips.t | 3 +--
|
||||
test/recipes/30-test_evp.t | 1 -
|
||||
test/recipes/30-test_evp_data/evppkey_dsa.txt | 18 ++++++++++++++++-
|
||||
test/recipes/80-test_cms.t | 20 +++++++++----------
|
||||
9 files changed, 43 insertions(+), 19 deletions(-)
|
||||
|
||||
Index: openssl-3.5.0-beta1/providers/fips/fipsprov.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/providers/fips/fipsprov.c
|
||||
+++ openssl-3.5.0-beta1/providers/fips/fipsprov.c
|
||||
@@ -434,7 +434,8 @@ static const OSSL_ALGORITHM fips_keyexch
|
||||
};
|
||||
|
||||
static const OSSL_ALGORITHM fips_signature[] = {
|
||||
-#ifndef OPENSSL_NO_DSA
|
||||
+/* We don't certify DSA in our FIPS provider */
|
||||
+#if 0 /* #ifndef OPENSSL_NO_DSA */
|
||||
{ PROV_NAMES_DSA, FIPS_DEFAULT_PROPERTIES, ossl_dsa_signature_functions },
|
||||
{ PROV_NAMES_DSA_SHA1, FIPS_DEFAULT_PROPERTIES, ossl_dsa_sha1_signature_functions },
|
||||
{ PROV_NAMES_DSA_SHA224, FIPS_DEFAULT_PROPERTIES, ossl_dsa_sha224_signature_functions },
|
||||
@@ -626,8 +627,9 @@ static const OSSL_ALGORITHM fips_keymgmt
|
||||
PROV_DESCS_DHX },
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_DSA
|
||||
- { PROV_NAMES_DSA, FIPS_DEFAULT_PROPERTIES, ossl_dsa_keymgmt_functions,
|
||||
- PROV_DESCS_DSA },
|
||||
+ /* We don't certify DSA in our FIPS provider */
|
||||
+ /* { PROV_NAMES_DSA, FIPS_DEFAULT_PROPERTIES, ossl_dsa_keymgmt_functions,
|
||||
+ PROV_DESCS_DSA }, */
|
||||
#endif
|
||||
{ PROV_NAMES_RSA, FIPS_DEFAULT_PROPERTIES, ossl_rsa_keymgmt_functions,
|
||||
PROV_DESCS_RSA },
|
||||
Index: openssl-3.5.0-beta1/providers/fips/self_test_data.inc
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/providers/fips/self_test_data.inc
|
||||
+++ openssl-3.5.0-beta1/providers/fips/self_test_data.inc
|
||||
@@ -1522,8 +1522,9 @@ static const unsigned char ed448_expecte
|
||||
# endif /* OPENSSL_NO_ECX */
|
||||
#endif /* OPENSSL_NO_EC */
|
||||
|
||||
-#ifndef OPENSSL_NO_DSA
|
||||
/* dsa 2048 */
|
||||
+#if 0
|
||||
+#ifndef OPENSSL_NO_DSA
|
||||
static const unsigned char dsa_p[] = {
|
||||
0xa2, 0x9b, 0x88, 0x72, 0xce, 0x8b, 0x84, 0x23,
|
||||
0xb7, 0xd5, 0xd2, 0x1d, 0x4b, 0x02, 0xf5, 0x7e,
|
||||
@@ -1651,6 +1652,7 @@ static const ST_KAT_PARAM dsa_key[] = {
|
||||
ST_KAT_PARAM_END()
|
||||
};
|
||||
#endif /* OPENSSL_NO_DSA */
|
||||
+#endif
|
||||
|
||||
#ifndef OPENSSL_NO_ML_DSA
|
||||
static const unsigned char ml_dsa_65_pub_key[] = {
|
||||
@@ -3013,6 +3015,7 @@ static const ST_KAT_SIGN st_kat_sign_tes
|
||||
},
|
||||
# endif /* OPENSSL_NO_ECX */
|
||||
#endif /* OPENSSL_NO_EC */
|
||||
+#if 0
|
||||
#ifndef OPENSSL_NO_DSA
|
||||
{
|
||||
OSSL_SELF_TEST_DESC_SIGN_DSA,
|
||||
@@ -3025,6 +3028,7 @@ static const ST_KAT_SIGN st_kat_sign_tes
|
||||
ITM(dsa_expected_sig)
|
||||
},
|
||||
#endif /* OPENSSL_NO_DSA */
|
||||
+#endif
|
||||
|
||||
#ifndef OPENSSL_NO_ML_DSA
|
||||
{
|
||||
Index: openssl-3.5.0-beta1/test/acvp_test.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/acvp_test.c
|
||||
+++ openssl-3.5.0-beta1/test/acvp_test.c
|
||||
@@ -1735,6 +1735,7 @@ int setup_tests(void)
|
||||
OSSL_NELEM(dh_safe_prime_keyver_data));
|
||||
#endif /* OPENSSL_NO_DH */
|
||||
|
||||
+#if 0 /* SUSE/openSUSE FIPS provider doesn't have fips=yes property on DSA */
|
||||
#ifndef OPENSSL_NO_DSA
|
||||
dsasign_allowed = fips_provider_version_lt(libctx, 3, 4, 0);
|
||||
ADD_ALL_TESTS(dsa_keygen_test, OSSL_NELEM(dsa_keygen_data));
|
||||
@@ -1743,6 +1744,7 @@ int setup_tests(void)
|
||||
ADD_ALL_TESTS(dsa_siggen_test, OSSL_NELEM(dsa_siggen_data));
|
||||
ADD_ALL_TESTS(dsa_sigver_test, OSSL_NELEM(dsa_sigver_data));
|
||||
#endif /* OPENSSL_NO_DSA */
|
||||
+#endif
|
||||
|
||||
#ifndef OPENSSL_NO_EC
|
||||
ec_cofactors = fips_provider_version_ge(libctx, 3, 4, 0);
|
||||
Index: openssl-3.5.0-beta1/test/endecode_test.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/endecode_test.c
|
||||
+++ openssl-3.5.0-beta1/test/endecode_test.c
|
||||
@@ -1536,6 +1536,7 @@ int setup_tests(void)
|
||||
* so no legacy tests.
|
||||
*/
|
||||
#endif
|
||||
+ if (is_fips == 0) {
|
||||
#ifndef OPENSSL_NO_DSA
|
||||
ADD_TEST_SUITE(DSA);
|
||||
ADD_TEST_SUITE_PARAMS(DSA);
|
||||
@@ -1546,6 +1547,7 @@ int setup_tests(void)
|
||||
ADD_TEST_SUITE_PROTECTED_PVK(DSA);
|
||||
# endif
|
||||
#endif
|
||||
+ }
|
||||
#ifndef OPENSSL_NO_EC
|
||||
ADD_TEST(ec_encode_to_data_multi);
|
||||
ADD_TEST_SUITE(EC);
|
||||
Index: openssl-3.5.0-beta1/test/recipes/15-test_gendsa.t
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/15-test_gendsa.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/15-test_gendsa.t
|
||||
@@ -24,7 +24,7 @@ use lib bldtop_dir('.');
|
||||
plan skip_all => "This test is unsupported in a no-dsa build"
|
||||
if disabled("dsa");
|
||||
|
||||
-my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
|
||||
+my $no_fips = 1;
|
||||
|
||||
plan tests =>
|
||||
($no_fips ? 0 : 2) # FIPS related tests
|
||||
Index: openssl-3.5.0-beta1/test/recipes/20-test_cli_fips.t
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/20-test_cli_fips.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/20-test_cli_fips.t
|
||||
@@ -283,8 +283,7 @@ SKIP: {
|
||||
}
|
||||
|
||||
SKIP : {
|
||||
- skip "FIPS DSA tests because of no dsa in this build", 1
|
||||
- if disabled("dsa") || $dsasignpass == '0';
|
||||
+ skip "FIPS DSA tests because of no dsa in this build", 1;
|
||||
|
||||
subtest DSA => sub {
|
||||
my $testtext_prefix = 'DSA';
|
||||
Index: openssl-3.5.0-beta1/test/recipes/30-test_evp.t
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/30-test_evp.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/30-test_evp.t
|
||||
@@ -166,7 +166,6 @@ my @defltfiles = qw(
|
||||
push @defltfiles, qw(evppkey_brainpool.txt) unless $no_ec;
|
||||
push @defltfiles, qw(evppkey_ecdsa_rfc6979.txt) unless $no_ec;
|
||||
push @defltfiles, qw(evppkey_ecx_kem.txt) unless $no_ecx;
|
||||
-push @defltfiles, qw(evppkey_dsa_rfc6979.txt) unless $no_dsa;
|
||||
push @defltfiles, qw(evppkey_sm2.txt) unless $no_sm2;
|
||||
push @defltfiles, qw(evpciph_aes_gcm_siv.txt) unless $no_siv;
|
||||
push @defltfiles, qw(evpciph_aes_siv.txt) unless $no_siv;
|
||||
Index: openssl-3.5.0-beta1/test/recipes/30-test_evp_data/evppkey_dsa.txt
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/30-test_evp_data/evppkey_dsa.txt
|
||||
+++ openssl-3.5.0-beta1/test/recipes/30-test_evp_data/evppkey_dsa.txt
|
||||
@@ -44,17 +44,22 @@ PrivPubKeyPair = DSA-1024:DSA-1024-PUBLI
|
||||
|
||||
Title = DSA tests
|
||||
|
||||
+## SUSE all SHA1 tests are unavailable
|
||||
+
|
||||
+Availablein = none
|
||||
Verify = DSA-1024
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
Output = 302d021500942b8c5850e05b59e24495116b1e8559e51b610e0214237aedf272d91f2397f63c9fc8790e1a6cde5d87
|
||||
|
||||
+Availablein = none
|
||||
Verify = DSA-1024-PUBLIC
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
Output = 302d021500942b8c5850e05b59e24495116b1e8559e51b610e0214237aedf272d91f2397f63c9fc8790e1a6cde5d87
|
||||
|
||||
# Modified signature
|
||||
+Availablein = none
|
||||
Verify = DSA-1024-PUBLIC
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
@@ -62,6 +67,7 @@ Output = 302d021500942b8c5850e05b59e2449
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
# Digest too short
|
||||
+Availablein = none
|
||||
Verify = DSA-1024-PUBLIC
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF123"
|
||||
@@ -69,6 +75,7 @@ Output = 302d021500942b8c5850e05b59e2449
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
# Digest too long
|
||||
+Availablein = none
|
||||
Verify = DSA-1024-PUBLIC
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF12345"
|
||||
@@ -76,12 +83,14 @@ Output = 302d021500942b8c5850e05b59e2449
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
# Garbage after signature
|
||||
+Availablein = none
|
||||
Verify = DSA-1024-PUBLIC
|
||||
Input = "0123456789ABCDEF1234"
|
||||
Output = 302d021500942b8c5850e05b59e24495116b1e8559e51b610e0214237aedf272d91f2397f63c9fc8790e1a6cde5d8700
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
# Invalid tag
|
||||
+Availablein = none
|
||||
Verify = DSA-1024-PUBLIC
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
@@ -89,6 +98,7 @@ Output = 312d021500942b8c5850e05b59e2449
|
||||
Result = VERIFY_ERROR
|
||||
|
||||
# BER signature
|
||||
+Availablein = none
|
||||
Verify = DSA-1024-PUBLIC
|
||||
Ctrl = digest:SHA1
|
||||
Input = "0123456789ABCDEF1234"
|
||||
@@ -277,6 +287,7 @@ Output = 00
|
||||
Result = DIGESTSIGNINIT_ERROR
|
||||
|
||||
# Test sign with a 2048 bit key with N == 224 is allowed in fips mode
|
||||
+Availablein = none
|
||||
FIPSversion = <3.4.0
|
||||
DigestSign = SHA256
|
||||
Key = DSA-2048-224
|
||||
@@ -285,6 +296,7 @@ Output = 00
|
||||
Result = SIGNATURE_MISMATCH
|
||||
|
||||
# Test sign with a 2048 bit key with N == 256 is allowed in fips mode
|
||||
+Availablein = none
|
||||
FIPSversion = <3.4.0
|
||||
DigestSign = SHA256
|
||||
Key = DSA-2048-256
|
||||
@@ -292,6 +304,7 @@ Input = "Hello"
|
||||
Result = SIGNATURE_MISMATCH
|
||||
|
||||
# Test sign with a 3072 bit key with N == 256 is allowed in fips mode
|
||||
+Availablein = none
|
||||
FIPSversion = <3.4.0
|
||||
DigestSign = SHA256
|
||||
Key = DSA-3072-256
|
||||
@@ -299,6 +312,7 @@ Input = "Hello"
|
||||
Result = SIGNATURE_MISMATCH
|
||||
|
||||
# Test sign with a 2048 bit SHA3 is allowed in fips mode
|
||||
+Availablein = none
|
||||
FIPSversion = <3.4.0
|
||||
DigestSign = SHA3-224
|
||||
Key = DSA-2048-256
|
||||
@@ -306,19 +320,21 @@ Input = "Hello"
|
||||
Result = SIGNATURE_MISMATCH
|
||||
|
||||
# Test verify with a 1024 bit key is allowed in fips mode
|
||||
+Availablein = default
|
||||
DigestVerify = SHA256
|
||||
Key = DSA-1024
|
||||
Input = "Hello "
|
||||
Output = 302c02142e32c8a5b0bd19b2ba33fd9c78aad3729dcb1b9e02142c006f7726a9d6833d414865b95167ea5f4f7713
|
||||
|
||||
# Test verify with SHA1 is allowed in fips mode
|
||||
+Availablein = none
|
||||
DigestVerify = SHA1
|
||||
Key = DSA-1024
|
||||
Input = "Hello "
|
||||
Output = 302c0214602d21ed37e46051bb3d06cc002adddeb4cdb3bd02144f39f75587b286588862d06366b2f29bddaf8cf6
|
||||
|
||||
# Test verify with a 2048/160 bit key is allowed in fips mode
|
||||
-FIPSversion = >3.1.1
|
||||
+Availablein = default
|
||||
DigestVerify = SHA256
|
||||
Key = DSA-2048-160
|
||||
Input = "Hello"
|
||||
Index: openssl-3.5.0-beta1/test/recipes/80-test_cms.t
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/80-test_cms.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/80-test_cms.t
|
||||
@@ -107,7 +107,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed content DER format, DSA key",
|
||||
+ [ "signed content DER format, DSA key, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER", "-nodetach",
|
||||
"-signer", catfile($smdir, "smdsa1.pem"), "-out", "{output}.cms" ],
|
||||
[ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "DER",
|
||||
@@ -115,7 +115,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed detached content DER format, DSA key",
|
||||
+ [ "signed detached content DER format, DSA key, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
|
||||
"-signer", catfile($smdir, "smdsa1.pem"), "-out", "{output}.cms" ],
|
||||
[ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "DER",
|
||||
@@ -124,7 +124,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed detached content DER format, add RSA signer (with DSA existing)",
|
||||
+ [ "signed detached content DER format, add RSA signer (with DSA existing), no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
|
||||
"-signer", catfile($smdir, "smdsa1.pem"), "-out", "{output}.cms" ],
|
||||
[ "{cmd1}", @prov, "-resign", "-in", "{output}.cms", "-inform", "DER", "-outform", "DER",
|
||||
@@ -135,7 +135,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed content test streaming BER format, DSA key",
|
||||
+ [ "signed content test streaming BER format, DSA key, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
|
||||
"-nodetach", "-stream",
|
||||
"-signer", catfile($smdir, "smdsa1.pem"), "-out", "{output}.cms" ],
|
||||
@@ -144,7 +144,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed content test streaming BER format, 2 DSA and 2 RSA keys",
|
||||
+ [ "signed content test streaming BER format, 2 DSA and 2 RSA keys, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
|
||||
"-nodetach", "-stream",
|
||||
"-signer", $smrsa1,
|
||||
@@ -157,7 +157,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed content test streaming BER format, 2 DSA and 2 RSA keys, no attributes",
|
||||
+ [ "signed content test streaming BER format, 2 DSA and 2 RSA keys, no attributes, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
|
||||
"-noattr", "-nodetach", "-stream",
|
||||
"-signer", $smrsa1,
|
||||
@@ -187,7 +187,7 @@ my @smime_pkcs7_tests = (
|
||||
\&zero_compare
|
||||
],
|
||||
|
||||
- [ "signed content test streaming S/MIME format, 2 DSA and 2 RSA keys",
|
||||
+ [ "signed content test streaming S/MIME format, 2 DSA and 2 RSA keys, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-nodetach",
|
||||
"-signer", $smrsa1,
|
||||
"-signer", catfile($smdir, "smrsa2.pem"),
|
||||
@@ -199,7 +199,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed content test streaming multipart S/MIME format, 2 DSA and 2 RSA keys",
|
||||
+ [ "signed content test streaming multipart S/MIME format, 2 DSA and 2 RSA keys, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont,
|
||||
"-signer", $smrsa1,
|
||||
"-signer", catfile($smdir, "smrsa2.pem"),
|
||||
@@ -265,7 +265,7 @@ if ($no_fips || $old_fips) {
|
||||
|
||||
my @smime_cms_tests = (
|
||||
|
||||
- [ "signed content test streaming BER format, 2 DSA and 2 RSA keys, keyid",
|
||||
+ [ "signed content test streaming BER format, 2 DSA and 2 RSA keys, keyid, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
|
||||
"-nodetach", "-keyid",
|
||||
"-signer", $smrsa1,
|
||||
@@ -278,7 +278,7 @@ my @smime_cms_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed content test streaming PEM format, 2 DSA and 2 RSA keys",
|
||||
+ [ "signed content test streaming PEM format, 2 DSA and 2 RSA keys, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "PEM", "-nodetach",
|
||||
"-signer", $smrsa1,
|
||||
"-signer", catfile($smdir, "smrsa2.pem"),
|
277
openssl-FIPS-NO-Kmac.patch
Normal file
277
openssl-FIPS-NO-Kmac.patch
Normal file
@@ -0,0 +1,277 @@
|
||||
From cc0b5ccd6ee404b4faa969d19440078bc8b49f35 Mon Sep 17 00:00:00 2001
|
||||
From: Simo Sorce <simo@redhat.com>
|
||||
Date: Fri, 7 Mar 2025 18:22:07 -0500
|
||||
Subject: [PATCH 48/53] FIPS: NO Kmac
|
||||
|
||||
Signed-off-by: Simo Sorce <simo@redhat.com>
|
||||
---
|
||||
providers/fips/fipsprov.c | 10 +++++----
|
||||
providers/fips/self_test_data.inc | 4 ++++
|
||||
test/recipes/30-test_evp_data/evpkdf_ss.txt | 2 ++
|
||||
.../30-test_evp_data/evpmac_common.txt | 22 +++++++++++++++++++
|
||||
4 files changed, 34 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/providers/fips/fipsprov.c b/providers/fips/fipsprov.c
|
||||
index 30f0c8ca14..00b7d1e2aa 100644
|
||||
--- a/providers/fips/fipsprov.c
|
||||
+++ b/providers/fips/fipsprov.c
|
||||
@@ -293,10 +293,11 @@ static const OSSL_ALGORITHM fips_digests[] = {
|
||||
* KECCAK-KMAC-128 and KECCAK-KMAC-256 as hashes are mostly useful for
|
||||
* KMAC128 and KMAC256.
|
||||
*/
|
||||
- { PROV_NAMES_KECCAK_KMAC_128, FIPS_DEFAULT_PROPERTIES,
|
||||
+ /* We don't certify KECCAK in our FIPS provider */
|
||||
+ /* { PROV_NAMES_KECCAK_KMAC_128, FIPS_DEFAULT_PROPERTIES,
|
||||
ossl_keccak_kmac_128_functions },
|
||||
{ PROV_NAMES_KECCAK_KMAC_256, FIPS_DEFAULT_PROPERTIES,
|
||||
- ossl_keccak_kmac_256_functions },
|
||||
+ ossl_keccak_kmac_256_functions }, */
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
@@ -369,8 +370,9 @@ static const OSSL_ALGORITHM fips_macs[] = {
|
||||
#endif
|
||||
{ PROV_NAMES_GMAC, FIPS_DEFAULT_PROPERTIES, ossl_gmac_functions },
|
||||
{ PROV_NAMES_HMAC, FIPS_DEFAULT_PROPERTIES, ossl_hmac_functions },
|
||||
- { PROV_NAMES_KMAC_128, FIPS_DEFAULT_PROPERTIES, ossl_kmac128_functions },
|
||||
- { PROV_NAMES_KMAC_256, FIPS_DEFAULT_PROPERTIES, ossl_kmac256_functions },
|
||||
+ /* We don't certify KMAC in our FIPS provider */
|
||||
+ /*{ PROV_NAMES_KMAC_128, FIPS_DEFAULT_PROPERTIES, ossl_kmac128_functions },
|
||||
+ { PROV_NAMES_KMAC_256, FIPS_DEFAULT_PROPERTIES, ossl_kmac256_functions }, */
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
diff --git a/providers/fips/self_test_data.inc b/providers/fips/self_test_data.inc
|
||||
index 6a69e1687b..f3059a8446 100644
|
||||
--- a/providers/fips/self_test_data.inc
|
||||
+++ b/providers/fips/self_test_data.inc
|
||||
@@ -544,6 +544,7 @@ static const ST_KAT_PARAM kbkdf_params[] = {
|
||||
ST_KAT_PARAM_END()
|
||||
};
|
||||
|
||||
+#if 0
|
||||
static const char kbkdf_kmac_mac[] = "KMAC128";
|
||||
static unsigned char kbkdf_kmac_label[] = {
|
||||
0xB5, 0xB5, 0xF3, 0x71, 0x9F, 0xBE, 0x5B, 0x3D,
|
||||
@@ -570,6 +571,7 @@ static const ST_KAT_PARAM kbkdf_kmac_params[] = {
|
||||
ST_KAT_PARAM_OCTET(OSSL_KDF_PARAM_INFO, kbkdf_kmac_context),
|
||||
ST_KAT_PARAM_END()
|
||||
};
|
||||
+#endif
|
||||
|
||||
static const char tls13_kdf_digest[] = "SHA256";
|
||||
static int tls13_kdf_extract_mode = EVP_KDF_HKDF_MODE_EXTRACT_ONLY;
|
||||
@@ -660,12 +662,14 @@ static const ST_KAT_KDF st_kat_kdf_tests[] =
|
||||
kbkdf_params,
|
||||
ITM(kbkdf_expected)
|
||||
},
|
||||
+#if 0
|
||||
{
|
||||
OSSL_SELF_TEST_DESC_KDF_KBKDF_KMAC,
|
||||
OSSL_KDF_NAME_KBKDF,
|
||||
kbkdf_kmac_params,
|
||||
ITM(kbkdf_kmac_expected)
|
||||
},
|
||||
+#endif
|
||||
{
|
||||
OSSL_SELF_TEST_DESC_KDF_HKDF,
|
||||
OSSL_KDF_NAME_HKDF,
|
||||
diff --git a/test/recipes/30-test_evp_data/evpkdf_ss.txt b/test/recipes/30-test_evp_data/evpkdf_ss.txt
|
||||
index 07691ccf57..ce315ecf76 100644
|
||||
--- a/test/recipes/30-test_evp_data/evpkdf_ss.txt
|
||||
+++ b/test/recipes/30-test_evp_data/evpkdf_ss.txt
|
||||
@@ -1171,6 +1171,7 @@ Ctrl.hexsecret = hexsecret:40B6E03711EBEBA14011ACE96CB056DEBAEB6E5E706F99435257C
|
||||
Ctrl.hexinfo = hexinfo:5D437C2F1035A4F1F751E59CF10650171EF5769FCFBE438DFBC5BD8EA724100076447AB804F91DFA680E592FE2621A45DAB4C6A77B678059FC29E572DE4424EB5459F53523002ED38AAB1D9DD96C3523D1907C5EFBAE93DFFE680F716498720110D2A3B9CE9B66DB2884C83E9BEB546754874C0CA1967AF000000400
|
||||
Output = 428979EA52175DC833C04215AC6B4BA89BA4FCAA0E0FA3B4E2C0E264C5746F0A5C788F2907A2C2B90719E396B35A14C4B583C51B9911125D34100FADDC4D94C0D936263CC1EF0B0D526E3891FE1F67BCB94DEA2525B84A8E7949A4CA34F36AEEC55099BF0EC5DE24B86428F4E6E6E23FE9AA443E2BDCF25A77ECD22BF758D554
|
||||
|
||||
+Availablein = default
|
||||
KDF = SSKDF
|
||||
Ctrl.mac = mac:KMAC-128
|
||||
Ctrl.hexsecret = hexsecret:EAD54AE33FFAFFE7875610390ADBA9DFB291EE8C1920CB13452FDF851E0A6DBBB862FD8811F8CB29CDEC13591D8C047065FCD2
|
||||
@@ -1257,6 +1258,7 @@ Ctrl.hexsalt = hexsalt:00
|
||||
Ctrl.hexinfo = hexinfo:861aa2886798231259bd0314
|
||||
Output = 02cfca07797566285b38982b86762abd
|
||||
|
||||
+Availablein = default
|
||||
KDF = SSKDF
|
||||
Ctrl.mac = mac:KMAC-128
|
||||
Ctrl.hexsalt = hexsalt:00000000
|
||||
diff --git a/test/recipes/30-test_evp_data/evpmac_common.txt b/test/recipes/30-test_evp_data/evpmac_common.txt
|
||||
index 831eecbac9..f18b558796 100644
|
||||
--- a/test/recipes/30-test_evp_data/evpmac_common.txt
|
||||
+++ b/test/recipes/30-test_evp_data/evpmac_common.txt
|
||||
@@ -399,6 +399,7 @@ Input = 68F2E77696CE7AE8E2CA4EC588E541002E58495C08000F101112131415161718191A1B1C
|
||||
Result = MAC_INIT_ERROR
|
||||
Reason = invalid mode
|
||||
|
||||
+Availablein = default
|
||||
Title = KMAC Tests (From NIST)
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
@@ -409,12 +410,14 @@ Ctrl = xof:0
|
||||
OutputSize = 32
|
||||
BlockSize = 168
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
Custom = "My Tagged Application"
|
||||
Output = 3B1FBA963CD8B0B59E8C1A6D71888B7143651AF8BA0A7070C0979E2811324AA5
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -422,6 +425,7 @@ Custom = "My Tagged Application"
|
||||
Output = 1F5B4E6CCA02209E0DCB5CA635B89A15E271ECC760071DFD805FAA38F9729230
|
||||
Ctrl = size:32
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
@@ -430,12 +434,14 @@ Output = 20C570C31346F703C9AC36C61C03CB64C3970D0CFC787E9B79599D273A68D2F7F69D4CC
|
||||
OutputSize = 64
|
||||
BlockSize = 136
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
Custom = ""
|
||||
Output = 75358CF39E41494E949707927CEE0AF20A3FF553904C86B08F21CC414BCFD691589D27CF5E15369CBBFF8B9A4C2EB17800855D0235FF635DA82533EC6B759B69
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -445,12 +451,14 @@ Ctrl = size:64
|
||||
|
||||
Title = KMAC XOF Tests (From NIST)
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
Output = CD83740BBD92CCC8CF032B1481A0F4460E7CA9DD12B08A0C4031178BACD6EC35
|
||||
XOF = 1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
@@ -458,6 +466,7 @@ Custom = "My Tagged Application"
|
||||
Output = 31A44527B4ED9F5C6101D11DE6D26F0620AA5C341DEF41299657FE9DF1A3B16C
|
||||
XOF = 1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -466,6 +475,7 @@ Output = 47026C7CD793084AA0283C253EF658490C0DB61438B8326FE9BDDF281B83AE0F
|
||||
XOF = 1
|
||||
Ctrl = size:32
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
@@ -473,6 +483,7 @@ Custom = "My Tagged Application"
|
||||
Output = 1755133F1534752AAD0748F2C706FB5C784512CAB835CD15676B16C0C6647FA96FAA7AF634A0BF8FF6DF39374FA00FAD9A39E322A7C92065A64EB1FB0801EB2B
|
||||
XOF = 1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -480,6 +491,7 @@ Custom = ""
|
||||
Output = FF7B171F1E8A2B24683EED37830EE797538BA8DC563F6DA1E667391A75EDC02CA633079F81CE12A25F45615EC89972031D18337331D24CEB8F8CA8E6A19FD98B
|
||||
XOF = 1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -490,6 +502,7 @@ XOF = 1
|
||||
|
||||
Title = KMAC long customisation string (from NIST ACVP)
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 9743DBF93102FAF11227B154B8ACD16CF142671F7AA16C559A393A38B4CEF461ED29A6A328D7379C99718790E38B54CA25E9E831CBEA463EE704D1689F94629AB795DF0C77F756DA743309C0E054596BA2D9CC1768ACF7CD351D9A7EB1ABD0A3
|
||||
Input = BA63AC9C711F143CCE7FF92D0322649D1BE437D805FD225C0A2879A008373EC3BCCDB09971FAD2BCE5F4347AF7E5238EF01A90ED34193D6AFC1D
|
||||
@@ -500,12 +513,14 @@ XOF = 1
|
||||
|
||||
Title = KMAC XOF Tests via ctrl (From NIST)
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
Output = CD83740BBD92CCC8CF032B1481A0F4460E7CA9DD12B08A0C4031178BACD6EC35
|
||||
Ctrl = xof:1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
@@ -513,6 +528,7 @@ Custom = "My Tagged Application"
|
||||
Output = 31A44527B4ED9F5C6101D11DE6D26F0620AA5C341DEF41299657FE9DF1A3B16C
|
||||
Ctrl = xof:1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -521,6 +537,7 @@ Output = 47026C7CD793084AA0283C253EF658490C0DB61438B8326FE9BDDF281B83AE0F
|
||||
Ctrl = xof:1
|
||||
Ctrl = size:32
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
@@ -528,6 +545,7 @@ Custom = "My Tagged Application"
|
||||
Output = 1755133F1534752AAD0748F2C706FB5C784512CAB835CD15676B16C0C6647FA96FAA7AF634A0BF8FF6DF39374FA00FAD9A39E322A7C92065A64EB1FB0801EB2B
|
||||
Ctrl = xof:1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -535,6 +553,7 @@ Custom = ""
|
||||
Output = FF7B171F1E8A2B24683EED37830EE797538BA8DC563F6DA1E667391A75EDC02CA633079F81CE12A25F45615EC89972031D18337331D24CEB8F8CA8E6A19FD98B
|
||||
Ctrl = xof:1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -545,6 +564,7 @@ Ctrl = xof:1
|
||||
|
||||
Title = KMAC long customisation string via ctrl (from NIST ACVP)
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 9743DBF93102FAF11227B154B8ACD16CF142671F7AA16C559A393A38B4CEF461ED29A6A328D7379C99718790E38B54CA25E9E831CBEA463EE704D1689F94629AB795DF0C77F756DA743309C0E054596BA2D9CC1768ACF7CD351D9A7EB1ABD0A3
|
||||
Input = BA63AC9C711F143CCE7FF92D0322649D1BE437D805FD225C0A2879A008373EC3BCCDB09971FAD2BCE5F4347AF7E5238EF01A90ED34193D6AFC1D
|
||||
@@ -555,6 +575,7 @@ Ctrl = xof:1
|
||||
|
||||
Title = KMAC long customisation string negative test
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -564,6 +585,7 @@ Reason = invalid custom length
|
||||
|
||||
Title = KMAC output is too large
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
--
|
||||
2.49.0
|
||||
|
33
openssl-FIPS-NO-PQ-ML-SLH-DSA.patch
Normal file
33
openssl-FIPS-NO-PQ-ML-SLH-DSA.patch
Normal file
@@ -0,0 +1,33 @@
|
||||
From 181aed0bb72694e08a87584add058db1dd562576 Mon Sep 17 00:00:00 2001
|
||||
From: Simo Sorce <simo@redhat.com>
|
||||
Date: Fri, 7 Mar 2025 18:24:36 -0500
|
||||
Subject: [PATCH 50/53] FIPS: NO PQ (ML/SLH-DSA)
|
||||
|
||||
Signed-off-by: Simo Sorce <simo@redhat.com>
|
||||
---
|
||||
providers/fips/self_test_data.inc | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/providers/fips/self_test_data.inc b/providers/fips/self_test_data.inc
|
||||
index cdba162674..136a580f25 100644
|
||||
--- a/providers/fips/self_test_data.inc
|
||||
+++ b/providers/fips/self_test_data.inc
|
||||
@@ -3039,6 +3039,7 @@ static const ST_KAT_SIGN st_kat_sign_tests[] = {
|
||||
#endif /* OPENSSL_NO_DSA */
|
||||
#endif
|
||||
|
||||
+#if 0
|
||||
#ifndef OPENSSL_NO_ML_DSA
|
||||
{
|
||||
OSSL_SELF_TEST_DESC_SIGN_ML_DSA,
|
||||
@@ -3083,6 +3084,7 @@ static const ST_KAT_SIGN st_kat_sign_tests[] = {
|
||||
slh_dsa_sig_params, slh_dsa_sig_params
|
||||
},
|
||||
#endif /* OPENSSL_NO_SLH_DSA */
|
||||
+#endif
|
||||
};
|
||||
|
||||
#if !defined(OPENSSL_NO_ML_DSA)
|
||||
--
|
||||
2.49.0
|
||||
|
@@ -1,72 +1,68 @@
|
||||
From 2306fde5556cbcb875d095c09fed01a0f16fe7ec Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Belyavskiy <dbelyavs@redhat.com>
|
||||
Date: Mon, 21 Aug 2023 15:51:55 +0200
|
||||
Subject: [PATCH 40/48] 0085-FIPS-RSA-disable-shake.patch
|
||||
From 63e39e25829ae04c804f1353a1774b27db2b2051 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Wed, 6 Mar 2024 19:17:17 +0100
|
||||
Subject: [PATCH 29/53] FIPS: RSA: Disallow SHAKE in OAEP and PSS
|
||||
|
||||
Patch-name: 0085-FIPS-RSA-disable-shake.patch
|
||||
Patch-id: 85
|
||||
According to FIPS 140-3 IG, section C.C, the SHAKE digest algorithms
|
||||
must not be used in higher-level algorithms (such as RSA-OAEP and
|
||||
RSASSA-PSS):
|
||||
|
||||
"To be used in an approved mode of operation, the SHA-3 hash functions
|
||||
may be implemented either as part of an approved higher-level algorithm,
|
||||
for example, a digital signature algorithm, or as the standalone
|
||||
functions. The SHAKE128 and SHAKE256 extendable-output functions may
|
||||
only be used as the standalone algorithms."
|
||||
|
||||
Add a check to prevent their use as message digest in PSS signatures and
|
||||
as MGF1 hash function in both OAEP and PSS.
|
||||
|
||||
Signed-off-by: Clemens Lang <cllang@redhat.com>
|
||||
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
---
|
||||
crypto/rsa/rsa_oaep.c | 28 ++++++++++++++++++++++++++++
|
||||
crypto/rsa/rsa_oaep.c | 16 ++++++++++++++++
|
||||
crypto/rsa/rsa_pss.c | 16 ++++++++++++++++
|
||||
2 files changed, 44 insertions(+)
|
||||
2 files changed, 32 insertions(+)
|
||||
|
||||
Index: openssl-3.1.7/crypto/rsa/rsa_oaep.c
|
||||
===================================================================
|
||||
--- openssl-3.1.7.orig/crypto/rsa/rsa_oaep.c
|
||||
+++ openssl-3.1.7/crypto/rsa/rsa_oaep.c
|
||||
@@ -78,9 +78,23 @@ int ossl_rsa_padding_add_PKCS1_OAEP_mgf1
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
+
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (EVP_MD_is_a(md, "SHAKE-128") || EVP_MD_is_a(md, "SHAKE-256")) {
|
||||
+ ERR_raise(ERR_LIB_RSA, RSA_R_DIGEST_NOT_ALLOWED);
|
||||
+ return 0;
|
||||
+ }
|
||||
+#endif
|
||||
diff --git a/crypto/rsa/rsa_oaep.c b/crypto/rsa/rsa_oaep.c
|
||||
index 5a1c080fcd..11cd78618b 100644
|
||||
--- a/crypto/rsa/rsa_oaep.c
|
||||
+++ b/crypto/rsa/rsa_oaep.c
|
||||
@@ -76,6 +76,14 @@ int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx,
|
||||
if (mgf1md == NULL)
|
||||
mgf1md = md;
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (EVP_MD_is_a(mgf1md, "SHAKE-128") || EVP_MD_is_a(mgf1md, "SHAKE-256")) {
|
||||
+ if (EVP_MD_is_a(md, "SHAKE-128") || EVP_MD_is_a(md, "SHAKE-256") ||
|
||||
+ EVP_MD_is_a(mgf1md, "SHAKE-128") || EVP_MD_is_a(mgf1md, "SHAKE-256")) {
|
||||
+ ERR_raise(ERR_LIB_RSA, RSA_R_DIGEST_NOT_ALLOWED);
|
||||
+ return 0;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
mdlen = EVP_MD_get_size(md);
|
||||
if (mdlen <= 0) {
|
||||
ERR_raise(ERR_LIB_RSA, RSA_R_INVALID_LENGTH);
|
||||
@@ -203,9 +217,23 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(un
|
||||
#endif
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (EVP_MD_is_a(md, "SHAKE-128") || EVP_MD_is_a(md, "SHAKE-256")) {
|
||||
+ ERR_raise(ERR_LIB_RSA, RSA_R_DIGEST_NOT_ALLOWED);
|
||||
+ return -1;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
#ifdef FIPS_MODULE
|
||||
/* XOF are approved as standalone; Shake256 in Ed448; MGF */
|
||||
if (EVP_MD_xof(md)) {
|
||||
@@ -194,6 +202,14 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
|
||||
if (mgf1md == NULL)
|
||||
mgf1md = md;
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (EVP_MD_is_a(mgf1md, "SHAKE-128") || EVP_MD_is_a(mgf1md, "SHAKE-256")) {
|
||||
+ if (EVP_MD_is_a(md, "SHAKE-128") || EVP_MD_is_a(md, "SHAKE-256") ||
|
||||
+ EVP_MD_is_a(mgf1md, "SHAKE-128") || EVP_MD_is_a(mgf1md, "SHAKE-256")) {
|
||||
+ ERR_raise(ERR_LIB_RSA, RSA_R_DIGEST_NOT_ALLOWED);
|
||||
+ return -1;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
mdlen = EVP_MD_get_size(md);
|
||||
|
||||
if (tlen <= 0 || flen <= 0 || mdlen <= 0)
|
||||
Index: openssl-3.1.7/crypto/rsa/rsa_pss.c
|
||||
===================================================================
|
||||
--- openssl-3.1.7.orig/crypto/rsa/rsa_pss.c
|
||||
+++ openssl-3.1.7/crypto/rsa/rsa_pss.c
|
||||
@@ -53,6 +53,14 @@ int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa,
|
||||
#ifdef FIPS_MODULE
|
||||
/* XOF are approved as standalone; Shake256 in Ed448; MGF */
|
||||
if (EVP_MD_xof(md)) {
|
||||
diff --git a/crypto/rsa/rsa_pss.c b/crypto/rsa/rsa_pss.c
|
||||
index a2bc198a89..2833ca50f3 100644
|
||||
--- a/crypto/rsa/rsa_pss.c
|
||||
+++ b/crypto/rsa/rsa_pss.c
|
||||
@@ -61,6 +61,14 @@ int ossl_rsa_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash,
|
||||
if (mgf1Hash == NULL)
|
||||
mgf1Hash = Hash;
|
||||
|
||||
@@ -79,9 +75,9 @@ Index: openssl-3.1.7/crypto/rsa/rsa_pss.c
|
||||
+#endif
|
||||
+
|
||||
hLen = EVP_MD_get_size(Hash);
|
||||
if (hLen < 0)
|
||||
if (hLen <= 0)
|
||||
goto err;
|
||||
@@ -168,6 +176,14 @@ int RSA_padding_add_PKCS1_PSS_mgf1(RSA *
|
||||
@@ -186,6 +194,14 @@ int ossl_rsa_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM,
|
||||
if (mgf1Hash == NULL)
|
||||
mgf1Hash = Hash;
|
||||
|
||||
@@ -94,5 +90,8 @@ Index: openssl-3.1.7/crypto/rsa/rsa_pss.c
|
||||
+#endif
|
||||
+
|
||||
hLen = EVP_MD_get_size(Hash);
|
||||
if (hLen < 0)
|
||||
if (hLen <= 0)
|
||||
goto err;
|
||||
--
|
||||
2.49.0
|
||||
|
||||
|
@@ -1,54 +1,52 @@
|
||||
From 930e7acf7dd225102b6e88d23f5e2a3f4acea9fa Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Belyavskiy <dbelyavs@redhat.com>
|
||||
Date: Mon, 21 Aug 2023 15:43:57 +0200
|
||||
Subject: [PATCH 37/48]
|
||||
0081-signature-Remove-X9.31-padding-from-FIPS-prov.patch
|
||||
From 0010acdf5d7c1a1285189c36fa2fc46bea93cee8 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Wed, 6 Mar 2024 19:17:16 +0100
|
||||
Subject: [PATCH 32/53] FIPS: RSA: Remove X9.31 padding signatures tests
|
||||
|
||||
Patch-name: 0081-signature-Remove-X9.31-padding-from-FIPS-prov.patch
|
||||
Patch-id: 81
|
||||
The current draft of FIPS 186-5 [1] no longer contains specifications
|
||||
for X9.31 signature padding. Instead, it contains the following
|
||||
information in Appendix E:
|
||||
|
||||
> ANSI X9.31 was withdrawn, so X9.31 RSA signatures were removed from
|
||||
> this standard.
|
||||
|
||||
Since this situation is unlikely to change in future revisions of the
|
||||
draft, and future FIPS 140-3 validations of the provider will require
|
||||
X9.31 to be disabled or marked as not approved with an explicit
|
||||
indicator, disallow this padding mode now.
|
||||
|
||||
Remove the X9.31 tests from the acvp test, since they will always fail
|
||||
now.
|
||||
|
||||
[1]: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5-draft.pdf
|
||||
|
||||
Signed-off-by: Clemens Lang <cllang@redhat.com>
|
||||
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
---
|
||||
providers/implementations/signature/rsa_sig.c | 6 +
|
||||
test/acvp_test.inc | 214 ------------------
|
||||
2 files changed, 6 insertions(+), 214 deletions(-)
|
||||
test/acvp_test.inc | 225 ---------------------------------------------
|
||||
1 file changed, 225 deletions(-)
|
||||
|
||||
Index: openssl-3.2.3/providers/implementations/signature/rsa_sig.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/signature/rsa_sig.c
|
||||
+++ openssl-3.2.3/providers/implementations/signature/rsa_sig.c
|
||||
@@ -1291,7 +1291,13 @@ static int rsa_set_ctx_params(void *vprs
|
||||
err_extra_text = "No padding not allowed with RSA-PSS";
|
||||
goto cont;
|
||||
case RSA_X931_PADDING:
|
||||
+#ifndef FIPS_MODULE
|
||||
err_extra_text = "X.931 padding not allowed with RSA-PSS";
|
||||
+#else /* !defined(FIPS_MODULE) */
|
||||
+ err_extra_text = "X.931 padding no longer allowed in FIPS mode,"
|
||||
+ " since it was removed from FIPS 186-5";
|
||||
+ goto bad_pad;
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
cont:
|
||||
if (RSA_test_flags(prsactx->rsa,
|
||||
RSA_FLAG_TYPE_MASK) == RSA_FLAG_TYPE_RSA)
|
||||
Index: openssl-3.2.3/test/acvp_test.inc
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/acvp_test.inc
|
||||
+++ openssl-3.2.3/test/acvp_test.inc
|
||||
@@ -1214,13 +1214,6 @@ static const struct rsa_siggen_st rsa_si
|
||||
diff --git a/test/acvp_test.inc b/test/acvp_test.inc
|
||||
index 97ec1ff3e5..31fa0eafc6 100644
|
||||
--- a/test/acvp_test.inc
|
||||
+++ b/test/acvp_test.inc
|
||||
@@ -1354,13 +1354,6 @@ static const struct rsa_siggen_st rsa_siggen_data[] = {
|
||||
ITM(rsa_siggen0_msg),
|
||||
NO_PSS_SALT_LEN,
|
||||
},
|
||||
{
|
||||
- {
|
||||
- "x931",
|
||||
- 2048,
|
||||
- "SHA384",
|
||||
- ITM(rsa_siggen0_msg),
|
||||
- NO_PSS_SALT_LEN,
|
||||
- },
|
||||
- {
|
||||
{
|
||||
"pss",
|
||||
2048,
|
||||
"SHA384",
|
||||
@@ -1631,202 +1624,6 @@ static const unsigned char rsa_sigverpss
|
||||
0x5c, 0xea, 0x8a, 0x92, 0x31, 0xd2, 0x11, 0x4b,
|
||||
@@ -1772,202 +1765,6 @@ static const unsigned char rsa_sigverpss_1_sig[] = {
|
||||
0xe9, 0x97, 0x20, 0x35, 0xf8, 0xf1, 0x78, 0xe1
|
||||
};
|
||||
|
||||
-static const unsigned char rsa_sigverx931_0_n[] = {
|
||||
@@ -250,13 +248,24 @@ Index: openssl-3.2.3/test/acvp_test.inc
|
||||
static const struct rsa_sigver_st rsa_sigver_data[] = {
|
||||
{
|
||||
"pkcs1", /* pkcs1v1.5 */
|
||||
@@ -1850,17 +1647,6 @@ static const struct rsa_sigver_st rsa_si
|
||||
@@ -1991,28 +1788,6 @@ static const struct rsa_sigver_st rsa_sigver_data[] = {
|
||||
NO_PSS_SALT_LEN,
|
||||
FAIL
|
||||
},
|
||||
- {
|
||||
- "x931",
|
||||
- 3072,
|
||||
- "SHA1",
|
||||
- ITM(rsa_sigverx931_0_msg),
|
||||
- ITM(rsa_sigverx931_0_n),
|
||||
- ITM(rsa_sigverx931_0_e),
|
||||
- ITM(rsa_sigverx931_0_sig),
|
||||
- NO_PSS_SALT_LEN,
|
||||
- PASS
|
||||
- },
|
||||
- {
|
||||
- "x931",
|
||||
- 3072,
|
||||
- "SHA256",
|
||||
- ITM(rsa_sigverx931_1_msg),
|
||||
- ITM(rsa_sigverx931_1_n),
|
||||
@@ -268,3 +277,6 @@ Index: openssl-3.2.3/test/acvp_test.inc
|
||||
{
|
||||
"pss",
|
||||
4096,
|
||||
--
|
||||
2.49.0
|
||||
|
||||
|
29
openssl-FIPS-SUSE-FIPS-module-version.patch
Normal file
29
openssl-FIPS-SUSE-FIPS-module-version.patch
Normal file
@@ -0,0 +1,29 @@
|
||||
Index: openssl-3.5.0-beta1/providers/fips/fipsprov.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/providers/fips/fipsprov.c
|
||||
+++ openssl-3.5.0-beta1/providers/fips/fipsprov.c
|
||||
@@ -195,18 +195,21 @@ static const OSSL_PARAM *fips_gettable_p
|
||||
|
||||
static int fips_get_params(void *provctx, OSSL_PARAM params[])
|
||||
{
|
||||
+ #define SUSE_FIPS_VENDOR "SUSE Linux Enterprise - OpenSSL FIPS Provider"
|
||||
+ #define SUSE_FIPS_VERSION "SUSE Release"
|
||||
+
|
||||
OSSL_PARAM *p;
|
||||
FIPS_GLOBAL *fgbl = ossl_lib_ctx_get_data(ossl_prov_ctx_get0_libctx(provctx),
|
||||
OSSL_LIB_CTX_FIPS_PROV_INDEX);
|
||||
|
||||
p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_NAME);
|
||||
- if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, FIPS_VENDOR))
|
||||
+ if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, SUSE_FIPS_VENDOR))
|
||||
return 0;
|
||||
p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_VERSION);
|
||||
- if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, OPENSSL_VERSION_STR))
|
||||
+ if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, SUSE_FIPS_VERSION))
|
||||
return 0;
|
||||
p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_BUILDINFO);
|
||||
- if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, OPENSSL_FULL_VERSION_STR))
|
||||
+ if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, SUSE_FIPS_VERSION))
|
||||
return 0;
|
||||
p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_STATUS);
|
||||
if (p != NULL && !OSSL_PARAM_set_int(p, ossl_prov_is_running()))
|
@@ -1,378 +0,0 @@
|
||||
From e385647549c467fe263b68b72dd21bdfb875ee88 Mon Sep 17 00:00:00 2001
|
||||
From: Clemens Lang <cllang@redhat.com>
|
||||
Date: Fri, 22 Jul 2022 17:51:16 +0200
|
||||
Subject: [PATCH 2/2] FIPS: Use FFDHE2048 in self test
|
||||
|
||||
Signed-off-by: Clemens Lang <cllang@redhat.com>
|
||||
---
|
||||
providers/fips/self_test_data.inc | 342 +++++++++++++++---------------
|
||||
1 file changed, 172 insertions(+), 170 deletions(-)
|
||||
|
||||
diff --git a/providers/fips/self_test_data.inc b/providers/fips/self_test_data.inc
|
||||
index a29cc650b5..1b5623833f 100644
|
||||
--- a/providers/fips/self_test_data.inc
|
||||
+++ b/providers/fips/self_test_data.inc
|
||||
@@ -821,188 +821,190 @@ static const ST_KAT_DRBG st_kat_drbg_tests[] =
|
||||
|
||||
#ifndef OPENSSL_NO_DH
|
||||
/* DH KAT */
|
||||
+/* RFC7919 FFDHE2048 p */
|
||||
static const unsigned char dh_p[] = {
|
||||
- 0xdc, 0xca, 0x15, 0x11, 0xb2, 0x31, 0x32, 0x25,
|
||||
- 0xf5, 0x21, 0x16, 0xe1, 0x54, 0x27, 0x89, 0xe0,
|
||||
- 0x01, 0xf0, 0x42, 0x5b, 0xcc, 0xc7, 0xf3, 0x66,
|
||||
- 0xf7, 0x40, 0x64, 0x07, 0xf1, 0xc9, 0xfa, 0x8b,
|
||||
- 0xe6, 0x10, 0xf1, 0x77, 0x8b, 0xb1, 0x70, 0xbe,
|
||||
- 0x39, 0xdb, 0xb7, 0x6f, 0x85, 0xbf, 0x24, 0xce,
|
||||
- 0x68, 0x80, 0xad, 0xb7, 0x62, 0x9f, 0x7c, 0x6d,
|
||||
- 0x01, 0x5e, 0x61, 0xd4, 0x3f, 0xa3, 0xee, 0x4d,
|
||||
- 0xe1, 0x85, 0xf2, 0xcf, 0xd0, 0x41, 0xff, 0xde,
|
||||
- 0x9d, 0x41, 0x84, 0x07, 0xe1, 0x51, 0x38, 0xbb,
|
||||
- 0x02, 0x1d, 0xae, 0xb3, 0x5f, 0x76, 0x2d, 0x17,
|
||||
- 0x82, 0xac, 0xc6, 0x58, 0xd3, 0x2b, 0xd4, 0xb0,
|
||||
- 0x23, 0x2c, 0x92, 0x7d, 0xd3, 0x8f, 0xa0, 0x97,
|
||||
- 0xb3, 0xd1, 0x85, 0x9f, 0xa8, 0xac, 0xaf, 0xb9,
|
||||
- 0x8f, 0x06, 0x66, 0x08, 0xfc, 0x64, 0x4e, 0xc7,
|
||||
- 0xdd, 0xb6, 0xf0, 0x85, 0x99, 0xf9, 0x2a, 0xc1,
|
||||
- 0xb5, 0x98, 0x25, 0xda, 0x84, 0x32, 0x07, 0x7d,
|
||||
- 0xef, 0x69, 0x56, 0x46, 0x06, 0x3c, 0x20, 0x82,
|
||||
- 0x3c, 0x95, 0x07, 0xab, 0x6f, 0x01, 0x76, 0xd4,
|
||||
- 0x73, 0x0d, 0x99, 0x0d, 0xbb, 0xe6, 0x36, 0x1c,
|
||||
- 0xd8, 0xb2, 0xb9, 0x4d, 0x3d, 0x2f, 0x32, 0x9b,
|
||||
- 0x82, 0x09, 0x9b, 0xd6, 0x61, 0xf4, 0x29, 0x50,
|
||||
- 0xf4, 0x03, 0xdf, 0x3e, 0xde, 0x62, 0xa3, 0x31,
|
||||
- 0x88, 0xb0, 0x27, 0x98, 0xba, 0x82, 0x3f, 0x44,
|
||||
- 0xb9, 0x46, 0xfe, 0x9d, 0xf6, 0x77, 0xa0, 0xc5,
|
||||
- 0xa1, 0x23, 0x8e, 0xaa, 0x97, 0xb7, 0x0f, 0x80,
|
||||
- 0xda, 0x8c, 0xac, 0x88, 0xe0, 0x92, 0xb1, 0x12,
|
||||
- 0x70, 0x60, 0xff, 0xbf, 0x45, 0x57, 0x99, 0x94,
|
||||
- 0x01, 0x1d, 0xc2, 0xfa, 0xa5, 0xe7, 0xf6, 0xc7,
|
||||
- 0x62, 0x45, 0xe1, 0xcc, 0x31, 0x22, 0x31, 0xc1,
|
||||
- 0x7d, 0x1c, 0xa6, 0xb1, 0x90, 0x07, 0xef, 0x0d,
|
||||
- 0xb9, 0x9f, 0x9c, 0xb6, 0x0e, 0x1d, 0x5f, 0x69
|
||||
-};
|
||||
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
+ 0xad, 0xf8, 0x54, 0x58, 0xa2, 0xbb, 0x4a, 0x9a,
|
||||
+ 0xaf, 0xdc, 0x56, 0x20, 0x27, 0x3d, 0x3c, 0xf1,
|
||||
+ 0xd8, 0xb9, 0xc5, 0x83, 0xce, 0x2d, 0x36, 0x95,
|
||||
+ 0xa9, 0xe1, 0x36, 0x41, 0x14, 0x64, 0x33, 0xfb,
|
||||
+ 0xcc, 0x93, 0x9d, 0xce, 0x24, 0x9b, 0x3e, 0xf9,
|
||||
+ 0x7d, 0x2f, 0xe3, 0x63, 0x63, 0x0c, 0x75, 0xd8,
|
||||
+ 0xf6, 0x81, 0xb2, 0x02, 0xae, 0xc4, 0x61, 0x7a,
|
||||
+ 0xd3, 0xdf, 0x1e, 0xd5, 0xd5, 0xfd, 0x65, 0x61,
|
||||
+ 0x24, 0x33, 0xf5, 0x1f, 0x5f, 0x06, 0x6e, 0xd0,
|
||||
+ 0x85, 0x63, 0x65, 0x55, 0x3d, 0xed, 0x1a, 0xf3,
|
||||
+ 0xb5, 0x57, 0x13, 0x5e, 0x7f, 0x57, 0xc9, 0x35,
|
||||
+ 0x98, 0x4f, 0x0c, 0x70, 0xe0, 0xe6, 0x8b, 0x77,
|
||||
+ 0xe2, 0xa6, 0x89, 0xda, 0xf3, 0xef, 0xe8, 0x72,
|
||||
+ 0x1d, 0xf1, 0x58, 0xa1, 0x36, 0xad, 0xe7, 0x35,
|
||||
+ 0x30, 0xac, 0xca, 0x4f, 0x48, 0x3a, 0x79, 0x7a,
|
||||
+ 0xbc, 0x0a, 0xb1, 0x82, 0xb3, 0x24, 0xfb, 0x61,
|
||||
+ 0xd1, 0x08, 0xa9, 0x4b, 0xb2, 0xc8, 0xe3, 0xfb,
|
||||
+ 0xb9, 0x6a, 0xda, 0xb7, 0x60, 0xd7, 0xf4, 0x68,
|
||||
+ 0x1d, 0x4f, 0x42, 0xa3, 0xde, 0x39, 0x4d, 0xf4,
|
||||
+ 0xae, 0x56, 0xed, 0xe7, 0x63, 0x72, 0xbb, 0x19,
|
||||
+ 0x0b, 0x07, 0xa7, 0xc8, 0xee, 0x0a, 0x6d, 0x70,
|
||||
+ 0x9e, 0x02, 0xfc, 0xe1, 0xcd, 0xf7, 0xe2, 0xec,
|
||||
+ 0xc0, 0x34, 0x04, 0xcd, 0x28, 0x34, 0x2f, 0x61,
|
||||
+ 0x91, 0x72, 0xfe, 0x9c, 0xe9, 0x85, 0x83, 0xff,
|
||||
+ 0x8e, 0x4f, 0x12, 0x32, 0xee, 0xf2, 0x81, 0x83,
|
||||
+ 0xc3, 0xfe, 0x3b, 0x1b, 0x4c, 0x6f, 0xad, 0x73,
|
||||
+ 0x3b, 0xb5, 0xfc, 0xbc, 0x2e, 0xc2, 0x20, 0x05,
|
||||
+ 0xc5, 0x8e, 0xf1, 0x83, 0x7d, 0x16, 0x83, 0xb2,
|
||||
+ 0xc6, 0xf3, 0x4a, 0x26, 0xc1, 0xb2, 0xef, 0xfa,
|
||||
+ 0x88, 0x6b, 0x42, 0x38, 0x61, 0x28, 0x5c, 0x97,
|
||||
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
|
||||
+};
|
||||
+/* RFC7919 FFDHE2048 q */
|
||||
static const unsigned char dh_q[] = {
|
||||
- 0x89, 0x8b, 0x22, 0x67, 0x17, 0xef, 0x03, 0x9e,
|
||||
- 0x60, 0x3e, 0x82, 0xe5, 0xc7, 0xaf, 0xe4, 0x83,
|
||||
- 0x74, 0xac, 0x5f, 0x62, 0x5c, 0x54, 0xf1, 0xea,
|
||||
- 0x11, 0xac, 0xb5, 0x7d
|
||||
-};
|
||||
+ 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
+ 0xd6, 0xfc, 0x2a, 0x2c, 0x51, 0x5d, 0xa5, 0x4d,
|
||||
+ 0x57, 0xee, 0x2b, 0x10, 0x13, 0x9e, 0x9e, 0x78,
|
||||
+ 0xec, 0x5c, 0xe2, 0xc1, 0xe7, 0x16, 0x9b, 0x4a,
|
||||
+ 0xd4, 0xf0, 0x9b, 0x20, 0x8a, 0x32, 0x19, 0xfd,
|
||||
+ 0xe6, 0x49, 0xce, 0xe7, 0x12, 0x4d, 0x9f, 0x7c,
|
||||
+ 0xbe, 0x97, 0xf1, 0xb1, 0xb1, 0x86, 0x3a, 0xec,
|
||||
+ 0x7b, 0x40, 0xd9, 0x01, 0x57, 0x62, 0x30, 0xbd,
|
||||
+ 0x69, 0xef, 0x8f, 0x6a, 0xea, 0xfe, 0xb2, 0xb0,
|
||||
+ 0x92, 0x19, 0xfa, 0x8f, 0xaf, 0x83, 0x37, 0x68,
|
||||
+ 0x42, 0xb1, 0xb2, 0xaa, 0x9e, 0xf6, 0x8d, 0x79,
|
||||
+ 0xda, 0xab, 0x89, 0xaf, 0x3f, 0xab, 0xe4, 0x9a,
|
||||
+ 0xcc, 0x27, 0x86, 0x38, 0x70, 0x73, 0x45, 0xbb,
|
||||
+ 0xf1, 0x53, 0x44, 0xed, 0x79, 0xf7, 0xf4, 0x39,
|
||||
+ 0x0e, 0xf8, 0xac, 0x50, 0x9b, 0x56, 0xf3, 0x9a,
|
||||
+ 0x98, 0x56, 0x65, 0x27, 0xa4, 0x1d, 0x3c, 0xbd,
|
||||
+ 0x5e, 0x05, 0x58, 0xc1, 0x59, 0x92, 0x7d, 0xb0,
|
||||
+ 0xe8, 0x84, 0x54, 0xa5, 0xd9, 0x64, 0x71, 0xfd,
|
||||
+ 0xdc, 0xb5, 0x6d, 0x5b, 0xb0, 0x6b, 0xfa, 0x34,
|
||||
+ 0x0e, 0xa7, 0xa1, 0x51, 0xef, 0x1c, 0xa6, 0xfa,
|
||||
+ 0x57, 0x2b, 0x76, 0xf3, 0xb1, 0xb9, 0x5d, 0x8c,
|
||||
+ 0x85, 0x83, 0xd3, 0xe4, 0x77, 0x05, 0x36, 0xb8,
|
||||
+ 0x4f, 0x01, 0x7e, 0x70, 0xe6, 0xfb, 0xf1, 0x76,
|
||||
+ 0x60, 0x1a, 0x02, 0x66, 0x94, 0x1a, 0x17, 0xb0,
|
||||
+ 0xc8, 0xb9, 0x7f, 0x4e, 0x74, 0xc2, 0xc1, 0xff,
|
||||
+ 0xc7, 0x27, 0x89, 0x19, 0x77, 0x79, 0x40, 0xc1,
|
||||
+ 0xe1, 0xff, 0x1d, 0x8d, 0xa6, 0x37, 0xd6, 0xb9,
|
||||
+ 0x9d, 0xda, 0xfe, 0x5e, 0x17, 0x61, 0x10, 0x02,
|
||||
+ 0xe2, 0xc7, 0x78, 0xc1, 0xbe, 0x8b, 0x41, 0xd9,
|
||||
+ 0x63, 0x79, 0xa5, 0x13, 0x60, 0xd9, 0x77, 0xfd,
|
||||
+ 0x44, 0x35, 0xa1, 0x1c, 0x30, 0x94, 0x2e, 0x4b,
|
||||
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
|
||||
+};
|
||||
+/* RFC7919 FFDHE2048 g */
|
||||
static const unsigned char dh_g[] = {
|
||||
- 0x5e, 0xf7, 0xb8, 0x8f, 0x2d, 0xf6, 0x01, 0x39,
|
||||
- 0x35, 0x1d, 0xfb, 0xfe, 0x12, 0x66, 0x80, 0x5f,
|
||||
- 0xdf, 0x35, 0x6c, 0xdf, 0xd1, 0x3a, 0x4d, 0xa0,
|
||||
- 0x05, 0x0c, 0x7e, 0xde, 0x24, 0x6d, 0xf5, 0x9f,
|
||||
- 0x6a, 0xbf, 0x96, 0xad, 0xe5, 0xf2, 0xb2, 0x8f,
|
||||
- 0xfe, 0x88, 0xd6, 0xbc, 0xe7, 0xf7, 0x89, 0x4a,
|
||||
- 0x3d, 0x53, 0x5f, 0xc8, 0x21, 0x26, 0xdd, 0xd4,
|
||||
- 0x24, 0x87, 0x2e, 0x16, 0xb8, 0x38, 0xdf, 0x8c,
|
||||
- 0x51, 0xe9, 0x01, 0x6f, 0x88, 0x9c, 0x7c, 0x20,
|
||||
- 0x3e, 0x98, 0xa8, 0xb6, 0x31, 0xf9, 0xc7, 0x25,
|
||||
- 0x63, 0xd3, 0x8a, 0x49, 0x58, 0x9a, 0x07, 0x53,
|
||||
- 0xd3, 0x58, 0xe7, 0x83, 0x31, 0x8c, 0xef, 0xd9,
|
||||
- 0x67, 0x7c, 0x7b, 0x2d, 0xbb, 0x77, 0xd6, 0xdc,
|
||||
- 0xe2, 0xa1, 0x96, 0x37, 0x95, 0xca, 0x64, 0xb9,
|
||||
- 0x2d, 0x1c, 0x9a, 0xac, 0x6d, 0x0e, 0x8d, 0x43,
|
||||
- 0x1d, 0xe5, 0xe5, 0x00, 0x60, 0xdf, 0xf7, 0x86,
|
||||
- 0x89, 0xc9, 0xec, 0xa1, 0xc1, 0x24, 0x8c, 0x16,
|
||||
- 0xed, 0x09, 0xc7, 0xad, 0x41, 0x2a, 0x17, 0x40,
|
||||
- 0x6d, 0x2b, 0x52, 0x5a, 0xa1, 0xca, 0xbb, 0x23,
|
||||
- 0x7b, 0x97, 0x34, 0xec, 0x7b, 0x8c, 0xe3, 0xfa,
|
||||
- 0xe0, 0x2f, 0x29, 0xc5, 0xef, 0xed, 0x30, 0xd6,
|
||||
- 0x91, 0x87, 0xda, 0x10, 0x9c, 0x2c, 0x9f, 0xe2,
|
||||
- 0xaa, 0xdb, 0xb0, 0xc2, 0x2a, 0xf5, 0x4c, 0x61,
|
||||
- 0x66, 0x55, 0x00, 0x0c, 0x43, 0x1c, 0x6b, 0x4a,
|
||||
- 0x37, 0x97, 0x63, 0xb0, 0xa9, 0x16, 0x58, 0xef,
|
||||
- 0xc8, 0x4e, 0x8b, 0x06, 0x35, 0x8c, 0x8b, 0x4f,
|
||||
- 0x21, 0x37, 0x10, 0xfd, 0x10, 0x17, 0x2c, 0xf3,
|
||||
- 0x9b, 0x83, 0x0c, 0x2d, 0xd8, 0x4a, 0x0c, 0x8a,
|
||||
- 0xb8, 0x25, 0x16, 0xec, 0xab, 0x99, 0x5f, 0xa4,
|
||||
- 0x21, 0x5e, 0x02, 0x3e, 0x4e, 0xcf, 0x80, 0x74,
|
||||
- 0xc3, 0x9d, 0x6c, 0x88, 0xb7, 0x0d, 0x1e, 0xe4,
|
||||
- 0xe9, 0x6f, 0xdc, 0x20, 0xea, 0x11, 0x5c, 0x32
|
||||
+ 0x02
|
||||
};
|
||||
static const unsigned char dh_priv[] = {
|
||||
- 0x14, 0x33, 0xe0, 0xb5, 0xa9, 0x17, 0xb6, 0x0a,
|
||||
- 0x30, 0x23, 0xf2, 0xf8, 0xaa, 0x2c, 0x2d, 0x70,
|
||||
- 0xd2, 0x96, 0x8a, 0xba, 0x9a, 0xea, 0xc8, 0x15,
|
||||
- 0x40, 0xb8, 0xfc, 0xe6
|
||||
+ 0x01, 0xdc, 0x2a, 0xb9, 0x87, 0x71, 0x57, 0x0f,
|
||||
+ 0xcd, 0x93, 0x65, 0x4c, 0xa1, 0xd6, 0x56, 0x6d,
|
||||
+ 0xc5, 0x35, 0xd5, 0xcb, 0x4c, 0xb8, 0xad, 0x8d,
|
||||
+ 0x6c, 0xdc, 0x5d, 0x6e, 0x94
|
||||
};
|
||||
static const unsigned char dh_pub[] = {
|
||||
- 0x95, 0xdd, 0x33, 0x8d, 0x29, 0xe5, 0x71, 0x04,
|
||||
- 0x92, 0xb9, 0x18, 0x31, 0x7b, 0x72, 0xa3, 0x69,
|
||||
- 0x36, 0xe1, 0x95, 0x1a, 0x2e, 0xe5, 0xa5, 0x59,
|
||||
- 0x16, 0x99, 0xc0, 0x48, 0x6d, 0x0d, 0x4f, 0x9b,
|
||||
- 0xdd, 0x6d, 0x5a, 0x3f, 0x6b, 0x98, 0x89, 0x0c,
|
||||
- 0x62, 0xb3, 0x76, 0x52, 0xd3, 0x6e, 0x71, 0x21,
|
||||
- 0x11, 0xe6, 0x8a, 0x73, 0x55, 0x37, 0x25, 0x06,
|
||||
- 0x99, 0xef, 0xe3, 0x30, 0x53, 0x73, 0x91, 0xfb,
|
||||
- 0xc2, 0xc5, 0x48, 0xbc, 0x5a, 0xc3, 0xe5, 0xb2,
|
||||
- 0x33, 0x86, 0xc3, 0xee, 0xf5, 0xeb, 0x43, 0xc0,
|
||||
- 0x99, 0xd7, 0x0a, 0x52, 0x02, 0x68, 0x7e, 0x83,
|
||||
- 0x96, 0x42, 0x48, 0xfc, 0xa9, 0x1f, 0x40, 0x90,
|
||||
- 0x8e, 0x8f, 0xb3, 0x31, 0x93, 0x15, 0xf6, 0xd2,
|
||||
- 0x60, 0x6d, 0x7f, 0x7c, 0xd5, 0x2c, 0xc6, 0xe7,
|
||||
- 0xc5, 0x84, 0x3a, 0xfb, 0x22, 0x51, 0x9c, 0xf0,
|
||||
- 0xf0, 0xf9, 0xd3, 0xa0, 0xa4, 0xe8, 0xc8, 0x88,
|
||||
- 0x99, 0xef, 0xed, 0xe7, 0x36, 0x43, 0x51, 0xfb,
|
||||
- 0x6a, 0x36, 0x3e, 0xe7, 0x17, 0xe5, 0x44, 0x5a,
|
||||
- 0xda, 0xb4, 0xc9, 0x31, 0xa6, 0x48, 0x39, 0x97,
|
||||
- 0xb8, 0x7d, 0xad, 0x83, 0x67, 0x7e, 0x4d, 0x1d,
|
||||
- 0x3a, 0x77, 0x75, 0xe0, 0xf6, 0xd0, 0x0f, 0xdf,
|
||||
- 0x73, 0xc7, 0xad, 0x80, 0x1e, 0x66, 0x5a, 0x0e,
|
||||
- 0x5a, 0x79, 0x6d, 0x0a, 0x03, 0x80, 0xa1, 0x9f,
|
||||
- 0xa1, 0x82, 0xef, 0xc8, 0xa0, 0x4f, 0x5e, 0x4d,
|
||||
- 0xb9, 0x0d, 0x1a, 0x86, 0x37, 0xf9, 0x5d, 0xb1,
|
||||
- 0x64, 0x36, 0xbd, 0xc8, 0xf3, 0xfc, 0x09, 0x6c,
|
||||
- 0x4f, 0xf7, 0xf2, 0x34, 0xbe, 0x8f, 0xef, 0x47,
|
||||
- 0x9a, 0xc4, 0xb0, 0xdc, 0x4b, 0x77, 0x26, 0x3e,
|
||||
- 0x07, 0xd9, 0x95, 0x9d, 0xe0, 0xf1, 0xbf, 0x3f,
|
||||
- 0x0a, 0xe3, 0xd9, 0xd5, 0x0e, 0x4b, 0x89, 0xc9,
|
||||
- 0x9e, 0x3e, 0xa1, 0x21, 0x73, 0x43, 0xdd, 0x8c,
|
||||
- 0x65, 0x81, 0xac, 0xc4, 0x95, 0x9c, 0x91, 0xd3
|
||||
+ 0x00, 0xc4, 0x82, 0x14, 0x69, 0x16, 0x4c, 0x05,
|
||||
+ 0x55, 0x2a, 0x7e, 0x55, 0x6d, 0x02, 0xbb, 0x7f,
|
||||
+ 0xcc, 0x63, 0x74, 0xee, 0xcb, 0xb4, 0x98, 0x43,
|
||||
+ 0x0e, 0x29, 0x43, 0x0d, 0x44, 0xc7, 0xf1, 0x23,
|
||||
+ 0x81, 0xca, 0x1c, 0x5c, 0xc3, 0xff, 0x01, 0x4a,
|
||||
+ 0x1a, 0x03, 0x9e, 0x5f, 0xd1, 0x4e, 0xa0, 0x0b,
|
||||
+ 0xb9, 0x5c, 0x0d, 0xef, 0x14, 0x01, 0x62, 0x3c,
|
||||
+ 0x8a, 0x8e, 0x60, 0xbb, 0x39, 0xd6, 0x38, 0x63,
|
||||
+ 0xb7, 0x65, 0xd0, 0x0b, 0x1a, 0xaf, 0x53, 0x38,
|
||||
+ 0x10, 0x0f, 0x3e, 0xeb, 0x9d, 0x0c, 0x24, 0xf6,
|
||||
+ 0xe3, 0x70, 0x08, 0x8a, 0x4d, 0x01, 0xf8, 0x7a,
|
||||
+ 0x87, 0x49, 0x64, 0x72, 0xb1, 0x75, 0x3b, 0x94,
|
||||
+ 0xc8, 0x09, 0x2d, 0x6a, 0x63, 0xd8, 0x9a, 0x92,
|
||||
+ 0xb9, 0x5b, 0x1a, 0xc3, 0x47, 0x0b, 0x63, 0x44,
|
||||
+ 0x3b, 0xe3, 0xc0, 0x09, 0xc9, 0xf9, 0x02, 0x53,
|
||||
+ 0xd8, 0xfb, 0x06, 0x44, 0xdb, 0xdf, 0xe8, 0x13,
|
||||
+ 0x2b, 0x40, 0x6a, 0xd4, 0x13, 0x4e, 0x52, 0x30,
|
||||
+ 0xd6, 0xc1, 0xd8, 0x59, 0x9d, 0x59, 0xba, 0x1b,
|
||||
+ 0xbf, 0xaa, 0x6f, 0xe9, 0x3d, 0xfd, 0xff, 0x01,
|
||||
+ 0x0b, 0x54, 0xe0, 0x6a, 0x4e, 0x27, 0x2b, 0x3d,
|
||||
+ 0xe8, 0xef, 0xb0, 0xbe, 0x52, 0xc3, 0x52, 0x18,
|
||||
+ 0x6f, 0xa3, 0x27, 0xab, 0x6c, 0x12, 0xc3, 0x81,
|
||||
+ 0xcb, 0xae, 0x23, 0x11, 0xa0, 0x5d, 0xc3, 0x6f,
|
||||
+ 0x23, 0x17, 0x40, 0xb3, 0x05, 0x4f, 0x5d, 0xb7,
|
||||
+ 0x34, 0xbe, 0x87, 0x2c, 0xa9, 0x9e, 0x98, 0x39,
|
||||
+ 0xbf, 0x2e, 0x9d, 0xad, 0x4f, 0x70, 0xad, 0xed,
|
||||
+ 0x1b, 0x5e, 0x47, 0x90, 0x49, 0x2e, 0x61, 0x71,
|
||||
+ 0x5f, 0x07, 0x0b, 0x35, 0x04, 0xfc, 0x53, 0xce,
|
||||
+ 0x58, 0x60, 0x6c, 0x5b, 0x8b, 0xfe, 0x70, 0x04,
|
||||
+ 0x2a, 0x6a, 0x98, 0x0a, 0xd0, 0x80, 0xae, 0x69,
|
||||
+ 0x95, 0xf9, 0x99, 0x18, 0xfc, 0xe4, 0x8e, 0xed,
|
||||
+ 0x61, 0xd9, 0x02, 0x9d, 0x4e, 0x05, 0xe9, 0xf2,
|
||||
+ 0x32
|
||||
};
|
||||
static const unsigned char dh_peer_pub[] = {
|
||||
- 0x1f, 0xc1, 0xda, 0x34, 0x1d, 0x1a, 0x84, 0x6a,
|
||||
- 0x96, 0xb7, 0xbe, 0x24, 0x34, 0x0f, 0x87, 0x7d,
|
||||
- 0xd0, 0x10, 0xaa, 0x03, 0x56, 0xd5, 0xad, 0x58,
|
||||
- 0xaa, 0xe9, 0xc7, 0xb0, 0x8f, 0x74, 0x9a, 0x32,
|
||||
- 0x23, 0x51, 0x10, 0xb5, 0xd8, 0x8e, 0xb5, 0xdb,
|
||||
- 0xfa, 0x97, 0x8d, 0x27, 0xec, 0xc5, 0x30, 0xf0,
|
||||
- 0x2d, 0x31, 0x14, 0x00, 0x5b, 0x64, 0xb1, 0xc0,
|
||||
- 0xe0, 0x24, 0xcb, 0x8a, 0xe2, 0x16, 0x98, 0xbc,
|
||||
- 0xa9, 0xe6, 0x0d, 0x42, 0x80, 0x86, 0x22, 0xf1,
|
||||
- 0x81, 0xc5, 0x6e, 0x1d, 0xe7, 0xa9, 0x6e, 0x6e,
|
||||
- 0xfe, 0xe9, 0xd6, 0x65, 0x67, 0xe9, 0x1b, 0x97,
|
||||
- 0x70, 0x42, 0xc7, 0xe3, 0xd0, 0x44, 0x8f, 0x05,
|
||||
- 0xfb, 0x77, 0xf5, 0x22, 0xb9, 0xbf, 0xc8, 0xd3,
|
||||
- 0x3c, 0xc3, 0xc3, 0x1e, 0xd3, 0xb3, 0x1f, 0x0f,
|
||||
- 0xec, 0xb6, 0xdb, 0x4f, 0x6e, 0xa3, 0x11, 0xe7,
|
||||
- 0x7a, 0xfd, 0xbc, 0xd4, 0x7a, 0xee, 0x1b, 0xb1,
|
||||
- 0x50, 0xf2, 0x16, 0x87, 0x35, 0x78, 0xfb, 0x96,
|
||||
- 0x46, 0x8e, 0x8f, 0x9f, 0x3d, 0xe8, 0xef, 0xbf,
|
||||
- 0xce, 0x75, 0x62, 0x4b, 0x1d, 0xf0, 0x53, 0x22,
|
||||
- 0xa3, 0x4f, 0x14, 0x63, 0xe8, 0x39, 0xe8, 0x98,
|
||||
- 0x4c, 0x4a, 0xd0, 0xa9, 0x6e, 0x1a, 0xc8, 0x42,
|
||||
- 0xe5, 0x31, 0x8c, 0xc2, 0x3c, 0x06, 0x2a, 0x8c,
|
||||
- 0xa1, 0x71, 0xb8, 0xd5, 0x75, 0x98, 0x0d, 0xde,
|
||||
- 0x7f, 0xc5, 0x6f, 0x15, 0x36, 0x52, 0x38, 0x20,
|
||||
- 0xd4, 0x31, 0x92, 0xbf, 0xd5, 0x1e, 0x8e, 0x22,
|
||||
- 0x89, 0x78, 0xac, 0xa5, 0xb9, 0x44, 0x72, 0xf3,
|
||||
- 0x39, 0xca, 0xeb, 0x99, 0x31, 0xb4, 0x2b, 0xe3,
|
||||
- 0x01, 0x26, 0x8b, 0xc9, 0x97, 0x89, 0xc9, 0xb2,
|
||||
- 0x55, 0x71, 0xc3, 0xc0, 0xe4, 0xcb, 0x3f, 0x00,
|
||||
- 0x7f, 0x1a, 0x51, 0x1c, 0xbb, 0x53, 0xc8, 0x51,
|
||||
- 0x9c, 0xdd, 0x13, 0x02, 0xab, 0xca, 0x6c, 0x0f,
|
||||
- 0x34, 0xf9, 0x67, 0x39, 0xf1, 0x7f, 0xf4, 0x8b
|
||||
+ 0x00, 0xef, 0x15, 0x02, 0xf5, 0x56, 0xa3, 0x79,
|
||||
+ 0x40, 0x58, 0xbc, 0xeb, 0x56, 0xad, 0xcb, 0xda,
|
||||
+ 0x8c, 0xda, 0xb8, 0xd1, 0xda, 0x6f, 0x25, 0x29,
|
||||
+ 0x9e, 0x43, 0x76, 0x2d, 0xb2, 0xd8, 0xbc, 0x84,
|
||||
+ 0xbc, 0x85, 0xd0, 0x94, 0x8d, 0x44, 0x27, 0x57,
|
||||
+ 0xe4, 0xdf, 0xc1, 0x78, 0x42, 0x8f, 0x08, 0xf5,
|
||||
+ 0x74, 0xfe, 0x02, 0x56, 0xd2, 0x09, 0xc8, 0x68,
|
||||
+ 0xef, 0xed, 0x18, 0xc9, 0xfd, 0x2e, 0x95, 0x6c,
|
||||
+ 0xba, 0x6c, 0x00, 0x0e, 0xf5, 0xd1, 0x1b, 0xf6,
|
||||
+ 0x15, 0x14, 0x5b, 0x67, 0x22, 0x7c, 0x6a, 0x20,
|
||||
+ 0x76, 0x43, 0x51, 0xef, 0x5e, 0x1e, 0xf9, 0x2d,
|
||||
+ 0xd6, 0xb4, 0xc5, 0xc6, 0x18, 0x33, 0xd1, 0xa3,
|
||||
+ 0x3b, 0xe6, 0xdd, 0x57, 0x9d, 0xad, 0x13, 0x7a,
|
||||
+ 0x53, 0xde, 0xb3, 0x97, 0xc0, 0x7e, 0xd7, 0x77,
|
||||
+ 0x6b, 0xf8, 0xbd, 0x13, 0x70, 0x8c, 0xba, 0x73,
|
||||
+ 0x80, 0xb3, 0x80, 0x6f, 0xfb, 0x1c, 0xda, 0x53,
|
||||
+ 0x4d, 0x3c, 0x8a, 0x2e, 0xa1, 0x37, 0xce, 0xb1,
|
||||
+ 0xde, 0x45, 0x97, 0x58, 0x65, 0x4d, 0xcf, 0x05,
|
||||
+ 0xbb, 0xc3, 0xd7, 0x38, 0x6d, 0x0a, 0x59, 0x7a,
|
||||
+ 0x99, 0x15, 0xb7, 0x9a, 0x3d, 0xfd, 0x61, 0xe5,
|
||||
+ 0x1a, 0xa2, 0xcc, 0xf6, 0xfe, 0xb1, 0xee, 0xe9,
|
||||
+ 0xa9, 0xe2, 0xeb, 0x06, 0xbc, 0x14, 0x6e, 0x91,
|
||||
+ 0x0d, 0xf1, 0xe3, 0xbb, 0xe0, 0x7e, 0x1d, 0x31,
|
||||
+ 0x79, 0xf1, 0x6d, 0x5f, 0xcb, 0xaf, 0xb2, 0x4f,
|
||||
+ 0x22, 0x12, 0xbf, 0x72, 0xbd, 0xd0, 0x30, 0xe4,
|
||||
+ 0x1c, 0x35, 0x96, 0x61, 0x98, 0x39, 0xfb, 0x7e,
|
||||
+ 0x6d, 0x66, 0xc4, 0x69, 0x41, 0x0d, 0x0d, 0x59,
|
||||
+ 0xbb, 0xa7, 0xbf, 0x34, 0xe0, 0x39, 0x36, 0x84,
|
||||
+ 0x5e, 0x0e, 0x03, 0x2d, 0xcf, 0xaa, 0x02, 0x8a,
|
||||
+ 0xba, 0x59, 0x88, 0x47, 0xc4, 0x4d, 0xd7, 0xbd,
|
||||
+ 0x78, 0x76, 0x24, 0xf1, 0x45, 0x56, 0x44, 0xc2,
|
||||
+ 0x4a, 0xc2, 0xd5, 0x3a, 0x59, 0x40, 0xab, 0x87,
|
||||
+ 0x64
|
||||
};
|
||||
|
||||
static const unsigned char dh_secret_expected[] = {
|
||||
- 0x08, 0xff, 0x33, 0xbb, 0x2e, 0xcf, 0xf4, 0x9a,
|
||||
- 0x7d, 0x4a, 0x79, 0x12, 0xae, 0xb1, 0xbb, 0x6a,
|
||||
- 0xb5, 0x11, 0x64, 0x1b, 0x4a, 0x76, 0x77, 0x0c,
|
||||
- 0x8c, 0xc1, 0xbc, 0xc2, 0x33, 0x34, 0x3d, 0xfe,
|
||||
- 0x70, 0x0d, 0x11, 0x81, 0x3d, 0x2c, 0x9e, 0xd2,
|
||||
- 0x3b, 0x21, 0x1c, 0xa9, 0xe8, 0x78, 0x69, 0x21,
|
||||
- 0xed, 0xca, 0x28, 0x3c, 0x68, 0xb1, 0x61, 0x53,
|
||||
- 0xfa, 0x01, 0xe9, 0x1a, 0xb8, 0x2c, 0x90, 0xdd,
|
||||
- 0xab, 0x4a, 0x95, 0x81, 0x67, 0x70, 0xa9, 0x87,
|
||||
- 0x10, 0xe1, 0x4c, 0x92, 0xab, 0x83, 0xb6, 0xe4,
|
||||
- 0x6e, 0x1e, 0x42, 0x6e, 0xe8, 0x52, 0x43, 0x0d,
|
||||
- 0x61, 0x87, 0xda, 0xa3, 0x72, 0x0a, 0x6b, 0xcd,
|
||||
- 0x73, 0x23, 0x5c, 0x6b, 0x0f, 0x94, 0x1f, 0x33,
|
||||
- 0x64, 0xf5, 0x04, 0x20, 0x55, 0x1a, 0x4b, 0xfe,
|
||||
- 0xaf, 0xe2, 0xbc, 0x43, 0x85, 0x05, 0xa5, 0x9a,
|
||||
- 0x4a, 0x40, 0xda, 0xca, 0x7a, 0x89, 0x5a, 0x73,
|
||||
- 0xdb, 0x57, 0x5c, 0x74, 0xc1, 0x3a, 0x23, 0xad,
|
||||
- 0x88, 0x32, 0x95, 0x7d, 0x58, 0x2d, 0x38, 0xf0,
|
||||
- 0xa6, 0x16, 0x5f, 0xb0, 0xd7, 0xe9, 0xb8, 0x79,
|
||||
- 0x9e, 0x42, 0xfd, 0x32, 0x20, 0xe3, 0x32, 0xe9,
|
||||
- 0x81, 0x85, 0xa0, 0xc9, 0x42, 0x97, 0x57, 0xb2,
|
||||
- 0xd0, 0xd0, 0x2c, 0x17, 0xdb, 0xaa, 0x1f, 0xf6,
|
||||
- 0xed, 0x93, 0xd7, 0xe7, 0x3e, 0x24, 0x1e, 0xae,
|
||||
- 0xd9, 0x0c, 0xaf, 0x39, 0x4d, 0x2b, 0xc6, 0x57,
|
||||
- 0x0f, 0x18, 0xc8, 0x1f, 0x2b, 0xe5, 0xd0, 0x1a,
|
||||
- 0x2c, 0xa9, 0x9f, 0xf1, 0x42, 0xb5, 0xd9, 0x63,
|
||||
- 0xf9, 0xf5, 0x00, 0x32, 0x5e, 0x75, 0x56, 0xf9,
|
||||
- 0x58, 0x49, 0xb3, 0xff, 0xc7, 0x47, 0x94, 0x86,
|
||||
- 0xbe, 0x1d, 0x45, 0x96, 0xa3, 0x10, 0x6b, 0xd5,
|
||||
- 0xcb, 0x4f, 0x61, 0xc5, 0x7e, 0xc5, 0xf1, 0x00,
|
||||
- 0xfb, 0x7a, 0x0c, 0x82, 0xa1, 0x0b, 0x82, 0x52,
|
||||
- 0x6a, 0x97, 0xd1, 0xd9, 0x7d, 0x98, 0xea, 0xf6
|
||||
+ 0x56, 0x13, 0xe3, 0x12, 0x6b, 0x5f, 0x67, 0xe5,
|
||||
+ 0x08, 0xe5, 0x35, 0x0e, 0x11, 0x90, 0x9d, 0xf5,
|
||||
+ 0x1a, 0x24, 0xfa, 0x42, 0xd1, 0x4a, 0x50, 0x93,
|
||||
+ 0x5b, 0xf4, 0x11, 0x6f, 0xd0, 0xc3, 0xc5, 0xa5,
|
||||
+ 0x80, 0xae, 0x01, 0x3d, 0x66, 0x92, 0xc0, 0x3e,
|
||||
+ 0x5f, 0xe9, 0x75, 0xb6, 0x5b, 0x37, 0x82, 0x39,
|
||||
+ 0x72, 0x66, 0x0b, 0xa2, 0x73, 0x94, 0xe5, 0x04,
|
||||
+ 0x7c, 0x0c, 0x19, 0x9a, 0x03, 0x53, 0xc4, 0x9d,
|
||||
+ 0xc1, 0x0f, 0xc3, 0xec, 0x0e, 0x2e, 0xa3, 0x7c,
|
||||
+ 0x07, 0x0e, 0xaf, 0x18, 0x1d, 0xc7, 0x8b, 0x47,
|
||||
+ 0x4b, 0x94, 0x05, 0x6d, 0xec, 0xdd, 0xa1, 0xae,
|
||||
+ 0x7b, 0x21, 0x86, 0x53, 0xd3, 0x62, 0x38, 0x08,
|
||||
+ 0xea, 0xda, 0xdc, 0xb2, 0x5a, 0x7c, 0xef, 0x19,
|
||||
+ 0xf8, 0x29, 0xef, 0xf8, 0xd0, 0xfb, 0xde, 0xe8,
|
||||
+ 0xb8, 0x2f, 0xb3, 0xa1, 0x16, 0xa2, 0xd0, 0x8f,
|
||||
+ 0x48, 0xdc, 0x7d, 0xcb, 0xee, 0x5c, 0x06, 0x1e,
|
||||
+ 0x2a, 0x66, 0xe8, 0x1f, 0xdb, 0x18, 0xe9, 0xd2,
|
||||
+ 0xfd, 0xa2, 0x4e, 0x39, 0xa3, 0x2e, 0x88, 0x3d,
|
||||
+ 0x7d, 0xac, 0x15, 0x18, 0x25, 0xe6, 0xba, 0xd4,
|
||||
+ 0x0e, 0x89, 0x26, 0x60, 0x8f, 0xdc, 0x4a, 0xb4,
|
||||
+ 0x49, 0x8f, 0x98, 0xe8, 0x62, 0x8c, 0xc6, 0x66,
|
||||
+ 0x20, 0x4c, 0xe1, 0xed, 0xfc, 0x01, 0x88, 0x46,
|
||||
+ 0xa7, 0x67, 0x48, 0x39, 0xc5, 0x22, 0x95, 0xa0,
|
||||
+ 0x23, 0xb9, 0xd1, 0xed, 0x87, 0xcf, 0xa7, 0x70,
|
||||
+ 0x1c, 0xac, 0xd3, 0xaf, 0x5c, 0x26, 0x50, 0x3c,
|
||||
+ 0xe4, 0x23, 0xb6, 0xcc, 0xd7, 0xc5, 0xda, 0x2f,
|
||||
+ 0xf4, 0x45, 0xf1, 0xe4, 0x40, 0xb5, 0x0a, 0x25,
|
||||
+ 0x86, 0xe6, 0xde, 0x11, 0x3c, 0x46, 0x16, 0xbc,
|
||||
+ 0x41, 0xc2, 0x28, 0x19, 0x81, 0x5a, 0x46, 0x02,
|
||||
+ 0x87, 0xd0, 0x15, 0x0c, 0xd2, 0xfe, 0x75, 0x04,
|
||||
+ 0x82, 0xd2, 0x0a, 0xb7, 0xbc, 0xc5, 0x6c, 0xb1,
|
||||
+ 0x41, 0xa8, 0x2b, 0x28, 0xbb, 0x86, 0x0c, 0x89
|
||||
};
|
||||
|
||||
static const ST_KAT_PARAM dh_group[] = {
|
||||
--
|
||||
2.35.3
|
||||
|
@@ -1,348 +1,387 @@
|
||||
From 62721a92ebec8746888d94bea0082c8d8763219e Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Wed, 6 Mar 2024 19:17:15 +0100
|
||||
Subject: [PATCH 27/49]
|
||||
0073-FIPS-Use-OAEP-in-KATs-support-fixed-OAEP-seed.patch
|
||||
From 4b5430728a7a3f7b4d60a15c5ee1ce6632fa6fb3 Mon Sep 17 00:00:00 2001
|
||||
From: Simo Sorce <simo@redhat.com>
|
||||
Date: Wed, 12 Feb 2025 17:12:02 -0500
|
||||
Subject: [PATCH 33/53] FIPS: RSA: NEEDS-REWORK:
|
||||
FIPS-Use-OAEP-in-KATs-support-fixed-OAEP-seed
|
||||
|
||||
Patch-name: 0073-FIPS-Use-OAEP-in-KATs-support-fixed-OAEP-seed.patch
|
||||
Patch-id: 73
|
||||
Patch-status: |
|
||||
# # https://bugzilla.redhat.com/show_bug.cgi?id=2102535
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
Signed-off-by: Simo Sorce <simo@redhat.com>
|
||||
---
|
||||
crypto/rsa/rsa_local.h | 8 ++
|
||||
crypto/rsa/rsa_oaep.c | 34 ++++++--
|
||||
providers/fips/self_test_data.inc | 79 ++++++++++---------
|
||||
providers/fips/self_test_kats.c | 7 ++
|
||||
.../implementations/asymciphers/rsa_enc.c | 41 +++++++++-
|
||||
util/perl/OpenSSL/paramnames.pm | 1 +
|
||||
6 files changed, 126 insertions(+), 44 deletions(-)
|
||||
...EP-in-KATs-support-fixed-OAEP-seed.p.patch | 348 ++++++++++++++++++
|
||||
REBASE.txt | 10 +
|
||||
2 files changed, 358 insertions(+)
|
||||
create mode 100644 Originally-0073-FIPS-Use-OAEP-in-KATs-support-fixed-OAEP-seed.p.patch
|
||||
create mode 100644 REBASE.txt
|
||||
|
||||
diff --git a/crypto/rsa/rsa_local.h b/crypto/rsa/rsa_local.h
|
||||
index ea70da05ad..dde57a1a0e 100644
|
||||
--- a/crypto/rsa/rsa_local.h
|
||||
+++ b/crypto/rsa/rsa_local.h
|
||||
@@ -193,4 +193,12 @@ int ossl_rsa_padding_add_PKCS1_type_2_ex(OSSL_LIB_CTX *libctx, unsigned char *to
|
||||
int tlen, const unsigned char *from,
|
||||
int flen);
|
||||
|
||||
+int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex2(OSSL_LIB_CTX *libctx,
|
||||
+ unsigned char *to, int tlen,
|
||||
+ const unsigned char *from, int flen,
|
||||
+ const unsigned char *param,
|
||||
+ int plen, const EVP_MD *md,
|
||||
+ const EVP_MD *mgf1md,
|
||||
+ const char *suse_st_seed);
|
||||
diff --git a/Originally-0073-FIPS-Use-OAEP-in-KATs-support-fixed-OAEP-seed.p.patch b/Originally-0073-FIPS-Use-OAEP-in-KATs-support-fixed-OAEP-seed.p.patch
|
||||
new file mode 100644
|
||||
index 0000000000..793b8a4dac
|
||||
--- /dev/null
|
||||
+++ b/Originally-0073-FIPS-Use-OAEP-in-KATs-support-fixed-OAEP-seed.p.patch
|
||||
@@ -0,0 +1,348 @@
|
||||
+From a0e92712c141cda0b8321feb492982506b18c612 Mon Sep 17 00:00:00 2001
|
||||
+From: rpm-build <rpm-build>
|
||||
+Date: Wed, 6 Mar 2024 19:17:15 +0100
|
||||
+Subject: [PATCH 28/55]
|
||||
+ 0073-FIPS-Use-OAEP-in-KATs-support-fixed-OAEP-seed.patch
|
||||
+
|
||||
#endif /* OSSL_CRYPTO_RSA_LOCAL_H */
|
||||
diff --git a/crypto/rsa/rsa_oaep.c b/crypto/rsa/rsa_oaep.c
|
||||
index b9030440c4..3d665c3860 100644
|
||||
--- a/crypto/rsa/rsa_oaep.c
|
||||
+++ b/crypto/rsa/rsa_oaep.c
|
||||
@@ -44,6 +44,10 @@ int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
|
||||
param, plen, NULL, NULL);
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+extern int SUSE_FIPS_asym_cipher_st;
|
||||
+#endif /* FIPS_MODULE */
|
||||
+Patch-name: 0073-FIPS-Use-OAEP-in-KATs-support-fixed-OAEP-seed.patch
|
||||
+Patch-id: 73
|
||||
+Patch-status: |
|
||||
+ # # https://bugzilla.redhat.com/show_bug.cgi?id=2102535
|
||||
+From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
+---
|
||||
+ crypto/rsa/rsa_local.h | 8 ++
|
||||
+ crypto/rsa/rsa_oaep.c | 34 ++++++--
|
||||
+ providers/fips/self_test_data.inc | 79 ++++++++++---------
|
||||
+ providers/fips/self_test_kats.c | 7 ++
|
||||
+ .../implementations/asymciphers/rsa_enc.c | 41 +++++++++-
|
||||
+ util/perl/OpenSSL/paramnames.pm | 1 +
|
||||
+ 6 files changed, 126 insertions(+), 44 deletions(-)
|
||||
+
|
||||
/*
|
||||
* Perform the padding as per NIST 800-56B 7.2.2.3
|
||||
* from (K) is the key material.
|
||||
@@ -51,12 +55,13 @@ int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
|
||||
* Step numbers are included here but not in the constant time inverse below
|
||||
* to avoid complicating an already difficult enough function.
|
||||
*/
|
||||
-int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx,
|
||||
- unsigned char *to, int tlen,
|
||||
- const unsigned char *from, int flen,
|
||||
- const unsigned char *param,
|
||||
- int plen, const EVP_MD *md,
|
||||
- const EVP_MD *mgf1md)
|
||||
+int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex2(OSSL_LIB_CTX *libctx,
|
||||
+ unsigned char *to, int tlen,
|
||||
+ const unsigned char *from, int flen,
|
||||
+ const unsigned char *param,
|
||||
+ int plen, const EVP_MD *md,
|
||||
+ const EVP_MD *mgf1md,
|
||||
+ const char *suse_st_seed)
|
||||
{
|
||||
int rv = 0;
|
||||
int i, emlen = tlen - 1;
|
||||
@@ -107,6 +112,11 @@ int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx,
|
||||
db[emlen - flen - mdlen - 1] = 0x01;
|
||||
memcpy(db + emlen - flen - mdlen, from, (unsigned int)flen);
|
||||
/* step 3d: generate random byte string */
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (suse_st_seed != NULL && SUSE_FIPS_asym_cipher_st) {
|
||||
+ memcpy(seed, suse_st_seed, mdlen);
|
||||
+ } else
|
||||
+#endif
|
||||
if (RAND_bytes_ex(libctx, seed, mdlen, 0) <= 0)
|
||||
goto err;
|
||||
|
||||
@@ -136,6 +146,18 @@ int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx,
|
||||
return rv;
|
||||
}
|
||||
|
||||
+int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx,
|
||||
+ unsigned char *to, int tlen,
|
||||
+ const unsigned char *from, int flen,
|
||||
+ const unsigned char *param,
|
||||
+ int plen, const EVP_MD *md,
|
||||
+ const EVP_MD *mgf1md)
|
||||
+{
|
||||
+ return ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex2(libctx, to, tlen, from,
|
||||
+ flen, param, plen, md,
|
||||
+ mgf1md, NULL);
|
||||
+}
|
||||
+diff --git a/crypto/rsa/rsa_local.h b/crypto/rsa/rsa_local.h
|
||||
+index ea70da05ad..dde57a1a0e 100644
|
||||
+--- a/crypto/rsa/rsa_local.h
|
||||
++++ b/crypto/rsa/rsa_local.h
|
||||
+@@ -193,4 +193,12 @@ int ossl_rsa_padding_add_PKCS1_type_2_ex(OSSL_LIB_CTX *libctx, unsigned char *to
|
||||
+ int tlen, const unsigned char *from,
|
||||
+ int flen);
|
||||
+
|
||||
++int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex2(OSSL_LIB_CTX *libctx,
|
||||
++ unsigned char *to, int tlen,
|
||||
++ const unsigned char *from, int flen,
|
||||
++ const unsigned char *param,
|
||||
++ int plen, const EVP_MD *md,
|
||||
++ const EVP_MD *mgf1md,
|
||||
++ const char *redhat_st_seed);
|
||||
++
|
||||
+ #endif /* OSSL_CRYPTO_RSA_LOCAL_H */
|
||||
+diff --git a/crypto/rsa/rsa_oaep.c b/crypto/rsa/rsa_oaep.c
|
||||
+index b9030440c4..3d665c3860 100644
|
||||
+--- a/crypto/rsa/rsa_oaep.c
|
||||
++++ b/crypto/rsa/rsa_oaep.c
|
||||
+@@ -44,6 +44,10 @@ int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
|
||||
+ param, plen, NULL, NULL);
|
||||
+ }
|
||||
+
|
||||
++#ifdef FIPS_MODULE
|
||||
++extern int REDHAT_FIPS_asym_cipher_st;
|
||||
++#endif /* FIPS_MODULE */
|
||||
++
|
||||
+ /*
|
||||
+ * Perform the padding as per NIST 800-56B 7.2.2.3
|
||||
+ * from (K) is the key material.
|
||||
+@@ -51,12 +55,13 @@ int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
|
||||
+ * Step numbers are included here but not in the constant time inverse below
|
||||
+ * to avoid complicating an already difficult enough function.
|
||||
+ */
|
||||
+-int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx,
|
||||
+- unsigned char *to, int tlen,
|
||||
+- const unsigned char *from, int flen,
|
||||
+- const unsigned char *param,
|
||||
+- int plen, const EVP_MD *md,
|
||||
+- const EVP_MD *mgf1md)
|
||||
++int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex2(OSSL_LIB_CTX *libctx,
|
||||
++ unsigned char *to, int tlen,
|
||||
++ const unsigned char *from, int flen,
|
||||
++ const unsigned char *param,
|
||||
++ int plen, const EVP_MD *md,
|
||||
++ const EVP_MD *mgf1md,
|
||||
++ const char *redhat_st_seed)
|
||||
+ {
|
||||
+ int rv = 0;
|
||||
+ int i, emlen = tlen - 1;
|
||||
+@@ -107,6 +112,11 @@ int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx,
|
||||
+ db[emlen - flen - mdlen - 1] = 0x01;
|
||||
+ memcpy(db + emlen - flen - mdlen, from, (unsigned int)flen);
|
||||
+ /* step 3d: generate random byte string */
|
||||
++#ifdef FIPS_MODULE
|
||||
++ if (redhat_st_seed != NULL && REDHAT_FIPS_asym_cipher_st) {
|
||||
++ memcpy(seed, redhat_st_seed, mdlen);
|
||||
++ } else
|
||||
++#endif
|
||||
+ if (RAND_bytes_ex(libctx, seed, mdlen, 0) <= 0)
|
||||
+ goto err;
|
||||
+
|
||||
+@@ -136,6 +146,18 @@ int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx,
|
||||
+ return rv;
|
||||
+ }
|
||||
+
|
||||
++int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx,
|
||||
++ unsigned char *to, int tlen,
|
||||
++ const unsigned char *from, int flen,
|
||||
++ const unsigned char *param,
|
||||
++ int plen, const EVP_MD *md,
|
||||
++ const EVP_MD *mgf1md)
|
||||
++{
|
||||
++ return ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex2(libctx, to, tlen, from,
|
||||
++ flen, param, plen, md,
|
||||
++ mgf1md, NULL);
|
||||
++}
|
||||
++
|
||||
+ int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
|
||||
+ const unsigned char *from, int flen,
|
||||
+ const unsigned char *param, int plen,
|
||||
+diff --git a/providers/fips/self_test_data.inc b/providers/fips/self_test_data.inc
|
||||
+index 4b80bb70b9..c33ecd0791 100644
|
||||
+--- a/providers/fips/self_test_data.inc
|
||||
++++ b/providers/fips/self_test_data.inc
|
||||
+@@ -1296,14 +1296,21 @@ static const ST_KAT_PARAM rsa_priv_key[] = {
|
||||
+ };
|
||||
+
|
||||
+ /*-
|
||||
+- * Using OSSL_PKEY_RSA_PAD_MODE_NONE directly in the expansion of the
|
||||
++ * Using OSSL_PKEY_RSA_PAD_MODE_OAEP directly in the expansion of the
|
||||
+ * ST_KAT_PARAM_UTF8STRING macro below causes a failure on ancient
|
||||
+ * HP/UX PA-RISC compilers.
|
||||
+ */
|
||||
+-static const char pad_mode_none[] = OSSL_PKEY_RSA_PAD_MODE_NONE;
|
||||
++static const char pad_mode_oaep[] = OSSL_PKEY_RSA_PAD_MODE_OAEP;
|
||||
++static const char oaep_fixed_seed[] = {
|
||||
++ 0xf6, 0x10, 0xef, 0x0a, 0x97, 0xbf, 0x91, 0x25,
|
||||
++ 0x97, 0xcf, 0x8e, 0x0a, 0x75, 0x51, 0x2f, 0xab,
|
||||
++ 0x2e, 0x4b, 0x2c, 0xe6
|
||||
++};
|
||||
+
|
||||
+ static const ST_KAT_PARAM rsa_enc_params[] = {
|
||||
+- ST_KAT_PARAM_UTF8STRING(OSSL_ASYM_CIPHER_PARAM_PAD_MODE, pad_mode_none),
|
||||
++ ST_KAT_PARAM_UTF8STRING(OSSL_ASYM_CIPHER_PARAM_PAD_MODE, pad_mode_oaep),
|
||||
++ ST_KAT_PARAM_OCTET(OSSL_ASYM_CIPHER_PARAM_REDHAT_KAT_OEAP_SEED,
|
||||
++ oaep_fixed_seed),
|
||||
+ ST_KAT_PARAM_END()
|
||||
+ };
|
||||
+
|
||||
+@@ -1342,43 +1349,43 @@ static const unsigned char rsa_expected_sig[256] = {
|
||||
+ 0x2c, 0x68, 0xf0, 0x37, 0xa9, 0xd2, 0x56, 0xd6
|
||||
+ };
|
||||
+
|
||||
+-static const unsigned char rsa_asym_plaintext_encrypt[256] = {
|
||||
++static const unsigned char rsa_asym_plaintext_encrypt[208] = {
|
||||
+ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
|
||||
+ 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
|
||||
+ };
|
||||
+ static const unsigned char rsa_asym_expected_encrypt[256] = {
|
||||
+- 0x54, 0xac, 0x23, 0x96, 0x1d, 0x82, 0x5d, 0x8b,
|
||||
+- 0x8f, 0x36, 0x33, 0xd0, 0xf4, 0x02, 0xa2, 0x61,
|
||||
+- 0xb1, 0x13, 0xd4, 0x4a, 0x46, 0x06, 0x37, 0x3c,
|
||||
+- 0xbf, 0x40, 0x05, 0x3c, 0xc6, 0x3b, 0x64, 0xdc,
|
||||
+- 0x22, 0x22, 0xaf, 0x36, 0x79, 0x62, 0x45, 0xf0,
|
||||
+- 0x97, 0x82, 0x22, 0x44, 0x86, 0x4a, 0x7c, 0xfa,
|
||||
+- 0xac, 0x03, 0x21, 0x84, 0x3f, 0x31, 0xad, 0x2a,
|
||||
+- 0xa4, 0x6e, 0x7a, 0xc5, 0x93, 0xf3, 0x0f, 0xfc,
|
||||
+- 0xf1, 0x62, 0xce, 0x82, 0x12, 0x45, 0xc9, 0x35,
|
||||
+- 0xb0, 0x7a, 0xcd, 0x99, 0x8c, 0x91, 0x6b, 0x5a,
|
||||
+- 0xd3, 0x46, 0xdb, 0xf9, 0x9e, 0x52, 0x49, 0xbd,
|
||||
+- 0x1e, 0xe8, 0xda, 0xac, 0x61, 0x47, 0xc2, 0xda,
|
||||
+- 0xfc, 0x1e, 0xfb, 0x74, 0xd7, 0xd6, 0xc1, 0x18,
|
||||
+- 0x86, 0x3e, 0x20, 0x9c, 0x7a, 0xe1, 0x04, 0xb7,
|
||||
+- 0x38, 0x43, 0xb1, 0x4e, 0xa0, 0xd8, 0xc1, 0x39,
|
||||
+- 0x4d, 0xe1, 0xd3, 0xb0, 0xb3, 0xf1, 0x82, 0x87,
|
||||
+- 0x1f, 0x74, 0xb5, 0x69, 0xfd, 0x33, 0xd6, 0x21,
|
||||
+- 0x7c, 0x61, 0x60, 0x28, 0xca, 0x70, 0xdb, 0xa0,
|
||||
+- 0xbb, 0xc8, 0x73, 0xa9, 0x82, 0xf8, 0x6b, 0xd8,
|
||||
+- 0xf0, 0xc9, 0x7b, 0x20, 0xdf, 0x9d, 0xfb, 0x8c,
|
||||
+- 0xd4, 0xa2, 0x89, 0xe1, 0x9b, 0x04, 0xad, 0xaa,
|
||||
+- 0x11, 0x6c, 0x8f, 0xce, 0x83, 0x29, 0x56, 0x69,
|
||||
+- 0xbb, 0x00, 0x3b, 0xef, 0xca, 0x2d, 0xcd, 0x52,
|
||||
+- 0xc8, 0xf1, 0xb3, 0x9b, 0xb4, 0x4f, 0x6d, 0x9c,
|
||||
+- 0x3d, 0x69, 0xcc, 0x6d, 0x1f, 0x38, 0x4d, 0xe6,
|
||||
+- 0xbb, 0x0c, 0x87, 0xdc, 0x5f, 0xa9, 0x24, 0x93,
|
||||
+- 0x03, 0x46, 0xa2, 0x33, 0x6c, 0xf4, 0xd8, 0x5d,
|
||||
+- 0x68, 0xf3, 0xd3, 0xe0, 0xf2, 0x30, 0xdb, 0xf5,
|
||||
+- 0x4f, 0x0f, 0xad, 0xc7, 0xd0, 0xaa, 0x47, 0xd9,
|
||||
+- 0x9f, 0x85, 0x1b, 0x2e, 0x6c, 0x3c, 0x57, 0x04,
|
||||
+- 0x29, 0xf4, 0xf5, 0x66, 0x7d, 0x93, 0x4a, 0xaa,
|
||||
+- 0x05, 0x52, 0x55, 0xc1, 0xc6, 0x06, 0x90, 0xab,
|
||||
++ 0x6c, 0x21, 0xc1, 0x9e, 0x94, 0xee, 0xdf, 0x74,
|
||||
++ 0x3a, 0x3c, 0x7c, 0x04, 0x1a, 0x53, 0x9e, 0x7c,
|
||||
++ 0x42, 0xac, 0x7e, 0x28, 0x9a, 0xb7, 0xe2, 0x4e,
|
||||
++ 0x87, 0xd4, 0x00, 0x69, 0x71, 0xf0, 0x3e, 0x0b,
|
||||
++ 0xc1, 0xda, 0xd6, 0xbd, 0x21, 0x39, 0x4f, 0x25,
|
||||
++ 0x22, 0x1f, 0x76, 0x0d, 0x62, 0x1f, 0xa2, 0x89,
|
||||
++ 0xdb, 0x38, 0x32, 0x88, 0x21, 0x1d, 0x89, 0xf1,
|
||||
++ 0xe0, 0x14, 0xd4, 0xb7, 0x90, 0xfc, 0xbc, 0x50,
|
||||
++ 0xb0, 0x8d, 0x5c, 0x2f, 0x49, 0x9e, 0x90, 0x17,
|
||||
++ 0x9e, 0x60, 0x9f, 0xe1, 0x77, 0x4f, 0x11, 0xa2,
|
||||
++ 0xcf, 0x16, 0x65, 0x2d, 0x4a, 0x2c, 0x12, 0xcb,
|
||||
++ 0x1e, 0x3c, 0x29, 0x8b, 0xdc, 0x27, 0x06, 0x9d,
|
||||
++ 0xf4, 0x0d, 0xe1, 0xc9, 0xeb, 0x14, 0x6a, 0x7e,
|
||||
++ 0xfd, 0xa7, 0xa8, 0xa7, 0x51, 0x82, 0x62, 0x0f,
|
||||
++ 0x29, 0x8d, 0x8c, 0x5e, 0xf2, 0xb8, 0xcd, 0xd3,
|
||||
++ 0x51, 0x92, 0xa7, 0x25, 0x39, 0x9d, 0xdd, 0x06,
|
||||
++ 0xff, 0xb1, 0xb0, 0xd5, 0x61, 0x03, 0x8f, 0x25,
|
||||
++ 0x5c, 0x49, 0x12, 0xc1, 0x50, 0x67, 0x61, 0x78,
|
||||
++ 0xb3, 0xe3, 0xc4, 0xf6, 0x36, 0x16, 0xa9, 0x04,
|
||||
++ 0x91, 0x0a, 0x4b, 0x27, 0x28, 0x97, 0x50, 0x7c,
|
||||
++ 0x65, 0x2d, 0xd0, 0x08, 0x71, 0x84, 0xe7, 0x47,
|
||||
++ 0x79, 0x83, 0x91, 0x46, 0xd9, 0x8f, 0x79, 0xce,
|
||||
++ 0x49, 0xcb, 0xcd, 0x8b, 0x34, 0xac, 0x61, 0xe0,
|
||||
++ 0xe6, 0x55, 0xbf, 0x10, 0xe4, 0xac, 0x9a, 0xd6,
|
||||
++ 0xed, 0xc1, 0xc2, 0xb6, 0xb6, 0xf7, 0x41, 0x99,
|
||||
++ 0xde, 0xfa, 0xde, 0x11, 0x16, 0xa2, 0x18, 0x30,
|
||||
++ 0x30, 0xdc, 0x95, 0x76, 0x2f, 0x46, 0x43, 0x20,
|
||||
++ 0xc4, 0xe7, 0x50, 0xb9, 0x1e, 0xcd, 0x69, 0xbb,
|
||||
++ 0x29, 0x94, 0x27, 0x9c, 0xc9, 0xab, 0xb4, 0x27,
|
||||
++ 0x8b, 0x4d, 0xe1, 0xcb, 0xc1, 0x04, 0x2c, 0x66,
|
||||
++ 0x41, 0x3a, 0x4d, 0xeb, 0x61, 0x4c, 0x77, 0x5a,
|
||||
++ 0xee, 0xb0, 0xca, 0x99, 0x0e, 0x7f, 0xbe, 0x06
|
||||
+ };
|
||||
+
|
||||
+ #ifndef OPENSSL_NO_EC
|
||||
+diff --git a/providers/fips/self_test_kats.c b/providers/fips/self_test_kats.c
|
||||
+index f13c41abd6..4ea10670c0 100644
|
||||
+--- a/providers/fips/self_test_kats.c
|
||||
++++ b/providers/fips/self_test_kats.c
|
||||
+@@ -642,14 +642,21 @@ static int self_test_ciphers(OSSL_SELF_TEST *st, OSSL_LIB_CTX *libctx)
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
++int REDHAT_FIPS_asym_cipher_st = 0;
|
||||
++
|
||||
+ static int self_test_asym_ciphers(OSSL_SELF_TEST *st, OSSL_LIB_CTX *libctx)
|
||||
+ {
|
||||
+ int i, ret = 1;
|
||||
+
|
||||
++ REDHAT_FIPS_asym_cipher_st = 1;
|
||||
++
|
||||
+ for (i = 0; i < (int)OSSL_NELEM(st_kat_asym_cipher_tests); ++i) {
|
||||
+ if (!self_test_asym_cipher(&st_kat_asym_cipher_tests[i], st, libctx))
|
||||
+ ret = 0;
|
||||
+ }
|
||||
++
|
||||
++ REDHAT_FIPS_asym_cipher_st = 0;
|
||||
++
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+diff --git a/providers/implementations/asymciphers/rsa_enc.c b/providers/implementations/asymciphers/rsa_enc.c
|
||||
+index d548560f1f..f3443b0c66 100644
|
||||
+--- a/providers/implementations/asymciphers/rsa_enc.c
|
||||
++++ b/providers/implementations/asymciphers/rsa_enc.c
|
||||
+@@ -30,6 +30,9 @@
|
||||
+ #include "prov/implementations.h"
|
||||
+ #include "prov/providercommon.h"
|
||||
+ #include "prov/securitycheck.h"
|
||||
++#ifdef FIPS_MODULE
|
||||
++# include "crypto/rsa/rsa_local.h"
|
||||
++#endif
|
||||
+
|
||||
+ #include <stdlib.h>
|
||||
+
|
||||
+@@ -75,6 +78,9 @@ typedef struct {
|
||||
+ /* TLS padding */
|
||||
+ unsigned int client_version;
|
||||
+ unsigned int alt_version;
|
||||
++#ifdef FIPS_MODULE
|
||||
++ char *redhat_st_oaep_seed;
|
||||
++#endif /* FIPS_MODULE */
|
||||
+ /* PKCS#1 v1.5 decryption mode */
|
||||
+ unsigned int implicit_rejection;
|
||||
+ } PROV_RSA_CTX;
|
||||
+@@ -193,12 +199,21 @@ static int rsa_encrypt(void *vprsactx, unsigned char *out, size_t *outlen,
|
||||
+ }
|
||||
+ }
|
||||
+ ret =
|
||||
+- ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(prsactx->libctx, tbuf,
|
||||
++#ifdef FIPS_MODULE
|
||||
++ ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex2(
|
||||
++#else
|
||||
++ ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(
|
||||
++#endif
|
||||
++ prsactx->libctx, tbuf,
|
||||
+ rsasize, in, inlen,
|
||||
+ prsactx->oaep_label,
|
||||
+ prsactx->oaep_labellen,
|
||||
+ prsactx->oaep_md,
|
||||
+- prsactx->mgf1_md);
|
||||
++ prsactx->mgf1_md
|
||||
++#ifdef FIPS_MODULE
|
||||
++ , prsactx->redhat_st_oaep_seed
|
||||
++#endif
|
||||
++ );
|
||||
+
|
||||
+ if (!ret) {
|
||||
+ OPENSSL_free(tbuf);
|
||||
+@@ -332,6 +347,9 @@ static void rsa_freectx(void *vprsactx)
|
||||
+ EVP_MD_free(prsactx->oaep_md);
|
||||
+ EVP_MD_free(prsactx->mgf1_md);
|
||||
+ OPENSSL_free(prsactx->oaep_label);
|
||||
++#ifdef FIPS_MODULE
|
||||
++ OPENSSL_free(prsactx->redhat_st_oaep_seed);
|
||||
++#endif /* FIPS_MODULE */
|
||||
+
|
||||
+ OPENSSL_free(prsactx);
|
||||
+ }
|
||||
+@@ -455,6 +473,9 @@ static const OSSL_PARAM known_gettable_ctx_params[] = {
|
||||
+ NULL, 0),
|
||||
+ OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION, NULL),
|
||||
+ OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION, NULL),
|
||||
++#ifdef FIPS_MODULE
|
||||
++ OSSL_PARAM_octet_string(OSSL_ASYM_CIPHER_PARAM_REDHAT_KAT_OEAP_SEED, NULL, 0),
|
||||
++#endif /* FIPS_MODULE */
|
||||
+ OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION, NULL),
|
||||
+ OSSL_PARAM_END
|
||||
+ };
|
||||
+@@ -465,6 +486,10 @@ static const OSSL_PARAM *rsa_gettable_ctx_params(ossl_unused void *vprsactx,
|
||||
+ return known_gettable_ctx_params;
|
||||
+ }
|
||||
+
|
||||
++#ifdef FIPS_MODULE
|
||||
++extern int REDHAT_FIPS_asym_cipher_st;
|
||||
++#endif /* FIPS_MODULE */
|
||||
++
|
||||
+ static int rsa_set_ctx_params(void *vprsactx, const OSSL_PARAM params[])
|
||||
+ {
|
||||
+ PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
|
||||
+@@ -576,6 +601,18 @@ static int rsa_set_ctx_params(void *vprsactx, const OSSL_PARAM params[])
|
||||
+ prsactx->oaep_labellen = tmp_labellen;
|
||||
+ }
|
||||
+
|
||||
++#ifdef FIPS_MODULE
|
||||
++ p = OSSL_PARAM_locate_const(params, OSSL_ASYM_CIPHER_PARAM_REDHAT_KAT_OEAP_SEED);
|
||||
++ if (p != NULL && REDHAT_FIPS_asym_cipher_st) {
|
||||
++ void *tmp_oaep_seed = NULL;
|
||||
++
|
||||
++ if (!OSSL_PARAM_get_octet_string(p, &tmp_oaep_seed, 0, NULL))
|
||||
++ return 0;
|
||||
++ OPENSSL_free(prsactx->redhat_st_oaep_seed);
|
||||
++ prsactx->redhat_st_oaep_seed = (char *)tmp_oaep_seed;
|
||||
++ }
|
||||
++#endif /* FIPS_MODULE */
|
||||
++
|
||||
+ p = OSSL_PARAM_locate_const(params, OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION);
|
||||
+ if (p != NULL) {
|
||||
+ unsigned int client_version;
|
||||
+diff --git a/util/perl/OpenSSL/paramnames.pm b/util/perl/OpenSSL/paramnames.pm
|
||||
+index c37ed7815f..70f7c50fe4 100644
|
||||
+--- a/util/perl/OpenSSL/paramnames.pm
|
||||
++++ b/util/perl/OpenSSL/paramnames.pm
|
||||
+@@ -401,6 +401,7 @@ my %params = (
|
||||
+ 'ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION' => "tls-client-version",
|
||||
+ 'ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION' => "tls-negotiated-version",
|
||||
+ 'ASYM_CIPHER_PARAM_IMPLICIT_REJECTION' => "implicit-rejection",
|
||||
++ 'ASYM_CIPHER_PARAM_REDHAT_KAT_OEAP_SEED' => "redhat-kat-oaep-seed",
|
||||
+
|
||||
+ # Encoder / decoder parameters
|
||||
+
|
||||
+--
|
||||
+2.48.1
|
||||
+
|
||||
int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
|
||||
const unsigned char *from, int flen,
|
||||
const unsigned char *param, int plen,
|
||||
diff --git a/providers/fips/self_test_data.inc b/providers/fips/self_test_data.inc
|
||||
index 4b80bb70b9..c33ecd0791 100644
|
||||
--- a/providers/fips/self_test_data.inc
|
||||
+++ b/providers/fips/self_test_data.inc
|
||||
@@ -1296,14 +1296,21 @@ static const ST_KAT_PARAM rsa_priv_key[] = {
|
||||
};
|
||||
|
||||
/*-
|
||||
- * Using OSSL_PKEY_RSA_PAD_MODE_NONE directly in the expansion of the
|
||||
+ * Using OSSL_PKEY_RSA_PAD_MODE_OAEP directly in the expansion of the
|
||||
* ST_KAT_PARAM_UTF8STRING macro below causes a failure on ancient
|
||||
* HP/UX PA-RISC compilers.
|
||||
*/
|
||||
-static const char pad_mode_none[] = OSSL_PKEY_RSA_PAD_MODE_NONE;
|
||||
+static const char pad_mode_oaep[] = OSSL_PKEY_RSA_PAD_MODE_OAEP;
|
||||
+static const char oaep_fixed_seed[] = {
|
||||
+ 0xf6, 0x10, 0xef, 0x0a, 0x97, 0xbf, 0x91, 0x25,
|
||||
+ 0x97, 0xcf, 0x8e, 0x0a, 0x75, 0x51, 0x2f, 0xab,
|
||||
+ 0x2e, 0x4b, 0x2c, 0xe6
|
||||
+};
|
||||
|
||||
static const ST_KAT_PARAM rsa_enc_params[] = {
|
||||
- ST_KAT_PARAM_UTF8STRING(OSSL_ASYM_CIPHER_PARAM_PAD_MODE, pad_mode_none),
|
||||
+ ST_KAT_PARAM_UTF8STRING(OSSL_ASYM_CIPHER_PARAM_PAD_MODE, pad_mode_oaep),
|
||||
+ ST_KAT_PARAM_OCTET(OSSL_ASYM_CIPHER_PARAM_SUSE_KAT_OEAP_SEED,
|
||||
+ oaep_fixed_seed),
|
||||
ST_KAT_PARAM_END()
|
||||
};
|
||||
|
||||
@@ -1342,43 +1349,43 @@ static const unsigned char rsa_expected_sig[256] = {
|
||||
0x2c, 0x68, 0xf0, 0x37, 0xa9, 0xd2, 0x56, 0xd6
|
||||
};
|
||||
|
||||
-static const unsigned char rsa_asym_plaintext_encrypt[256] = {
|
||||
+static const unsigned char rsa_asym_plaintext_encrypt[208] = {
|
||||
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
|
||||
0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
|
||||
};
|
||||
static const unsigned char rsa_asym_expected_encrypt[256] = {
|
||||
- 0x54, 0xac, 0x23, 0x96, 0x1d, 0x82, 0x5d, 0x8b,
|
||||
- 0x8f, 0x36, 0x33, 0xd0, 0xf4, 0x02, 0xa2, 0x61,
|
||||
- 0xb1, 0x13, 0xd4, 0x4a, 0x46, 0x06, 0x37, 0x3c,
|
||||
- 0xbf, 0x40, 0x05, 0x3c, 0xc6, 0x3b, 0x64, 0xdc,
|
||||
- 0x22, 0x22, 0xaf, 0x36, 0x79, 0x62, 0x45, 0xf0,
|
||||
- 0x97, 0x82, 0x22, 0x44, 0x86, 0x4a, 0x7c, 0xfa,
|
||||
- 0xac, 0x03, 0x21, 0x84, 0x3f, 0x31, 0xad, 0x2a,
|
||||
- 0xa4, 0x6e, 0x7a, 0xc5, 0x93, 0xf3, 0x0f, 0xfc,
|
||||
- 0xf1, 0x62, 0xce, 0x82, 0x12, 0x45, 0xc9, 0x35,
|
||||
- 0xb0, 0x7a, 0xcd, 0x99, 0x8c, 0x91, 0x6b, 0x5a,
|
||||
- 0xd3, 0x46, 0xdb, 0xf9, 0x9e, 0x52, 0x49, 0xbd,
|
||||
- 0x1e, 0xe8, 0xda, 0xac, 0x61, 0x47, 0xc2, 0xda,
|
||||
- 0xfc, 0x1e, 0xfb, 0x74, 0xd7, 0xd6, 0xc1, 0x18,
|
||||
- 0x86, 0x3e, 0x20, 0x9c, 0x7a, 0xe1, 0x04, 0xb7,
|
||||
- 0x38, 0x43, 0xb1, 0x4e, 0xa0, 0xd8, 0xc1, 0x39,
|
||||
- 0x4d, 0xe1, 0xd3, 0xb0, 0xb3, 0xf1, 0x82, 0x87,
|
||||
- 0x1f, 0x74, 0xb5, 0x69, 0xfd, 0x33, 0xd6, 0x21,
|
||||
- 0x7c, 0x61, 0x60, 0x28, 0xca, 0x70, 0xdb, 0xa0,
|
||||
- 0xbb, 0xc8, 0x73, 0xa9, 0x82, 0xf8, 0x6b, 0xd8,
|
||||
- 0xf0, 0xc9, 0x7b, 0x20, 0xdf, 0x9d, 0xfb, 0x8c,
|
||||
- 0xd4, 0xa2, 0x89, 0xe1, 0x9b, 0x04, 0xad, 0xaa,
|
||||
- 0x11, 0x6c, 0x8f, 0xce, 0x83, 0x29, 0x56, 0x69,
|
||||
- 0xbb, 0x00, 0x3b, 0xef, 0xca, 0x2d, 0xcd, 0x52,
|
||||
- 0xc8, 0xf1, 0xb3, 0x9b, 0xb4, 0x4f, 0x6d, 0x9c,
|
||||
- 0x3d, 0x69, 0xcc, 0x6d, 0x1f, 0x38, 0x4d, 0xe6,
|
||||
- 0xbb, 0x0c, 0x87, 0xdc, 0x5f, 0xa9, 0x24, 0x93,
|
||||
- 0x03, 0x46, 0xa2, 0x33, 0x6c, 0xf4, 0xd8, 0x5d,
|
||||
- 0x68, 0xf3, 0xd3, 0xe0, 0xf2, 0x30, 0xdb, 0xf5,
|
||||
- 0x4f, 0x0f, 0xad, 0xc7, 0xd0, 0xaa, 0x47, 0xd9,
|
||||
- 0x9f, 0x85, 0x1b, 0x2e, 0x6c, 0x3c, 0x57, 0x04,
|
||||
- 0x29, 0xf4, 0xf5, 0x66, 0x7d, 0x93, 0x4a, 0xaa,
|
||||
- 0x05, 0x52, 0x55, 0xc1, 0xc6, 0x06, 0x90, 0xab,
|
||||
+ 0x6c, 0x21, 0xc1, 0x9e, 0x94, 0xee, 0xdf, 0x74,
|
||||
+ 0x3a, 0x3c, 0x7c, 0x04, 0x1a, 0x53, 0x9e, 0x7c,
|
||||
+ 0x42, 0xac, 0x7e, 0x28, 0x9a, 0xb7, 0xe2, 0x4e,
|
||||
+ 0x87, 0xd4, 0x00, 0x69, 0x71, 0xf0, 0x3e, 0x0b,
|
||||
+ 0xc1, 0xda, 0xd6, 0xbd, 0x21, 0x39, 0x4f, 0x25,
|
||||
+ 0x22, 0x1f, 0x76, 0x0d, 0x62, 0x1f, 0xa2, 0x89,
|
||||
+ 0xdb, 0x38, 0x32, 0x88, 0x21, 0x1d, 0x89, 0xf1,
|
||||
+ 0xe0, 0x14, 0xd4, 0xb7, 0x90, 0xfc, 0xbc, 0x50,
|
||||
+ 0xb0, 0x8d, 0x5c, 0x2f, 0x49, 0x9e, 0x90, 0x17,
|
||||
+ 0x9e, 0x60, 0x9f, 0xe1, 0x77, 0x4f, 0x11, 0xa2,
|
||||
+ 0xcf, 0x16, 0x65, 0x2d, 0x4a, 0x2c, 0x12, 0xcb,
|
||||
+ 0x1e, 0x3c, 0x29, 0x8b, 0xdc, 0x27, 0x06, 0x9d,
|
||||
+ 0xf4, 0x0d, 0xe1, 0xc9, 0xeb, 0x14, 0x6a, 0x7e,
|
||||
+ 0xfd, 0xa7, 0xa8, 0xa7, 0x51, 0x82, 0x62, 0x0f,
|
||||
+ 0x29, 0x8d, 0x8c, 0x5e, 0xf2, 0xb8, 0xcd, 0xd3,
|
||||
+ 0x51, 0x92, 0xa7, 0x25, 0x39, 0x9d, 0xdd, 0x06,
|
||||
+ 0xff, 0xb1, 0xb0, 0xd5, 0x61, 0x03, 0x8f, 0x25,
|
||||
+ 0x5c, 0x49, 0x12, 0xc1, 0x50, 0x67, 0x61, 0x78,
|
||||
+ 0xb3, 0xe3, 0xc4, 0xf6, 0x36, 0x16, 0xa9, 0x04,
|
||||
+ 0x91, 0x0a, 0x4b, 0x27, 0x28, 0x97, 0x50, 0x7c,
|
||||
+ 0x65, 0x2d, 0xd0, 0x08, 0x71, 0x84, 0xe7, 0x47,
|
||||
+ 0x79, 0x83, 0x91, 0x46, 0xd9, 0x8f, 0x79, 0xce,
|
||||
+ 0x49, 0xcb, 0xcd, 0x8b, 0x34, 0xac, 0x61, 0xe0,
|
||||
+ 0xe6, 0x55, 0xbf, 0x10, 0xe4, 0xac, 0x9a, 0xd6,
|
||||
+ 0xed, 0xc1, 0xc2, 0xb6, 0xb6, 0xf7, 0x41, 0x99,
|
||||
+ 0xde, 0xfa, 0xde, 0x11, 0x16, 0xa2, 0x18, 0x30,
|
||||
+ 0x30, 0xdc, 0x95, 0x76, 0x2f, 0x46, 0x43, 0x20,
|
||||
+ 0xc4, 0xe7, 0x50, 0xb9, 0x1e, 0xcd, 0x69, 0xbb,
|
||||
+ 0x29, 0x94, 0x27, 0x9c, 0xc9, 0xab, 0xb4, 0x27,
|
||||
+ 0x8b, 0x4d, 0xe1, 0xcb, 0xc1, 0x04, 0x2c, 0x66,
|
||||
+ 0x41, 0x3a, 0x4d, 0xeb, 0x61, 0x4c, 0x77, 0x5a,
|
||||
+ 0xee, 0xb0, 0xca, 0x99, 0x0e, 0x7f, 0xbe, 0x06
|
||||
};
|
||||
|
||||
#ifndef OPENSSL_NO_EC
|
||||
diff --git a/providers/fips/self_test_kats.c b/providers/fips/self_test_kats.c
|
||||
index f13c41abd6..4ea10670c0 100644
|
||||
--- a/providers/fips/self_test_kats.c
|
||||
+++ b/providers/fips/self_test_kats.c
|
||||
@@ -642,14 +642,21 @@ static int self_test_ciphers(OSSL_SELF_TEST *st, OSSL_LIB_CTX *libctx)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+int SUSE_FIPS_asym_cipher_st = 0;
|
||||
diff --git a/REBASE.txt b/REBASE.txt
|
||||
new file mode 100644
|
||||
index 0000000000..2833a383c1
|
||||
--- /dev/null
|
||||
+++ b/REBASE.txt
|
||||
@@ -0,0 +1,10 @@
|
||||
+0028-0073-FIPS-Use-OAEP-in-KATs-support-fixed-OAEP-seed.p.patch
|
||||
+
|
||||
static int self_test_asym_ciphers(OSSL_SELF_TEST *st, OSSL_LIB_CTX *libctx)
|
||||
{
|
||||
int i, ret = 1;
|
||||
|
||||
+ SUSE_FIPS_asym_cipher_st = 1;
|
||||
+Some asym testing has been dropped upstream, unclear if this needs to survive,
|
||||
+if so we may need to resurrect deleted code in upstream patch:
|
||||
+
|
||||
for (i = 0; i < (int)OSSL_NELEM(st_kat_asym_cipher_tests); ++i) {
|
||||
if (!self_test_asym_cipher(&st_kat_asym_cipher_tests[i], st, libctx))
|
||||
ret = 0;
|
||||
}
|
||||
+ commit 635bf4946a7e948f26a348ddc3b5a8d282354f64
|
||||
+
|
||||
+ SUSE_FIPS_asym_cipher_st = 0;
|
||||
+ fips: remove redundant RSA encrypt/decrypt KAT
|
||||
+--
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
diff --git a/providers/implementations/asymciphers/rsa_enc.c b/providers/implementations/asymciphers/rsa_enc.c
|
||||
index d548560f1f..f3443b0c66 100644
|
||||
--- a/providers/implementations/asymciphers/rsa_enc.c
|
||||
+++ b/providers/implementations/asymciphers/rsa_enc.c
|
||||
@@ -30,6 +30,9 @@
|
||||
#include "prov/implementations.h"
|
||||
#include "prov/providercommon.h"
|
||||
#include "prov/securitycheck.h"
|
||||
+#ifdef FIPS_MODULE
|
||||
+# include "crypto/rsa/rsa_local.h"
|
||||
+#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -75,6 +78,9 @@ typedef struct {
|
||||
/* TLS padding */
|
||||
unsigned int client_version;
|
||||
unsigned int alt_version;
|
||||
+#ifdef FIPS_MODULE
|
||||
+ char *suse_st_oaep_seed;
|
||||
+#endif /* FIPS_MODULE */
|
||||
/* PKCS#1 v1.5 decryption mode */
|
||||
unsigned int implicit_rejection;
|
||||
} PROV_RSA_CTX;
|
||||
@@ -193,12 +199,21 @@ static int rsa_encrypt(void *vprsactx, unsigned char *out, size_t *outlen,
|
||||
}
|
||||
}
|
||||
ret =
|
||||
- ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(prsactx->libctx, tbuf,
|
||||
+#ifdef FIPS_MODULE
|
||||
+ ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex2(
|
||||
+#else
|
||||
+ ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(
|
||||
+#endif
|
||||
+ prsactx->libctx, tbuf,
|
||||
rsasize, in, inlen,
|
||||
prsactx->oaep_label,
|
||||
prsactx->oaep_labellen,
|
||||
prsactx->oaep_md,
|
||||
- prsactx->mgf1_md);
|
||||
+ prsactx->mgf1_md
|
||||
+#ifdef FIPS_MODULE
|
||||
+ , prsactx->suse_st_oaep_seed
|
||||
+#endif
|
||||
+ );
|
||||
|
||||
if (!ret) {
|
||||
OPENSSL_free(tbuf);
|
||||
@@ -332,6 +347,9 @@ static void rsa_freectx(void *vprsactx)
|
||||
EVP_MD_free(prsactx->oaep_md);
|
||||
EVP_MD_free(prsactx->mgf1_md);
|
||||
OPENSSL_free(prsactx->oaep_label);
|
||||
+#ifdef FIPS_MODULE
|
||||
+ OPENSSL_free(prsactx->suse_st_oaep_seed);
|
||||
+#endif /* FIPS_MODULE */
|
||||
|
||||
OPENSSL_free(prsactx);
|
||||
}
|
||||
@@ -455,6 +473,9 @@ static const OSSL_PARAM known_gettable_ctx_params[] = {
|
||||
NULL, 0),
|
||||
OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION, NULL),
|
||||
OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION, NULL),
|
||||
+#ifdef FIPS_MODULE
|
||||
+ OSSL_PARAM_octet_string(OSSL_ASYM_CIPHER_PARAM_SUSE_KAT_OEAP_SEED, NULL, 0),
|
||||
+#endif /* FIPS_MODULE */
|
||||
OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION, NULL),
|
||||
OSSL_PARAM_END
|
||||
};
|
||||
@@ -465,6 +486,10 @@ static const OSSL_PARAM *rsa_gettable_ctx_params(ossl_unused void *vprsactx,
|
||||
return known_gettable_ctx_params;
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+extern int SUSE_FIPS_asym_cipher_st;
|
||||
+#endif /* FIPS_MODULE */
|
||||
+
|
||||
static int rsa_set_ctx_params(void *vprsactx, const OSSL_PARAM params[])
|
||||
{
|
||||
PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
|
||||
@@ -576,6 +601,18 @@ static int rsa_set_ctx_params(void *vprsactx, const OSSL_PARAM params[])
|
||||
prsactx->oaep_labellen = tmp_labellen;
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+ p = OSSL_PARAM_locate_const(params, OSSL_ASYM_CIPHER_PARAM_SUSE_KAT_OEAP_SEED);
|
||||
+ if (p != NULL && SUSE_FIPS_asym_cipher_st) {
|
||||
+ void *tmp_oaep_seed = NULL;
|
||||
+
|
||||
+ if (!OSSL_PARAM_get_octet_string(p, &tmp_oaep_seed, 0, NULL))
|
||||
+ return 0;
|
||||
+ OPENSSL_free(prsactx->suse_st_oaep_seed);
|
||||
+ prsactx->suse_st_oaep_seed = (char *)tmp_oaep_seed;
|
||||
+ }
|
||||
+#endif /* FIPS_MODULE */
|
||||
+
|
||||
p = OSSL_PARAM_locate_const(params, OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION);
|
||||
if (p != NULL) {
|
||||
unsigned int client_version;
|
||||
diff --git a/util/perl/OpenSSL/paramnames.pm b/util/perl/OpenSSL/paramnames.pm
|
||||
index c37ed7815f..70f7c50fe4 100644
|
||||
--- a/util/perl/OpenSSL/paramnames.pm
|
||||
+++ b/util/perl/OpenSSL/paramnames.pm
|
||||
@@ -401,6 +401,7 @@ my %params = (
|
||||
'ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION' => "tls-client-version",
|
||||
'ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION' => "tls-negotiated-version",
|
||||
'ASYM_CIPHER_PARAM_IMPLICIT_REJECTION' => "implicit-rejection",
|
||||
+ 'ASYM_CIPHER_PARAM_SUSE_KAT_OEAP_SEED' => "suse-kat-oaep-seed",
|
||||
|
||||
# Encoder / decoder parameters
|
||||
|
||||
--
|
||||
2.44.0
|
||||
2.49.0
|
||||
|
||||
|
@@ -1,312 +0,0 @@
|
||||
From dc41625dc4a793f0e21188165711181ca085339b Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Wed, 6 Mar 2024 19:17:16 +0100
|
||||
Subject: [PATCH 28/49]
|
||||
0074-FIPS-Use-digest_sign-digest_verify-in-self-test.patch
|
||||
|
||||
Patch-name: 0074-FIPS-Use-digest_sign-digest_verify-in-self-test.patch
|
||||
Patch-id: 74
|
||||
Patch-status: |
|
||||
# [PATCH 29/46]
|
||||
# 0074-FIPS-Use-digest_sign-digest_verify-in-self-test.patch
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
---
|
||||
crypto/evp/m_sigver.c | 54 ++++++++++++++++++++++++++++-----
|
||||
providers/fips/self_test_kats.c | 43 +++++++++++++++-----------
|
||||
2 files changed, 73 insertions(+), 24 deletions(-)
|
||||
|
||||
Index: openssl-3.2.3/crypto/evp/m_sigver.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/evp/m_sigver.c
|
||||
+++ openssl-3.2.3/crypto/evp/m_sigver.c
|
||||
@@ -86,6 +86,7 @@ static int update(EVP_MD_CTX *ctx, const
|
||||
ERR_raise(ERR_LIB_EVP, EVP_R_ONLY_ONESHOT_SUPPORTED);
|
||||
return 0;
|
||||
}
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
|
||||
/*
|
||||
* If we get the "NULL" md then the name comes back as "UNDEF". We want to use
|
||||
@@ -121,8 +122,10 @@ static int do_sigver_init(EVP_MD_CTX *ct
|
||||
reinit = 0;
|
||||
if (e == NULL)
|
||||
ctx->pctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey, props);
|
||||
+#ifndef FIPS_MODULE
|
||||
else
|
||||
ctx->pctx = EVP_PKEY_CTX_new(pkey, e);
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
}
|
||||
if (ctx->pctx == NULL)
|
||||
return 0;
|
||||
@@ -132,8 +135,10 @@ static int do_sigver_init(EVP_MD_CTX *ct
|
||||
locpctx = ctx->pctx;
|
||||
ERR_set_mark();
|
||||
|
||||
+#ifndef FIPS_MODULE
|
||||
if (evp_pkey_ctx_is_legacy(locpctx))
|
||||
goto legacy;
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
|
||||
/* do not reinitialize if pkey is set or operation is different */
|
||||
if (reinit
|
||||
@@ -218,8 +223,10 @@ static int do_sigver_init(EVP_MD_CTX *ct
|
||||
signature =
|
||||
evp_signature_fetch_from_prov((OSSL_PROVIDER *)tmp_prov,
|
||||
supported_sig, locpctx->propquery);
|
||||
+#ifndef FIPS_MODULE
|
||||
if (signature == NULL)
|
||||
goto legacy;
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
break;
|
||||
}
|
||||
if (signature == NULL)
|
||||
@@ -303,6 +310,7 @@ static int do_sigver_init(EVP_MD_CTX *ct
|
||||
ctx->fetched_digest = EVP_MD_fetch(locpctx->libctx, mdname, props);
|
||||
if (ctx->fetched_digest != NULL) {
|
||||
ctx->digest = ctx->reqdigest = ctx->fetched_digest;
|
||||
+#ifndef FIPS_MODULE
|
||||
} else {
|
||||
/* legacy engine support : remove the mark when this is deleted */
|
||||
ctx->reqdigest = ctx->digest = EVP_get_digestbyname(mdname);
|
||||
@@ -311,11 +319,13 @@ static int do_sigver_init(EVP_MD_CTX *ct
|
||||
ERR_raise(ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR);
|
||||
goto err;
|
||||
}
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
}
|
||||
(void)ERR_pop_to_mark();
|
||||
}
|
||||
}
|
||||
|
||||
+#ifndef FIPS_MODULE
|
||||
if (ctx->reqdigest != NULL
|
||||
&& !EVP_PKEY_is_a(locpctx->pkey, SN_hmac)
|
||||
&& !EVP_PKEY_is_a(locpctx->pkey, SN_tls1_prf)
|
||||
@@ -327,6 +337,7 @@ static int do_sigver_init(EVP_MD_CTX *ct
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
|
||||
if (ver) {
|
||||
if (signature->digest_verify_init == NULL) {
|
||||
@@ -359,6 +370,7 @@ static int do_sigver_init(EVP_MD_CTX *ct
|
||||
EVP_KEYMGMT_free(tmp_keymgmt);
|
||||
return 0;
|
||||
|
||||
+#ifndef FIPS_MODULE
|
||||
legacy:
|
||||
/*
|
||||
* If we don't have the full support we need with provided methods,
|
||||
@@ -430,6 +442,7 @@ static int do_sigver_init(EVP_MD_CTX *ct
|
||||
ctx->pctx->flag_call_digest_custom = 1;
|
||||
|
||||
ret = 1;
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
|
||||
end:
|
||||
#ifndef FIPS_MODULE
|
||||
@@ -472,7 +485,6 @@ int EVP_DigestVerifyInit(EVP_MD_CTX *ctx
|
||||
return do_sigver_init(ctx, pctx, type, NULL, NULL, NULL, e, pkey, 1,
|
||||
NULL);
|
||||
}
|
||||
-#endif /* FIPS_MDOE */
|
||||
|
||||
int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize)
|
||||
{
|
||||
@@ -544,24 +556,30 @@ int EVP_DigestVerifyUpdate(EVP_MD_CTX *c
|
||||
return EVP_DigestUpdate(ctx, data, dsize);
|
||||
}
|
||||
|
||||
-#ifndef FIPS_MODULE
|
||||
int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret,
|
||||
size_t *siglen)
|
||||
{
|
||||
- int sctx = 0, r = 0;
|
||||
- EVP_PKEY_CTX *dctx = NULL, *pctx = ctx->pctx;
|
||||
+ int r = 0;
|
||||
+#ifndef FIPS_MODULE
|
||||
+ int sctx = 0;
|
||||
+ EVP_PKEY_CTX *dctx = NULL;
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
+ EVP_PKEY_CTX *pctx = ctx->pctx;
|
||||
|
||||
if ((ctx->flags & EVP_MD_CTX_FLAG_FINALISED) != 0) {
|
||||
ERR_raise(ERR_LIB_EVP, EVP_R_FINAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#ifndef FIPS_MODULE
|
||||
if (pctx == NULL
|
||||
|| pctx->operation != EVP_PKEY_OP_SIGNCTX
|
||||
|| pctx->op.sig.algctx == NULL
|
||||
|| pctx->op.sig.signature == NULL)
|
||||
goto legacy;
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
|
||||
+#ifndef FIPS_MODULE
|
||||
if (sigret != NULL && (ctx->flags & EVP_MD_CTX_FLAG_FINALISE) == 0) {
|
||||
/* try dup */
|
||||
dctx = EVP_PKEY_CTX_dup(pctx);
|
||||
@@ -576,7 +594,14 @@ int EVP_DigestSignFinal(EVP_MD_CTX *ctx,
|
||||
else
|
||||
EVP_PKEY_CTX_free(dctx);
|
||||
return r;
|
||||
+#else
|
||||
+ r = pctx->op.sig.signature->digest_sign_final(pctx->op.sig.algctx,
|
||||
+ sigret, siglen,
|
||||
+ sigret == NULL ? 0 : *siglen);
|
||||
+ return r;
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
|
||||
+#ifndef FIPS_MODULE
|
||||
legacy:
|
||||
if (pctx == NULL || pctx->pmeth == NULL) {
|
||||
ERR_raise(ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR);
|
||||
@@ -649,6 +674,7 @@ int EVP_DigestSignFinal(EVP_MD_CTX *ctx,
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
}
|
||||
|
||||
int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen,
|
||||
@@ -687,23 +713,29 @@ int EVP_DigestSign(EVP_MD_CTX *ctx, unsi
|
||||
int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig,
|
||||
size_t siglen)
|
||||
{
|
||||
- unsigned char md[EVP_MAX_MD_SIZE];
|
||||
int r = 0;
|
||||
+#ifndef FIPS_MODULE
|
||||
+ unsigned char md[EVP_MAX_MD_SIZE];
|
||||
unsigned int mdlen = 0;
|
||||
int vctx = 0;
|
||||
- EVP_PKEY_CTX *dctx = NULL, *pctx = ctx->pctx;
|
||||
+ EVP_PKEY_CTX *dctx = NULL;
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
+ EVP_PKEY_CTX *pctx = ctx->pctx;
|
||||
|
||||
if ((ctx->flags & EVP_MD_CTX_FLAG_FINALISED) != 0) {
|
||||
ERR_raise(ERR_LIB_EVP, EVP_R_FINAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#ifndef FIPS_MODULE
|
||||
if (pctx == NULL
|
||||
|| pctx->operation != EVP_PKEY_OP_VERIFYCTX
|
||||
|| pctx->op.sig.algctx == NULL
|
||||
|| pctx->op.sig.signature == NULL)
|
||||
goto legacy;
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
|
||||
+#ifndef FIPS_MODULE
|
||||
if ((ctx->flags & EVP_MD_CTX_FLAG_FINALISE) == 0) {
|
||||
/* try dup */
|
||||
dctx = EVP_PKEY_CTX_dup(pctx);
|
||||
@@ -717,7 +749,13 @@ int EVP_DigestVerifyFinal(EVP_MD_CTX *ct
|
||||
else
|
||||
EVP_PKEY_CTX_free(dctx);
|
||||
return r;
|
||||
+#else
|
||||
+ r = pctx->op.sig.signature->digest_verify_final(pctx->op.sig.algctx,
|
||||
+ sig, siglen);
|
||||
+ return r;
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
|
||||
+#ifndef FIPS_MODULE
|
||||
legacy:
|
||||
if (pctx == NULL || pctx->pmeth == NULL) {
|
||||
ERR_raise(ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR);
|
||||
@@ -758,6 +796,7 @@ int EVP_DigestVerifyFinal(EVP_MD_CTX *ct
|
||||
if (vctx || !r)
|
||||
return r;
|
||||
return EVP_PKEY_verify(pctx, sig, siglen, md, mdlen);
|
||||
+#endif /* !defined(FIPS_MODULE) */
|
||||
}
|
||||
|
||||
int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret,
|
||||
@@ -790,4 +829,3 @@ int EVP_DigestVerify(EVP_MD_CTX *ctx, co
|
||||
return -1;
|
||||
return EVP_DigestVerifyFinal(ctx, sigret, siglen);
|
||||
}
|
||||
-#endif /* FIPS_MODULE */
|
||||
Index: openssl-3.2.3/providers/fips/self_test_kats.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/fips/self_test_kats.c
|
||||
+++ openssl-3.2.3/providers/fips/self_test_kats.c
|
||||
@@ -450,10 +450,13 @@ static int self_test_sign(const ST_KAT_S
|
||||
int ret = 0;
|
||||
OSSL_PARAM *params = NULL, *params_sig = NULL;
|
||||
OSSL_PARAM_BLD *bld = NULL;
|
||||
+ EVP_MD *md = NULL;
|
||||
+ EVP_MD_CTX *ctx = NULL;
|
||||
EVP_PKEY_CTX *sctx = NULL, *kctx = NULL;
|
||||
EVP_PKEY *pkey = NULL;
|
||||
- unsigned char sig[256];
|
||||
BN_CTX *bnctx = NULL;
|
||||
+ const char *msg = "Hello World!";
|
||||
+ unsigned char sig[256];
|
||||
size_t siglen = sizeof(sig);
|
||||
static const unsigned char dgst[] = {
|
||||
0x7f, 0x83, 0xb1, 0x65, 0x7f, 0xf1, 0xfc, 0x53, 0xb9, 0x2d, 0xc1, 0x81,
|
||||
@@ -487,23 +490,26 @@ static int self_test_sign(const ST_KAT_S
|
||||
|| EVP_PKEY_fromdata(kctx, &pkey, EVP_PKEY_KEYPAIR, params) <= 0)
|
||||
goto err;
|
||||
|
||||
- /* Create a EVP_PKEY_CTX to use for the signing operation */
|
||||
- sctx = EVP_PKEY_CTX_new_from_pkey(libctx, pkey, NULL);
|
||||
- if (sctx == NULL
|
||||
- || EVP_PKEY_sign_init(sctx) <= 0)
|
||||
- goto err;
|
||||
-
|
||||
- /* set signature parameters */
|
||||
- if (!OSSL_PARAM_BLD_push_utf8_string(bld, OSSL_SIGNATURE_PARAM_DIGEST,
|
||||
- t->mdalgorithm,
|
||||
- strlen(t->mdalgorithm) + 1))
|
||||
- goto err;
|
||||
+ /* Create a EVP_MD_CTX to use for the signature operation, assign signature
|
||||
+ * parameters and sign */
|
||||
params_sig = OSSL_PARAM_BLD_to_param(bld);
|
||||
- if (EVP_PKEY_CTX_set_params(sctx, params_sig) <= 0)
|
||||
+ md = EVP_MD_fetch(libctx, "SHA256", NULL);
|
||||
+ ctx = EVP_MD_CTX_new();
|
||||
+ if (md == NULL || ctx == NULL)
|
||||
+ goto err;
|
||||
+ EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_FINALISE | EVP_MD_CTX_FLAG_ONESHOT);
|
||||
+ if (EVP_DigestSignInit(ctx, &sctx, md, NULL, pkey) <= 0
|
||||
+ || EVP_PKEY_CTX_set_params(sctx, params_sig) <= 0
|
||||
+ || EVP_DigestSign(ctx, sig, &siglen, (const unsigned char *)msg, strlen(msg)) <= 0
|
||||
+ || EVP_MD_CTX_reset(ctx) <= 0)
|
||||
goto err;
|
||||
|
||||
- if (EVP_PKEY_sign(sctx, sig, &siglen, dgst, sizeof(dgst)) <= 0
|
||||
- || EVP_PKEY_verify_init(sctx) <= 0
|
||||
+ /* sctx is not freed automatically inside the FIPS module */
|
||||
+ EVP_PKEY_CTX_free(sctx);
|
||||
+ sctx = NULL;
|
||||
+
|
||||
+ EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_FINALISE | EVP_MD_CTX_FLAG_ONESHOT);
|
||||
+ if (EVP_DigestVerifyInit(ctx, &sctx, md, NULL, pkey) <= 0
|
||||
|| EVP_PKEY_CTX_set_params(sctx, params_sig) <= 0)
|
||||
goto err;
|
||||
|
||||
@@ -513,14 +519,17 @@ static int self_test_sign(const ST_KAT_S
|
||||
goto err;
|
||||
|
||||
OSSL_SELF_TEST_oncorrupt_byte(st, sig);
|
||||
- if (EVP_PKEY_verify(sctx, sig, siglen, dgst, sizeof(dgst)) <= 0)
|
||||
+ if (EVP_DigestVerify(ctx, sig, siglen, (const unsigned char *)msg, strlen(msg)) <= 0)
|
||||
goto err;
|
||||
ret = 1;
|
||||
err:
|
||||
BN_CTX_free(bnctx);
|
||||
EVP_PKEY_free(pkey);
|
||||
- EVP_PKEY_CTX_free(kctx);
|
||||
+ EVP_MD_free(md);
|
||||
+ EVP_MD_CTX_free(ctx);
|
||||
+ /* sctx is not freed automatically inside the FIPS module */
|
||||
EVP_PKEY_CTX_free(sctx);
|
||||
+ EVP_PKEY_CTX_free(kctx);
|
||||
OSSL_PARAM_free(params);
|
||||
OSSL_PARAM_free(params_sig);
|
||||
OSSL_PARAM_BLD_free(bld);
|
@@ -12,41 +12,32 @@ From-dist-git-commit: 5c67b5adc311af297f425c09e3e1ac7ca8483911
|
||||
providers/fips/self_test.c | 22 ++++++++++------------
|
||||
1 file changed, 10 insertions(+), 12 deletions(-)
|
||||
|
||||
Index: openssl-3.2.3/providers/fips/self_test.c
|
||||
Index: openssl-3.5.0-beta1/providers/fips/self_test.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/fips/self_test.c
|
||||
+++ openssl-3.2.3/providers/fips/self_test.c
|
||||
@@ -507,6 +507,16 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
--- openssl-3.5.0-beta1.orig/providers/fips/self_test.c
|
||||
+++ openssl-3.5.0-beta1/providers/fips/self_test.c
|
||||
@@ -524,6 +524,14 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
if (ev == NULL)
|
||||
goto end;
|
||||
|
||||
+ /*
|
||||
+ * Run the KAT's before HMAC verification according to FIPS-140-3 requirements
|
||||
+ */
|
||||
+ if (kats_already_passed == 0) {
|
||||
+ if (!SELF_TEST_kats(ev, st->libctx)) {
|
||||
+ ERR_raise(ERR_LIB_PROV, PROV_R_SELF_TEST_KAT_FAILURE);
|
||||
+ goto end;
|
||||
+ }
|
||||
+ if (!SELF_TEST_kats(ev, st->libctx)) {
|
||||
+ ERR_raise(ERR_LIB_PROV, PROV_R_SELF_TEST_KAT_FAILURE);
|
||||
+ goto end;
|
||||
+ }
|
||||
+
|
||||
if (st->module_checksum_data == NULL) {
|
||||
module_checksum = fips_hmac_container;
|
||||
checksum_len = sizeof(fips_hmac_container);
|
||||
@@ -575,18 +585,6 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
@@ -562,11 +570,6 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
}
|
||||
}
|
||||
|
||||
- /*
|
||||
- * Only runs the KAT's during installation OR on_demand().
|
||||
- * NOTE: If the installation option 'self_test_onload' is chosen then this
|
||||
- * path will always be run, since kats_already_passed will always be 0.
|
||||
- */
|
||||
- if (on_demand_test || kats_already_passed == 0) {
|
||||
- if (!SELF_TEST_kats(ev, st->libctx)) {
|
||||
- ERR_raise(ERR_LIB_PROV, PROV_R_SELF_TEST_KAT_FAILURE);
|
||||
- goto end;
|
||||
- }
|
||||
- if (!SELF_TEST_kats(ev, st->libctx)) {
|
||||
- ERR_raise(ERR_LIB_PROV, PROV_R_SELF_TEST_KAT_FAILURE);
|
||||
- goto end;
|
||||
- }
|
||||
-
|
||||
/* Verify that the RNG has been restored properly */
|
||||
|
@@ -22,11 +22,11 @@ From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
8 files changed, 200 insertions(+), 18 deletions(-)
|
||||
create mode 100644 test/fipsmodule.cnf
|
||||
|
||||
Index: openssl-3.2.3/providers/fips/self_test.c
|
||||
Index: openssl-3.5.0-beta1/providers/fips/self_test.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/fips/self_test.c
|
||||
+++ openssl-3.2.3/providers/fips/self_test.c
|
||||
@@ -230,11 +230,133 @@ err:
|
||||
--- openssl-3.5.0-beta1.orig/providers/fips/self_test.c
|
||||
+++ openssl-3.5.0-beta1/providers/fips/self_test.c
|
||||
@@ -235,11 +235,133 @@ err:
|
||||
return ok;
|
||||
}
|
||||
|
||||
@@ -160,7 +160,7 @@ Index: openssl-3.2.3/providers/fips/self_test.c
|
||||
static int verify_integrity(OSSL_CORE_BIO *bio, OSSL_FUNC_BIO_read_ex_fn read_ex_cb,
|
||||
unsigned char *expected, size_t expected_len,
|
||||
OSSL_LIB_CTX *libctx, OSSL_SELF_TEST *ev,
|
||||
@@ -247,12 +369,23 @@ static int verify_integrity(OSSL_CORE_BI
|
||||
@@ -252,12 +374,23 @@ static int verify_integrity(OSSL_CORE_BI
|
||||
EVP_MAC *mac = NULL;
|
||||
EVP_MAC_CTX *ctx = NULL;
|
||||
OSSL_PARAM params[2], *p = params;
|
||||
@@ -184,7 +184,7 @@ Index: openssl-3.2.3/providers/fips/self_test.c
|
||||
mac = EVP_MAC_fetch(libctx, MAC_NAME, NULL);
|
||||
if (mac == NULL)
|
||||
goto err;
|
||||
@@ -266,13 +399,42 @@ static int verify_integrity(OSSL_CORE_BI
|
||||
@@ -271,13 +404,42 @@ static int verify_integrity(OSSL_CORE_BI
|
||||
if (!EVP_MAC_init(ctx, fixed_key, sizeof(fixed_key), params))
|
||||
goto err;
|
||||
|
||||
@@ -192,12 +192,12 @@ Index: openssl-3.2.3/providers/fips/self_test.c
|
||||
- status = read_ex_cb(bio, buf, sizeof(buf), &bytes_read);
|
||||
+ while ((off + INTEGRITY_BUF_SIZE) <= paddr) {
|
||||
+ status = read_ex_cb(bio, buf, INTEGRITY_BUF_SIZE, &bytes_read);
|
||||
if (status != 1)
|
||||
break;
|
||||
if (!EVP_MAC_update(ctx, buf, bytes_read))
|
||||
goto err;
|
||||
+ if (status != 1)
|
||||
+ break;
|
||||
+ if (!EVP_MAC_update(ctx, buf, bytes_read))
|
||||
+ goto err;
|
||||
+ off += bytes_read;
|
||||
}
|
||||
+ }
|
||||
+
|
||||
+ if (off + INTEGRITY_BUF_SIZE > paddr) {
|
||||
+ int delta = paddr - off;
|
||||
@@ -219,17 +219,17 @@ Index: openssl-3.2.3/providers/fips/self_test.c
|
||||
+
|
||||
+ while (bytes_read > 0) {
|
||||
+ status = read_ex_cb(bio, buf, INTEGRITY_BUF_SIZE, &bytes_read);
|
||||
+ if (status != 1)
|
||||
+ break;
|
||||
+ if (!EVP_MAC_update(ctx, buf, bytes_read))
|
||||
+ goto err;
|
||||
if (status != 1)
|
||||
break;
|
||||
if (!EVP_MAC_update(ctx, buf, bytes_read))
|
||||
goto err;
|
||||
+ off += bytes_read;
|
||||
+ }
|
||||
}
|
||||
+
|
||||
if (!EVP_MAC_final(ctx, out, &out_len, sizeof(out)))
|
||||
goto err;
|
||||
|
||||
@@ -282,6 +444,7 @@ static int verify_integrity(OSSL_CORE_BI
|
||||
@@ -287,6 +449,7 @@ static int verify_integrity(OSSL_CORE_BI
|
||||
goto err;
|
||||
ret = 1;
|
||||
err:
|
||||
@@ -237,7 +237,15 @@ Index: openssl-3.2.3/providers/fips/self_test.c
|
||||
OSSL_SELF_TEST_onend(ev, ret);
|
||||
EVP_MAC_CTX_free(ctx);
|
||||
EVP_MAC_free(mac);
|
||||
@@ -335,8 +498,7 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
@@ -320,6 +483,7 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
OSSL_SELF_TEST *ev = NULL;
|
||||
EVP_RAND *testrand = NULL;
|
||||
EVP_RAND_CTX *rng;
|
||||
+ unsigned char *alloc_checksum = NULL;
|
||||
#endif
|
||||
|
||||
if (!RUN_ONCE(&fips_self_test_init, do_fips_self_test_init))
|
||||
@@ -352,8 +516,7 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -247,7 +255,7 @@ Index: openssl-3.2.3/providers/fips/self_test.c
|
||||
ERR_raise(ERR_LIB_PROV, PROV_R_MISSING_CONFIG_DATA);
|
||||
goto end;
|
||||
}
|
||||
@@ -345,8 +507,14 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
@@ -362,8 +525,15 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
if (ev == NULL)
|
||||
goto end;
|
||||
|
||||
@@ -257,14 +265,15 @@ Index: openssl-3.2.3/providers/fips/self_test.c
|
||||
+ module_checksum = fips_hmac_container;
|
||||
+ checksum_len = sizeof(fips_hmac_container);
|
||||
+ } else {
|
||||
+ module_checksum = OPENSSL_hexstr2buf(st->module_checksum_data,
|
||||
+ alloc_checksum = OPENSSL_hexstr2buf(st->module_checksum_data,
|
||||
+ &checksum_len);
|
||||
+ module_checksum = alloc_checksum;
|
||||
+ }
|
||||
+
|
||||
if (module_checksum == NULL) {
|
||||
ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_CONFIG_DATA);
|
||||
goto end;
|
||||
@@ -354,14 +522,27 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
@@ -371,14 +541,29 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
bio_module = (*st->bio_new_file_cb)(st->module_filename, "rb");
|
||||
|
||||
/* Always check the integrity of the fips module */
|
||||
@@ -276,7 +285,7 @@ Index: openssl-3.2.3/providers/fips/self_test.c
|
||||
ERR_raise(ERR_LIB_PROV, PROV_R_MODULE_INTEGRITY_FAILURE);
|
||||
goto end;
|
||||
}
|
||||
-
|
||||
|
||||
+ if (st->module_checksum_data == NULL) {
|
||||
+ if (!verify_integrity_rodata(bio_module, st->bio_read_ex_cb,
|
||||
+ module_checksum, checksum_len,
|
||||
@@ -294,28 +303,31 @@ Index: openssl-3.2.3/providers/fips/self_test.c
|
||||
+ goto end;
|
||||
+ }
|
||||
+ }
|
||||
/* This will be NULL during installation - so the self test KATS will run */
|
||||
if (st->indicator_data != NULL) {
|
||||
/*
|
||||
@@ -420,7 +601,6 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
+
|
||||
if (!SELF_TEST_kats(ev, st->libctx)) {
|
||||
ERR_raise(ERR_LIB_PROV, PROV_R_SELF_TEST_KAT_FAILURE);
|
||||
goto end;
|
||||
@@ -398,7 +583,8 @@ int SELF_TEST_post(SELF_TEST_POST_PARAMS
|
||||
end:
|
||||
EVP_RAND_free(testrand);
|
||||
OSSL_SELF_TEST_free(ev);
|
||||
- OPENSSL_free(module_checksum);
|
||||
OPENSSL_free(indicator_checksum);
|
||||
+ if (alloc_checksum != NULL)
|
||||
+ OPENSSL_free(alloc_checksum);
|
||||
|
||||
if (st != NULL) {
|
||||
Index: openssl-3.2.3/test/fipsmodule.cnf
|
||||
if (st != NULL)
|
||||
(*st->bio_free_cb)(bio_module);
|
||||
Index: openssl-3.5.0-beta1/test/fipsmodule.cnf
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ openssl-3.2.3/test/fipsmodule.cnf
|
||||
+++ openssl-3.5.0-beta1/test/fipsmodule.cnf
|
||||
@@ -0,0 +1,2 @@
|
||||
+[fips_sect]
|
||||
+activate = 1
|
||||
Index: openssl-3.2.3/test/recipes/00-prep_fipsmodule_cnf.t
|
||||
Index: openssl-3.5.0-beta1/test/recipes/00-prep_fipsmodule_cnf.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/00-prep_fipsmodule_cnf.t
|
||||
+++ openssl-3.2.3/test/recipes/00-prep_fipsmodule_cnf.t
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/00-prep_fipsmodule_cnf.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/00-prep_fipsmodule_cnf.t
|
||||
@@ -20,7 +20,7 @@ use lib srctop_dir('Configurations');
|
||||
use lib bldtop_dir('.');
|
||||
use platform;
|
||||
@@ -325,10 +337,10 @@ Index: openssl-3.2.3/test/recipes/00-prep_fipsmodule_cnf.t
|
||||
plan skip_all => "FIPS module config file only supported in a fips build"
|
||||
if $no_check;
|
||||
|
||||
Index: openssl-3.2.3/test/recipes/01-test_fipsmodule_cnf.t
|
||||
Index: openssl-3.5.0-beta1/test/recipes/01-test_fipsmodule_cnf.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/01-test_fipsmodule_cnf.t
|
||||
+++ openssl-3.2.3/test/recipes/01-test_fipsmodule_cnf.t
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/01-test_fipsmodule_cnf.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/01-test_fipsmodule_cnf.t
|
||||
@@ -23,7 +23,7 @@ use lib srctop_dir('Configurations');
|
||||
use lib bldtop_dir('.');
|
||||
use platform;
|
||||
@@ -338,36 +350,23 @@ Index: openssl-3.2.3/test/recipes/01-test_fipsmodule_cnf.t
|
||||
plan skip_all => "Test only supported in a fips build"
|
||||
if $no_check;
|
||||
plan tests => 1;
|
||||
Index: openssl-3.2.3/test/recipes/03-test_fipsinstall.t
|
||||
Index: openssl-3.5.0-beta1/test/recipes/03-test_fipsinstall.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/03-test_fipsinstall.t
|
||||
+++ openssl-3.2.3/test/recipes/03-test_fipsinstall.t
|
||||
@@ -22,7 +22,7 @@ use lib srctop_dir('Configurations');
|
||||
use lib bldtop_dir('.');
|
||||
use platform;
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/03-test_fipsinstall.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/03-test_fipsinstall.t
|
||||
@@ -24,7 +24,7 @@ use platform;
|
||||
|
||||
plan skip_all => "Fipsinstall not available in SUSE/openSUSE FIPS build";
|
||||
|
||||
-plan skip_all => "Test only supported in a fips build" if disabled("fips");
|
||||
+plan skip_all => "Test only supported in a fips build" if 1;
|
||||
|
||||
# Compatible options for pedantic FIPS compliance
|
||||
my @pedantic_okay =
|
||||
Index: openssl-3.2.3/test/recipes/30-test_defltfips.t
|
||||
Index: openssl-3.5.0-beta1/test/recipes/80-test_ssl_new.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/30-test_defltfips.t
|
||||
+++ openssl-3.2.3/test/recipes/30-test_defltfips.t
|
||||
@@ -24,7 +24,7 @@ use lib bldtop_dir('.');
|
||||
plan skip_all => "Configuration loading is turned off"
|
||||
if disabled("autoload-config");
|
||||
|
||||
-my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
|
||||
+my $no_fips = 1; #disabled('fips') || ($ENV{NO_FIPS} // 0);
|
||||
|
||||
plan tests =>
|
||||
($no_fips ? 1 : 5);
|
||||
Index: openssl-3.2.3/test/recipes/80-test_ssl_new.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/80-test_ssl_new.t
|
||||
+++ openssl-3.2.3/test/recipes/80-test_ssl_new.t
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/80-test_ssl_new.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/80-test_ssl_new.t
|
||||
@@ -27,7 +27,7 @@ setup("test_ssl_new");
|
||||
use lib srctop_dir('Configurations');
|
||||
use lib bldtop_dir('.');
|
||||
@@ -377,10 +376,10 @@ Index: openssl-3.2.3/test/recipes/80-test_ssl_new.t
|
||||
|
||||
$ENV{TEST_CERTS_DIR} = srctop_dir("test", "certs");
|
||||
|
||||
Index: openssl-3.2.3/test/recipes/90-test_sslapi.t
|
||||
Index: openssl-3.5.0-beta1/test/recipes/90-test_sslapi.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/90-test_sslapi.t
|
||||
+++ openssl-3.2.3/test/recipes/90-test_sslapi.t
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/90-test_sslapi.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/90-test_sslapi.t
|
||||
@@ -14,7 +14,7 @@ BEGIN {
|
||||
setup("test_sslapi");
|
||||
}
|
||||
@@ -390,3 +389,16 @@ Index: openssl-3.2.3/test/recipes/90-test_sslapi.t
|
||||
my $fipsmodcfg_filename = "fipsmodule.cnf";
|
||||
my $fipsmodcfg = bldtop_file("test", $fipsmodcfg_filename);
|
||||
|
||||
Index: openssl-3.5.0-beta1/test/recipes/30-test_defltfips.t
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/30-test_defltfips.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/30-test_defltfips.t
|
||||
@@ -24,7 +24,7 @@ use lib bldtop_dir('.');
|
||||
plan skip_all => "Configuration loading is turned off"
|
||||
if disabled("autoload-config");
|
||||
|
||||
-my $no_fips = disabled('fips') || disabled('fips-post') || ($ENV{NO_FIPS} // 0);
|
||||
+my $no_fips = 1; #disabled('fips') || disabled('fips-post') || ($ENV{NO_FIPS} // 0);
|
||||
|
||||
plan tests =>
|
||||
($no_fips ? 1 : 5);
|
||||
|
@@ -1,32 +1,29 @@
|
||||
From 9b02ad7225b74a5b9088b361caead0a41e570e93 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Belyavskiy <dbelyavs@redhat.com>
|
||||
Date: Mon, 21 Aug 2023 16:40:56 +0200
|
||||
Subject: [PATCH 48/48] 0114-FIPS-enforce-EMS-support.patch
|
||||
From f95df45ab70817723efc449552c0a5f5c3779280 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Wed, 6 Mar 2024 19:17:17 +0100
|
||||
Subject: [PATCH 40/53] FIPS: TLS: Enforce EMS in TLS 1.2
|
||||
|
||||
Patch-name: 0114-FIPS-enforce-EMS-support.patch
|
||||
Patch-id: 114
|
||||
Patch-status: |
|
||||
# We believe that some changes present in CentOS are not necessary
|
||||
# because ustream has a check for FIPS version
|
||||
NOTE: Enforcement of EMS in non-FIPS mode has been dropped due to code
|
||||
change the option to enforce it seem to be available only in FIPS build
|
||||
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
---
|
||||
doc/man3/SSL_CONF_cmd.pod | 3 +++
|
||||
doc/man5/fips_config.pod | 13 +++++++++++
|
||||
include/openssl/fips_names.h | 8 +++++++
|
||||
include/openssl/ssl.h.in | 1 +
|
||||
providers/fips/fipsprov.c | 2 +-
|
||||
providers/implementations/kdfs/tls1_prf.c | 22 +++++++++++++++++++
|
||||
ssl/ssl_conf.c | 1 +
|
||||
ssl/statem/extensions_srvr.c | 8 ++++++-
|
||||
ssl/t1_enc.c | 11 ++++++++--
|
||||
.../30-test_evp_data/evpkdf_tls12_prf.txt | 10 +++++++++
|
||||
test/sslapitest.c | 2 +-
|
||||
11 files changed, 76 insertions(+), 5 deletions(-)
|
||||
doc/man3/SSL_CONF_cmd.pod | 3 +++
|
||||
doc/man5/fips_config.pod | 13 +++++++++++++
|
||||
include/openssl/ssl.h.in | 1 +
|
||||
providers/fips/include/fips_indicator_params.inc | 2 +-
|
||||
ssl/ssl_conf.c | 1 +
|
||||
ssl/statem/extensions_srvr.c | 8 +++++++-
|
||||
ssl/t1_enc.c | 11 +++++++++--
|
||||
test/recipes/30-test_evp_data/evpkdf_tls12_prf.txt | 10 ++++++++++
|
||||
test/sslapitest.c | 2 +-
|
||||
9 files changed, 46 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/doc/man3/SSL_CONF_cmd.pod b/doc/man3/SSL_CONF_cmd.pod
|
||||
index ae6ca43282..b83c04a308 100644
|
||||
index e2c1e69847..009b683b27 100644
|
||||
--- a/doc/man3/SSL_CONF_cmd.pod
|
||||
+++ b/doc/man3/SSL_CONF_cmd.pod
|
||||
@@ -524,6 +524,9 @@ B<ExtendedMasterSecret>: use extended master secret extension, enabled by
|
||||
@@ -621,6 +621,9 @@ B<ExtendedMasterSecret>: use extended master secret extension, enabled by
|
||||
default. Inverse of B<SSL_OP_NO_EXTENDED_MASTER_SECRET>: that is,
|
||||
B<-ExtendedMasterSecret> is the same as setting B<SSL_OP_NO_EXTENDED_MASTER_SECRET>.
|
||||
|
||||
@@ -37,12 +34,12 @@ index ae6ca43282..b83c04a308 100644
|
||||
default. Inverse of B<SSL_OP_DISABLE_TLSEXT_CA_NAMES>: that is,
|
||||
B<-CANames> is the same as setting B<SSL_OP_DISABLE_TLSEXT_CA_NAMES>.
|
||||
diff --git a/doc/man5/fips_config.pod b/doc/man5/fips_config.pod
|
||||
index 1c15e32a5c..f2cedaf88d 100644
|
||||
index 15748c5756..34cbfbb2ad 100644
|
||||
--- a/doc/man5/fips_config.pod
|
||||
+++ b/doc/man5/fips_config.pod
|
||||
@@ -15,6 +15,19 @@ for more information.
|
||||
|
||||
This functionality was added in OpenSSL 3.0.
|
||||
@@ -11,6 +11,19 @@ automatically loaded when the system is booted in FIPS mode, or when the
|
||||
environment variable B<OPENSSL_FORCE_FIPS_MODE> is set. See the documentation
|
||||
for more information.
|
||||
|
||||
+SUSE Enterprise Linux uses a supplementary config for FIPS module located in
|
||||
+OpenSSL configuration directory and managed by crypto policies. If present, it
|
||||
@@ -59,114 +56,61 @@ index 1c15e32a5c..f2cedaf88d 100644
|
||||
+
|
||||
=head1 COPYRIGHT
|
||||
|
||||
Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved.
|
||||
diff --git a/include/openssl/fips_names.h b/include/openssl/fips_names.h
|
||||
index 5c77f6d691..8cdd5a6bf7 100644
|
||||
--- a/include/openssl/fips_names.h
|
||||
+++ b/include/openssl/fips_names.h
|
||||
@@ -70,6 +70,14 @@ extern "C" {
|
||||
*/
|
||||
# define OSSL_PROV_FIPS_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md"
|
||||
|
||||
+/*
|
||||
+ * A boolean that determines if the runtime FIPS check for TLS1_PRF EMS is performed.
|
||||
+ * This is disabled by default.
|
||||
+ *
|
||||
+ * Type: OSSL_PARAM_UTF8_STRING
|
||||
+ */
|
||||
+# define OSSL_PROV_FIPS_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check"
|
||||
+
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif
|
||||
Copyright 2019-2024 The OpenSSL Project Authors. All Rights Reserved.
|
||||
diff --git a/include/openssl/ssl.h.in b/include/openssl/ssl.h.in
|
||||
index 0b6de603e2..26a69ca282 100644
|
||||
index 0b2232b01c..99b2ad4eb3 100644
|
||||
--- a/include/openssl/ssl.h.in
|
||||
+++ b/include/openssl/ssl.h.in
|
||||
@@ -415,6 +415,7 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg);
|
||||
@@ -417,6 +417,7 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg);
|
||||
* interoperability with CryptoPro CSP 3.x
|
||||
*/
|
||||
# define SSL_OP_CRYPTOPRO_TLSEXT_BUG SSL_OP_BIT(31)
|
||||
+# define SSL_OP_PERMIT_NOEMS_FIPS SSL_OP_BIT(48)
|
||||
+# define SSL_OP_RH_PERMIT_NOEMS_FIPS SSL_OP_BIT(48)
|
||||
/*
|
||||
* Disable RFC8879 certificate compression
|
||||
* SSL_OP_NO_TX_CERTIFICATE_COMPRESSION: don't send compressed certificates,
|
||||
diff --git a/providers/fips/fipsprov.c b/providers/fips/fipsprov.c
|
||||
index 5ff9872bd8..eb9653a9df 100644
|
||||
--- a/providers/fips/fipsprov.c
|
||||
+++ b/providers/fips/fipsprov.c
|
||||
@@ -105,7 +105,7 @@ void *ossl_fips_prov_ossl_ctx_new(OSSL_LIB_CTX *libctx)
|
||||
if (fgbl == NULL)
|
||||
return NULL;
|
||||
init_fips_option(&fgbl->fips_security_checks, 1);
|
||||
- init_fips_option(&fgbl->fips_tls1_prf_ems_check, 0); /* Disabled by default */
|
||||
+ init_fips_option(&fgbl->fips_tls1_prf_ems_check, 1); /* Enabled by default */
|
||||
init_fips_option(&fgbl->fips_restricted_drgb_digests, 0);
|
||||
return fgbl;
|
||||
}
|
||||
diff --git a/providers/implementations/kdfs/tls1_prf.c b/providers/implementations/kdfs/tls1_prf.c
|
||||
index 25a6c79a2e..79bc7a9719 100644
|
||||
--- a/providers/implementations/kdfs/tls1_prf.c
|
||||
+++ b/providers/implementations/kdfs/tls1_prf.c
|
||||
@@ -222,6 +223,27 @@ static int kdf_tls1_prf_derive(void *vctx, unsigned char *key, size_t keylen,
|
||||
}
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * The seed buffer is prepended with a label.
|
||||
+ * If EMS mode is enforced then the label "master secret" is not allowed,
|
||||
+ * We do the check this way since the PRF is used for other purposes, as well
|
||||
+ * as "extended master secret".
|
||||
+ */
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if (ctx->seedlen >= TLS_MD_MASTER_SECRET_CONST_SIZE
|
||||
+ && memcmp(ctx->seed, TLS_MD_MASTER_SECRET_CONST,
|
||||
+ TLS_MD_MASTER_SECRET_CONST_SIZE) == 0)
|
||||
+ ctx->fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+ if (ossl_tls1_prf_ems_check_enabled(libctx)) {
|
||||
+ if (ctx->seedlen >= TLS_MD_MASTER_SECRET_CONST_SIZE
|
||||
+ && memcmp(ctx->seed, TLS_MD_MASTER_SECRET_CONST,
|
||||
+ TLS_MD_MASTER_SECRET_CONST_SIZE) == 0) {
|
||||
+ ERR_raise(ERR_LIB_PROV, PROV_R_EMS_NOT_ENABLED);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
return tls1_prf_alg(ctx->P_hash, ctx->P_sha1,
|
||||
ctx->sec, ctx->seclen,
|
||||
ctx->seed, ctx->seedlen,
|
||||
diff --git a/providers/fips/include/fips_indicator_params.inc b/providers/fips/include/fips_indicator_params.inc
|
||||
index c1b029de86..47d1cf2d01 100644
|
||||
--- a/providers/fips/include/fips_indicator_params.inc
|
||||
+++ b/providers/fips/include/fips_indicator_params.inc
|
||||
@@ -1,5 +1,5 @@
|
||||
OSSL_FIPS_PARAM(security_checks, SECURITY_CHECKS, 1)
|
||||
-OSSL_FIPS_PARAM(tls1_prf_ems_check, TLS1_PRF_EMS_CHECK, 0)
|
||||
+OSSL_FIPS_PARAM(tls1_prf_ems_check, TLS1_PRF_EMS_CHECK, 1)
|
||||
OSSL_FIPS_PARAM(no_short_mac, NO_SHORT_MAC, 1)
|
||||
OSSL_FIPS_PARAM(hmac_key_check, HMAC_KEY_CHECK, 0)
|
||||
OSSL_FIPS_PARAM(kmac_key_check, KMAC_KEY_CHECK, 0)
|
||||
diff --git a/ssl/ssl_conf.c b/ssl/ssl_conf.c
|
||||
index 5146cedb96..086db98c33 100644
|
||||
index 946d20be52..b52c1675fd 100644
|
||||
--- a/ssl/ssl_conf.c
|
||||
+++ b/ssl/ssl_conf.c
|
||||
@@ -389,6 +389,7 @@ static int cmd_Options(SSL_CONF_CTX *cctx, const char *value)
|
||||
@@ -394,6 +394,7 @@ static int cmd_Options(SSL_CONF_CTX *cctx, const char *value)
|
||||
SSL_FLAG_TBL("ClientRenegotiation",
|
||||
SSL_OP_ALLOW_CLIENT_RENEGOTIATION),
|
||||
SSL_FLAG_TBL_INV("EncryptThenMac", SSL_OP_NO_ENCRYPT_THEN_MAC),
|
||||
+ SSL_FLAG_TBL("RHNoEnforceEMSinFIPS", SSL_OP_PERMIT_NOEMS_FIPS),
|
||||
+ SSL_FLAG_TBL("RHNoEnforceEMSinFIPS", SSL_OP_RH_PERMIT_NOEMS_FIPS),
|
||||
SSL_FLAG_TBL("NoRenegotiation", SSL_OP_NO_RENEGOTIATION),
|
||||
SSL_FLAG_TBL("AllowNoDHEKEX", SSL_OP_ALLOW_NO_DHE_KEX),
|
||||
SSL_FLAG_TBL("PrioritizeChaCha", SSL_OP_PRIORITIZE_CHACHA),
|
||||
SSL_FLAG_TBL("PreferNoDHEKEX", SSL_OP_PREFER_NO_DHE_KEX),
|
||||
diff --git a/ssl/statem/extensions_srvr.c b/ssl/statem/extensions_srvr.c
|
||||
index 00b1ee531e..22cdabb308 100644
|
||||
index dd771207f6..48db802b1f 100644
|
||||
--- a/ssl/statem/extensions_srvr.c
|
||||
+++ b/ssl/statem/extensions_srvr.c
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "../ssl_local.h"
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "statem_local.h"
|
||||
#include "internal/cryptlib.h"
|
||||
#include "internal/ssl_unwrap.h"
|
||||
+#include <openssl/fips.h>
|
||||
|
||||
#define COOKIE_STATE_FORMAT_VERSION 1
|
||||
|
||||
@@ -1552,8 +1553,13 @@ EXT_RETURN tls_construct_stoc_etm(SSL *s, WPACKET *pkt, unsigned int context,
|
||||
@@ -1874,8 +1875,13 @@ EXT_RETURN tls_construct_stoc_ems(SSL_CONNECTION *s, WPACKET *pkt,
|
||||
unsigned int context,
|
||||
X509 *x, size_t chainidx)
|
||||
{
|
||||
- if ((s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0)
|
||||
+ if ((s->s3.flags & TLS1_FLAGS_RECEIVED_EXTMS) == 0) {
|
||||
+ if (FIPS_mode() && !(SSL_get_options(SSL_CONNECTION_GET_SSL(s)) & SSL_OP_PERMIT_NOEMS_FIPS) ) {
|
||||
+ if (FIPS_mode() && !(SSL_get_options(SSL_CONNECTION_GET_SSL(s)) & SSL_OP_RH_PERMIT_NOEMS_FIPS) ) {
|
||||
+ SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, ERR_R_UNSUPPORTED);
|
||||
+ return EXT_RETURN_FAIL;
|
||||
+ }
|
||||
@@ -176,10 +120,10 @@ index 00b1ee531e..22cdabb308 100644
|
||||
if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_extended_master_secret)
|
||||
|| !WPACKET_put_bytes_u16(pkt, 0)) {
|
||||
diff --git a/ssl/t1_enc.c b/ssl/t1_enc.c
|
||||
index 91238e6457..e8ad8ecd9e 100644
|
||||
index 474ea7bf5b..e0e595e989 100644
|
||||
--- a/ssl/t1_enc.c
|
||||
+++ b/ssl/t1_enc.c
|
||||
@@ -20,6 +20,7 @@
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <openssl/obj_mac.h>
|
||||
#include <openssl/core_names.h>
|
||||
#include <openssl/trace.h>
|
||||
@@ -187,7 +131,7 @@ index 91238e6457..e8ad8ecd9e 100644
|
||||
|
||||
/* seed1 through seed5 are concatenated */
|
||||
static int tls1_PRF(SSL_CONNECTION *s,
|
||||
@@ -75,8 +76,14 @@ static int tls1_PRF(SSL *s,
|
||||
@@ -78,8 +79,14 @@ static int tls1_PRF(SSL_CONNECTION *s,
|
||||
}
|
||||
|
||||
err:
|
||||
@@ -205,7 +149,7 @@ index 91238e6457..e8ad8ecd9e 100644
|
||||
ERR_raise(ERR_LIB_SSL, ERR_R_INTERNAL_ERROR);
|
||||
EVP_KDF_CTX_free(kctx);
|
||||
diff --git a/test/recipes/30-test_evp_data/evpkdf_tls12_prf.txt b/test/recipes/30-test_evp_data/evpkdf_tls12_prf.txt
|
||||
index 44040ff66b..deb6bf3fcb 100644
|
||||
index 50944328cb..edb2e81273 100644
|
||||
--- a/test/recipes/30-test_evp_data/evpkdf_tls12_prf.txt
|
||||
+++ b/test/recipes/30-test_evp_data/evpkdf_tls12_prf.txt
|
||||
@@ -22,6 +22,16 @@ Ctrl.client_random = hexseed:36c129d01a3200894b9179faac589d9835d58775f9b5ea3587c
|
||||
@@ -226,10 +170,10 @@ index 44040ff66b..deb6bf3fcb 100644
|
||||
KDF = TLS1-PRF
|
||||
Ctrl.digest = digest:SHA256
|
||||
diff --git a/test/sslapitest.c b/test/sslapitest.c
|
||||
index 169e3c7466..e67b5bb44c 100644
|
||||
index 16155afccb..93766fae23 100644
|
||||
--- a/test/sslapitest.c
|
||||
+++ b/test/sslapitest.c
|
||||
@@ -574,7 +574,7 @@ static int test_client_cert_verify_cb(void)
|
||||
@@ -575,7 +575,7 @@ static int test_client_cert_verify_cb(void)
|
||||
STACK_OF(X509) *server_chain;
|
||||
SSL_CTX *cctx = NULL, *sctx = NULL;
|
||||
SSL *clientssl = NULL, *serverssl = NULL;
|
||||
@@ -239,4 +183,5 @@ index 169e3c7466..e67b5bb44c 100644
|
||||
if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
|
||||
TLS_client_method(), TLS1_VERSION, 0,
|
||||
--
|
||||
2.41.0
|
||||
2.49.0
|
||||
|
||||
|
@@ -1,22 +0,0 @@
|
||||
Index: openssl-3.1.4/providers/fips/fipsprov.c
|
||||
===================================================================
|
||||
--- openssl-3.1.4.orig/providers/fips/fipsprov.c
|
||||
+++ openssl-3.1.4/providers/fips/fipsprov.c
|
||||
@@ -107,7 +107,7 @@ void *ossl_fips_prov_ossl_ctx_new(OSSL_L
|
||||
return NULL;
|
||||
init_fips_option(&fgbl->fips_security_checks, 1);
|
||||
init_fips_option(&fgbl->fips_tls1_prf_ems_check, 1); /* Enabled by default */
|
||||
- init_fips_option(&fgbl->fips_restricted_drgb_digests, 0);
|
||||
+ init_fips_option(&fgbl->fips_restricted_drgb_digests, 1); /* Enabled by default */
|
||||
return fgbl;
|
||||
}
|
||||
|
||||
@@ -820,8 +820,6 @@ int OSSL_provider_init_int(const OSSL_CO
|
||||
if (fgbl->field.option != NULL) { \
|
||||
if (strcmp(fgbl->field.option, "1") == 0) \
|
||||
fgbl->field.enabled = 1; \
|
||||
- else if (strcmp(fgbl->field.option, "0") == 0) \
|
||||
- fgbl->field.enabled = 0; \
|
||||
else \
|
||||
goto err; \
|
||||
}
|
@@ -1,7 +1,7 @@
|
||||
From 012e319b3d5b936a9208b1c75c13d9c4a2d0cc04 Mon Sep 17 00:00:00 2001
|
||||
From 3b0b89e7b30425add1889c0ed6c6b45e8d0ea744 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Wed, 6 Mar 2024 19:17:15 +0100
|
||||
Subject: [PATCH 24/49] 0058-FIPS-limit-rsa-encrypt.patch
|
||||
Subject: [PATCH 26/53] FIPS: RSA: encrypt limits - REVIEW
|
||||
|
||||
Patch-name: 0058-FIPS-limit-rsa-encrypt.patch
|
||||
Patch-id: 58
|
||||
@@ -10,56 +10,50 @@ Patch-status: |
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
---
|
||||
providers/common/securitycheck.c | 1 +
|
||||
.../implementations/asymciphers/rsa_enc.c | 35 +++++
|
||||
.../30-test_evp_data/evppkey_rsa_common.txt | 140 +++++++++++++-----
|
||||
.../fips/include/fips_indicator_params.inc | 2 +-
|
||||
.../implementations/asymciphers/rsa_enc.c | 26 ++++
|
||||
.../30-test_evp_data/evppkey_rsa_common.txt | 146 +++++++++++++-----
|
||||
test/recipes/80-test_cms.t | 5 +-
|
||||
test/recipes/80-test_ssl_old.t | 27 +++-
|
||||
5 files changed, 168 insertions(+), 40 deletions(-)
|
||||
6 files changed, 164 insertions(+), 43 deletions(-)
|
||||
mode change 100644 => 100755 test/recipes/80-test_ssl_old.t
|
||||
|
||||
Index: openssl-3.2.3/providers/common/securitycheck.c
|
||||
Index: openssl-3.5.0-beta1/providers/common/securitycheck.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/common/securitycheck.c
|
||||
+++ openssl-3.2.3/providers/common/securitycheck.c
|
||||
@@ -27,6 +27,10 @@
|
||||
--- openssl-3.5.0-beta1.orig/providers/common/securitycheck.c
|
||||
+++ openssl-3.5.0-beta1/providers/common/securitycheck.c
|
||||
@@ -64,6 +64,7 @@ int ossl_rsa_key_op_get_protect(const RS
|
||||
* Set protect = 1 for encryption or signing operations, or 0 otherwise. See
|
||||
* https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-131Ar2.pdf.
|
||||
*/
|
||||
+/*
|
||||
+ * SUSE/openSUSE builds implement some extra limitations in
|
||||
+ * providers/implementations/asymciphers/rsa_enc.c
|
||||
+ */
|
||||
int ossl_rsa_check_key(OSSL_LIB_CTX *ctx, const RSA *rsa, int operation)
|
||||
+/* openSUSE/SUSE build implements some extra limitations in providers/implementations/asymciphers/rsa_enc.c */
|
||||
int ossl_rsa_check_key_size(const RSA *rsa, int protect)
|
||||
{
|
||||
int protect = 0;
|
||||
Index: openssl-3.2.3/providers/implementations/asymciphers/rsa_enc.c
|
||||
int sz = RSA_bits(rsa);
|
||||
Index: openssl-3.5.0-beta1/providers/fips/include/fips_indicator_params.inc
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/asymciphers/rsa_enc.c
|
||||
+++ openssl-3.2.3/providers/implementations/asymciphers/rsa_enc.c
|
||||
@@ -135,6 +135,17 @@ static int rsa_decrypt_init(void *vprsac
|
||||
return rsa_init(vprsactx, vrsa, params, EVP_PKEY_OP_DECRYPT);
|
||||
}
|
||||
--- openssl-3.5.0-beta1.orig/providers/fips/include/fips_indicator_params.inc
|
||||
+++ openssl-3.5.0-beta1/providers/fips/include/fips_indicator_params.inc
|
||||
@@ -13,7 +13,7 @@ OSSL_FIPS_PARAM(sskdf_digest_check, SSKD
|
||||
OSSL_FIPS_PARAM(x963kdf_digest_check, X963KDF_DIGEST_CHECK, 0)
|
||||
OSSL_FIPS_PARAM(dsa_sign_disallowed, DSA_SIGN_DISABLED, 0)
|
||||
OSSL_FIPS_PARAM(tdes_encrypt_disallowed, TDES_ENCRYPT_DISABLED, 0)
|
||||
-OSSL_FIPS_PARAM(rsa_pkcs15_padding_disabled, RSA_PKCS15_PAD_DISABLED, 0)
|
||||
+OSSL_FIPS_PARAM(rsa_pkcs15_padding_disabled, RSA_PKCS15_PAD_DISABLED, 1)
|
||||
OSSL_FIPS_PARAM(rsa_pss_saltlen_check, RSA_PSS_SALTLEN_CHECK, 0)
|
||||
OSSL_FIPS_PARAM(rsa_sign_x931_disallowed, RSA_SIGN_X931_PAD_DISABLED, 0)
|
||||
OSSL_FIPS_PARAM(hkdf_key_check, HKDF_KEY_CHECK, 0)
|
||||
Index: openssl-3.5.0-beta1/providers/implementations/asymciphers/rsa_enc.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/providers/implementations/asymciphers/rsa_enc.c
|
||||
+++ openssl-3.5.0-beta1/providers/implementations/asymciphers/rsa_enc.c
|
||||
@@ -168,6 +168,18 @@ static int rsa_encrypt(void *vprsactx, u
|
||||
}
|
||||
#endif
|
||||
|
||||
+# ifdef FIPS_MODULE
|
||||
+static int fips_padding_allowed(const PROV_RSA_CTX *prsactx)
|
||||
+{
|
||||
+ if (prsactx->pad_mode == RSA_PKCS1_PADDING || prsactx->pad_mode == RSA_NO_PADDING
|
||||
+ || prsactx->pad_mode == RSA_PKCS1_WITH_TLS_PADDING)
|
||||
+ return 0;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+# endif
|
||||
+
|
||||
static int rsa_encrypt(void *vprsactx, unsigned char *out, size_t *outlen,
|
||||
size_t outsize, const unsigned char *in, size_t inlen)
|
||||
{
|
||||
@@ -144,6 +155,18 @@ static int rsa_encrypt(void *vprsactx, u
|
||||
if (!ossl_prov_is_running())
|
||||
return 0;
|
||||
|
||||
+# ifdef FIPS_MODULE
|
||||
+ if (fips_padding_allowed(prsactx) == 0) {
|
||||
+ ERR_raise(ERR_LIB_PROV, PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE);
|
||||
+ if (prsactx->pad_mode == RSA_NO_PADDING) {
|
||||
+ ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_PADDING_MODE);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
@@ -72,13 +66,15 @@ Index: openssl-3.2.3/providers/implementations/asymciphers/rsa_enc.c
|
||||
if (out == NULL) {
|
||||
size_t len = RSA_size(prsactx->rsa);
|
||||
|
||||
@@ -206,6 +229,18 @@ static int rsa_decrypt(void *vprsactx, u
|
||||
@@ -230,6 +242,20 @@ static int rsa_decrypt(void *vprsactx, u
|
||||
if (!ossl_prov_is_running())
|
||||
return 0;
|
||||
|
||||
+# ifdef FIPS_MODULE
|
||||
+ if (fips_padding_allowed(prsactx) == 0) {
|
||||
+ ERR_raise(ERR_LIB_PROV, PROV_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE);
|
||||
+ if ((prsactx->pad_mode == RSA_PKCS1_PADDING
|
||||
+ || prsactx->pad_mode == RSA_PKCS1_WITH_TLS_PADDING
|
||||
+ || prsactx->pad_mode == RSA_NO_PADDING)) {
|
||||
+ ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_PADDING_MODE);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
@@ -91,11 +87,11 @@ Index: openssl-3.2.3/providers/implementations/asymciphers/rsa_enc.c
|
||||
if (prsactx->pad_mode == RSA_PKCS1_WITH_TLS_PADDING) {
|
||||
if (out == NULL) {
|
||||
*outlen = SSL_MAX_MASTER_KEY_LENGTH;
|
||||
Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
Index: openssl-3.5.0-beta1/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
+++ openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
@@ -263,13 +263,13 @@ Input = 64b0e9f9892371110c40ba5739dc0974
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
+++ openssl-3.5.0-beta1/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
@@ -248,13 +248,13 @@ Input = 64b0e9f9892371110c40ba5739dc0974
|
||||
Output = 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
|
||||
|
||||
# RSA decrypt
|
||||
@@ -111,7 +107,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# Note: disable the Bleichenbacher workaround to see if it passes
|
||||
Decrypt = RSA-2048
|
||||
Ctrl = rsa_pkcs1_implicit_rejection:0
|
||||
@@ -277,7 +277,7 @@ Input = 550AF55A2904E7B9762352F8FB7FA235
|
||||
@@ -262,7 +262,7 @@ Input = 550AF55A2904E7B9762352F8FB7FA235
|
||||
Output = "Hello World"
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -120,7 +116,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# Corrupted ciphertext
|
||||
# Note: output is generated synthethically by the Bleichenbacher workaround
|
||||
Decrypt = RSA-2048
|
||||
@@ -285,7 +285,7 @@ Input = 550AF55A2904E7B9762352F8FB7FA235
|
||||
@@ -270,7 +270,7 @@ Input = 550AF55A2904E7B9762352F8FB7FA235
|
||||
Output = 4cbb988d6a46228379132b0b5f8c249b3860043848c93632fb982c807c7c82fffc7a9ef83f4908f890373ac181ffea6381e103bcaa27e65638b6ecebef38b59ed4226a9d12af675cfcb634d8c40e7a7aff
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -129,7 +125,31 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# Corrupted ciphertext
|
||||
# Note: disable the Bleichenbacher workaround to see if it fails
|
||||
Decrypt = RSA-2048
|
||||
@@ -360,82 +360,90 @@ PrivPubKeyPair = RSA-2048-2:RSA-2048-2-P
|
||||
@@ -296,13 +296,14 @@ Input = 00000000000000000000000000000000
|
||||
Result = KEYOP_ERROR
|
||||
|
||||
# RSADP Ciphertext = 2 should pass
|
||||
+Availablein = default
|
||||
Decrypt = RSA-2048
|
||||
Ctrl = rsa_padding_mode:none
|
||||
Input = 0000000000000000000000000000000000000002
|
||||
Output = 93d0bae8ad0d94de400eb078dd10edd7418ef1bf11b8e8b5d2b86b142e77d603e108fbcca2b976aa7b5326e5369db3bb73bf74f8d47c36a6318e913888c873502a561fc69329e7c24a0a016d81310449a52b29e49a6a41bdfe6c10a8d90072d64b4486756fd007c0071da2a8c7107a904621c11f0d81aa80b655a713c28170594ece28133dfbfddd61d4e4dad0d6781f6145a351a994054993fd57cd1330966ce97d7ac259b15616fd7235e2cac29fdc1c05f1612c61785614b80e7b650c03ef77d64163d75fa637cc2a9a7e570b3176fdcfb6ad6d25e8515f6ced02cfb3a441c87220044110fd27dcb53888f0377e1797bf297b7da27d3f033cd8b5d60ececc
|
||||
|
||||
# RSADP Ciphertext = n-2 should pass
|
||||
-Availablein = fips
|
||||
+Availablein = none
|
||||
Decrypt = RSA-2048
|
||||
Ctrl = rsa_padding_mode:none
|
||||
Input = cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44d
|
||||
@@ -317,6 +318,7 @@ Input = cd0081ea7b2ae1ea06d59f7c73d9ffb9
|
||||
Result = KEYOP_ERROR
|
||||
|
||||
# RSADP Ciphertext = n should fail
|
||||
+Availablein = default
|
||||
Decrypt = RSA-2048
|
||||
Ctrl = rsa_padding_mode:none
|
||||
Input = cd0081ea7b2ae1ea06d59f7c73d9ffb94a09615c2e4ba7c636cef08dd3533ec3185525b015c769b99a77d6725bf9c3532a9b6e5f6627d5fb85160768d3dda9cbd35974511717dc3d309d2fc47ee41f97e32adb7f9dd864a1c4767a666ecd71bc1aacf5e7517f4b38594fea9b05e42d5ada9912008013e45316a4d9bb8ed086b88d28758bacaf922d46a868b485d239c9baeb0e2b64592710f42b2d1ea0a4b4802c0becab328f8a68b0073bdb546feea9809d2849912b390c1532bc7e29c7658f8175fae46f34332ff87bcab3e40649b98577869da0ea718353f0722754886913648760d122be676e0fc483dd20ffc31bda96a31966c9aa2e75ad03de47e1c44f
|
||||
@@ -406,82 +408,90 @@ PrivPubKeyPair = RSA-2048-2:RSA-2048-2-P
|
||||
# RSA decrypt
|
||||
|
||||
# a random positive test case
|
||||
@@ -226,7 +246,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# an otherwise correct plaintext, but with wrong first byte
|
||||
# (0x01 instead of 0x00), generates a random 11 byte long plaintext
|
||||
Decrypt = RSA-2048-2
|
||||
@@ -443,7 +451,7 @@ Input = 9b2ec9c0c917c98f1ad3d0119aec6be5
|
||||
@@ -489,7 +499,7 @@ Input = 9b2ec9c0c917c98f1ad3d0119aec6be5
|
||||
Output = a1f8c9255c35cfba403ccc
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -235,7 +255,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# an otherwise correct plaintext, but with wrong second byte
|
||||
# (0x01 instead of 0x02), generates a random 11 byte long plaintext
|
||||
Decrypt = RSA-2048-2
|
||||
@@ -451,7 +459,7 @@ Input = 782c2b59a21a511243820acedd567c13
|
||||
@@ -497,7 +507,7 @@ Input = 782c2b59a21a511243820acedd567c13
|
||||
Output = e6d700309ca0ed62452254
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -244,7 +264,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# an invalid ciphertext, with a zero byte in first byte of
|
||||
# ciphertext, decrypts to a random 11 byte long synthetic
|
||||
# plaintext
|
||||
@@ -460,7 +468,7 @@ Input = 0096136621faf36d5290b16bd26295de
|
||||
@@ -506,7 +516,7 @@ Input = 0096136621faf36d5290b16bd26295de
|
||||
Output = ba27b1842e7c21c0e7ef6a
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -253,7 +273,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# an invalid ciphertext, with a zero byte removed from first byte of
|
||||
# ciphertext, decrypts to a random 11 byte long synthetic
|
||||
# plaintext
|
||||
@@ -469,7 +477,7 @@ Input = 96136621faf36d5290b16bd26295de27
|
||||
@@ -515,7 +525,7 @@ Input = 96136621faf36d5290b16bd26295de27
|
||||
Output = ba27b1842e7c21c0e7ef6a
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -262,7 +282,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# an invalid ciphertext, with two zero bytes in first bytes of
|
||||
# ciphertext, decrypts to a random 11 byte long synthetic
|
||||
# plaintext
|
||||
@@ -478,7 +486,7 @@ Input = 0000587cccc6b264bdfe0dc2149a9880
|
||||
@@ -524,7 +534,7 @@ Input = 0000587cccc6b264bdfe0dc2149a9880
|
||||
Output = d5cf555b1d6151029a429a
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -271,7 +291,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# an invalid ciphertext, with two zero bytes removed from first bytes of
|
||||
# ciphertext, decrypts to a random 11 byte long synthetic
|
||||
# plaintext
|
||||
@@ -487,7 +495,7 @@ Input = 587cccc6b264bdfe0dc2149a988047fa
|
||||
@@ -533,7 +543,7 @@ Input = 587cccc6b264bdfe0dc2149a988047fa
|
||||
Output = d5cf555b1d6151029a429a
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -280,7 +300,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# and invalid ciphertext, otherwise valid but starting with 000002, decrypts
|
||||
# to random 11 byte long synthetic plaintext
|
||||
Decrypt = RSA-2048-2
|
||||
@@ -495,7 +503,7 @@ Input = 1786550ce8d8433052e01ecba8b76d30
|
||||
@@ -541,7 +551,7 @@ Input = 1786550ce8d8433052e01ecba8b76d30
|
||||
Output = 3d4a054d9358209e9cbbb9
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -289,7 +309,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# negative test with otherwise valid padding but a zero byte in first byte
|
||||
# of padding
|
||||
Decrypt = RSA-2048-2
|
||||
@@ -503,7 +511,7 @@ Input = 179598823812d2c58a7eb50521150a48
|
||||
@@ -549,7 +559,7 @@ Input = 179598823812d2c58a7eb50521150a48
|
||||
Output = 1f037dd717b07d3e7f7359
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -298,7 +318,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# negative test with otherwise valid padding but a zero byte at the eighth
|
||||
# byte of padding
|
||||
Decrypt = RSA-2048-2
|
||||
@@ -511,7 +519,7 @@ Input = a7a340675a82c30e22219a55bc07cdf3
|
||||
@@ -557,7 +567,7 @@ Input = a7a340675a82c30e22219a55bc07cdf3
|
||||
Output = 63cb0bf65fc8255dd29e17
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -307,7 +327,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# negative test with an otherwise valid plaintext but with missing separator
|
||||
# byte
|
||||
Decrypt = RSA-2048-2
|
||||
@@ -566,53 +574,58 @@ PrivPubKeyPair = RSA-2049:RSA-2049-PUBLI
|
||||
@@ -612,53 +622,58 @@ PrivPubKeyPair = RSA-2049:RSA-2049-PUBLI
|
||||
# RSA decrypt
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -370,7 +390,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# otherwise correct plaintext, but with wrong second byte (0x01 instead of 0x02)
|
||||
Decrypt = RSA-2049
|
||||
Input = 00c5d77826c1ab7a34d6390f9d342d5dbe848942e2618287952ba0350d7de6726112e9cebc391a0fae1839e2bf168229e3e0d71d4161801509f1f28f6e1487ca52df05c466b6b0a6fbbe57a3268a970610ec0beac39ec0fa67babce1ef2a86bf77466dc127d7d0d2962c20e66593126f276863cd38dc6351428f884c1384f67cad0a0ffdbc2af16711fb68dc559b96b37b4f04cd133ffc7d79c43c42ca4948fa895b9daeb853150c8a5169849b730cc77d68b0217d6c0e3dbf38d751a1998186633418367e7576530566c23d6d4e0da9b038d0bb5169ce40133ea076472d055001f0135645940fd08ea44269af2604c8b1ba225053d6db9ab43577689401bdc0f3
|
||||
@@ -676,14 +689,14 @@ ooCElYcob01/JWzoXl61Z5sdrMH5CVZJty5foHKu
|
||||
@@ -722,14 +737,14 @@ ooCElYcob01/JWzoXl61Z5sdrMH5CVZJty5foHKu
|
||||
PrivPubKeyPair = RSA-3072:RSA-3072-PUBLIC
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -387,7 +407,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# a random invalid that has PRF output with a length one byte too long
|
||||
# in the last value
|
||||
Decrypt = RSA-3072
|
||||
@@ -691,46 +704,51 @@ Input = 7db0390d75fcf9d4c59cf27b264190d8
|
||||
@@ -737,46 +752,51 @@ Input = 7db0390d75fcf9d4c59cf27b264190d8
|
||||
Output = 56a3bea054e01338be9b7d7957539c
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -442,7 +462,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# a random negative test case that generates a 9 byte long message based on
|
||||
# second to last value from PRF
|
||||
Decrypt = RSA-3072
|
||||
@@ -738,7 +756,7 @@ Input = 758c215aa6acd61248062b88284bf43c
|
||||
@@ -784,7 +804,7 @@ Input = 758c215aa6acd61248062b88284bf43c
|
||||
Output = 043383c929060374ed
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -451,7 +471,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# a random negative test that generates message based on 3rd last value from
|
||||
# PRF
|
||||
Decrypt = RSA-3072
|
||||
@@ -746,35 +764,35 @@ Input = 7b22d5e62d287968c6622171a1f75db4
|
||||
@@ -792,35 +812,35 @@ Input = 7b22d5e62d287968c6622171a1f75db4
|
||||
Output = 70263fa6050534b9e0
|
||||
|
||||
# The old FIPS provider doesn't include the workaround (#13817)
|
||||
@@ -492,7 +512,18 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
# an otherwise valid plaintext, but with null separator missing
|
||||
Decrypt = RSA-3072
|
||||
Input = a7a5c99e50da48769ecb779d9abe86ef9ec8c38c6f43f17c7f2d7af608a4a1bd6cf695b47e97c191c61fb5a27318d02f495a176b9fae5a55b5d3fabd1d8aae4957e3879cb0c60f037724e11be5f30f08fc51c033731f14b44b414d11278cd3dba7e1c8bfe208d2b2bb7ec36366dacb6c88b24cd79ab394adf19dbbc21dfa5788bacbadc6a62f79cf54fd8cf585c615b5c0eb94c35aa9de25321c8ffefb8916bbaa2697cb2dd82ee98939df9b6704cee77793edd2b4947d82e00e5749664970736c59a84197bd72b5c71e36aae29cd39af6ac73a368edbc1ca792e1309f442aafcd77c992c88f8e4863149f221695cb7b0236e75b2339a02c4ea114854372c306b9412d8eedb600a31532002f2cea07b4df963a093185e4607732e46d753b540974fb5a5c3f9432df22e85bb17611370966c5522fd23f2ad3484341ba7fd8885fc8e6d379a611d13a2aca784fba2073208faad2137bf1979a0fa146c1880d4337db3274269493bab44a1bcd0681f7227ffdf589c2e925ed9d36302509d1109ba4
|
||||
@@ -1153,36 +1171,42 @@ vcDtKrdWo6btTWc1Kml9QhbpMhKxJ6Y9VBHOb6mN
|
||||
@@ -912,9 +932,9 @@ Output=4DE433D5844043EF08D354DA03CB29068
|
||||
|
||||
# Verify of above signature
|
||||
Verify = RSA-2048-PUBLIC
|
||||
+Ctrl = digest:sha256
|
||||
Ctrl = rsa_padding_mode:pss
|
||||
Ctrl = rsa_pss_saltlen:0
|
||||
-Ctrl = digest:sha256
|
||||
Input="0123456789ABCDEF0123456789ABCDEF"
|
||||
Output=4DE433D5844043EF08D354DA03CB29068780D52706D7D1E4D50EFB7D58C9D547D83A747DDD0635A96B28F854E50145518482CB49E963054621B53C60C498D07C16E9C2789C893CF38D4D86900DE71BDE463BD2761D1271E358C7480A1AC0BAB930DDF39602AD1BC165B5D7436B516B7A7858E8EB7AB1C420EEB482F4D207F0E462B1724959320A084E13848D11D10FB593E66BF680BF6D3F345FC3E9C3DE60ABBAC37E1C6EC80A268C8D9FC49626C679097AA690BC1AA662B95EB8DB70390861AA0898229F9349B4B5FDD030D4928C47084708A933144BE23BD3C6E661B85B2C0EF9ED36D498D5B7320E8194D363D4AD478C059BAE804181965E0B81B663158A
|
||||
|
||||
@@ -1207,36 +1227,42 @@ vcDtKrdWo6btTWc1Kml9QhbpMhKxJ6Y9VBHOb6mN
|
||||
h90qjKHS9PvY4Q==
|
||||
-----END PRIVATE KEY-----
|
||||
|
||||
@@ -535,7 +566,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
Decrypt=RSA-OAEP-1
|
||||
Ctrl = rsa_padding_mode:oaep
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
@@ -1207,36 +1231,42 @@ SwGNdhGLJDiac1Dsg2sAY6IXISNv2O222JtR5+64
|
||||
@@ -1261,36 +1287,42 @@ SwGNdhGLJDiac1Dsg2sAY6IXISNv2O222JtR5+64
|
||||
eG2e4XlBcKjI6A==
|
||||
-----END PRIVATE KEY-----
|
||||
|
||||
@@ -578,7 +609,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
Decrypt=RSA-OAEP-2
|
||||
Ctrl = rsa_padding_mode:oaep
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
@@ -1261,36 +1291,42 @@ iUGx07dw5a0x7jc7KKzaaf+bb0D+V4ufGvuFg2+W
|
||||
@@ -1315,36 +1347,42 @@ iUGx07dw5a0x7jc7KKzaaf+bb0D+V4ufGvuFg2+W
|
||||
Ya4qnqZe1onjY5o=
|
||||
-----END PRIVATE KEY-----
|
||||
|
||||
@@ -621,7 +652,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
Decrypt=RSA-OAEP-3
|
||||
Ctrl = rsa_padding_mode:oaep
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
@@ -1315,36 +1351,42 @@ s/XkIiO6MDAcQabYfLtw4wy308Z9JUc9sfbL8D4/
|
||||
@@ -1369,36 +1407,42 @@ s/XkIiO6MDAcQabYfLtw4wy308Z9JUc9sfbL8D4/
|
||||
aD0x7TDrmEvkEro=
|
||||
-----END PRIVATE KEY-----
|
||||
|
||||
@@ -664,7 +695,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
Decrypt=RSA-OAEP-4
|
||||
Ctrl = rsa_padding_mode:oaep
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
@@ -1369,36 +1411,42 @@ OPlAQGLrhaQpJFILOPW7iGoBlvSLuNzqYP2SzAJ/
|
||||
@@ -1423,36 +1467,42 @@ OPlAQGLrhaQpJFILOPW7iGoBlvSLuNzqYP2SzAJ/
|
||||
MSwGUGLx60i3nRyDyw==
|
||||
-----END PRIVATE KEY-----
|
||||
|
||||
@@ -707,7 +738,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
Decrypt=RSA-OAEP-5
|
||||
Ctrl = rsa_padding_mode:oaep
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
@@ -1423,36 +1471,42 @@ xT1F29tenZbQ/s9Cdd8JdLxKBza0p0wyaQU++2hq
|
||||
@@ -1477,36 +1527,42 @@ xT1F29tenZbQ/s9Cdd8JdLxKBza0p0wyaQU++2hq
|
||||
Yejn5Ly8mU2q+jBcRQ==
|
||||
-----END PRIVATE KEY-----
|
||||
|
||||
@@ -750,7 +781,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
Decrypt=RSA-OAEP-6
|
||||
Ctrl = rsa_padding_mode:oaep
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
@@ -1477,36 +1531,42 @@ tu4XIedy0DiaVZw9PN+VUNRXxGsDe3RkGx1SFmr4
|
||||
@@ -1531,36 +1587,42 @@ tu4XIedy0DiaVZw9PN+VUNRXxGsDe3RkGx1SFmr4
|
||||
FMlxv0gq65dqc3DC
|
||||
-----END PRIVATE KEY-----
|
||||
|
||||
@@ -793,7 +824,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
Decrypt=RSA-OAEP-7
|
||||
Ctrl = rsa_padding_mode:oaep
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
@@ -1531,36 +1591,42 @@ njraT2MgdSwJ2AX/fR8a4NAXru7pzvoNfdf/d15E
|
||||
@@ -1585,36 +1647,42 @@ njraT2MgdSwJ2AX/fR8a4NAXru7pzvoNfdf/d15E
|
||||
2MiPa249Z+lh3Luj0A==
|
||||
-----END PRIVATE KEY-----
|
||||
|
||||
@@ -836,7 +867,7 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
Decrypt=RSA-OAEP-8
|
||||
Ctrl = rsa_padding_mode:oaep
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
@@ -1591,36 +1657,42 @@ Z7CDuaemy2HkLbNiuMmJbbcGTgKtWuYVh9oVtGSc
|
||||
@@ -1645,36 +1713,42 @@ Z7CDuaemy2HkLbNiuMmJbbcGTgKtWuYVh9oVtGSc
|
||||
tKo5Eb69iFQvBb4=
|
||||
-----END PRIVATE KEY-----
|
||||
|
||||
@@ -879,53 +910,53 @@ Index: openssl-3.2.3/test/recipes/30-test_evp_data/evppkey_rsa_common.txt
|
||||
Decrypt=RSA-OAEP-9
|
||||
Ctrl = rsa_padding_mode:oaep
|
||||
Ctrl = rsa_mgf1_md:sha1
|
||||
Index: openssl-3.2.3/test/recipes/80-test_cms.t
|
||||
Index: openssl-3.5.0-beta1/test/recipes/80-test_cms.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/80-test_cms.t
|
||||
+++ openssl-3.2.3/test/recipes/80-test_cms.t
|
||||
@@ -235,7 +235,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/80-test_cms.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/80-test_cms.t
|
||||
@@ -250,7 +250,7 @@ my @smime_pkcs7_tests = (
|
||||
|
||||
- [ "enveloped content test streaming S/MIME format, AES-256 cipher, 3 recipients",
|
||||
+ [ "enveloped content test streaming S/MIME format, AES-256 cipher, 3 recipients, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-encrypt", "-in", $smcont,
|
||||
"-aes256", "-stream", "-out", "{output}.cms",
|
||||
$smrsa1,
|
||||
@@ -1125,6 +1125,9 @@ sub check_availability {
|
||||
if ($no_fips || $old_fips) {
|
||||
push(@smime_pkcs7_tests,
|
||||
- [ "enveloped content test streaming S/MIME format, AES-256 cipher, 3 recipients",
|
||||
+ [ "enveloped content test streaming S/MIME format, AES-256 cipher, 3 recipients, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-encrypt", "-in", $smcont,
|
||||
"-aes256", "-stream", "-out", "{output}.cms",
|
||||
$smrsa1,
|
||||
@@ -1267,6 +1267,9 @@ sub check_availability {
|
||||
return "$tnam: skipped, DSA disabled\n"
|
||||
if ($no_dsa && $tnam =~ / DSA/);
|
||||
|
||||
+ return "$tnam: skipped, SUSE FIPS\n"
|
||||
+ return "$tnam: skipped, SUSE/openSUSE FIPS\n"
|
||||
+ if ($tnam =~ /no SUSE FIPS/);
|
||||
+
|
||||
return "";
|
||||
}
|
||||
|
||||
Index: openssl-3.2.3/test/recipes/80-test_ssl_old.t
|
||||
Index: openssl-3.5.0-beta1/test/recipes/80-test_ssl_old.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/80-test_ssl_old.t
|
||||
+++ openssl-3.2.3/test/recipes/80-test_ssl_old.t
|
||||
@@ -497,6 +497,18 @@ sub testssl {
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/80-test_ssl_old.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/80-test_ssl_old.t
|
||||
@@ -561,6 +561,18 @@ sub testssl {
|
||||
# the default choice if TLSv1.3 enabled
|
||||
my $flag = $protocol eq "-tls1_3" ? "" : $protocol;
|
||||
my $ciphersuites = "";
|
||||
+ my %FIPS_skip_cipher = map {$_ => 1} qw(
|
||||
+ AES256-GCM-SHA384:@SECLEVEL=0
|
||||
+ AES256-CCM8:@SECLEVEL=0
|
||||
+ AES256-CCM:@SECLEVEL=0
|
||||
+ AES128-GCM-SHA256:@SECLEVEL=0
|
||||
+ AES128-CCM8:@SECLEVEL=0
|
||||
+ AES128-CCM:@SECLEVEL=0
|
||||
+ AES256-SHA256:@SECLEVEL=0
|
||||
+ AES128-SHA256:@SECLEVEL=0
|
||||
+ AES256-SHA:@SECLEVEL=0
|
||||
+ AES128-SHA:@SECLEVEL=0
|
||||
+ my %redhat_skip_cipher = map {$_ => 1} qw(
|
||||
+AES256-GCM-SHA384:@SECLEVEL=0
|
||||
+AES256-CCM8:@SECLEVEL=0
|
||||
+AES256-CCM:@SECLEVEL=0
|
||||
+AES128-GCM-SHA256:@SECLEVEL=0
|
||||
+AES128-CCM8:@SECLEVEL=0
|
||||
+AES128-CCM:@SECLEVEL=0
|
||||
+AES256-SHA256:@SECLEVEL=0
|
||||
+AES128-SHA256:@SECLEVEL=0
|
||||
+AES256-SHA:@SECLEVEL=0
|
||||
+AES128-SHA:@SECLEVEL=0
|
||||
+ );
|
||||
foreach my $cipher (@{$ciphersuites{$protocol}}) {
|
||||
if ($protocol eq "-ssl3" && $cipher =~ /ECDH/ ) {
|
||||
note "*****SKIPPING $protocol $cipher";
|
||||
@@ -508,11 +520,16 @@ sub testssl {
|
||||
if ($dsaallow == '0' && index($cipher, "DSS") != -1) {
|
||||
# DSA is not allowed in FIPS 140-3
|
||||
@@ -576,11 +588,16 @@ sub testssl {
|
||||
} else {
|
||||
$cipher = $cipher.':@SECLEVEL=0';
|
||||
}
|
||||
@@ -934,8 +965,8 @@ Index: openssl-3.2.3/test/recipes/80-test_ssl_old.t
|
||||
- "-ciphersuites", $ciphersuites,
|
||||
- $flag || ()])),
|
||||
- "Testing $cipher");
|
||||
+ if ($provider eq "fips" && exists $FIPS_skip_cipher{$cipher}) {
|
||||
+ note "*****SKIPPING $cipher in SUSE FIPS mode";
|
||||
+ if ($provider eq "fips" && exists $redhat_skip_cipher{$cipher}) {
|
||||
+ note "*****SKIPPING $cipher in SUSE/openSUSE FIPS mode";
|
||||
+ ok(1);
|
||||
+ } else {
|
||||
+ ok(run(test([@ssltest, @exkeys, "-cipher",
|
||||
|
@@ -1,782 +0,0 @@
|
||||
From e25b25227043a2b2cf156527c31d7686a4265bf3 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Wed, 6 Mar 2024 19:17:15 +0100
|
||||
Subject: [PATCH 20/49] 0045-FIPS-services-minimize.patch
|
||||
|
||||
Patch-name: 0045-FIPS-services-minimize.patch
|
||||
Patch-id: 45
|
||||
Patch-status: |
|
||||
# # Minimize fips services
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
---
|
||||
apps/ecparam.c | 7 +++
|
||||
apps/req.c | 2 +-
|
||||
providers/common/capabilities.c | 2 +-
|
||||
providers/fips/fipsprov.c | 44 +++++++++++--------
|
||||
providers/fips/self_test_data.inc | 9 +++-
|
||||
providers/implementations/signature/rsa_sig.c | 26 +++++++++++
|
||||
ssl/ssl_ciph.c | 3 ++
|
||||
test/acvp_test.c | 2 +
|
||||
test/endecode_test.c | 4 ++
|
||||
test/evp_libctx_test.c | 9 +++-
|
||||
test/recipes/15-test_gendsa.t | 2 +-
|
||||
test/recipes/20-test_cli_fips.t | 3 +-
|
||||
test/recipes/30-test_evp.t | 20 ++++-----
|
||||
.../30-test_evp_data/evpmac_common.txt | 22 ++++++++++
|
||||
test/recipes/80-test_cms.t | 22 +++++-----
|
||||
test/recipes/80-test_ssl_old.t | 2 +-
|
||||
16 files changed, 128 insertions(+), 51 deletions(-)
|
||||
|
||||
Index: openssl-3.2.3/apps/ecparam.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/apps/ecparam.c
|
||||
+++ openssl-3.2.3/apps/ecparam.c
|
||||
@@ -79,6 +79,13 @@ static int list_builtin_curves(BIO *out)
|
||||
const char *comment = curves[n].comment;
|
||||
const char *sname = OBJ_nid2sn(curves[n].nid);
|
||||
|
||||
+ if (((curves[n].nid == NID_secp256k1) || (curves[n].nid == NID_brainpoolP256r1)
|
||||
+ || (curves[n].nid == NID_brainpoolP256t1) || (curves[n].nid == NID_brainpoolP320r1)
|
||||
+ || (curves[n].nid == NID_brainpoolP320t1) || (curves[n].nid == NID_brainpoolP384r1)
|
||||
+ || (curves[n].nid == NID_brainpoolP384t1) || (curves[n].nid == NID_brainpoolP512r1)
|
||||
+ || (curves[n].nid == NID_brainpoolP512t1)) && EVP_default_properties_is_fips_enabled(NULL))
|
||||
+ continue;
|
||||
+
|
||||
if (comment == NULL)
|
||||
comment = "CURVE DESCRIPTION NOT AVAILABLE";
|
||||
if (sname == NULL)
|
||||
Index: openssl-3.2.3/apps/req.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/apps/req.c
|
||||
+++ openssl-3.2.3/apps/req.c
|
||||
@@ -268,7 +268,7 @@ int req_main(int argc, char **argv)
|
||||
unsigned long chtype = MBSTRING_ASC, reqflag = 0;
|
||||
|
||||
#ifndef OPENSSL_NO_DES
|
||||
- cipher = (EVP_CIPHER *)EVP_des_ede3_cbc();
|
||||
+ cipher = (EVP_CIPHER *)EVP_aes_256_cbc();
|
||||
#endif
|
||||
|
||||
opt_set_unknown_name("digest");
|
||||
Index: openssl-3.2.3/providers/common/capabilities.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/common/capabilities.c
|
||||
+++ openssl-3.2.3/providers/common/capabilities.c
|
||||
@@ -189,9 +189,9 @@ static const OSSL_PARAM param_group_list
|
||||
TLS_GROUP_ENTRY("brainpoolP256r1", "brainpoolP256r1", "EC", 25),
|
||||
TLS_GROUP_ENTRY("brainpoolP384r1", "brainpoolP384r1", "EC", 26),
|
||||
TLS_GROUP_ENTRY("brainpoolP512r1", "brainpoolP512r1", "EC", 27),
|
||||
-# endif
|
||||
TLS_GROUP_ENTRY("x25519", "X25519", "X25519", 28),
|
||||
TLS_GROUP_ENTRY("x448", "X448", "X448", 29),
|
||||
+# endif
|
||||
# ifndef FIPS_MODULE
|
||||
TLS_GROUP_ENTRY("brainpoolP256r1tls13", "brainpoolP256r1", "EC", 30),
|
||||
TLS_GROUP_ENTRY("brainpoolP384r1tls13", "brainpoolP384r1", "EC", 31),
|
||||
Index: openssl-3.2.3/providers/fips/fipsprov.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/fips/fipsprov.c
|
||||
+++ openssl-3.2.3/providers/fips/fipsprov.c
|
||||
@@ -194,18 +194,19 @@ static const OSSL_PARAM *fips_gettable_p
|
||||
|
||||
static int fips_get_params(void *provctx, OSSL_PARAM params[])
|
||||
{
|
||||
+#define SUSE_OPENSSL_VERSION_STR OPENSSL_VERSION_STR " SUSE release " SUSE_OPENSSL_RELEASE
|
||||
OSSL_PARAM *p;
|
||||
FIPS_GLOBAL *fgbl = ossl_lib_ctx_get_data(ossl_prov_ctx_get0_libctx(provctx),
|
||||
OSSL_LIB_CTX_FIPS_PROV_INDEX);
|
||||
|
||||
p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_NAME);
|
||||
- if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, "OpenSSL FIPS Provider"))
|
||||
+ if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, "SUSE Linux Enterprise - OpenSSL FIPS Provider"))
|
||||
return 0;
|
||||
p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_VERSION);
|
||||
- if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, OPENSSL_VERSION_STR))
|
||||
+ if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, SUSE_OPENSSL_VERSION_STR))
|
||||
return 0;
|
||||
p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_BUILDINFO);
|
||||
- if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, OPENSSL_FULL_VERSION_STR))
|
||||
+ if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, SUSE_OPENSSL_VERSION_STR))
|
||||
return 0;
|
||||
p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_STATUS);
|
||||
if (p != NULL && !OSSL_PARAM_set_int(p, ossl_prov_is_running()))
|
||||
@@ -298,10 +299,11 @@ static const OSSL_ALGORITHM fips_digests
|
||||
* KECCAK-KMAC-128 and KECCAK-KMAC-256 as hashes are mostly useful for
|
||||
* KMAC128 and KMAC256.
|
||||
*/
|
||||
- { PROV_NAMES_KECCAK_KMAC_128, FIPS_DEFAULT_PROPERTIES,
|
||||
+ /* We don't certify KECCAK in our FIPS provider */
|
||||
+ /* { PROV_NAMES_KECCAK_KMAC_128, FIPS_DEFAULT_PROPERTIES,
|
||||
ossl_keccak_kmac_128_functions },
|
||||
{ PROV_NAMES_KECCAK_KMAC_256, FIPS_DEFAULT_PROPERTIES,
|
||||
- ossl_keccak_kmac_256_functions },
|
||||
+ ossl_keccak_kmac_256_functions }, */
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
@@ -360,8 +362,9 @@ static const OSSL_ALGORITHM_CAPABLE fips
|
||||
ALGC(PROV_NAMES_AES_256_CBC_HMAC_SHA256, ossl_aes256cbc_hmac_sha256_functions,
|
||||
ossl_cipher_capable_aes_cbc_hmac_sha256),
|
||||
#ifndef OPENSSL_NO_DES
|
||||
- UNAPPROVED_ALG(PROV_NAMES_DES_EDE3_ECB, ossl_tdes_ede3_ecb_functions),
|
||||
- UNAPPROVED_ALG(PROV_NAMES_DES_EDE3_CBC, ossl_tdes_ede3_cbc_functions),
|
||||
+ /* We don't certify 3DES in our FIPS provider */
|
||||
+ /* UNAPPROVED_ALG(PROV_NAMES_DES_EDE3_ECB, ossl_tdes_ede3_ecb_functions),
|
||||
+ UNAPPROVED_ALG(PROV_NAMES_DES_EDE3_CBC, ossl_tdes_ede3_cbc_functions), */
|
||||
#endif /* OPENSSL_NO_DES */
|
||||
{ { NULL, NULL, NULL }, NULL }
|
||||
};
|
||||
@@ -373,8 +376,9 @@ static const OSSL_ALGORITHM fips_macs[]
|
||||
#endif
|
||||
{ PROV_NAMES_GMAC, FIPS_DEFAULT_PROPERTIES, ossl_gmac_functions },
|
||||
{ PROV_NAMES_HMAC, FIPS_DEFAULT_PROPERTIES, ossl_hmac_functions },
|
||||
- { PROV_NAMES_KMAC_128, FIPS_DEFAULT_PROPERTIES, ossl_kmac128_functions },
|
||||
- { PROV_NAMES_KMAC_256, FIPS_DEFAULT_PROPERTIES, ossl_kmac256_functions },
|
||||
+ /* We don't certify KMAC in our FIPS provider */
|
||||
+ /*{ PROV_NAMES_KMAC_128, FIPS_DEFAULT_PROPERTIES, ossl_kmac128_functions },
|
||||
+ { PROV_NAMES_KMAC_256, FIPS_DEFAULT_PROPERTIES, ossl_kmac256_functions }, */
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
@@ -410,8 +414,9 @@ static const OSSL_ALGORITHM fips_keyexch
|
||||
#ifndef OPENSSL_NO_EC
|
||||
{ PROV_NAMES_ECDH, FIPS_DEFAULT_PROPERTIES, ossl_ecdh_keyexch_functions },
|
||||
# ifndef OPENSSL_NO_ECX
|
||||
- { PROV_NAMES_X25519, FIPS_DEFAULT_PROPERTIES, ossl_x25519_keyexch_functions },
|
||||
- { PROV_NAMES_X448, FIPS_DEFAULT_PROPERTIES, ossl_x448_keyexch_functions },
|
||||
+ /* We don't certify Edwards curves in our FIPS provider */
|
||||
+ /*{ PROV_NAMES_X25519, FIPS_DEFAULT_PROPERTIES, ossl_x25519_keyexch_functions },
|
||||
+ { PROV_NAMES_X448, FIPS_DEFAULT_PROPERTIES, ossl_x448_keyexch_functions },*/
|
||||
# endif
|
||||
#endif
|
||||
{ PROV_NAMES_TLS1_PRF, FIPS_DEFAULT_PROPERTIES,
|
||||
@@ -422,14 +427,16 @@ static const OSSL_ALGORITHM fips_keyexch
|
||||
|
||||
static const OSSL_ALGORITHM fips_signature[] = {
|
||||
#ifndef OPENSSL_NO_DSA
|
||||
- { PROV_NAMES_DSA, FIPS_DEFAULT_PROPERTIES, ossl_dsa_signature_functions },
|
||||
+ /* We don't certify DSA in our FIPS provider */
|
||||
+ /* { PROV_NAMES_DSA, FIPS_DEFAULT_PROPERTIES, ossl_dsa_signature_functions },*/
|
||||
#endif
|
||||
{ PROV_NAMES_RSA, FIPS_DEFAULT_PROPERTIES, ossl_rsa_signature_functions },
|
||||
#ifndef OPENSSL_NO_EC
|
||||
# ifndef OPENSSL_NO_ECX
|
||||
- { PROV_NAMES_ED25519, FIPS_UNAPPROVED_PROPERTIES,
|
||||
+ /* We don't certify Edwards curves in our FIPS provider */
|
||||
+ /* { PROV_NAMES_ED25519, FIPS_UNAPPROVED_PROPERTIES,
|
||||
ossl_ed25519_signature_functions },
|
||||
- { PROV_NAMES_ED448, FIPS_UNAPPROVED_PROPERTIES, ossl_ed448_signature_functions },
|
||||
+ { PROV_NAMES_ED448, FIPS_UNAPPROVED_PROPERTIES, ossl_ed448_signature_functions },*/
|
||||
# endif
|
||||
{ PROV_NAMES_ECDSA, FIPS_DEFAULT_PROPERTIES, ossl_ecdsa_signature_functions },
|
||||
#endif
|
||||
@@ -460,8 +467,9 @@ static const OSSL_ALGORITHM fips_keymgmt
|
||||
PROV_DESCS_DHX },
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_DSA
|
||||
- { PROV_NAMES_DSA, FIPS_DEFAULT_PROPERTIES, ossl_dsa_keymgmt_functions,
|
||||
- PROV_DESCS_DSA },
|
||||
+ /* We don't certify DSA in our FIPS provider */
|
||||
+ /* { PROV_NAMES_DSA, FIPS_DEFAULT_PROPERTIES, ossl_dsa_keymgmt_functions,
|
||||
+ PROV_DESCS_DSA }, */
|
||||
#endif
|
||||
{ PROV_NAMES_RSA, FIPS_DEFAULT_PROPERTIES, ossl_rsa_keymgmt_functions,
|
||||
PROV_DESCS_RSA },
|
||||
@@ -471,14 +479,15 @@ static const OSSL_ALGORITHM fips_keymgmt
|
||||
{ PROV_NAMES_EC, FIPS_DEFAULT_PROPERTIES, ossl_ec_keymgmt_functions,
|
||||
PROV_DESCS_EC },
|
||||
# ifndef OPENSSL_NO_ECX
|
||||
- { PROV_NAMES_X25519, FIPS_DEFAULT_PROPERTIES, ossl_x25519_keymgmt_functions,
|
||||
+ /* We don't certify Edwards curves in our FIPS provider */
|
||||
+ /* { PROV_NAMES_X25519, FIPS_DEFAULT_PROPERTIES, ossl_x25519_keymgmt_functions,
|
||||
PROV_DESCS_X25519 },
|
||||
{ PROV_NAMES_X448, FIPS_DEFAULT_PROPERTIES, ossl_x448_keymgmt_functions,
|
||||
PROV_DESCS_X448 },
|
||||
{ PROV_NAMES_ED25519, FIPS_UNAPPROVED_PROPERTIES, ossl_ed25519_keymgmt_functions,
|
||||
PROV_DESCS_ED25519 },
|
||||
{ PROV_NAMES_ED448, FIPS_UNAPPROVED_PROPERTIES, ossl_ed448_keymgmt_functions,
|
||||
- PROV_DESCS_ED448 },
|
||||
+ PROV_DESCS_ED448 }, */
|
||||
# endif
|
||||
#endif
|
||||
{ PROV_NAMES_TLS1_PRF, FIPS_DEFAULT_PROPERTIES, ossl_kdf_keymgmt_functions,
|
||||
Index: openssl-3.2.3/providers/fips/self_test_data.inc
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/fips/self_test_data.inc
|
||||
+++ openssl-3.2.3/providers/fips/self_test_data.inc
|
||||
@@ -177,6 +177,7 @@ static const ST_KAT_DIGEST st_kat_digest
|
||||
/*- CIPHER TEST DATA */
|
||||
|
||||
/* DES3 test data */
|
||||
+#if 0
|
||||
static const unsigned char des_ede3_cbc_pt[] = {
|
||||
0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
|
||||
0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
|
||||
@@ -197,7 +198,7 @@ static const unsigned char des_ede3_cbc_
|
||||
0x51, 0x65, 0x70, 0x48, 0x1F, 0x25, 0xB5, 0x0F,
|
||||
0x73, 0xC0, 0xBD, 0xA8, 0x5C, 0x8E, 0x0D, 0xA7
|
||||
};
|
||||
-
|
||||
+#endif
|
||||
/* AES-256 GCM test data */
|
||||
static const unsigned char aes_256_gcm_key[] = {
|
||||
0x92, 0xe1, 0x1d, 0xcd, 0xaa, 0x86, 0x6f, 0x5c,
|
||||
@@ -1454,8 +1455,9 @@ static const ST_KAT_PARAM ecdsa_bin_key[
|
||||
# endif /* OPENSSL_NO_EC2M */
|
||||
#endif /* OPENSSL_NO_EC */
|
||||
|
||||
-#ifndef OPENSSL_NO_DSA
|
||||
/* dsa 2048 */
|
||||
+#if 0
|
||||
+#ifndef OPENSSL_NO_DSA
|
||||
static const unsigned char dsa_p[] = {
|
||||
0xa2, 0x9b, 0x88, 0x72, 0xce, 0x8b, 0x84, 0x23,
|
||||
0xb7, 0xd5, 0xd2, 0x1d, 0x4b, 0x02, 0xf5, 0x7e,
|
||||
@@ -1590,6 +1592,7 @@ static const ST_KAT_PARAM dsa_key[] = {
|
||||
ST_KAT_PARAM_END()
|
||||
};
|
||||
#endif /* OPENSSL_NO_DSA */
|
||||
+#endif
|
||||
|
||||
/* Hash DRBG inputs for signature KATs */
|
||||
static const unsigned char sig_kat_entropyin[] = {
|
||||
@@ -1642,6 +1645,7 @@ static const ST_KAT_SIGN st_kat_sign_tes
|
||||
},
|
||||
# endif
|
||||
#endif /* OPENSSL_NO_EC */
|
||||
+#if 0
|
||||
#ifndef OPENSSL_NO_DSA
|
||||
{
|
||||
OSSL_SELF_TEST_DESC_SIGN_DSA,
|
||||
@@ -1654,6 +1658,7 @@ static const ST_KAT_SIGN st_kat_sign_tes
|
||||
ITM(dsa_expected_sig)
|
||||
},
|
||||
#endif /* OPENSSL_NO_DSA */
|
||||
+#endif
|
||||
};
|
||||
|
||||
static const ST_KAT_ASYM_CIPHER st_kat_asym_cipher_tests[] = {
|
||||
Index: openssl-3.2.3/providers/implementations/signature/rsa_sig.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/signature/rsa_sig.c
|
||||
+++ openssl-3.2.3/providers/implementations/signature/rsa_sig.c
|
||||
@@ -702,6 +702,19 @@ static int rsa_verify_recover(void *vprs
|
||||
{
|
||||
PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
|
||||
int ret;
|
||||
+# ifdef FIPS_MODULE
|
||||
+ size_t rsabits = RSA_bits(prsactx->rsa);
|
||||
+
|
||||
+ if (rsabits < 2048) {
|
||||
+ if (rsabits != 1024
|
||||
+ && rsabits != 1280
|
||||
+ && rsabits != 1536
|
||||
+ && rsabits != 1792) {
|
||||
+ ERR_raise(ERR_LIB_FIPS, PROV_R_INVALID_KEY_LENGTH);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+# endif
|
||||
|
||||
if (!ossl_prov_is_running())
|
||||
return 0;
|
||||
@@ -790,6 +803,19 @@ static int rsa_verify(void *vprsactx, co
|
||||
{
|
||||
PROV_RSA_CTX *prsactx = (PROV_RSA_CTX *)vprsactx;
|
||||
size_t rslen;
|
||||
+# ifdef FIPS_MODULE
|
||||
+ size_t rsabits = RSA_bits(prsactx->rsa);
|
||||
+
|
||||
+ if (rsabits < 2048) {
|
||||
+ if (rsabits != 1024
|
||||
+ && rsabits != 1280
|
||||
+ && rsabits != 1536
|
||||
+ && rsabits != 1792) {
|
||||
+ ERR_raise(ERR_LIB_FIPS, PROV_R_INVALID_KEY_LENGTH);
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+# endif
|
||||
|
||||
if (!ossl_prov_is_running())
|
||||
return 0;
|
||||
Index: openssl-3.2.3/ssl/ssl_ciph.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/ssl/ssl_ciph.c
|
||||
+++ openssl-3.2.3/ssl/ssl_ciph.c
|
||||
@@ -356,6 +356,9 @@ int ssl_load_ciphers(SSL_CTX *ctx)
|
||||
ctx->disabled_mkey_mask = 0;
|
||||
ctx->disabled_auth_mask = 0;
|
||||
|
||||
+ if (EVP_default_properties_is_fips_enabled(ctx->libctx))
|
||||
+ ctx->disabled_mkey_mask |= SSL_kRSA | SSL_kRSAPSK;
|
||||
+
|
||||
/*
|
||||
* We ignore any errors from the fetches below. They are expected to fail
|
||||
* if these algorithms are not available.
|
||||
Index: openssl-3.2.3/test/acvp_test.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/acvp_test.c
|
||||
+++ openssl-3.2.3/test/acvp_test.c
|
||||
@@ -1478,6 +1478,7 @@ int setup_tests(void)
|
||||
OSSL_NELEM(dh_safe_prime_keyver_data));
|
||||
#endif /* OPENSSL_NO_DH */
|
||||
|
||||
+#if 0 /* SUSE FIPS provider doesn't have fips=yes property on DSA */
|
||||
#ifndef OPENSSL_NO_DSA
|
||||
ADD_ALL_TESTS(dsa_keygen_test, OSSL_NELEM(dsa_keygen_data));
|
||||
ADD_ALL_TESTS(dsa_paramgen_test, OSSL_NELEM(dsa_paramgen_data));
|
||||
@@ -1485,6 +1486,7 @@ int setup_tests(void)
|
||||
ADD_ALL_TESTS(dsa_siggen_test, OSSL_NELEM(dsa_siggen_data));
|
||||
ADD_ALL_TESTS(dsa_sigver_test, OSSL_NELEM(dsa_sigver_data));
|
||||
#endif /* OPENSSL_NO_DSA */
|
||||
+#endif
|
||||
|
||||
#ifndef OPENSSL_NO_EC
|
||||
ADD_ALL_TESTS(ecdsa_keygen_test, OSSL_NELEM(ecdsa_keygen_data));
|
||||
Index: openssl-3.2.3/test/endecode_test.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/endecode_test.c
|
||||
+++ openssl-3.2.3/test/endecode_test.c
|
||||
@@ -1424,6 +1424,7 @@ int setup_tests(void)
|
||||
* so no legacy tests.
|
||||
*/
|
||||
#endif
|
||||
+ if (is_fips == 0) {
|
||||
#ifndef OPENSSL_NO_DSA
|
||||
ADD_TEST_SUITE(DSA);
|
||||
ADD_TEST_SUITE_PARAMS(DSA);
|
||||
@@ -1434,6 +1435,7 @@ int setup_tests(void)
|
||||
ADD_TEST_SUITE_PROTECTED_PVK(DSA);
|
||||
# endif
|
||||
#endif
|
||||
+ }
|
||||
#ifndef OPENSSL_NO_EC
|
||||
ADD_TEST_SUITE(EC);
|
||||
ADD_TEST_SUITE_PARAMS(EC);
|
||||
@@ -1454,10 +1456,12 @@ int setup_tests(void)
|
||||
ADD_TEST_SUITE(SM2);
|
||||
}
|
||||
# endif
|
||||
+ if (is_fips == 0) {
|
||||
ADD_TEST_SUITE(ED25519);
|
||||
ADD_TEST_SUITE(ED448);
|
||||
ADD_TEST_SUITE(X25519);
|
||||
ADD_TEST_SUITE(X448);
|
||||
+ }
|
||||
/*
|
||||
* ED25519, ED448, X25519 and X448 have no support for
|
||||
* PEM_write_bio_PrivateKey_traditional(), so no legacy tests.
|
||||
Index: openssl-3.2.3/test/evp_libctx_test.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/evp_libctx_test.c
|
||||
+++ openssl-3.2.3/test/evp_libctx_test.c
|
||||
@@ -21,6 +21,7 @@
|
||||
*/
|
||||
#include "internal/deprecated.h"
|
||||
#include <assert.h>
|
||||
+#include <string.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/provider.h>
|
||||
#include <openssl/dsa.h>
|
||||
@@ -726,7 +727,9 @@ int setup_tests(void)
|
||||
return 0;
|
||||
|
||||
#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DH)
|
||||
- ADD_ALL_TESTS(test_dsa_param_keygen, 3 * 3 * 3);
|
||||
+ if (strcmp(prov_name, "fips") != 0) {
|
||||
+ ADD_ALL_TESTS(test_dsa_param_keygen, 3 * 3 * 3);
|
||||
+ }
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_DH
|
||||
ADD_ALL_TESTS(test_dh_safeprime_param_keygen, 3 * 3 * 3);
|
||||
@@ -746,7 +749,9 @@ int setup_tests(void)
|
||||
ADD_TEST(kem_invalid_keytype);
|
||||
#endif
|
||||
#ifndef OPENSSL_NO_DES
|
||||
- ADD_TEST(test_cipher_tdes_randkey);
|
||||
+ if (strcmp(prov_name, "fips") != 0) {
|
||||
+ ADD_TEST(test_cipher_tdes_randkey);
|
||||
+ }
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
Index: openssl-3.2.3/test/recipes/15-test_gendsa.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/15-test_gendsa.t
|
||||
+++ openssl-3.2.3/test/recipes/15-test_gendsa.t
|
||||
@@ -24,7 +24,7 @@ use lib bldtop_dir('.');
|
||||
plan skip_all => "This test is unsupported in a no-dsa build"
|
||||
if disabled("dsa");
|
||||
|
||||
-my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
|
||||
+my $no_fips = 1;
|
||||
|
||||
plan tests =>
|
||||
($no_fips ? 0 : 2) # FIPS related tests
|
||||
Index: openssl-3.2.3/test/recipes/20-test_cli_fips.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/20-test_cli_fips.t
|
||||
+++ openssl-3.2.3/test/recipes/20-test_cli_fips.t
|
||||
@@ -278,8 +278,7 @@ SKIP: {
|
||||
}
|
||||
|
||||
SKIP : {
|
||||
- skip "FIPS DSA tests because of no dsa in this build", 1
|
||||
- if disabled("dsa");
|
||||
+ skip "FIPS DSA tests because of no dsa in this build", 1;
|
||||
|
||||
subtest DSA => sub {
|
||||
my $testtext_prefix = 'DSA';
|
||||
Index: openssl-3.2.3/test/recipes/30-test_evp.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/30-test_evp.t
|
||||
+++ openssl-3.2.3/test/recipes/30-test_evp.t
|
||||
@@ -46,10 +46,8 @@ my @files = qw(
|
||||
evpciph_aes_cts.txt
|
||||
evpciph_aes_wrap.txt
|
||||
evpciph_aes_stitched.txt
|
||||
- evpciph_des3_common.txt
|
||||
evpkdf_hkdf.txt
|
||||
evpkdf_kbkdf_counter.txt
|
||||
- evpkdf_kbkdf_kmac.txt
|
||||
evpkdf_pbkdf1.txt
|
||||
evpkdf_pbkdf2.txt
|
||||
evpkdf_ss.txt
|
||||
@@ -70,15 +68,6 @@ push @files, qw(
|
||||
evppkey_dh.txt
|
||||
) unless $no_dh;
|
||||
push @files, qw(
|
||||
- evpkdf_x942_des.txt
|
||||
- evpmac_cmac_des.txt
|
||||
- ) unless $no_des;
|
||||
-push @files, qw(evppkey_dsa.txt) unless $no_dsa;
|
||||
-push @files, qw(
|
||||
- evppkey_ecx.txt
|
||||
- evppkey_mismatch_ecx.txt
|
||||
- ) unless $no_ecx;
|
||||
-push @files, qw(
|
||||
evppkey_ecc.txt
|
||||
evppkey_ecdh.txt
|
||||
evppkey_ecdsa.txt
|
||||
@@ -97,6 +86,7 @@ my @defltfiles = qw(
|
||||
evpciph_cast5.txt
|
||||
evpciph_chacha.txt
|
||||
evpciph_des.txt
|
||||
+ evpciph_des3_common.txt
|
||||
evpciph_idea.txt
|
||||
evpciph_rc2.txt
|
||||
evpciph_rc4.txt
|
||||
@@ -121,13 +111,19 @@ my @defltfiles = qw(
|
||||
evpmd_whirlpool.txt
|
||||
evppbe_scrypt.txt
|
||||
evppbe_pkcs12.txt
|
||||
+ evpkdf_kbkdf_kmac.txt
|
||||
evppkey_kdf_scrypt.txt
|
||||
evppkey_kdf_tls1_prf.txt
|
||||
evppkey_rsa.txt
|
||||
);
|
||||
+push @defltfiles, qw(evppkey_dsa.txt) unless $no_dsa;
|
||||
+push @defltfiles, qw(evppkey_ecx.txt) unless $no_ec;
|
||||
+push @defltfiles, qw(
|
||||
+ evpkdf_x942_des.txt
|
||||
+ evpmac_cmac_des.txt
|
||||
+ ) unless $no_des;
|
||||
push @defltfiles, qw(evppkey_brainpool.txt) unless $no_ec;
|
||||
push @defltfiles, qw(evppkey_ecdsa_rfc6979.txt) unless $no_ec;
|
||||
-push @defltfiles, qw(evppkey_dsa_rfc6979.txt) unless $no_dsa;
|
||||
push @defltfiles, qw(evppkey_sm2.txt) unless $no_sm2;
|
||||
push @defltfiles, qw(evpciph_aes_gcm_siv.txt) unless $no_siv;
|
||||
push @defltfiles, qw(evpciph_aes_siv.txt) unless $no_siv;
|
||||
Index: openssl-3.2.3/test/recipes/30-test_evp_data/evpmac_common.txt
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/30-test_evp_data/evpmac_common.txt
|
||||
+++ openssl-3.2.3/test/recipes/30-test_evp_data/evpmac_common.txt
|
||||
@@ -363,6 +363,7 @@ IV = 7AE8E2CA4EC500012E58495C
|
||||
Input = 68F2E77696CE7AE8E2CA4EC588E541002E58495C08000F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D0007
|
||||
Result = MAC_INIT_ERROR
|
||||
|
||||
+Availablein = default
|
||||
Title = KMAC Tests (From NIST)
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
@@ -373,12 +374,14 @@ Ctrl = xof:0
|
||||
OutputSize = 32
|
||||
BlockSize = 168
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
Custom = "My Tagged Application"
|
||||
Output = 3B1FBA963CD8B0B59E8C1A6D71888B7143651AF8BA0A7070C0979E2811324AA5
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -386,6 +389,7 @@ Custom = "My Tagged Application"
|
||||
Output = 1F5B4E6CCA02209E0DCB5CA635B89A15E271ECC760071DFD805FAA38F9729230
|
||||
Ctrl = size:32
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
@@ -394,12 +398,14 @@ Output = 20C570C31346F703C9AC36C61C03CB6
|
||||
OutputSize = 64
|
||||
BlockSize = 136
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
Custom = ""
|
||||
Output = 75358CF39E41494E949707927CEE0AF20A3FF553904C86B08F21CC414BCFD691589D27CF5E15369CBBFF8B9A4C2EB17800855D0235FF635DA82533EC6B759B69
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -409,12 +415,14 @@ Ctrl = size:64
|
||||
|
||||
Title = KMAC XOF Tests (From NIST)
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
Output = CD83740BBD92CCC8CF032B1481A0F4460E7CA9DD12B08A0C4031178BACD6EC35
|
||||
XOF = 1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
@@ -422,6 +430,7 @@ Custom = "My Tagged Application"
|
||||
Output = 31A44527B4ED9F5C6101D11DE6D26F0620AA5C341DEF41299657FE9DF1A3B16C
|
||||
XOF = 1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -430,6 +439,7 @@ Output = 47026C7CD793084AA0283C253EF6584
|
||||
XOF = 1
|
||||
Ctrl = size:32
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
@@ -437,6 +447,7 @@ Custom = "My Tagged Application"
|
||||
Output = 1755133F1534752AAD0748F2C706FB5C784512CAB835CD15676B16C0C6647FA96FAA7AF634A0BF8FF6DF39374FA00FAD9A39E322A7C92065A64EB1FB0801EB2B
|
||||
XOF = 1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -444,6 +455,7 @@ Custom = ""
|
||||
Output = FF7B171F1E8A2B24683EED37830EE797538BA8DC563F6DA1E667391A75EDC02CA633079F81CE12A25F45615EC89972031D18337331D24CEB8F8CA8E6A19FD98B
|
||||
XOF = 1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -454,6 +466,7 @@ XOF = 1
|
||||
|
||||
Title = KMAC long customisation string (from NIST ACVP)
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 9743DBF93102FAF11227B154B8ACD16CF142671F7AA16C559A393A38B4CEF461ED29A6A328D7379C99718790E38B54CA25E9E831CBEA463EE704D1689F94629AB795DF0C77F756DA743309C0E054596BA2D9CC1768ACF7CD351D9A7EB1ABD0A3
|
||||
Input = BA63AC9C711F143CCE7FF92D0322649D1BE437D805FD225C0A2879A008373EC3BCCDB09971FAD2BCE5F4347AF7E5238EF01A90ED34193D6AFC1D
|
||||
@@ -464,12 +477,14 @@ XOF = 1
|
||||
|
||||
Title = KMAC XOF Tests via ctrl (From NIST)
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
Output = CD83740BBD92CCC8CF032B1481A0F4460E7CA9DD12B08A0C4031178BACD6EC35
|
||||
Ctrl = xof:1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
@@ -477,6 +492,7 @@ Custom = "My Tagged Application"
|
||||
Output = 31A44527B4ED9F5C6101D11DE6D26F0620AA5C341DEF41299657FE9DF1A3B16C
|
||||
Ctrl = xof:1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -485,6 +501,7 @@ Output = 47026C7CD793084AA0283C253EF6584
|
||||
Ctrl = xof:1
|
||||
Ctrl = size:32
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 00010203
|
||||
@@ -492,6 +509,7 @@ Custom = "My Tagged Application"
|
||||
Output = 1755133F1534752AAD0748F2C706FB5C784512CAB835CD15676B16C0C6647FA96FAA7AF634A0BF8FF6DF39374FA00FAD9A39E322A7C92065A64EB1FB0801EB2B
|
||||
Ctrl = xof:1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -499,6 +517,7 @@ Custom = ""
|
||||
Output = FF7B171F1E8A2B24683EED37830EE797538BA8DC563F6DA1E667391A75EDC02CA633079F81CE12A25F45615EC89972031D18337331D24CEB8F8CA8E6A19FD98B
|
||||
Ctrl = xof:1
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -509,6 +528,7 @@ Ctrl = xof:1
|
||||
|
||||
Title = KMAC long customisation string via ctrl (from NIST ACVP)
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 9743DBF93102FAF11227B154B8ACD16CF142671F7AA16C559A393A38B4CEF461ED29A6A328D7379C99718790E38B54CA25E9E831CBEA463EE704D1689F94629AB795DF0C77F756DA743309C0E054596BA2D9CC1768ACF7CD351D9A7EB1ABD0A3
|
||||
Input = BA63AC9C711F143CCE7FF92D0322649D1BE437D805FD225C0A2879A008373EC3BCCDB09971FAD2BCE5F4347AF7E5238EF01A90ED34193D6AFC1D
|
||||
@@ -519,6 +539,7 @@ Ctrl = xof:1
|
||||
|
||||
Title = KMAC long customisation string negative test
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC128
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
@@ -527,6 +548,7 @@ Result = MAC_INIT_ERROR
|
||||
|
||||
Title = KMAC output is too large
|
||||
|
||||
+Availablein = default
|
||||
MAC = KMAC256
|
||||
Key = 404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F
|
||||
Input = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7
|
||||
Index: openssl-3.2.3/test/recipes/80-test_cms.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/80-test_cms.t
|
||||
+++ openssl-3.2.3/test/recipes/80-test_cms.t
|
||||
@@ -96,7 +96,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed content DER format, DSA key",
|
||||
+ [ "signed content DER format, DSA key, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER", "-nodetach",
|
||||
"-signer", catfile($smdir, "smdsa1.pem"), "-out", "{output}.cms" ],
|
||||
[ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "DER",
|
||||
@@ -104,7 +104,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed detached content DER format, DSA key",
|
||||
+ [ "signed detached content DER format, DSA key, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
|
||||
"-signer", catfile($smdir, "smdsa1.pem"), "-out", "{output}.cms" ],
|
||||
[ "{cmd2}", @prov, "-verify", "-in", "{output}.cms", "-inform", "DER",
|
||||
@@ -113,7 +113,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed detached content DER format, add RSA signer (with DSA existing)",
|
||||
+ [ "signed detached content DER format, add RSA signer (with DSA existing), no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
|
||||
"-signer", catfile($smdir, "smdsa1.pem"), "-out", "{output}.cms" ],
|
||||
[ "{cmd1}", @prov, "-resign", "-in", "{output}.cms", "-inform", "DER", "-outform", "DER",
|
||||
@@ -124,7 +124,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed content test streaming BER format, DSA key",
|
||||
+ [ "signed content test streaming BER format, DSA key, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
|
||||
"-nodetach", "-stream",
|
||||
"-signer", catfile($smdir, "smdsa1.pem"), "-out", "{output}.cms" ],
|
||||
@@ -133,7 +133,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed content test streaming BER format, 2 DSA and 2 RSA keys",
|
||||
+ [ "signed content test streaming BER format, 2 DSA and 2 RSA keys, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
|
||||
"-nodetach", "-stream",
|
||||
"-signer", $smrsa1,
|
||||
@@ -146,7 +146,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed content test streaming BER format, 2 DSA and 2 RSA keys, no attributes",
|
||||
+ [ "signed content test streaming BER format, 2 DSA and 2 RSA keys, no attributes, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
|
||||
"-noattr", "-nodetach", "-stream",
|
||||
"-signer", $smrsa1,
|
||||
@@ -176,7 +176,7 @@ my @smime_pkcs7_tests = (
|
||||
\&zero_compare
|
||||
],
|
||||
|
||||
- [ "signed content test streaming S/MIME format, 2 DSA and 2 RSA keys",
|
||||
+ [ "signed content test streaming S/MIME format, 2 DSA and 2 RSA keys, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-nodetach",
|
||||
"-signer", $smrsa1,
|
||||
"-signer", catfile($smdir, "smrsa2.pem"),
|
||||
@@ -188,7 +188,7 @@ my @smime_pkcs7_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed content test streaming multipart S/MIME format, 2 DSA and 2 RSA keys",
|
||||
+ [ "signed content test streaming multipart S/MIME format, 2 DSA and 2 RSA keys, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont,
|
||||
"-signer", $smrsa1,
|
||||
"-signer", catfile($smdir, "smrsa2.pem"),
|
||||
@@ -250,7 +250,7 @@ my @smime_pkcs7_tests = (
|
||||
|
||||
my @smime_cms_tests = (
|
||||
|
||||
- [ "signed content test streaming BER format, 2 DSA and 2 RSA keys, keyid",
|
||||
+ [ "signed content test streaming BER format, 2 DSA and 2 RSA keys, keyid, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "DER",
|
||||
"-nodetach", "-keyid",
|
||||
"-signer", $smrsa1,
|
||||
@@ -263,7 +263,7 @@ my @smime_cms_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "signed content test streaming PEM format, 2 DSA and 2 RSA keys",
|
||||
+ [ "signed content test streaming PEM format, 2 DSA and 2 RSA keys, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-sign", "-in", $smcont, "-outform", "PEM", "-nodetach",
|
||||
"-signer", $smrsa1,
|
||||
"-signer", catfile($smdir, "smrsa2.pem"),
|
||||
@@ -373,7 +373,7 @@ my @smime_cms_tests = (
|
||||
\&final_compare
|
||||
],
|
||||
|
||||
- [ "encrypted content test streaming PEM format, triple DES key",
|
||||
+ [ "encrypted content test streaming PEM format, triple DES key, no SUSE FIPS",
|
||||
[ "{cmd1}", @prov, "-EncryptedData_encrypt", "-in", $smcont, "-outform", "PEM",
|
||||
"-des3", "-secretkey", "000102030405060708090A0B0C0D0E0F1011121314151617",
|
||||
"-stream", "-out", "{output}.cms" ],
|
||||
Index: openssl-3.2.3/test/recipes/80-test_ssl_old.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/80-test_ssl_old.t
|
||||
+++ openssl-3.2.3/test/recipes/80-test_ssl_old.t
|
||||
@@ -436,7 +436,7 @@ sub testssl {
|
||||
my @exkeys = ();
|
||||
my $ciphers = '-PSK:-SRP:@SECLEVEL=0';
|
||||
|
||||
- if (!$no_dsa) {
|
||||
+ if (!$no_dsa && $provider ne "fips") {
|
||||
push @exkeys, "-s_cert", "certD.ss", "-s_key", $Dkey;
|
||||
}
|
||||
|
@@ -1,113 +0,0 @@
|
||||
From a325a23bc83f4efd60130001c417ca5b96bdbff1 Mon Sep 17 00:00:00 2001
|
||||
From: Clemens Lang <cllang@redhat.com>
|
||||
Date: Thu, 17 Nov 2022 19:33:02 +0100
|
||||
Subject: [PATCH] signature: Add indicator for PSS salt length
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
FIPS 186-4 section 5 "The RSA Digital Signature Algorithm", subsection
|
||||
5.5 "PKCS #1" says: "For RSASSA-PSS [...] the length (in bytes) of the
|
||||
salt (sLen) shall satisfy 0 <= sLen <= hLen, where hLen is the length of
|
||||
the hash function output block (in bytes)."
|
||||
|
||||
It is not exactly clear from this text whether hLen refers to the
|
||||
message digest or the hash function used for the mask generation
|
||||
function MGF1. PKCS#1 v2.1 suggests it is the former:
|
||||
|
||||
| Typical salt lengths in octets are hLen (the length of the output of
|
||||
| the hash function Hash) and 0. In both cases the security of
|
||||
| RSASSA-PSS can be closely related to the hardness of inverting RSAVP1.
|
||||
| Bellare and Rogaway [4] give a tight lower bound for the security of
|
||||
| the original RSA-PSS scheme, which corresponds roughly to the former
|
||||
| case, while Coron [12] gives a lower bound for the related Full Domain
|
||||
| Hashing scheme, which corresponds roughly to the latter case. In [13]
|
||||
| Coron provides a general treatment with various salt lengths ranging
|
||||
| from 0 to hLen; see [27] for discussion. See also [31], which adapts
|
||||
| the security proofs in [4][13] to address the differences between the
|
||||
| original and the present version of RSA-PSS as listed in Note 1 above.
|
||||
|
||||
Since OpenSSL defaults to creating signatures with the maximum salt
|
||||
length, blocking the use of longer salts would probably lead to
|
||||
significant problems in practice. Instead, introduce an explicit
|
||||
indicator that can be obtained from the EVP_PKEY_CTX object using
|
||||
EVP_PKEY_CTX_get_params() with the
|
||||
OSSL_SIGNATURE_PARAM_SUSE_FIPS_INDICATOR
|
||||
parameter.
|
||||
|
||||
We also add indicator for RSA_NO_PADDING here to avoid patch-over-patch.
|
||||
Dmitry Belyavskiy <dbelyavs@redhat.com>
|
||||
|
||||
Signed-off-by: Clemens Lang <cllang@redhat.com>
|
||||
---
|
||||
include/openssl/evp.h | 4 ++++
|
||||
providers/implementations/signature/rsa_sig.c | 21 +++++++++++++++++
|
||||
util/perl/OpenSSL/paramnames.pm | 23 ++++++++++---------
|
||||
3 files changed, 37 insertions(+), 11 deletions(-)
|
||||
|
||||
Index: openssl-3.2.3/include/openssl/evp.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/include/openssl/evp.h
|
||||
+++ openssl-3.2.3/include/openssl/evp.h
|
||||
@@ -804,6 +804,10 @@ __owur int EVP_CipherFinal(EVP_CIPHER_CT
|
||||
__owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm,
|
||||
int *outl);
|
||||
|
||||
+# define EVP_SIGNATURE_SUSE_FIPS_INDICATOR_UNDETERMINED 0
|
||||
+# define EVP_SIGNATURE_SUSE_FIPS_INDICATOR_APPROVED 1
|
||||
+# define EVP_SIGNATURE_SUSE_FIPS_INDICATOR_NOT_APPROVED 2
|
||||
+
|
||||
__owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s,
|
||||
EVP_PKEY *pkey);
|
||||
__owur int EVP_SignFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s,
|
||||
Index: openssl-3.2.3/providers/implementations/signature/rsa_sig.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/signature/rsa_sig.c
|
||||
+++ openssl-3.2.3/providers/implementations/signature/rsa_sig.c
|
||||
@@ -1185,6 +1185,24 @@ static int rsa_get_ctx_params(void *vprs
|
||||
}
|
||||
}
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
+ p = OSSL_PARAM_locate(params, OSSL_SIGNATURE_PARAM_SUSE_FIPS_INDICATOR);
|
||||
+ if (p != NULL) {
|
||||
+ int fips_indicator = EVP_SIGNATURE_SUSE_FIPS_INDICATOR_APPROVED;
|
||||
+ if (prsactx->pad_mode == RSA_PKCS1_PSS_PADDING) {
|
||||
+ if (prsactx->md == NULL) {
|
||||
+ fips_indicator = EVP_SIGNATURE_SUSE_FIPS_INDICATOR_UNDETERMINED;
|
||||
+ } else if (rsa_pss_compute_saltlen(prsactx) > EVP_MD_get_size(prsactx->md)) {
|
||||
+ fips_indicator = EVP_SIGNATURE_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+ }
|
||||
+ } else if (prsactx->pad_mode == RSA_NO_PADDING) {
|
||||
+ if (prsactx->md == NULL) /* Should always be the case */
|
||||
+ fips_indicator = EVP_SIGNATURE_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
+ }
|
||||
+ return OSSL_PARAM_set_int(p, fips_indicator);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1194,6 +1212,9 @@ static const OSSL_PARAM known_gettable_c
|
||||
OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_DIGEST, NULL, 0),
|
||||
OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_MGF1_DIGEST, NULL, 0),
|
||||
OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PSS_SALTLEN, NULL, 0),
|
||||
+#ifdef FIPS_MODULE
|
||||
+ OSSL_PARAM_int(OSSL_SIGNATURE_PARAM_SUSE_FIPS_INDICATOR, NULL),
|
||||
+#endif
|
||||
OSSL_PARAM_END
|
||||
};
|
||||
|
||||
Index: openssl-3.2.3/util/perl/OpenSSL/paramnames.pm
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/util/perl/OpenSSL/paramnames.pm
|
||||
+++ openssl-3.2.3/util/perl/OpenSSL/paramnames.pm
|
||||
@@ -386,6 +386,7 @@ my %params = (
|
||||
'SIGNATURE_PARAM_MGF1_PROPERTIES' => '*PKEY_PARAM_MGF1_PROPERTIES',
|
||||
'SIGNATURE_PARAM_DIGEST_SIZE' => '*PKEY_PARAM_DIGEST_SIZE',
|
||||
'SIGNATURE_PARAM_NONCE_TYPE' => "nonce-type",
|
||||
+ 'SIGNATURE_PARAM_SUSE_FIPS_INDICATOR' => "suse-fips-indicator",
|
||||
'SIGNATURE_PARAM_INSTANCE' => "instance",
|
||||
'SIGNATURE_PARAM_CONTEXT_STRING' => "context-string",
|
||||
|
@@ -1,20 +1,21 @@
|
||||
From 2c110cf5551a3869514e697d8dc06682b62ca57d Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Belyavskiy <dbelyavs@redhat.com>
|
||||
Date: Mon, 21 Aug 2023 11:59:02 +0200
|
||||
Subject: [PATCH 16/48] 0032-Force-fips.patch
|
||||
From 22c5e2dc99406629b2c37c1ddf1151d6fb8ad7d1 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Wed, 6 Mar 2024 19:17:15 +0100
|
||||
Subject: [PATCH 22/53] FIPS: Force fips provider on
|
||||
|
||||
Patch-name: 0032-Force-fips.patch
|
||||
Patch-id: 32
|
||||
Patch-status: |
|
||||
# We load FIPS provider and set FIPS properties implicitly
|
||||
# # We load FIPS provider and set FIPS properties implicitly
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
---
|
||||
crypto/provider_conf.c | 28 +++++++++++++++++++++++++++-
|
||||
1 file changed, 27 insertions(+), 1 deletion(-)
|
||||
crypto/provider_conf.c | 30 +++++++++++++++++++++++++++++-
|
||||
1 file changed, 29 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: openssl-3.1.7/crypto/provider_conf.c
|
||||
===================================================================
|
||||
--- openssl-3.1.7.orig/crypto/provider_conf.c
|
||||
+++ openssl-3.1.7/crypto/provider_conf.c
|
||||
diff --git a/crypto/provider_conf.c b/crypto/provider_conf.c
|
||||
index 5ec50f97e4..a2a9786e1c 100644
|
||||
--- a/crypto/provider_conf.c
|
||||
+++ b/crypto/provider_conf.c
|
||||
@@ -10,6 +10,8 @@
|
||||
#include <string.h>
|
||||
#include <openssl/trace.h>
|
||||
@@ -24,7 +25,7 @@ Index: openssl-3.1.7/crypto/provider_conf.c
|
||||
#include <openssl/conf.h>
|
||||
#include <openssl/safestack.h>
|
||||
#include <openssl/provider.h>
|
||||
@@ -237,7 +239,7 @@ static int provider_conf_activate(OSSL_L
|
||||
@@ -237,7 +239,7 @@ static int provider_conf_activate(OSSL_LIB_CTX *libctx, const char *name,
|
||||
if (path != NULL)
|
||||
ossl_provider_set_module_path(prov, path);
|
||||
|
||||
@@ -33,7 +34,7 @@ Index: openssl-3.1.7/crypto/provider_conf.c
|
||||
|
||||
if (ok == 1) {
|
||||
if (!ossl_provider_activate(prov, 1, 0)) {
|
||||
@@ -266,6 +268,8 @@ static int provider_conf_activate(OSSL_L
|
||||
@@ -266,6 +268,8 @@ static int provider_conf_activate(OSSL_LIB_CTX *libctx, const char *name,
|
||||
|
||||
if (ok <= 0)
|
||||
ossl_provider_free(prov);
|
||||
@@ -42,7 +43,7 @@ Index: openssl-3.1.7/crypto/provider_conf.c
|
||||
}
|
||||
CRYPTO_THREAD_unlock(pcgbl->lock);
|
||||
|
||||
@@ -383,6 +387,32 @@ static int provider_conf_init(CONF_IMODU
|
||||
@@ -420,6 +424,30 @@ static int provider_conf_init(CONF_IMODULE *md, const CONF *cnf)
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -54,6 +55,7 @@ Index: openssl-3.1.7/crypto/provider_conf.c
|
||||
+ CONF *fips_conf = NCONF_new_ex(libctx, NCONF_default());
|
||||
+ if (NCONF_load(fips_conf, FIPS_LOCAL_CONF, NULL) <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (provider_conf_load(libctx, "fips", "fips_sect", fips_conf) != 1) {
|
||||
+ NCONF_free(fips_conf);
|
||||
+ return 0;
|
||||
@@ -63,9 +65,6 @@ Index: openssl-3.1.7/crypto/provider_conf.c
|
||||
+ if (provider_conf_activate(libctx, "fips", NULL, NULL, 0, NULL) != 1)
|
||||
+ return 0;
|
||||
+ }
|
||||
+ /* provider_conf_load can return 1 even when the test is failed so check explicitly */
|
||||
+ if (OSSL_PROVIDER_available(libctx, "fips") != 1)
|
||||
+ return 0;
|
||||
+ if (provider_conf_activate(libctx, "base", NULL, NULL, 0, NULL) != 1)
|
||||
+ return 0;
|
||||
+ if (EVP_default_properties_enable_fips(libctx, 1) != 1)
|
||||
@@ -75,3 +74,6 @@ Index: openssl-3.1.7/crypto/provider_conf.c
|
||||
return 1;
|
||||
}
|
||||
|
||||
--
|
||||
2.49.0
|
||||
|
||||
|
@@ -1,267 +0,0 @@
|
||||
From 4a275f852b61238161c053774736dc07b3ade200 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Belyavskiy <dbelyavs@redhat.com>
|
||||
Date: Mon, 21 Aug 2023 11:46:40 +0200
|
||||
Subject: [PATCH 11/48] 0011-Remove-EC-curves.patch
|
||||
|
||||
Patch-name: 0011-Remove-EC-curves.patch
|
||||
Patch-id: 11
|
||||
Patch-status: |
|
||||
# remove unsupported EC curves
|
||||
---
|
||||
apps/speed.c | 8 +---
|
||||
crypto/evp/ec_support.c | 87 ------------------------------------
|
||||
test/acvp_test.inc | 9 ----
|
||||
test/ecdsatest.h | 17 -------
|
||||
test/recipes/15-test_genec.t | 27 -----------
|
||||
5 files changed, 1 insertion(+), 147 deletions(-)
|
||||
|
||||
Index: openssl-3.2.3/apps/speed.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/apps/speed.c
|
||||
+++ openssl-3.2.3/apps/speed.c
|
||||
@@ -401,7 +401,7 @@ static double ffdh_results[FFDH_NUM][1];
|
||||
#endif /* OPENSSL_NO_DH */
|
||||
|
||||
enum ec_curves_t {
|
||||
- R_EC_P160, R_EC_P192, R_EC_P224, R_EC_P256, R_EC_P384, R_EC_P521,
|
||||
+ R_EC_P224, R_EC_P256, R_EC_P384, R_EC_P521,
|
||||
#ifndef OPENSSL_NO_EC2M
|
||||
R_EC_K163, R_EC_K233, R_EC_K283, R_EC_K409, R_EC_K571,
|
||||
R_EC_B163, R_EC_B233, R_EC_B283, R_EC_B409, R_EC_B571,
|
||||
@@ -411,8 +411,6 @@ enum ec_curves_t {
|
||||
};
|
||||
/* list of ecdsa curves */
|
||||
static const OPT_PAIR ecdsa_choices[ECDSA_NUM] = {
|
||||
- {"ecdsap160", R_EC_P160},
|
||||
- {"ecdsap192", R_EC_P192},
|
||||
{"ecdsap224", R_EC_P224},
|
||||
{"ecdsap256", R_EC_P256},
|
||||
{"ecdsap384", R_EC_P384},
|
||||
@@ -445,8 +443,6 @@ enum {
|
||||
};
|
||||
/* list of ecdh curves, extension of |ecdsa_choices| list above */
|
||||
static const OPT_PAIR ecdh_choices[EC_NUM] = {
|
||||
- {"ecdhp160", R_EC_P160},
|
||||
- {"ecdhp192", R_EC_P192},
|
||||
{"ecdhp224", R_EC_P224},
|
||||
{"ecdhp256", R_EC_P256},
|
||||
{"ecdhp384", R_EC_P384},
|
||||
@@ -1781,8 +1777,6 @@ int speed_main(int argc, char **argv)
|
||||
*/
|
||||
static const EC_CURVE ec_curves[EC_NUM] = {
|
||||
/* Prime Curves */
|
||||
- {"secp160r1", NID_secp160r1, 160},
|
||||
- {"nistp192", NID_X9_62_prime192v1, 192},
|
||||
{"nistp224", NID_secp224r1, 224},
|
||||
{"nistp256", NID_X9_62_prime256v1, 256},
|
||||
{"nistp384", NID_secp384r1, 384},
|
||||
Index: openssl-3.2.3/crypto/evp/ec_support.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/crypto/evp/ec_support.c
|
||||
+++ openssl-3.2.3/crypto/evp/ec_support.c
|
||||
@@ -20,89 +20,15 @@ typedef struct ec_name2nid_st {
|
||||
static const EC_NAME2NID curve_list[] = {
|
||||
/* prime field curves */
|
||||
/* secg curves */
|
||||
- {"secp112r1", NID_secp112r1 },
|
||||
- {"secp112r2", NID_secp112r2 },
|
||||
- {"secp128r1", NID_secp128r1 },
|
||||
- {"secp128r2", NID_secp128r2 },
|
||||
- {"secp160k1", NID_secp160k1 },
|
||||
- {"secp160r1", NID_secp160r1 },
|
||||
- {"secp160r2", NID_secp160r2 },
|
||||
- {"secp192k1", NID_secp192k1 },
|
||||
- {"secp224k1", NID_secp224k1 },
|
||||
{"secp224r1", NID_secp224r1 },
|
||||
{"secp256k1", NID_secp256k1 },
|
||||
{"secp384r1", NID_secp384r1 },
|
||||
{"secp521r1", NID_secp521r1 },
|
||||
/* X9.62 curves */
|
||||
- {"prime192v1", NID_X9_62_prime192v1 },
|
||||
- {"prime192v2", NID_X9_62_prime192v2 },
|
||||
- {"prime192v3", NID_X9_62_prime192v3 },
|
||||
- {"prime239v1", NID_X9_62_prime239v1 },
|
||||
- {"prime239v2", NID_X9_62_prime239v2 },
|
||||
- {"prime239v3", NID_X9_62_prime239v3 },
|
||||
{"prime256v1", NID_X9_62_prime256v1 },
|
||||
/* characteristic two field curves */
|
||||
/* NIST/SECG curves */
|
||||
- {"sect113r1", NID_sect113r1 },
|
||||
- {"sect113r2", NID_sect113r2 },
|
||||
- {"sect131r1", NID_sect131r1 },
|
||||
- {"sect131r2", NID_sect131r2 },
|
||||
- {"sect163k1", NID_sect163k1 },
|
||||
- {"sect163r1", NID_sect163r1 },
|
||||
- {"sect163r2", NID_sect163r2 },
|
||||
- {"sect193r1", NID_sect193r1 },
|
||||
- {"sect193r2", NID_sect193r2 },
|
||||
- {"sect233k1", NID_sect233k1 },
|
||||
- {"sect233r1", NID_sect233r1 },
|
||||
- {"sect239k1", NID_sect239k1 },
|
||||
- {"sect283k1", NID_sect283k1 },
|
||||
- {"sect283r1", NID_sect283r1 },
|
||||
- {"sect409k1", NID_sect409k1 },
|
||||
- {"sect409r1", NID_sect409r1 },
|
||||
- {"sect571k1", NID_sect571k1 },
|
||||
- {"sect571r1", NID_sect571r1 },
|
||||
- /* X9.62 curves */
|
||||
- {"c2pnb163v1", NID_X9_62_c2pnb163v1 },
|
||||
- {"c2pnb163v2", NID_X9_62_c2pnb163v2 },
|
||||
- {"c2pnb163v3", NID_X9_62_c2pnb163v3 },
|
||||
- {"c2pnb176v1", NID_X9_62_c2pnb176v1 },
|
||||
- {"c2tnb191v1", NID_X9_62_c2tnb191v1 },
|
||||
- {"c2tnb191v2", NID_X9_62_c2tnb191v2 },
|
||||
- {"c2tnb191v3", NID_X9_62_c2tnb191v3 },
|
||||
- {"c2pnb208w1", NID_X9_62_c2pnb208w1 },
|
||||
- {"c2tnb239v1", NID_X9_62_c2tnb239v1 },
|
||||
- {"c2tnb239v2", NID_X9_62_c2tnb239v2 },
|
||||
- {"c2tnb239v3", NID_X9_62_c2tnb239v3 },
|
||||
- {"c2pnb272w1", NID_X9_62_c2pnb272w1 },
|
||||
- {"c2pnb304w1", NID_X9_62_c2pnb304w1 },
|
||||
- {"c2tnb359v1", NID_X9_62_c2tnb359v1 },
|
||||
- {"c2pnb368w1", NID_X9_62_c2pnb368w1 },
|
||||
- {"c2tnb431r1", NID_X9_62_c2tnb431r1 },
|
||||
- /*
|
||||
- * the WAP/WTLS curves [unlike SECG, spec has its own OIDs for curves
|
||||
- * from X9.62]
|
||||
- */
|
||||
- {"wap-wsg-idm-ecid-wtls1", NID_wap_wsg_idm_ecid_wtls1 },
|
||||
- {"wap-wsg-idm-ecid-wtls3", NID_wap_wsg_idm_ecid_wtls3 },
|
||||
- {"wap-wsg-idm-ecid-wtls4", NID_wap_wsg_idm_ecid_wtls4 },
|
||||
- {"wap-wsg-idm-ecid-wtls5", NID_wap_wsg_idm_ecid_wtls5 },
|
||||
- {"wap-wsg-idm-ecid-wtls6", NID_wap_wsg_idm_ecid_wtls6 },
|
||||
- {"wap-wsg-idm-ecid-wtls7", NID_wap_wsg_idm_ecid_wtls7 },
|
||||
- {"wap-wsg-idm-ecid-wtls8", NID_wap_wsg_idm_ecid_wtls8 },
|
||||
- {"wap-wsg-idm-ecid-wtls9", NID_wap_wsg_idm_ecid_wtls9 },
|
||||
- {"wap-wsg-idm-ecid-wtls10", NID_wap_wsg_idm_ecid_wtls10 },
|
||||
- {"wap-wsg-idm-ecid-wtls11", NID_wap_wsg_idm_ecid_wtls11 },
|
||||
- {"wap-wsg-idm-ecid-wtls12", NID_wap_wsg_idm_ecid_wtls12 },
|
||||
- /* IPSec curves */
|
||||
- {"Oakley-EC2N-3", NID_ipsec3 },
|
||||
- {"Oakley-EC2N-4", NID_ipsec4 },
|
||||
/* brainpool curves */
|
||||
- {"brainpoolP160r1", NID_brainpoolP160r1 },
|
||||
- {"brainpoolP160t1", NID_brainpoolP160t1 },
|
||||
- {"brainpoolP192r1", NID_brainpoolP192r1 },
|
||||
- {"brainpoolP192t1", NID_brainpoolP192t1 },
|
||||
- {"brainpoolP224r1", NID_brainpoolP224r1 },
|
||||
- {"brainpoolP224t1", NID_brainpoolP224t1 },
|
||||
{"brainpoolP256r1", NID_brainpoolP256r1 },
|
||||
{"brainpoolP256t1", NID_brainpoolP256t1 },
|
||||
{"brainpoolP320r1", NID_brainpoolP320r1 },
|
||||
@@ -150,17 +76,6 @@ int ossl_ec_curve_name2nid(const char *n
|
||||
/* Functions to translate between common NIST curve names and NIDs */
|
||||
|
||||
static const EC_NAME2NID nist_curves[] = {
|
||||
- {"B-163", NID_sect163r2},
|
||||
- {"B-233", NID_sect233r1},
|
||||
- {"B-283", NID_sect283r1},
|
||||
- {"B-409", NID_sect409r1},
|
||||
- {"B-571", NID_sect571r1},
|
||||
- {"K-163", NID_sect163k1},
|
||||
- {"K-233", NID_sect233k1},
|
||||
- {"K-283", NID_sect283k1},
|
||||
- {"K-409", NID_sect409k1},
|
||||
- {"K-571", NID_sect571k1},
|
||||
- {"P-192", NID_X9_62_prime192v1},
|
||||
{"P-224", NID_secp224r1},
|
||||
{"P-256", NID_X9_62_prime256v1},
|
||||
{"P-384", NID_secp384r1},
|
||||
Index: openssl-3.2.3/test/acvp_test.inc
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/acvp_test.inc
|
||||
+++ openssl-3.2.3/test/acvp_test.inc
|
||||
@@ -212,15 +212,6 @@ static const unsigned char ecdsa_sigver_
|
||||
};
|
||||
static const struct ecdsa_sigver_st ecdsa_sigver_data[] = {
|
||||
{
|
||||
- "SHA-1",
|
||||
- "P-192",
|
||||
- ITM(ecdsa_sigver_msg0),
|
||||
- ITM(ecdsa_sigver_pub0),
|
||||
- ITM(ecdsa_sigver_r0),
|
||||
- ITM(ecdsa_sigver_s0),
|
||||
- PASS,
|
||||
- },
|
||||
- {
|
||||
"SHA2-512",
|
||||
"P-521",
|
||||
ITM(ecdsa_sigver_msg1),
|
||||
Index: openssl-3.2.3/test/ecdsatest.h
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/ecdsatest.h
|
||||
+++ openssl-3.2.3/test/ecdsatest.h
|
||||
@@ -32,23 +32,6 @@ typedef struct {
|
||||
} ecdsa_cavs_kat_t;
|
||||
|
||||
static const ecdsa_cavs_kat_t ecdsa_cavs_kats[] = {
|
||||
- /* prime KATs from X9.62 */
|
||||
- {NID_X9_62_prime192v1, NID_sha1,
|
||||
- "616263", /* "abc" */
|
||||
- "1a8d598fc15bf0fd89030b5cb1111aeb92ae8baf5ea475fb",
|
||||
- "0462b12d60690cdcf330babab6e69763b471f994dd702d16a563bf5ec08069705ffff65e"
|
||||
- "5ca5c0d69716dfcb3474373902",
|
||||
- "fa6de29746bbeb7f8bb1e761f85f7dfb2983169d82fa2f4e",
|
||||
- "885052380ff147b734c330c43d39b2c4a89f29b0f749fead",
|
||||
- "e9ecc78106def82bf1070cf1d4d804c3cb390046951df686"},
|
||||
- {NID_X9_62_prime239v1, NID_sha1,
|
||||
- "616263", /* "abc" */
|
||||
- "7ef7c6fabefffdea864206e80b0b08a9331ed93e698561b64ca0f7777f3d",
|
||||
- "045b6dc53bc61a2548ffb0f671472de6c9521a9d2d2534e65abfcbd5fe0c707fd9f1ed2e"
|
||||
- "65f09f6ce0893baf5e8e31e6ae82ea8c3592335be906d38dee",
|
||||
- "656c7196bf87dcc5d1f1020906df2782360d36b2de7a17ece37d503784af",
|
||||
- "2cb7f36803ebb9c427c58d8265f11fc5084747133078fc279de874fbecb0",
|
||||
- "2eeae988104e9c2234a3c2beb1f53bfa5dc11ff36a875d1e3ccb1f7e45cf"},
|
||||
/* prime KATs from NIST CAVP */
|
||||
{NID_secp224r1, NID_sha224,
|
||||
"699325d6fc8fbbb4981a6ded3c3a54ad2e4e3db8a5669201912064c64e700c139248cdc1"
|
||||
Index: openssl-3.2.3/test/recipes/15-test_genec.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/15-test_genec.t
|
||||
+++ openssl-3.2.3/test/recipes/15-test_genec.t
|
||||
@@ -41,37 +41,11 @@ plan skip_all => "This test is unsupport
|
||||
if disabled("ec");
|
||||
|
||||
my @prime_curves = qw(
|
||||
- secp112r1
|
||||
- secp112r2
|
||||
- secp128r1
|
||||
- secp128r2
|
||||
- secp160k1
|
||||
- secp160r1
|
||||
- secp160r2
|
||||
- secp192k1
|
||||
- secp224k1
|
||||
secp224r1
|
||||
secp256k1
|
||||
secp384r1
|
||||
secp521r1
|
||||
- prime192v1
|
||||
- prime192v2
|
||||
- prime192v3
|
||||
- prime239v1
|
||||
- prime239v2
|
||||
- prime239v3
|
||||
prime256v1
|
||||
- wap-wsg-idm-ecid-wtls6
|
||||
- wap-wsg-idm-ecid-wtls7
|
||||
- wap-wsg-idm-ecid-wtls8
|
||||
- wap-wsg-idm-ecid-wtls9
|
||||
- wap-wsg-idm-ecid-wtls12
|
||||
- brainpoolP160r1
|
||||
- brainpoolP160t1
|
||||
- brainpoolP192r1
|
||||
- brainpoolP192t1
|
||||
- brainpoolP224r1
|
||||
- brainpoolP224t1
|
||||
brainpoolP256r1
|
||||
brainpoolP256t1
|
||||
brainpoolP320r1
|
||||
@@ -136,7 +110,6 @@ push(@other_curves, 'SM2')
|
||||
if !disabled("sm2");
|
||||
|
||||
my @curve_aliases = qw(
|
||||
- P-192
|
||||
P-224
|
||||
P-256
|
||||
P-384
|
@@ -1,171 +0,0 @@
|
||||
Subject: [PATCH] Revert "Improve FIPS RSA keygen performance."
|
||||
|
||||
This reverts commit 3431dd4b3ee7933822586aab62972de4d8c0e9e5.
|
||||
---
|
||||
crypto/bn/bn_prime.c | 11 --------
|
||||
crypto/bn/bn_rsa_fips186_4.c | 49 ++++++------------------------------
|
||||
include/crypto/bn.h | 2 --
|
||||
3 files changed, 8 insertions(+), 54 deletions(-)
|
||||
|
||||
diff --git a/crypto/bn/bn_prime.c b/crypto/bn/bn_prime.c
|
||||
index 79776f1ce5..ddd31a0252 100644
|
||||
--- a/crypto/bn/bn_prime.c
|
||||
+++ b/crypto/bn/bn_prime.c
|
||||
@@ -252,17 +252,6 @@ int ossl_bn_check_prime(const BIGNUM *w, int checks, BN_CTX *ctx,
|
||||
return bn_is_prime_int(w, checks, ctx, do_trial_division, cb);
|
||||
}
|
||||
|
||||
-/*
|
||||
- * Use this only for key generation.
|
||||
- * It always uses trial division. The number of checks
|
||||
- * (MR rounds) passed in is used without being clamped to a minimum value.
|
||||
- */
|
||||
-int ossl_bn_check_generated_prime(const BIGNUM *w, int checks, BN_CTX *ctx,
|
||||
- BN_GENCB *cb)
|
||||
-{
|
||||
- return bn_is_prime_int(w, checks, ctx, 1, cb);
|
||||
-}
|
||||
-
|
||||
int BN_check_prime(const BIGNUM *p, BN_CTX *ctx, BN_GENCB *cb)
|
||||
{
|
||||
return ossl_bn_check_prime(p, 0, ctx, 1, cb);
|
||||
diff --git a/crypto/bn/bn_rsa_fips186_4.c b/crypto/bn/bn_rsa_fips186_4.c
|
||||
index e9f0d4038c..8a7b2ecf2f 100644
|
||||
--- a/crypto/bn/bn_rsa_fips186_4.c
|
||||
+++ b/crypto/bn/bn_rsa_fips186_4.c
|
||||
@@ -48,34 +48,6 @@ const BIGNUM ossl_bn_inv_sqrt_2 = {
|
||||
BN_FLG_STATIC_DATA
|
||||
};
|
||||
|
||||
-/*
|
||||
- * Refer to FIPS 186-5 Table B.1 for minimum rounds of Miller Rabin
|
||||
- * required for generation of RSA aux primes (p1, p2, q1 and q2).
|
||||
- */
|
||||
-static int bn_rsa_fips186_5_aux_prime_MR_rounds(int nbits)
|
||||
-{
|
||||
- if (nbits >= 4096)
|
||||
- return 44;
|
||||
- if (nbits >= 3072)
|
||||
- return 41;
|
||||
- if (nbits >= 2048)
|
||||
- return 38;
|
||||
- return 0; /* Error */
|
||||
-}
|
||||
-
|
||||
-/*
|
||||
- * Refer to FIPS 186-5 Table B.1 for minimum rounds of Miller Rabin
|
||||
- * required for generation of RSA primes (p and q)
|
||||
- */
|
||||
-static int bn_rsa_fips186_5_prime_MR_rounds(int nbits)
|
||||
-{
|
||||
- if (nbits >= 3072)
|
||||
- return 4;
|
||||
- if (nbits >= 2048)
|
||||
- return 5;
|
||||
- return 0; /* Error */
|
||||
-}
|
||||
-
|
||||
/*
|
||||
* FIPS 186-5 Table A.1. "Min length of auxiliary primes p1, p2, q1, q2".
|
||||
* (FIPS 186-5 has an entry for >= 4096 bits).
|
||||
@@ -125,13 +97,11 @@ static int bn_rsa_fips186_5_aux_prime_max_sum_size_for_prob_primes(int nbits)
|
||||
* Xp1 The passed in starting point to find a probably prime.
|
||||
* p1 The returned probable prime (first odd integer >= Xp1)
|
||||
* ctx A BN_CTX object.
|
||||
- * rounds The number of Miller Rabin rounds
|
||||
* cb An optional BIGNUM callback.
|
||||
* Returns: 1 on success otherwise it returns 0.
|
||||
*/
|
||||
static int bn_rsa_fips186_4_find_aux_prob_prime(const BIGNUM *Xp1,
|
||||
BIGNUM *p1, BN_CTX *ctx,
|
||||
- int rounds,
|
||||
BN_GENCB *cb)
|
||||
{
|
||||
int ret = 0;
|
||||
@@ -147,7 +117,7 @@ static int bn_rsa_fips186_4_find_aux_prob_prime(const BIGNUM *Xp1,
|
||||
i++;
|
||||
BN_GENCB_call(cb, 0, i);
|
||||
/* MR test with trial division */
|
||||
- tmp = ossl_bn_check_generated_prime(p1, rounds, ctx, cb);
|
||||
+ tmp = BN_check_prime(p1, ctx, cb);
|
||||
if (tmp > 0)
|
||||
break;
|
||||
if (tmp < 0)
|
||||
@@ -190,7 +160,7 @@ int ossl_bn_rsa_fips186_4_gen_prob_primes(BIGNUM *p, BIGNUM *Xpout,
|
||||
{
|
||||
int ret = 0;
|
||||
BIGNUM *p1i = NULL, *p2i = NULL, *Xp1i = NULL, *Xp2i = NULL;
|
||||
- int bitlen, rounds;
|
||||
+ int bitlen;
|
||||
|
||||
if (p == NULL || Xpout == NULL)
|
||||
return 0;
|
||||
@@ -207,7 +177,6 @@ int ossl_bn_rsa_fips186_4_gen_prob_primes(BIGNUM *p, BIGNUM *Xpout,
|
||||
bitlen = bn_rsa_fips186_5_aux_prime_min_size(nlen);
|
||||
if (bitlen == 0)
|
||||
goto err;
|
||||
- rounds = bn_rsa_fips186_5_aux_prime_MR_rounds(nlen);
|
||||
|
||||
/* (Steps 4.1/5.1): Randomly generate Xp1 if it is not passed in */
|
||||
if (Xp1 == NULL) {
|
||||
@@ -225,8 +194,8 @@ int ossl_bn_rsa_fips186_4_gen_prob_primes(BIGNUM *p, BIGNUM *Xpout,
|
||||
}
|
||||
|
||||
/* (Steps 4.2/5.2) - find first auxiliary probable primes */
|
||||
- if (!bn_rsa_fips186_4_find_aux_prob_prime(Xp1i, p1i, ctx, rounds, cb)
|
||||
- || !bn_rsa_fips186_4_find_aux_prob_prime(Xp2i, p2i, ctx, rounds, cb))
|
||||
+ if (!bn_rsa_fips186_4_find_aux_prob_prime(Xp1i, p1i, ctx, cb)
|
||||
+ || !bn_rsa_fips186_4_find_aux_prob_prime(Xp2i, p2i, ctx, cb))
|
||||
goto err;
|
||||
/* (Table B.1) auxiliary prime Max length check */
|
||||
if ((BN_num_bits(p1i) + BN_num_bits(p2i)) >=
|
||||
@@ -274,11 +243,11 @@ err:
|
||||
*/
|
||||
int ossl_bn_rsa_fips186_4_derive_prime(BIGNUM *Y, BIGNUM *X, const BIGNUM *Xin,
|
||||
const BIGNUM *r1, const BIGNUM *r2,
|
||||
- int nlen, const BIGNUM *e,
|
||||
- BN_CTX *ctx, BN_GENCB *cb)
|
||||
+ int nlen, const BIGNUM *e, BN_CTX *ctx,
|
||||
+ BN_GENCB *cb)
|
||||
{
|
||||
int ret = 0;
|
||||
- int i, imax, rounds;
|
||||
+ int i, imax;
|
||||
int bits = nlen >> 1;
|
||||
BIGNUM *tmp, *R, *r1r2x2, *y1, *r1x2;
|
||||
BIGNUM *base, *range;
|
||||
@@ -348,7 +317,6 @@ int ossl_bn_rsa_fips186_4_derive_prime(BIGNUM *Y, BIGNUM *X, const BIGNUM *Xin,
|
||||
* The number has been updated to 20 * nlen/2 as used in
|
||||
* FIPS186-5 Appendix B.9 Step 9.
|
||||
*/
|
||||
- rounds = bn_rsa_fips186_5_prime_MR_rounds(nlen);
|
||||
imax = 20 * bits; /* max = 20/2 * nbits */
|
||||
for (;;) {
|
||||
if (Xin == NULL) {
|
||||
@@ -378,9 +346,8 @@ int ossl_bn_rsa_fips186_4_derive_prime(BIGNUM *Y, BIGNUM *X, const BIGNUM *Xin,
|
||||
if (BN_copy(y1, Y) == NULL
|
||||
|| !BN_sub_word(y1, 1))
|
||||
goto err;
|
||||
-
|
||||
if (BN_are_coprime(y1, e, ctx)) {
|
||||
- int rv = ossl_bn_check_generated_prime(Y, rounds, ctx, cb);
|
||||
+ int rv = BN_check_prime(Y, ctx, cb);
|
||||
|
||||
if (rv > 0)
|
||||
goto end;
|
||||
diff --git a/include/crypto/bn.h b/include/crypto/bn.h
|
||||
index 4d11e0e4b1..cf69bea848 100644
|
||||
--- a/include/crypto/bn.h
|
||||
+++ b/include/crypto/bn.h
|
||||
@@ -95,8 +95,6 @@ int bn_div_fixed_top(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
|
||||
|
||||
int ossl_bn_miller_rabin_is_prime(const BIGNUM *w, int iterations, BN_CTX *ctx,
|
||||
BN_GENCB *cb, int enhanced, int *status);
|
||||
-int ossl_bn_check_generated_prime(const BIGNUM *w, int checks, BN_CTX *ctx,
|
||||
- BN_GENCB *cb);
|
||||
|
||||
const BIGNUM *ossl_bn_get0_small_factors(void);
|
||||
|
||||
--
|
||||
2.44.0
|
||||
|
@@ -1,19 +1,26 @@
|
||||
Index: openssl-3.2.3/apps/openssl.cnf
|
||||
Index: openssl-3.5.0/apps/openssl.cnf
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/apps/openssl.cnf
|
||||
+++ openssl-3.2.3/apps/openssl.cnf
|
||||
@@ -45,8 +45,8 @@ tsa_policy3 = 1.2.3.4.5.7
|
||||
--- openssl-3.5.0.orig/apps/openssl.cnf
|
||||
+++ openssl-3.5.0/apps/openssl.cnf
|
||||
@@ -45,12 +45,12 @@ tsa_policy3 = 1.2.3.4.5.7
|
||||
[openssl_init]
|
||||
providers = provider_sect
|
||||
# Load default TLS policy configuration
|
||||
-ssl_conf = ssl_module
|
||||
-alg_section = evp_properties
|
||||
-random = random
|
||||
+##ssl_conf = ssl_module
|
||||
+##alg_section = evp_properties
|
||||
+##random = random
|
||||
|
||||
-[random]
|
||||
-seed=JITTER
|
||||
+##[random]
|
||||
+##seed=JITTER
|
||||
|
||||
[ evp_properties ]
|
||||
# This section is intentionally added empty here to be tuned on particular systems
|
||||
@@ -61,20 +61,20 @@ alg_section = evp_properties
|
||||
@@ -65,20 +65,20 @@ seed=JITTER
|
||||
# to side-channel attacks and as such have been deprecated.
|
||||
|
||||
[provider_sect]
|
||||
|
15
openssl-disable-75-test_quicapi-test.patch
Normal file
15
openssl-disable-75-test_quicapi-test.patch
Normal file
@@ -0,0 +1,15 @@
|
||||
Index: openssl-3.5.0/test/recipes/75-test_quicapi.t
|
||||
===================================================================
|
||||
--- openssl-3.5.0.orig/test/recipes/75-test_quicapi.t
|
||||
+++ openssl-3.5.0/test/recipes/75-test_quicapi.t
|
||||
@@ -19,8 +19,8 @@ use lib bldtop_dir('.');
|
||||
|
||||
my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0);
|
||||
|
||||
-plan skip_all => "QUIC protocol is not supported by this OpenSSL build"
|
||||
- if disabled('quic');
|
||||
+plan skip_all => "Test is disabled in this OpenSSL build"
|
||||
+ if 1;
|
||||
|
||||
plan skip_all => "These tests are not supported in a fuzz build"
|
||||
if config('options') =~ /-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION|enable-fuzz-afl/;
|
@@ -1,41 +1,47 @@
|
||||
From a9825123e7ab3474d2794a5706d9bed047959c9c Mon Sep 17 00:00:00 2001
|
||||
From df72b988df3e71992327107b6a7ad2ca762efb61 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Mon, 31 Jul 2023 09:41:28 +0200
|
||||
Subject: [PATCH 18/35] 0034.fipsinstall_disable.patch
|
||||
Date: Wed, 6 Mar 2024 19:17:15 +0100
|
||||
Subject: [PATCH 21/53] FIPS: disable fipsinstall
|
||||
|
||||
Patch-name: 0034.fipsinstall_disable.patch
|
||||
Patch-id: 34
|
||||
Patch-status: |
|
||||
# Comment out fipsinstall command-line utility
|
||||
From-dist-git-commit: 9409bc7044cf4b5773639cce20f51399888c45fd
|
||||
# # Comment out fipsinstall command-line utility
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
---
|
||||
apps/fipsinstall.c | 3 +
|
||||
doc/man1/openssl-fipsinstall.pod.in | 272 +---------------------------
|
||||
doc/man1/openssl.pod | 4 -
|
||||
doc/man5/config.pod | 1 -
|
||||
doc/man5/fips_config.pod | 104 +----------
|
||||
doc/man7/OSSL_PROVIDER-FIPS.pod | 1 -
|
||||
6 files changed, 10 insertions(+), 375 deletions(-)
|
||||
apps/fipsinstall.c | 3 +
|
||||
doc/man1/openssl-fipsinstall.pod.in | 485 +-------------------------
|
||||
doc/man1/openssl.pod | 4 -
|
||||
doc/man5/config.pod | 1 -
|
||||
doc/man5/fips_config.pod | 228 +-----------
|
||||
doc/man7/OSSL_PROVIDER-FIPS.pod | 1 -
|
||||
test/recipes/00-prep_fipsmodule_cnf.t | 10 +-
|
||||
test/recipes/01-test_fipsmodule_cnf.t | 7 +-
|
||||
test/recipes/03-test_fipsinstall.t | 2 +
|
||||
9 files changed, 22 insertions(+), 719 deletions(-)
|
||||
mode change 100644 => 100755 test/recipes/00-prep_fipsmodule_cnf.t
|
||||
mode change 100644 => 100755 test/recipes/01-test_fipsmodule_cnf.t
|
||||
mode change 100644 => 100755 test/recipes/03-test_fipsinstall.t
|
||||
|
||||
Index: openssl-3.2.4/apps/fipsinstall.c
|
||||
Index: openssl-3.5.0-beta1/apps/fipsinstall.c
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/apps/fipsinstall.c
|
||||
+++ openssl-3.2.4/apps/fipsinstall.c
|
||||
@@ -374,6 +374,9 @@ int fipsinstall_main(int argc, char **ar
|
||||
--- openssl-3.5.0-beta1.orig/apps/fipsinstall.c
|
||||
+++ openssl-3.5.0-beta1/apps/fipsinstall.c
|
||||
@@ -590,6 +590,9 @@ int fipsinstall_main(int argc, char **ar
|
||||
EVP_MAC *mac = NULL;
|
||||
CONF *conf = NULL;
|
||||
|
||||
+ BIO_printf(bio_err, "This command is not enabled in SUSE/openSUSE OpenSSL build, please see 'man 8 fips-mode-setup' to learn how to enable FIPS mode\n");
|
||||
+ BIO_printf(bio_err, "This command is not enabled in the SUSE/openSUSE OpenSSL build, please consult SUSE/openSUSE documentation to learn how to enable FIPS mode\n");
|
||||
+ return 1;
|
||||
+
|
||||
if ((opts = sk_OPENSSL_STRING_new_null()) == NULL)
|
||||
goto end;
|
||||
|
||||
Index: openssl-3.2.4/doc/man1/openssl-fipsinstall.pod.in
|
||||
Index: openssl-3.5.0-beta1/doc/man1/openssl-fipsinstall.pod.in
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/doc/man1/openssl-fipsinstall.pod.in
|
||||
+++ openssl-3.2.4/doc/man1/openssl-fipsinstall.pod.in
|
||||
@@ -8,275 +8,9 @@ openssl-fipsinstall - perform FIPS confi
|
||||
--- openssl-3.5.0-beta1.orig/doc/man1/openssl-fipsinstall.pod.in
|
||||
+++ openssl-3.5.0-beta1/doc/man1/openssl-fipsinstall.pod.in
|
||||
@@ -8,488 +8,9 @@ openssl-fipsinstall - perform FIPS confi
|
||||
=head1 SYNOPSIS
|
||||
|
||||
B<openssl fipsinstall>
|
||||
@@ -53,8 +59,33 @@ Index: openssl-3.2.4/doc/man1/openssl-fipsinstall.pod.in
|
||||
-[B<-pedantic>]
|
||||
-[B<-no_conditional_errors>]
|
||||
-[B<-no_security_checks>]
|
||||
-[B<-hmac_key_check>]
|
||||
-[B<-kmac_key_check>]
|
||||
-[B<-ems_check>]
|
||||
-[B<-no_drbg_truncated_digests>]
|
||||
-[B<-signature_digest_check>]
|
||||
-[B<-hkdf_digest_check>]
|
||||
-[B<-tls13_kdf_digest_check>]
|
||||
-[B<-tls1_prf_digest_check>]
|
||||
-[B<-sshkdf_digest_check>]
|
||||
-[B<-sskdf_digest_check>]
|
||||
-[B<-x963kdf_digest_check>]
|
||||
-[B<-dsa_sign_disabled>]
|
||||
-[B<-no_pbkdf2_lower_bound_check>]
|
||||
-[B<-no_short_mac>]
|
||||
-[B<-tdes_encrypt_disabled>]
|
||||
-[B<-rsa_pkcs15_padding_disabled>]
|
||||
-[B<-rsa_pss_saltlen_check>]
|
||||
-[B<-rsa_sign_x931_disabled>]
|
||||
-[B<-hkdf_key_check>]
|
||||
-[B<-kbkdf_key_check>]
|
||||
-[B<-tls13_kdf_key_check>]
|
||||
-[B<-tls1_prf_key_check>]
|
||||
-[B<-sshkdf_key_check>]
|
||||
-[B<-sskdf_key_check>]
|
||||
-[B<-x963kdf_key_check>]
|
||||
-[B<-x942kdf_key_check>]
|
||||
-[B<-ecdh_cofactor_check>]
|
||||
-[B<-self_test_onload>]
|
||||
-[B<-self_test_oninstall>]
|
||||
-[B<-corrupt_desc> I<selftest_description>]
|
||||
@@ -216,11 +247,154 @@ Index: openssl-3.2.4/doc/man1/openssl-fipsinstall.pod.in
|
||||
-when using the TLS1_PRF KDF algorithm. This check is disabled by default.
|
||||
-See RFC 7627 for information related to EMS.
|
||||
-
|
||||
-=item B<-no_short_mac>
|
||||
-
|
||||
-Configure the module to not allow short MAC outputs.
|
||||
-See SP 800-185 8.4.2 and FIPS 140-3 ID C.D for details.
|
||||
-
|
||||
-=item B<-hmac_key_check>
|
||||
-
|
||||
-Configure the module to not allow small keys sizes when using HMAC.
|
||||
-See SP 800-131Ar2 for details.
|
||||
-
|
||||
-=item B<-kmac_key_check>
|
||||
-
|
||||
-Configure the module to not allow small keys sizes when using KMAC.
|
||||
-See SP 800-131Ar2 for details.
|
||||
-
|
||||
-=item B<-no_drbg_truncated_digests>
|
||||
-
|
||||
-Configure the module to not allow truncated digests to be used with Hash and
|
||||
-HMAC DRBGs. See FIPS 140-3 IG D.R for details.
|
||||
-
|
||||
-=item B<-signature_digest_check>
|
||||
-
|
||||
-Configure the module to enforce signature algorithms to use digests that are
|
||||
-explicitly permitted by the various standards.
|
||||
-
|
||||
-=item B<-hkdf_digest_check>
|
||||
-
|
||||
-Configure the module to enable a run-time digest check when deriving a key by
|
||||
-HKDF.
|
||||
-See NIST SP 800-56Cr2 for details.
|
||||
-
|
||||
-=item B<-tls13_kdf_digest_check>
|
||||
-
|
||||
-Configure the module to enable a run-time digest check when deriving a key by
|
||||
-TLS13 KDF.
|
||||
-See RFC 8446 for details.
|
||||
-
|
||||
-=item B<-tls1_prf_digest_check>
|
||||
-
|
||||
-Configure the module to enable a run-time digest check when deriving a key by
|
||||
-TLS_PRF.
|
||||
-See NIST SP 800-135r1 for details.
|
||||
-
|
||||
-=item B<-sshkdf_digest_check>
|
||||
-
|
||||
-Configure the module to enable a run-time digest check when deriving a key by
|
||||
-SSHKDF.
|
||||
-See NIST SP 800-135r1 for details.
|
||||
-
|
||||
-=item B<-sskdf_digest_check>
|
||||
-
|
||||
-Configure the module to enable a run-time digest check when deriving a key by
|
||||
-SSKDF.
|
||||
-See NIST SP 800-56Cr2 for details.
|
||||
-
|
||||
-=item B<-x963kdf_digest_check>
|
||||
-
|
||||
-Configure the module to enable a run-time digest check when deriving a key by
|
||||
-X963KDF.
|
||||
-See NIST SP 800-131Ar2 for details.
|
||||
-
|
||||
-=item B<-dsa_sign_disabled>
|
||||
-
|
||||
-Configure the module to not allow DSA signing (DSA signature verification is
|
||||
-still allowed). See FIPS 140-3 IG C.K for details.
|
||||
-
|
||||
-=item B<-tdes_encrypt_disabled>
|
||||
-
|
||||
-Configure the module to not allow Triple-DES encryption.
|
||||
-Triple-DES decryption is still allowed for legacy purposes.
|
||||
-See SP800-131Ar2 for details.
|
||||
-
|
||||
-=item B<-rsa_pkcs15_padding_disabled>
|
||||
-
|
||||
-Configure the module to not allow PKCS#1 version 1.5 padding to be used with
|
||||
-RSA for key transport and key agreement. See NIST's SP 800-131A Revision 2
|
||||
-for details.
|
||||
-
|
||||
-=item B<-rsa_pss_saltlen_check>
|
||||
-
|
||||
-Configure the module to enable a run-time salt length check when generating or
|
||||
-verifying a RSA-PSS signature.
|
||||
-See FIPS 186-5 5.4 (g) for details.
|
||||
-
|
||||
-=item B<-rsa_sign_x931_disabled>
|
||||
-
|
||||
-Configure the module to not allow X9.31 padding to be used when signing with
|
||||
-RSA. See FIPS 140-3 IG C.K for details.
|
||||
-
|
||||
-=item B<-hkdf_key_check>
|
||||
-
|
||||
-Configure the module to enable a run-time short key-derivation key check when
|
||||
-deriving a key by HKDF.
|
||||
-See NIST SP 800-131Ar2 for details.
|
||||
-
|
||||
-=item B<-kbkdf_key_check>
|
||||
-
|
||||
-Configure the module to enable a run-time short key-derivation key check when
|
||||
-deriving a key by KBKDF.
|
||||
-See NIST SP 800-131Ar2 for details.
|
||||
-
|
||||
-=item B<-tls13_kdf_key_check>
|
||||
-
|
||||
-Configure the module to enable a run-time short key-derivation key check when
|
||||
-deriving a key by TLS13 KDF.
|
||||
-See NIST SP 800-131Ar2 for details.
|
||||
-
|
||||
-=item B<-tls1_prf_key_check>
|
||||
-
|
||||
-Configure the module to enable a run-time short key-derivation key check when
|
||||
-deriving a key by TLS_PRF.
|
||||
-See NIST SP 800-131Ar2 for details.
|
||||
-
|
||||
-=item B<-sshkdf_key_check>
|
||||
-
|
||||
-Configure the module to enable a run-time short key-derivation key check when
|
||||
-deriving a key by SSHKDF.
|
||||
-See NIST SP 800-131Ar2 for details.
|
||||
-
|
||||
-=item B<-sskdf_key_check>
|
||||
-
|
||||
-Configure the module to enable a run-time short key-derivation key check when
|
||||
-deriving a key by SSKDF.
|
||||
-See NIST SP 800-131Ar2 for details.
|
||||
-
|
||||
-=item B<-x963kdf_key_check>
|
||||
-
|
||||
-Configure the module to enable a run-time short key-derivation key check when
|
||||
-deriving a key by X963KDF.
|
||||
-See NIST SP 800-131Ar2 for details.
|
||||
-
|
||||
-=item B<-x942kdf_key_check>
|
||||
-
|
||||
-Configure the module to enable a run-time short key-derivation key check when
|
||||
-deriving a key by X942KDF.
|
||||
-See NIST SP 800-131Ar2 for details.
|
||||
-
|
||||
-=item B<-no_pbkdf2_lower_bound_check>
|
||||
-
|
||||
-Configure the module to not perform run-time lower bound check for PBKDF2.
|
||||
-See NIST SP 800-132 for details.
|
||||
-
|
||||
-=item B<-ecdh_cofactor_check>
|
||||
-
|
||||
-Configure the module to enable a run-time check that ECDH uses the EC curves
|
||||
-cofactor value when deriving a key. This only affects the 'B' and 'K' curves.
|
||||
-See SP 800-56A r3 Section 5.7.1.2 for details.
|
||||
-
|
||||
-=item B<-self_test_onload>
|
||||
-
|
||||
-Do not write the two fields related to the "test status indicator" and
|
||||
@@ -230,14 +404,17 @@ Index: openssl-3.2.4/doc/man1/openssl-fipsinstall.pod.in
|
||||
-target machine. Once the self tests have run on the target machine the user
|
||||
-could possibly then add the 2 fields into the configuration using some other
|
||||
-mechanism.
|
||||
-
|
||||
-This is the default.
|
||||
-This option defaults to 0 for any OpenSSL FIPS 140-2 provider (OpenSSL 3.0.X).
|
||||
-and is not relevant for an OpenSSL FIPS 140-3 provider, since this is no
|
||||
-longer allowed.
|
||||
-
|
||||
-=item B<-self_test_oninstall>
|
||||
-
|
||||
-The converse of B<-self_test_oninstall>. The two fields related to the
|
||||
-"test status indicator" and "MAC status indicator" are written to the
|
||||
-output configuration file.
|
||||
-This field is not relevant for an OpenSSL FIPS 140-3 provider, since this is no
|
||||
-longer allowed.
|
||||
-
|
||||
-=item B<-quiet>
|
||||
-
|
||||
@@ -308,16 +485,58 @@ Index: openssl-3.2.4/doc/man1/openssl-fipsinstall.pod.in
|
||||
-L<fips_config(5)>,
|
||||
-L<OSSL_PROVIDER-FIPS(7)>,
|
||||
-L<EVP_MAC(3)>
|
||||
-
|
||||
-=head1 HISTORY
|
||||
-
|
||||
-The B<openssl-fipsinstall> application was added in OpenSSL 3.0.
|
||||
-
|
||||
-The following options were added in OpenSSL 3.1:
|
||||
-
|
||||
-B<-ems_check>,
|
||||
-B<-self_test_oninstall>
|
||||
-
|
||||
-The following options were added in OpenSSL 3.2:
|
||||
-
|
||||
-B<-pedantic>,
|
||||
-B<-no_drbg_truncated_digests>
|
||||
-
|
||||
-The following options were added in OpenSSL 3.4:
|
||||
-
|
||||
-B<-hmac_key_check>,
|
||||
-B<-kmac_key_check>,
|
||||
-B<-signature_digest_check>,
|
||||
-B<-hkdf_digest_check>,
|
||||
-B<-tls13_kdf_digest_check>,
|
||||
-B<-tls1_prf_digest_check>,
|
||||
-B<-sshkdf_digest_check>,
|
||||
-B<-sskdf_digest_check>,
|
||||
-B<-x963kdf_digest_check>,
|
||||
-B<-dsa_sign_disabled>,
|
||||
-B<-no_pbkdf2_lower_bound_check>,
|
||||
-B<-no_short_mac>,
|
||||
-B<-tdes_encrypt_disabled>,
|
||||
-B<-rsa_pkcs15_padding_disabled>,
|
||||
-B<-rsa_pss_saltlen_check>,
|
||||
-B<-rsa_sign_x931_disabled>,
|
||||
-B<-hkdf_key_check>,
|
||||
-B<-kbkdf_key_check>,
|
||||
-B<-tls13_kdf_key_check>,
|
||||
-B<-tls1_prf_key_check>,
|
||||
-B<-sshkdf_key_check>,
|
||||
-B<-sskdf_key_check>,
|
||||
-B<-x963kdf_key_check>,
|
||||
-B<-x942kdf_key_check>,
|
||||
-B<-ecdh_cofactor_check>
|
||||
+This command is disabled.
|
||||
+Please consult the SUSE/openSUSE documentation to learn how to correctly
|
||||
+enable FIPS mode.
|
||||
+Please consult SUSE/openSUSE Linux documentation to learn how to correctly
|
||||
+enable FIPS mode SUSE/openSUSE
|
||||
|
||||
=head1 HISTORY
|
||||
=head1 COPYRIGHT
|
||||
|
||||
Index: openssl-3.2.4/doc/man1/openssl.pod
|
||||
Index: openssl-3.5.0-beta1/doc/man1/openssl.pod
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/doc/man1/openssl.pod
|
||||
+++ openssl-3.2.4/doc/man1/openssl.pod
|
||||
--- openssl-3.5.0-beta1.orig/doc/man1/openssl.pod
|
||||
+++ openssl-3.5.0-beta1/doc/man1/openssl.pod
|
||||
@@ -137,10 +137,6 @@ Engine (loadable module) information and
|
||||
|
||||
Error Number to Error String Conversion.
|
||||
@@ -329,11 +548,11 @@ Index: openssl-3.2.4/doc/man1/openssl.pod
|
||||
=item B<gendsa>
|
||||
|
||||
Generation of DSA Private Key from Parameters. Superseded by
|
||||
Index: openssl-3.2.4/doc/man5/config.pod
|
||||
Index: openssl-3.5.0-beta1/doc/man5/config.pod
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/doc/man5/config.pod
|
||||
+++ openssl-3.2.4/doc/man5/config.pod
|
||||
@@ -565,7 +565,6 @@ configuration files using that syntax wi
|
||||
--- openssl-3.5.0-beta1.orig/doc/man5/config.pod
|
||||
+++ openssl-3.5.0-beta1/doc/man5/config.pod
|
||||
@@ -582,7 +582,6 @@ configuration files using that syntax wi
|
||||
=head1 SEE ALSO
|
||||
|
||||
L<openssl-x509(1)>, L<openssl-req(1)>, L<openssl-ca(1)>,
|
||||
@@ -341,11 +560,11 @@ Index: openssl-3.2.4/doc/man5/config.pod
|
||||
L<ASN1_generate_nconf(3)>,
|
||||
L<EVP_set_default_properties(3)>,
|
||||
L<CONF_modules_load(3)>,
|
||||
Index: openssl-3.2.4/doc/man5/fips_config.pod
|
||||
Index: openssl-3.5.0-beta1/doc/man5/fips_config.pod
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/doc/man5/fips_config.pod
|
||||
+++ openssl-3.2.4/doc/man5/fips_config.pod
|
||||
@@ -6,106 +6,10 @@ fips_config - OpenSSL FIPS configuration
|
||||
--- openssl-3.5.0-beta1.orig/doc/man5/fips_config.pod
|
||||
+++ openssl-3.5.0-beta1/doc/man5/fips_config.pod
|
||||
@@ -6,230 +6,10 @@ fips_config - OpenSSL FIPS configuration
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
@@ -382,10 +601,6 @@ Index: openssl-3.2.4/doc/man5/fips_config.pod
|
||||
-If present, the module is activated. The value assigned to this name is not
|
||||
-significant.
|
||||
-
|
||||
-=item B<install-version>
|
||||
-
|
||||
-A version number for the fips install process. Should be 1.
|
||||
-
|
||||
-=item B<conditional-errors>
|
||||
-
|
||||
-The FIPS module normally enters an internal error mode if any self test fails.
|
||||
@@ -399,18 +614,14 @@ Index: openssl-3.2.4/doc/man5/fips_config.pod
|
||||
-continuous test will return an error code if its continuous test fails. The
|
||||
-operation may then be retried if the error mode has not been triggered.
|
||||
-
|
||||
-=item B<security-checks>
|
||||
-
|
||||
-This indicates if run-time checks related to enforcement of security parameters
|
||||
-such as minimum security strength of keys and approved curve names are used.
|
||||
-A value of '1' will perform the checks, otherwise if the value is '0' the checks
|
||||
-are not performed and FIPS compliance must be done by procedures documented in
|
||||
-the relevant Security Policy.
|
||||
-
|
||||
-=item B<module-mac>
|
||||
-
|
||||
-The calculated MAC of the FIPS provider file.
|
||||
-
|
||||
-=item B<install-version>
|
||||
-
|
||||
-A version number for the fips install process. Should be 1.
|
||||
-
|
||||
-=item B<install-status>
|
||||
-
|
||||
-An indicator that the self-tests were successfully run.
|
||||
@@ -427,6 +638,134 @@ Index: openssl-3.2.4/doc/man5/fips_config.pod
|
||||
-
|
||||
-=back
|
||||
-
|
||||
-=head2 FIPS indicator options
|
||||
-
|
||||
-The following FIPS configuration options indicate if run-time checks related to
|
||||
-enforcement of FIPS security parameters such as minimum security strength of
|
||||
-keys and approved curve names are used.
|
||||
-A value of '1' will perform the checks, otherwise if the value is '0' the checks
|
||||
-are not performed and FIPS compliance must be done by procedures documented in
|
||||
-the relevant Security Policy.
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> for further information related to these
|
||||
-options.
|
||||
-
|
||||
-=over 4
|
||||
-
|
||||
-=item B<security-checks>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-no_security_checks>
|
||||
-
|
||||
-=item B<tls1-prf-ems-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-ems_check>
|
||||
-
|
||||
-=item B<no-short-mac>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-no_short_mac>
|
||||
-
|
||||
-=item B<drbg-no-trunc-md>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-no_drbg_truncated_digests>
|
||||
-
|
||||
-=item B<signature-digest-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-signature_digest_check>
|
||||
-
|
||||
-=item B<hkdf-digest-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-hkdf_digest_check>
|
||||
-
|
||||
-=item B<tls13-kdf-digest-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-tls13_kdf_digest_check>
|
||||
-
|
||||
-=item B<tls1-prf-digest-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-tls1_prf_digest_check>
|
||||
-
|
||||
-=item B<sshkdf-digest-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-sshkdf_digest_check>
|
||||
-
|
||||
-=item B<sskdf-digest-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-sskdf_digest_check>
|
||||
-
|
||||
-=item B<x963kdf-digest-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-x963kdf_digest_check>
|
||||
-
|
||||
-=item B<dsa-sign-disabled>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-dsa_sign_disabled>
|
||||
-
|
||||
-=item B<tdes-encrypt-disabled>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-tdes_encrypt_disabled>
|
||||
-
|
||||
-=item B<rsa-pkcs15-pad-disabled>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-rsa_pkcs15_pad_disabled>
|
||||
-
|
||||
-=item B<rsa-pss-saltlen-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-rsa_pss_saltlen_check>
|
||||
-
|
||||
-=item B<rsa-sign-x931-pad-disabled>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-rsa_sign_x931_disabled>
|
||||
-
|
||||
-=item B<hkdf-key-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-hkdf_key_check>
|
||||
-
|
||||
-=item B<kbkdf-key-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-kbkdf_key_check>
|
||||
-
|
||||
-=item B<tls13-kdf-key-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-tls13_kdf_key_check>
|
||||
-
|
||||
-=item B<tls1-prf-key-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-tls1_prf_key_check>
|
||||
-
|
||||
-=item B<sshkdf-key-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-sshkdf_key_check>
|
||||
-
|
||||
-=item B<sskdf-key-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-sskdf_key_check>
|
||||
-
|
||||
-=item B<x963kdf-key-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-x963kdf_key_check>
|
||||
-
|
||||
-=item B<x942kdf-key-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-x942kdf_key_check>
|
||||
-
|
||||
-=item B<pbkdf2-lower-bound-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-no_pbkdf2_lower_bound_check>
|
||||
-
|
||||
-=item B<ecdh-cofactor-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-ecdh_cofactor_check>
|
||||
-
|
||||
-=item B<hmac-key-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-hmac_key_check>
|
||||
-
|
||||
-=item B<kmac-key-check>
|
||||
-
|
||||
-See L<openssl-fipsinstall(1)/OPTIONS> B<-kmac_key_check>
|
||||
-
|
||||
-=back
|
||||
-
|
||||
-For example:
|
||||
-
|
||||
- [fips_sect]
|
||||
@@ -449,18 +788,22 @@ Index: openssl-3.2.4/doc/man5/fips_config.pod
|
||||
-
|
||||
-L<config(5)>
|
||||
-L<openssl-fipsinstall(1)>
|
||||
-
|
||||
-=head1 HISTORY
|
||||
-
|
||||
-This functionality was added in OpenSSL 3.0.
|
||||
+This command is disabled in SUSE/openSUSE. The FIPS provider is
|
||||
+automatically loaded when the system is booted in FIPS mode, or when the
|
||||
+environment variable B<OPENSSL_FORCE_FIPS_MODE> is set.
|
||||
+See the documentation for more information.
|
||||
+environment variable B<OPENSSL_FORCE_FIPS_MODE> is set. See the documentation
|
||||
+for more information.
|
||||
|
||||
=head1 HISTORY
|
||||
=head1 COPYRIGHT
|
||||
|
||||
Index: openssl-3.2.4/doc/man7/OSSL_PROVIDER-FIPS.pod
|
||||
Index: openssl-3.5.0-beta1/doc/man7/OSSL_PROVIDER-FIPS.pod
|
||||
===================================================================
|
||||
--- openssl-3.2.4.orig/doc/man7/OSSL_PROVIDER-FIPS.pod
|
||||
+++ openssl-3.2.4/doc/man7/OSSL_PROVIDER-FIPS.pod
|
||||
@@ -489,7 +489,6 @@ want to operate in a FIPS approved manne
|
||||
--- openssl-3.5.0-beta1.orig/doc/man7/OSSL_PROVIDER-FIPS.pod
|
||||
+++ openssl-3.5.0-beta1/doc/man7/OSSL_PROVIDER-FIPS.pod
|
||||
@@ -575,7 +575,6 @@ want to operate in a FIPS approved manne
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
@@ -468,3 +811,51 @@ Index: openssl-3.2.4/doc/man7/OSSL_PROVIDER-FIPS.pod
|
||||
L<fips_config(5)>,
|
||||
L<OSSL_SELF_TEST_set_callback(3)>,
|
||||
L<OSSL_SELF_TEST_new(3)>,
|
||||
Index: openssl-3.5.0-beta1/test/recipes/00-prep_fipsmodule_cnf.t
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/00-prep_fipsmodule_cnf.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/00-prep_fipsmodule_cnf.t
|
||||
@@ -29,8 +29,10 @@ my $fipsmoduleconf = bldtop_file('test',
|
||||
|
||||
plan tests => 1;
|
||||
|
||||
+ok(1 == 1);
|
||||
+
|
||||
# Create the $fipsmoduleconf file
|
||||
-ok(run(app(['openssl', 'fipsinstall', '-pedantic',
|
||||
- '-module', $fipsmodule, '-provider_name', 'fips',
|
||||
- '-section_name', 'fips_sect', '-out', $fipsmoduleconf])),
|
||||
- "fips install");
|
||||
+#ok(run(app(['openssl', 'fipsinstall', '-pedantic',
|
||||
+# '-module', $fipsmodule, '-provider_name', 'fips',
|
||||
+# '-section_name', 'fips_sect', '-out', $fipsmoduleconf])),
|
||||
+# "fips install");
|
||||
Index: openssl-3.5.0-beta1/test/recipes/01-test_fipsmodule_cnf.t
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/01-test_fipsmodule_cnf.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/01-test_fipsmodule_cnf.t
|
||||
@@ -31,7 +31,8 @@ plan tests => 1;
|
||||
my $fipsmodule = bldtop_file('providers', platform->dso('fips'));
|
||||
my $fipsmoduleconf = bldtop_file('test', 'fipsmodule.cnf');
|
||||
|
||||
+ok(1 == 1)
|
||||
# verify the $fipsconf file
|
||||
-ok(run(app(['openssl', 'fipsinstall',
|
||||
- '-in', $fipsmoduleconf, '-module', $fipsmodule, '-verify'])),
|
||||
- "fipsinstall verify");
|
||||
+#ok(run(app(['openssl', 'fipsinstall',
|
||||
+# '-in', $fipsmoduleconf, '-module', $fipsmodule, '-verify'])),
|
||||
+# "fipsinstall verify");
|
||||
Index: openssl-3.5.0-beta1/test/recipes/03-test_fipsinstall.t
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/03-test_fipsinstall.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/03-test_fipsinstall.t
|
||||
@@ -22,6 +22,8 @@ use lib srctop_dir('Configurations');
|
||||
use lib bldtop_dir('.');
|
||||
use platform;
|
||||
|
||||
+plan skip_all => "Fipsinstall not available in SUSE/openSUSE FIPS build";
|
||||
+
|
||||
plan skip_all => "Test only supported in a fips build" if disabled("fips");
|
||||
|
||||
# Compatible options for pedantic FIPS compliance
|
||||
|
@@ -1,75 +0,0 @@
|
||||
From 48c763ed9cc889806bc01222382ce6f918a408a2 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Belyavskiy <dbelyavs@redhat.com>
|
||||
Date: Mon, 21 Aug 2023 16:12:33 +0200
|
||||
Subject: [PATCH 46/48]
|
||||
0112-pbdkf2-Set-indicator-if-pkcs5-param-disabled-checks.patch
|
||||
|
||||
Patch-name: 0112-pbdkf2-Set-indicator-if-pkcs5-param-disabled-checks.patch
|
||||
Patch-id: 112
|
||||
---
|
||||
providers/implementations/kdfs/pbkdf2.c | 40 +++++++++++++++++++++++--
|
||||
1 file changed, 37 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/providers/implementations/kdfs/pbkdf2.c b/providers/implementations/kdfs/pbkdf2.c
|
||||
index 11820d1e69..bae2238ab5 100644
|
||||
--- a/providers/implementations/kdfs/pbkdf2.c
|
||||
+++ b/providers/implementations/kdfs/pbkdf2.c
|
||||
@@ -284,11 +284,42 @@ static const OSSL_PARAM *kdf_pbkdf2_settable_ctx_params(ossl_unused void *ctx,
|
||||
|
||||
static int kdf_pbkdf2_get_ctx_params(void *vctx, OSSL_PARAM params[])
|
||||
{
|
||||
+#ifdef FIPS_MODULE
|
||||
+ KDF_PBKDF2 *ctx = (KDF_PBKDF2 *)vctx;
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
OSSL_PARAM *p;
|
||||
+ int any_valid = 0; /* set to 1 when at least one parameter was valid */
|
||||
+
|
||||
+ if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SIZE)) != NULL) {
|
||||
+ any_valid = 1;
|
||||
+
|
||||
+ if (!OSSL_PARAM_set_size_t(p, SIZE_MAX))
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+#ifdef FIPS_MODULE
|
||||
+ if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR))
|
||||
+ != NULL) {
|
||||
+ int fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_APPROVED;
|
||||
+
|
||||
+ /* The lower_bound_checks parameter enables checks required by FIPS. If
|
||||
+ * those checks are disabled, the PBKDF2 implementation will also
|
||||
+ * support non-approved parameters (e.g., salt lengths < 16 bytes, see
|
||||
+ * NIST SP 800-132 section 5.1). */
|
||||
+ if (!ctx->lower_bound_checks)
|
||||
+ fips_indicator = EVP_KDF_SUSE_FIPS_INDICATOR_NOT_APPROVED;
|
||||
|
||||
- if ((p = OSSL_PARAM_locate(params, OSSL_KDF_PARAM_SIZE)) != NULL)
|
||||
- return OSSL_PARAM_set_size_t(p, SIZE_MAX);
|
||||
- return -2;
|
||||
+ if (!OSSL_PARAM_set_int(p, fips_indicator))
|
||||
+ return 0;
|
||||
+
|
||||
+ any_valid = 1;
|
||||
+ }
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+
|
||||
+ if (!any_valid)
|
||||
+ return -2;
|
||||
+
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
static const OSSL_PARAM *kdf_pbkdf2_gettable_ctx_params(ossl_unused void *ctx,
|
||||
@@ -296,6 +327,9 @@ static const OSSL_PARAM *kdf_pbkdf2_gettable_ctx_params(ossl_unused void *ctx,
|
||||
{
|
||||
static const OSSL_PARAM known_gettable_ctx_params[] = {
|
||||
OSSL_PARAM_size_t(OSSL_KDF_PARAM_SIZE, NULL),
|
||||
+#ifdef FIPS_MODULE
|
||||
+ OSSL_PARAM_int(OSSL_KDF_PARAM_SUSE_FIPS_INDICATOR, NULL),
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
OSSL_PARAM_END
|
||||
};
|
||||
return known_gettable_ctx_params;
|
||||
--
|
||||
2.41.0
|
||||
|
@@ -10,11 +10,11 @@ Patch-id: 84
|
||||
providers/implementations/kdfs/pbkdf2.c | 27 ++++++++++++++++++++++++-
|
||||
1 file changed, 26 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: openssl-3.2.3/providers/implementations/kdfs/pbkdf2.c
|
||||
Index: openssl-3.5.0-beta1/providers/implementations/kdfs/pbkdf2.c
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/providers/implementations/kdfs/pbkdf2.c
|
||||
+++ openssl-3.2.3/providers/implementations/kdfs/pbkdf2.c
|
||||
@@ -35,6 +35,21 @@
|
||||
--- openssl-3.5.0-beta1.orig/providers/implementations/kdfs/pbkdf2.c
|
||||
+++ openssl-3.5.0-beta1/providers/implementations/kdfs/pbkdf2.c
|
||||
@@ -36,6 +36,21 @@
|
||||
#define KDF_PBKDF2_MAX_KEY_LEN_DIGEST_RATIO 0xFFFFFFFF
|
||||
#define KDF_PBKDF2_MIN_ITERATIONS 1000
|
||||
#define KDF_PBKDF2_MIN_SALT_LEN (128 / 8)
|
||||
@@ -36,8 +36,48 @@ Index: openssl-3.2.3/providers/implementations/kdfs/pbkdf2.c
|
||||
|
||||
static OSSL_FUNC_kdf_newctx_fn kdf_pbkdf2_new;
|
||||
static OSSL_FUNC_kdf_dupctx_fn kdf_pbkdf2_dup;
|
||||
@@ -215,9 +230,15 @@ static int kdf_pbkdf2_set_ctx_params(voi
|
||||
ctx->lower_bound_checks = pkcs5 == 0;
|
||||
@@ -179,8 +194,8 @@ static int pbkdf2_set_membuf(unsigned ch
|
||||
}
|
||||
|
||||
static int pbkdf2_lower_bound_check_passed(int saltlen, uint64_t iter,
|
||||
- size_t keylen, int *error,
|
||||
- const char **desc)
|
||||
+ size_t keylen, size_t passlen,
|
||||
+ int *error, const char **desc)
|
||||
{
|
||||
if ((keylen * 8) < KDF_PBKDF2_MIN_KEY_LEN_BITS) {
|
||||
*error = PROV_R_KEY_SIZE_TOO_SMALL;
|
||||
@@ -188,6 +203,12 @@ static int pbkdf2_lower_bound_check_pass
|
||||
*desc = "Key size";
|
||||
return 0;
|
||||
}
|
||||
+ if (passlen < KDF_PBKDF2_MIN_PASSWORD_LEN) {
|
||||
+ *error = PROV_R_INVALID_INPUT_LENGTH;
|
||||
+ if (desc != NULL)
|
||||
+ *desc = "Password length";
|
||||
+ return 0;
|
||||
+ }
|
||||
if (saltlen < KDF_PBKDF2_MIN_SALT_LEN) {
|
||||
*error = PROV_R_INVALID_SALT_LENGTH;
|
||||
if (desc != NULL)
|
||||
@@ -205,13 +226,13 @@ static int pbkdf2_lower_bound_check_pass
|
||||
}
|
||||
|
||||
#ifdef FIPS_MODULE
|
||||
-static int fips_lower_bound_check_passed(KDF_PBKDF2 *ctx, size_t keylen)
|
||||
+static int fips_lower_bound_check_passed(KDF_PBKDF2 *ctx, size_t keylen, size_t passlen)
|
||||
{
|
||||
OSSL_LIB_CTX *libctx = PROV_LIBCTX_OF(ctx->provctx);
|
||||
int error = 0;
|
||||
const char *desc = NULL;
|
||||
int approved = pbkdf2_lower_bound_check_passed(ctx->salt_len, ctx->iter,
|
||||
- keylen, &error, &desc);
|
||||
+ keylen, passlen, &error, &desc);
|
||||
|
||||
if (!approved) {
|
||||
if (!OSSL_FIPS_IND_ON_UNAPPROVED(ctx, OSSL_FIPS_IND_SETTABLE0, libctx,
|
||||
@@ -283,9 +304,15 @@ static int kdf_pbkdf2_set_ctx_params(voi
|
||||
#endif
|
||||
}
|
||||
|
||||
- if ((p = OSSL_PARAM_locate_const(params, OSSL_KDF_PARAM_PASSWORD)) != NULL)
|
||||
@@ -53,14 +93,19 @@ Index: openssl-3.2.3/providers/implementations/kdfs/pbkdf2.c
|
||||
|
||||
if ((p = OSSL_PARAM_locate_const(params, OSSL_KDF_PARAM_SALT)) != NULL) {
|
||||
if (ctx->lower_bound_checks != 0
|
||||
@@ -327,6 +348,10 @@ static int pbkdf2_derive(const char *pas
|
||||
@@ -400,13 +427,13 @@ static int pbkdf2_derive(KDF_PBKDF2 *ctx
|
||||
}
|
||||
|
||||
#ifdef FIPS_MODULE
|
||||
- if (!fips_lower_bound_check_passed(ctx, keylen))
|
||||
+ if (!fips_lower_bound_check_passed(ctx, keylen, passlen))
|
||||
return 0;
|
||||
#else
|
||||
if (lower_bound_checks) {
|
||||
+ if (passlen < KDF_PBKDF2_MIN_PASSWORD_LEN) {
|
||||
+ ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_KEY_LENGTH);
|
||||
+ return 0;
|
||||
+ }
|
||||
if ((keylen * 8) < KDF_PBKDF2_MIN_KEY_LEN_BITS) {
|
||||
ERR_raise(ERR_LIB_PROV, PROV_R_KEY_SIZE_TOO_SMALL);
|
||||
return 0;
|
||||
int error = 0;
|
||||
int passed = pbkdf2_lower_bound_check_passed(saltlen, iter, keylen,
|
||||
- &error, NULL);
|
||||
+ passlen, &error, NULL);
|
||||
|
||||
if (!passed) {
|
||||
ERR_raise(ERR_LIB_PROV, error);
|
||||
|
@@ -1,22 +1,26 @@
|
||||
Index: openssl-3.2.3/Configurations/unix-Makefile.tmpl
|
||||
Index: openssl-3.5.0-beta1/exporters/pkg-config/libcrypto.pc.in
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/Configurations/unix-Makefile.tmpl
|
||||
+++ openssl-3.2.3/Configurations/unix-Makefile.tmpl
|
||||
@@ -1453,7 +1453,7 @@ libcrypto.pc:
|
||||
echo 'Version: '$(VERSION); \
|
||||
echo 'Libs: -L$${libdir} -lcrypto'; \
|
||||
echo 'Libs.private: $(LIB_EX_LIBS)'; \
|
||||
- echo 'Cflags: -I$${includedir}' ) > libcrypto.pc
|
||||
+ echo 'Cflags: -DOPENSSL_LOAD_CONF -I$${includedir}' ) > libcrypto.pc
|
||||
|
||||
libssl.pc:
|
||||
@ ( echo 'prefix=$(INSTALLTOP)'; \
|
||||
@@ -1470,7 +1470,7 @@ libssl.pc:
|
||||
echo 'Version: '$(VERSION); \
|
||||
echo 'Requires.private: libcrypto'; \
|
||||
echo 'Libs: -L$${libdir} -lssl'; \
|
||||
- echo 'Cflags: -I$${includedir}' ) > libssl.pc
|
||||
+ echo 'Cflags: -DOPENSSL_LOAD_CONF -I$${includedir}' ) > libssl.pc
|
||||
|
||||
openssl.pc:
|
||||
@ ( echo 'prefix=$(INSTALLTOP)'; \
|
||||
--- openssl-3.5.0-beta1.orig/exporters/pkg-config/libcrypto.pc.in
|
||||
+++ openssl-3.5.0-beta1/exporters/pkg-config/libcrypto.pc.in
|
||||
@@ -19,7 +19,7 @@ Description: OpenSSL cryptography librar
|
||||
Version: {- $OpenSSL::safe::installdata::VERSION -}
|
||||
Libs: -L${libdir} -lcrypto
|
||||
Libs.private: {- join(' ', @OpenSSL::safe::installdata::LDLIBS) -}
|
||||
-Cflags:{- $OUT = ' -I${includedir}';
|
||||
+Cflags:{- $OUT = ' -DOPENSSL_LOAD_CONF -I${includedir}';
|
||||
if (scalar @OpenSSL::safe::installdata::INCLUDEDIR_REL_PREFIX > 1) {
|
||||
$OUT = '';
|
||||
$OUT .= ' -I${prefix}/' . $_ . ' '
|
||||
Index: openssl-3.5.0-beta1/exporters/pkg-config/libssl.pc.in
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/exporters/pkg-config/libssl.pc.in
|
||||
+++ openssl-3.5.0-beta1/exporters/pkg-config/libssl.pc.in
|
||||
@@ -17,7 +17,7 @@ Description: Secure Sockets Layer and cr
|
||||
Version: {- $OpenSSL::safe::installdata::VERSION -}
|
||||
Requires.private: libcrypto
|
||||
Libs: -L${libdir} -lssl
|
||||
-Cflags:{- $OUT = ' -I${includedir}';
|
||||
+Cflags:{- $OUT = ' -DOPENSSL_LOAD_CONF -I${includedir}';
|
||||
if (scalar @OpenSSL::safe::installdata::INCLUDEDIR_REL_PREFIX > 1) {
|
||||
$OUT = '';
|
||||
$OUT .= ' -I${prefix}/' . $_ . ' '
|
||||
|
@@ -1,14 +1,28 @@
|
||||
From 936e081bd752ca0a883568aaf3b5752c9eaccb12 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Belyavskiy <dbelyavs@redhat.com>
|
||||
Date: Mon, 21 Aug 2023 15:38:21 +0200
|
||||
Subject: [PATCH 36/48]
|
||||
0080-rand-Forbid-truncated-hashes-SHA-3-in-FIPS-prov.patch
|
||||
From 0a0734b3b47640e5e0665a5775cf68e8a01f59f6 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Wed, 6 Mar 2024 19:17:16 +0100
|
||||
Subject: [PATCH 36/53] FIPS: RAND: Forbid truncated hashes & SHA-3
|
||||
|
||||
Patch-name: 0080-rand-Forbid-truncated-hashes-SHA-3-in-FIPS-prov.patch
|
||||
Patch-id: 80
|
||||
Patch-status: |
|
||||
# We believe that some changes present in CentOS are not necessary
|
||||
# because ustream has a check for FIPS version
|
||||
Section D.R "Hash Functions Acceptable for Use in the SP 800-90A DRBGs"
|
||||
of the Implementation Guidance for FIPS 140-3 [1] notes that there is no
|
||||
efficiency improvement when using truncated hash functions (i.e. SHA-224
|
||||
rather than SHA-256 or SHA-384, SHA-512/224, or SHA512/256 rather than
|
||||
SHA-512). Starting on 2023-05-16, all submissions to NIST's
|
||||
Cryptographic Module Validation Program shall only use SHA-1, SHA-256,
|
||||
or SHA-512.
|
||||
|
||||
NIST further notes that the same will apply for the truncated versions
|
||||
of SHA-3, i.e. SHA3-224 and SHA3-384, and that SHA-3 should currently
|
||||
not be used.
|
||||
|
||||
Adjust tests to only run Hash-DRBG and HMAC-DRBG tests with truncated
|
||||
algorithms in the default provider.
|
||||
|
||||
[1]: https://csrc.nist.gov/CSRC/media/Projects/cryptographic-module-validation-program/documents/fips%20140-3/FIPS%20140-3%20IG.pdf
|
||||
|
||||
Signed-off-by: Clemens Lang <cllang@redhat.com>
|
||||
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
---
|
||||
providers/implementations/rands/drbg_hash.c | 12 ++
|
||||
providers/implementations/rands/drbg_hmac.c | 12 ++
|
||||
@@ -16,11 +30,11 @@ Patch-status: |
|
||||
3 files changed, 153 insertions(+)
|
||||
|
||||
diff --git a/providers/implementations/rands/drbg_hash.c b/providers/implementations/rands/drbg_hash.c
|
||||
index fb824abfa6..b90fee6dec 100644
|
||||
index 8bb831ae35..cedf5c3894 100644
|
||||
--- a/providers/implementations/rands/drbg_hash.c
|
||||
+++ b/providers/implementations/rands/drbg_hash.c
|
||||
@@ -471,6 +471,18 @@ static int drbg_hash_set_ctx_params(void *vctx, const OSSL_PARAM params[])
|
||||
if (!ossl_drbg_verify_digest(libctx, md))
|
||||
@@ -579,6 +579,18 @@ static int drbg_hash_set_ctx_params_locked(void *vctx, const OSSL_PARAM params[]
|
||||
if (!ossl_drbg_verify_digest(ctx, libctx, md))
|
||||
return 0; /* Error already raised for us */
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
@@ -36,14 +50,14 @@ index fb824abfa6..b90fee6dec 100644
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+
|
||||
/* These are taken from SP 800-90 10.1 Table 2 */
|
||||
hash->blocklen = EVP_MD_get_size(md);
|
||||
/* See SP800-57 Part1 Rev4 5.6.1 Table 3 */
|
||||
md_size = EVP_MD_get_size(md);
|
||||
if (md_size <= 0)
|
||||
diff --git a/providers/implementations/rands/drbg_hmac.c b/providers/implementations/rands/drbg_hmac.c
|
||||
index 664a074639..cbd4d0f519 100644
|
||||
index 43b3f8766e..64b7610cd1 100644
|
||||
--- a/providers/implementations/rands/drbg_hmac.c
|
||||
+++ b/providers/implementations/rands/drbg_hmac.c
|
||||
@@ -367,6 +367,18 @@ static int drbg_hmac_set_ctx_params(void *vctx, const OSSL_PARAM params[])
|
||||
if (md != NULL && !ossl_drbg_verify_digest(libctx, md))
|
||||
@@ -505,6 +505,18 @@ static int drbg_hmac_set_ctx_params_locked(void *vctx, const OSSL_PARAM params[]
|
||||
if (md != NULL && !ossl_drbg_verify_digest(ctx, libctx, md))
|
||||
return 0; /* Error already raised for us */
|
||||
|
||||
+#ifdef FIPS_MODULE
|
||||
@@ -58,11 +72,11 @@ index 664a074639..cbd4d0f519 100644
|
||||
+ }
|
||||
+#endif /* defined(FIPS_MODULE) */
|
||||
+
|
||||
if (!ossl_prov_macctx_load_from_params(&hmac->ctx, params,
|
||||
NULL, NULL, NULL, libctx))
|
||||
return 0;
|
||||
if (md != NULL && hmac->ctx != NULL) {
|
||||
/* These are taken from SP 800-90 10.1 Table 2 */
|
||||
md_size = EVP_MD_get_size(md);
|
||||
diff --git a/test/recipes/30-test_evp_data/evprand.txt b/test/recipes/30-test_evp_data/evprand.txt
|
||||
index 0e2ee82c58..7a17e7b3e1 100644
|
||||
index 9756859c0e..e3bc794997 100644
|
||||
--- a/test/recipes/30-test_evp_data/evprand.txt
|
||||
+++ b/test/recipes/30-test_evp_data/evprand.txt
|
||||
@@ -7388,6 +7388,7 @@ Nonce.14 = 7239f92b63fb3dbe
|
||||
@@ -1098,5 +1112,5 @@ index 0e2ee82c58..7a17e7b3e1 100644
|
||||
Digest = SHA-512
|
||||
PredictionResistance = 1
|
||||
--
|
||||
2.41.0
|
||||
2.49.0
|
||||
|
||||
|
54
openssl-rh-allow-sha1-signatures.patch
Normal file
54
openssl-rh-allow-sha1-signatures.patch
Normal file
@@ -0,0 +1,54 @@
|
||||
Index: openssl-3.5.0/crypto/evp/evp_cnf.c
|
||||
===================================================================
|
||||
--- openssl-3.5.0.orig/crypto/evp/evp_cnf.c
|
||||
+++ openssl-3.5.0/crypto/evp/evp_cnf.c
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <stdio.h>
|
||||
#include <openssl/crypto.h>
|
||||
#include "internal/cryptlib.h"
|
||||
+#include "internal/sslconf.h"
|
||||
#include <openssl/conf.h>
|
||||
#include <openssl/x509.h>
|
||||
#include <openssl/x509v3.h>
|
||||
@@ -57,6 +58,15 @@ static int alg_module_init(CONF_IMODULE
|
||||
ERR_raise(ERR_LIB_EVP, EVP_R_SET_DEFAULT_PROPERTY_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
+ } else if (strcmp(oval->name, "rh-allow-sha1-signatures") == 0) {
|
||||
+ int m;
|
||||
+
|
||||
+ /* Detailed error already reported. */
|
||||
+ if (!X509V3_get_value_bool(oval, &m))
|
||||
+ return 0;
|
||||
+
|
||||
+ /* NO-OP */
|
||||
+
|
||||
} else {
|
||||
ERR_raise_data(ERR_LIB_EVP, EVP_R_UNKNOWN_OPTION,
|
||||
"name=%s, value=%s", oval->name, oval->value);
|
||||
Index: openssl-3.5.0/doc/man5/config.pod
|
||||
===================================================================
|
||||
--- openssl-3.5.0.orig/doc/man5/config.pod
|
||||
+++ openssl-3.5.0/doc/man5/config.pod
|
||||
@@ -315,6 +315,21 @@ Within the algorithm properties section,
|
||||
The value may be anything that is acceptable as a property query
|
||||
string for EVP_set_default_properties().
|
||||
|
||||
+=item B<rh-allow-sha1-signatures> (NOOP)
|
||||
+
|
||||
+The value is a boolean that can be B<yes> or B<no>. If the value is not set,
|
||||
+it behaves as if it was set to B<yes>.
|
||||
+
|
||||
+When set to B<no>, any attempt to create or verify a signature with a SHA1
|
||||
+digest will fail. To test whether your software will work with future versions
|
||||
+of OpenSSL, set this option to B<no>. This setting also affects TLS, where
|
||||
+signature algorithms that use SHA1 as digest will no longer be supported if
|
||||
+this option is set to B<no>. Because TLS 1.1 or lower use MD5-SHA1 as
|
||||
+pseudorandom function (PRF) to derive key material, disabling
|
||||
+B<rh-allow-sha1-signatures> requires the use of TLS 1.2 or newer.
|
||||
+
|
||||
+This option is not implemented in this build.
|
||||
+
|
||||
=item B<fips_mode> (deprecated)
|
||||
|
||||
The value is a boolean that can be B<yes> or B<no>. If the value is
|
28
openssl-shared-jitterentropy.patch
Normal file
28
openssl-shared-jitterentropy.patch
Normal file
@@ -0,0 +1,28 @@
|
||||
Index: openssl-3.5.0-beta1/Configurations/00-base-templates.conf
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/Configurations/00-base-templates.conf
|
||||
+++ openssl-3.5.0-beta1/Configurations/00-base-templates.conf
|
||||
@@ -107,7 +107,7 @@ my %targets=(
|
||||
ex_libs =>
|
||||
sub {
|
||||
my @libs = ();
|
||||
- push(@libs, "-l:libjitterentropy.a") if !defined($disabled{jitter});
|
||||
+ push(@libs, "-l:libjitterentropy.so") if !defined($disabled{jitter});
|
||||
push(@libs, "-lz") if !defined($disabled{zlib}) && defined($disabled{"zlib-dynamic"});
|
||||
if (!defined($disabled{brotli}) && defined($disabled{"brotli-dynamic"})) {
|
||||
push(@libs, "-lbrotlienc");
|
||||
Index: openssl-3.5.0-beta1/apps/openssl.cnf
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/apps/openssl.cnf
|
||||
+++ openssl-3.5.0-beta1/apps/openssl.cnf
|
||||
@@ -47,6 +47,10 @@ providers = provider_sect
|
||||
# Load default TLS policy configuration
|
||||
ssl_conf = ssl_module
|
||||
alg_section = evp_properties
|
||||
+random = random
|
||||
+
|
||||
+[random]
|
||||
+seed=JITTER
|
||||
|
||||
[ evp_properties ]
|
||||
# This section is intentionally added empty here to be tuned on particular systems
|
@@ -1,23 +1,23 @@
|
||||
From 42ed594a3a905830374fb65cced431748f8c639c Mon Sep 17 00:00:00 2001
|
||||
From ce9fd9a7e822c37229c482febb1f38edbf3d36b7 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Belyavskiy <dbelyavs@redhat.com>
|
||||
Date: Thu, 4 Apr 2024 11:50:58 +0200
|
||||
Subject: [PATCH 45/50] 0115-skip-quic-pairwise.patch
|
||||
Date: Thu, 7 Mar 2024 17:37:09 +0100
|
||||
Subject: [PATCH 14/53] RH: skip quic pairwise
|
||||
|
||||
Patch-name: 0115-skip-quic-pairwise.patch
|
||||
Patch-id: 115
|
||||
Patch-status: |
|
||||
# Amend tests according to Fedora/RHEL code
|
||||
# skip quic and pairwise tests temporarily
|
||||
---
|
||||
test/quicapitest.c | 4 +++-
|
||||
test/recipes/01-test_symbol_presence.t | 1 +
|
||||
test/recipes/30-test_pairwise_fail.t | 13 +++++++++++--
|
||||
3 files changed, 15 insertions(+), 3 deletions(-)
|
||||
test/recipes/30-test_pairwise_fail.t | 10 ++++++++--
|
||||
3 files changed, 12 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/test/quicapitest.c b/test/quicapitest.c
|
||||
index 41cf0fc7a8..0fb7492700 100644
|
||||
index 4782479cc6..2b41b8259c 100644
|
||||
--- a/test/quicapitest.c
|
||||
+++ b/test/quicapitest.c
|
||||
@@ -2139,7 +2139,9 @@ int setup_tests(void)
|
||||
@@ -2729,7 +2729,9 @@ int setup_tests(void)
|
||||
ADD_TEST(test_cipher_find);
|
||||
ADD_TEST(test_version);
|
||||
#if defined(DO_SSL_TRACE_TEST)
|
||||
@@ -28,8 +28,20 @@ index 41cf0fc7a8..0fb7492700 100644
|
||||
#endif
|
||||
ADD_TEST(test_quic_forbidden_apis_ctx);
|
||||
ADD_TEST(test_quic_forbidden_apis);
|
||||
diff --git a/test/recipes/01-test_symbol_presence.t b/test/recipes/01-test_symbol_presence.t
|
||||
index 222b1886ae..7e2f65cccb 100644
|
||||
--- a/test/recipes/01-test_symbol_presence.t
|
||||
+++ b/test/recipes/01-test_symbol_presence.t
|
||||
@@ -185,6 +185,7 @@ foreach (sort keys %stlibname) {
|
||||
}
|
||||
}
|
||||
my @duplicates = sort grep { $symbols{$_} > 1 } keys %symbols;
|
||||
+@duplicates = grep {($_ ne "OPENSSL_ia32cap_P") && ($_ ne "EVP_CIPHER_CTX_dup") && ($_ ne "EVP_MD_CTX_dup") } @duplicates;
|
||||
if (@duplicates) {
|
||||
note "Duplicates:";
|
||||
note join('\n', @duplicates);
|
||||
diff --git a/test/recipes/30-test_pairwise_fail.t b/test/recipes/30-test_pairwise_fail.t
|
||||
index c837d48fb4..f06ef04b1a 100644
|
||||
index a101a26fb1..43e5396766 100644
|
||||
--- a/test/recipes/30-test_pairwise_fail.t
|
||||
+++ b/test/recipes/30-test_pairwise_fail.t
|
||||
@@ -9,7 +9,7 @@
|
||||
@@ -41,18 +53,7 @@ index c837d48fb4..f06ef04b1a 100644
|
||||
use OpenSSL::Test::Utils;
|
||||
|
||||
BEGIN {
|
||||
@@ -31,28 +31,37 @@ run(test(["fips_version_test", "-config", $provconf, ">=3.1.0"]),
|
||||
SKIP: {
|
||||
skip "Skip RSA test because of no rsa in this build", 1
|
||||
if disabled("rsa");
|
||||
+ with({ exit_checker => sub {my $val = shift; return $val == 134; } },
|
||||
+ sub {
|
||||
ok(run(test(["pairwise_fail_test", "-config", $provconf,
|
||||
"-pairwise", "rsa"])),
|
||||
"fips provider rsa keygen pairwise failure test");
|
||||
+ });
|
||||
}
|
||||
|
||||
@@ -39,20 +39,26 @@ SKIP: {
|
||||
SKIP: {
|
||||
skip "Skip EC test because of no ec in this build", 2
|
||||
if disabled("ec");
|
||||
@@ -81,5 +82,5 @@ index c837d48fb4..f06ef04b1a 100644
|
||||
"-pairwise", "dsa", "-dsaparam", data_file("dsaparam.pem")])),
|
||||
"fips provider dsa keygen pairwise failure test");
|
||||
--
|
||||
2.44.0
|
||||
2.49.0
|
||||
|
||||
|
@@ -1,36 +1,60 @@
|
||||
From 9ede2b1e13f72db37718853faff74b4429084d59 Mon Sep 17 00:00:00 2001
|
||||
From a4f09a10050fa504610fc02f4dc3f066c53e7ba0 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Mon, 31 Jul 2023 09:41:28 +0200
|
||||
Subject: [PATCH 13/35] 0013-skipped-tests-EC-curves.patch
|
||||
Date: Wed, 6 Mar 2024 19:17:15 +0100
|
||||
Subject: [PATCH 13/53] RH: skipped tests EC curves
|
||||
|
||||
Patch-name: 0013-skipped-tests-EC-curves.patch
|
||||
Patch-id: 13
|
||||
Patch-status: |
|
||||
# Skipped tests from former 0011-Remove-EC-curves.patch
|
||||
From-dist-git-commit: 9409bc7044cf4b5773639cce20f51399888c45fd
|
||||
# # Skipped tests from former 0011-Remove-EC-curves.patch
|
||||
From-dist-git-commit: 4334bc837fbc64d14890fdc51679a80770d498ce
|
||||
---
|
||||
test/recipes/15-test_ec.t | 2 +-
|
||||
test/recipes/65-test_cmp_protect.t | 2 +-
|
||||
test/recipes/65-test_cmp_vfy.t | 2 +-
|
||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||
test/recipes/15-test_ec.t | 2 +-
|
||||
.../30-test_evp_data/evppkey_ecdsa_sigalg.txt | 12 ------------
|
||||
test/recipes/65-test_cmp_protect.t | 2 +-
|
||||
test/recipes/65-test_cmp_vfy.t | 2 +-
|
||||
4 files changed, 3 insertions(+), 15 deletions(-)
|
||||
|
||||
Index: openssl-3.2.3/test/recipes/15-test_ec.t
|
||||
Index: openssl-3.5.0-beta1/test/recipes/15-test_ec.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/15-test_ec.t
|
||||
+++ openssl-3.2.3/test/recipes/15-test_ec.t
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/15-test_ec.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/15-test_ec.t
|
||||
@@ -94,7 +94,7 @@ SKIP: {
|
||||
|
||||
subtest 'Check loading of fips and non-fips keys' => sub {
|
||||
plan skip_all => "FIPS is disabled"
|
||||
- if $no_fips;
|
||||
+ if 1; #SUSE specific, original value is $no_fips;
|
||||
+ if 1; #original value is $no_fips;
|
||||
|
||||
plan tests => 2;
|
||||
|
||||
Index: openssl-3.2.3/test/recipes/65-test_cmp_protect.t
|
||||
Index: openssl-3.5.0-beta1/test/recipes/30-test_evp_data/evppkey_ecdsa_sigalg.txt
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/65-test_cmp_protect.t
|
||||
+++ openssl-3.2.3/test/recipes/65-test_cmp_protect.t
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/30-test_evp_data/evppkey_ecdsa_sigalg.txt
|
||||
+++ openssl-3.5.0-beta1/test/recipes/30-test_evp_data/evppkey_ecdsa_sigalg.txt
|
||||
@@ -132,18 +132,6 @@ AAAA//////////+85vqtpxeehPO5ysL8YyVRAgEB
|
||||
3ev1gTwRBduzqqlwd54AUSgI+pjttW8zrWNitO8H1sf59MPWOESKxNtZ1+Nl
|
||||
-----END PRIVATE KEY-----
|
||||
|
||||
-PrivateKey = EC_EXPLICIT
|
||||
------BEGIN PRIVATE KEY-----
|
||||
-MIIBeQIBADCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAAB
|
||||
-AAAAAAAAAAAAAAAA////////////////MFsEIP////8AAAABAAAAAAAAAAAAAAAA
|
||||
-///////////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMV
|
||||
-AMSdNgiG5wSTamZ44ROdJreBn36QBEEE5JcIvn36opqjEm/k59Al40rBAxWM2TPG
|
||||
-l0L13Je51zHpfXQ9Z2o7IQicMXP4wSfJ0qCgg2bgydqoxlYrlLGuVQIhAP////8A
|
||||
-AAAA//////////+85vqtpxeehPO5ysL8YyVRAgEBBG0wawIBAQQgec92jwduadCk
|
||||
-OjoNRI+YT5Be5TkzZXzYCyTLkMOikDmhRANCAATtECEhQbLEaiUj/Wu0qjcr81lL
|
||||
-46dx5zYgArz/iaSNJ3W80oO+F7v04jlQ7wxQzg96R0bwKiMeq5CcW9ZFt6xg
|
||||
------END PRIVATE KEY-----
|
||||
-
|
||||
PrivateKey = B-163
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MGMCAQAwEAYHKoZIzj0CAQYFK4EEAA8ETDBKAgEBBBUDnQW0mLiHVha/jqFznX/K
|
||||
Index: openssl-3.5.0-beta1/test/recipes/65-test_cmp_protect.t
|
||||
===================================================================
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/65-test_cmp_protect.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/65-test_cmp_protect.t
|
||||
@@ -27,7 +27,7 @@ plan skip_all => "This test is not suppo
|
||||
plan skip_all => "This test is not supported in a shared library build on Windows"
|
||||
if $^O eq 'MSWin32' && !disabled("shared");
|
||||
@@ -40,10 +64,10 @@ Index: openssl-3.2.3/test/recipes/65-test_cmp_protect.t
|
||||
|
||||
my @basic_cmd = ("cmp_protect_test",
|
||||
data_file("prot_RSA.pem"),
|
||||
Index: openssl-3.2.3/test/recipes/65-test_cmp_vfy.t
|
||||
Index: openssl-3.5.0-beta1/test/recipes/65-test_cmp_vfy.t
|
||||
===================================================================
|
||||
--- openssl-3.2.3.orig/test/recipes/65-test_cmp_vfy.t
|
||||
+++ openssl-3.2.3/test/recipes/65-test_cmp_vfy.t
|
||||
--- openssl-3.5.0-beta1.orig/test/recipes/65-test_cmp_vfy.t
|
||||
+++ openssl-3.5.0-beta1/test/recipes/65-test_cmp_vfy.t
|
||||
@@ -27,7 +27,7 @@ plan skip_all => "This test is not suppo
|
||||
plan skip_all => "This test is not supported in a no-ec build"
|
||||
if disabled("ec");
|
||||
|
Reference in New Issue
Block a user