@ -9,21 +9,23 @@ party (section 6.4.2.3.1) for the KTS-OAEP key transport scheme and key
agreement schemes, but explicit key confirmation is not implemented and
agreement schemes, but explicit key confirmation is not implemented and
cannot be implemented without protocol changes, and the FIPS provider
cannot be implemented without protocol changes, and the FIPS provider
does not implement trusted third party validation, since it relies on
does not implement trusted third party validation, since it relies on
its callers to do that. We must thus mark RSA-OAEP encryption and RSASVE
its callers to do that. A request for guidance sent to NIST did clarify
as unapproved until we have received clarification from NIST on how
that OpenSSL can claim KTS-OAEP and RSASVE as approved, but we did add
library modules such as OpenSSL should implement TTP validation.
an indicator to mark them as unapproved previously and should thus keep
the indicator available.
This does not affect RSA-OAEP decryption, because it is approved as
This does not affect RSA-OAEP decryption, because it is approved as
a component according to the FIPS 140-3 IG, section 2.4.G.
a component according to the FIPS 140-3 IG, section 2.4.G.
Resolves: rhbz#2179331
Resolves: rhbz#2179331
Resolves: RHEL-14083
Signed-off-by: Clemens Lang <cllang@redhat.com>
Signed-off-by: Clemens Lang <cllang@redhat.com>
---
---
include/openssl/core_names.h | 2 ++
include/openssl/core_names.h | 2 ++
include/openssl/evp.h | 4 +++
include/openssl/evp.h | 4 +++
.../implementations/asymciphers/rsa_enc.c | 24 +++ ++++++++++++
.../implementations/asymciphers/rsa_enc.c | 19 ++++++++++++
providers/implementations/kem/rsa_kem.c | 30 ++++++++++++++++++-
providers/implementations/kem/rsa_kem.c | 29 ++++++++++++++++++-
4 files changed, 59 insertions(+), 1 deletion(-)
4 files changed, 53 insertions(+), 1 deletion(-)
diff --git a/include/openssl/core_names.h b/include/openssl/core_names.h
diff --git a/include/openssl/core_names.h b/include/openssl/core_names.h
index 832502a034..e15d208421 100644
index 832502a034..e15d208421 100644
@ -37,7 +39,7 @@ index 832502a034..e15d208421 100644
/*
/*
* Encoder / decoder parameters
* Encoder / decoder parameters
@@ -5 03,6 +504 ,7 @@ extern "C" {
@@ -5 11,6 +512 ,7 @@ extern "C" {
/* KEM parameters */
/* KEM parameters */
#define OSSL_KEM_PARAM_OPERATION "operation"
#define OSSL_KEM_PARAM_OPERATION "operation"
@ -49,7 +51,7 @@ diff --git a/include/openssl/evp.h b/include/openssl/evp.h
index ec2ba46fbd..3803b03422 100644
index ec2ba46fbd..3803b03422 100644
--- a/include/openssl/evp.h
--- a/include/openssl/evp.h
+++ b/include/openssl/evp.h
+++ b/include/openssl/evp.h
@@ -17 57,6 +1757 ,10 @@ OSSL_DEPRECATEDIN_3_0 size_t EVP_PKEY_meth_get_count(void);
@@ -17 64,6 +1764 ,10 @@ OSSL_DEPRECATEDIN_3_0 size_t EVP_PKEY_meth_get_count(void);
OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx);
OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx);
# endif
# endif
@ -64,25 +66,22 @@ diff --git a/providers/implementations/asymciphers/rsa_enc.c b/providers/impleme
index 568452ec56..2e7ea632d7 100644
index 568452ec56..2e7ea632d7 100644
--- a/providers/implementations/asymciphers/rsa_enc.c
--- a/providers/implementations/asymciphers/rsa_enc.c
+++ b/providers/implementations/asymciphers/rsa_enc.c
+++ b/providers/implementations/asymciphers/rsa_enc.c
@@ - 399,6 +399,27 @@ static int rsa_get_ctx_params(void *vprsactx, OSSL_PARAM *params)
@@ - 452,6 +452,24 @@ static int rsa_get_ctx_params(void *vprsactx, OSSL_PARAM *params)
if (p != NULL && !OSSL_PARAM_set_uint(p, prsactx->alt_version))
if (p != NULL && !OSSL_PARAM_set_uint(p, prsactx->alt_version))
return 0;
return 0;
+#ifdef FIPS_MODULE
+#ifdef FIPS_MODULE
+ p = OSSL_PARAM_locate(params, OSSL_ASYM_CIPHER_PARAM_REDHAT_FIPS_INDICATOR);
+ p = OSSL_PARAM_locate(params, OSSL_ASYM_CIPHER_PARAM_REDHAT_FIPS_INDICATOR);
+ if (p != NULL) {
+ if (p != NULL) {
+ int fips_indicator = EVP_PKEY_REDHAT_FIPS_INDICATOR_APPROVED;
+
+ /* NIST SP 800-56Br2 section 6.4.2.1 requires either explicit key
+ /* NIST SP 800-56Br2 section 6.4.2.1 requires either explicit key
+ * confirmation (section 6.4.2.3.2), or assurance from a trusted third
+ * confirmation (section 6.4.2.3.2), or assurance from a trusted third
+ * party (section 6.4.2.3.1) for the KTS-OAEP key transport scheme, but
+ * party (section 6.4.2.3.1) for the KTS-OAEP key transport scheme, but
+ * explicit key confirmation is not implemented here and cannot be
+ * explicit key confirmation is not implemented here and cannot be
+ * implemented without protocol changes, and the FIPS provider does not
+ * implemented without protocol changes, and the FIPS provider does not
+ * implement trusted third party validation, since it relies on its
+ * implement trusted third party validation, since it relies on its
+ * callers to do that. We must thus mark RSA-OAEP as unapproved until
+ * callers to do that. A request for guidance sent to NIST resulted in
+ * we have received clarification from NIST on how library modules such
+ * further clarification which allows OpenSSL to claim RSA-OAEP. */
+ * as OpenSSL should implement TTP validation. */
+ int fips_indicator = EVP_PKEY_REDHAT_FIPS_INDICATOR_APPROVED;
+ fips_indicator = EVP_PKEY_REDHAT_FIPS_INDICATOR_NOT_APPROVED;
+
+
+ if (!OSSL_PARAM_set_int(p, fips_indicator))
+ if (!OSSL_PARAM_set_int(p, fips_indicator))
+ return 0;
+ return 0;
@ -92,7 +91,7 @@ index 568452ec56..2e7ea632d7 100644
return 1;
return 1;
}
}
@@ -465,6 +4 9 3,7 @@ static const OSSL_PARAM known_gettable_ctx_params[] = {
@@ -465,6 +4 8 3,7 @@ static const OSSL_PARAM known_gettable_ctx_params[] = {
OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION, NULL),
OSSL_PARAM_uint(OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION, NULL),
#ifdef FIPS_MODULE
#ifdef FIPS_MODULE
OSSL_PARAM_octet_string(OSSL_ASYM_CIPHER_PARAM_REDHAT_KAT_OEAP_SEED, NULL, 0),
OSSL_PARAM_octet_string(OSSL_ASYM_CIPHER_PARAM_REDHAT_KAT_OEAP_SEED, NULL, 0),
@ -104,7 +103,7 @@ diff --git a/providers/implementations/kem/rsa_kem.c b/providers/implementations
index 882cf16125..b4cc0f9237 100644
index 882cf16125..b4cc0f9237 100644
--- a/providers/implementations/kem/rsa_kem.c
--- a/providers/implementations/kem/rsa_kem.c
+++ b/providers/implementations/kem/rsa_kem.c
+++ b/providers/implementations/kem/rsa_kem.c
@@ -151,11 +151,3 9 @@ static int rsakem_decapsulate_init(void *vprsactx, void *vrsa,
@@ -151,11 +151,3 8 @@ static int rsakem_decapsulate_init(void *vprsactx, void *vrsa,
static int rsakem_get_ctx_params(void *vprsactx, OSSL_PARAM *params)
static int rsakem_get_ctx_params(void *vprsactx, OSSL_PARAM *params)
{
{
PROV_RSA_CTX *ctx = (PROV_RSA_CTX *)vprsactx;
PROV_RSA_CTX *ctx = (PROV_RSA_CTX *)vprsactx;
@ -124,10 +123,9 @@ index 882cf16125..b4cc0f9237 100644
+ * explicit key confirmation is not implemented here and cannot be
+ * explicit key confirmation is not implemented here and cannot be
+ * implemented without protocol changes, and the FIPS provider does not
+ * implemented without protocol changes, and the FIPS provider does not
+ * implement trusted third party validation, since it relies on its
+ * implement trusted third party validation, since it relies on its
+ * callers to do that. We must thus mark RSASVE unapproved until we
+ * callers to do that. A request for guidance sent to NIST resulted in
+ * have received clarification from NIST on how library modules such as
+ * further clarification which allows OpenSSL to claim RSASVE. */
+ * OpenSSL should implement TTP validation. */
+ int fips_indicator = EVP_PKEY_REDHAT_FIPS_INDICATOR_APPROVED;
+ int fips_indicator = EVP_PKEY_REDHAT_FIPS_INDICATOR_NOT_APPROVED;
+
+
+ if (!OSSL_PARAM_set_int(p, fips_indicator))
+ if (!OSSL_PARAM_set_int(p, fips_indicator))
+ return 0;
+ return 0;