aboutsummaryrefslogtreecommitdiff
path: root/crypto/rsa/rsa_oaep.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/rsa/rsa_oaep.c')
-rw-r--r--crypto/rsa/rsa_oaep.c38
1 files changed, 28 insertions, 10 deletions
diff --git a/crypto/rsa/rsa_oaep.c b/crypto/rsa/rsa_oaep.c
index ffe24edcb6ee..5a1c080fcd14 100644
--- a/crypto/rsa/rsa_oaep.c
+++ b/crypto/rsa/rsa_oaep.c
@@ -76,6 +76,18 @@ int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx,
if (mgf1md == NULL)
mgf1md = md;
+#ifdef FIPS_MODULE
+ /* XOF are approved as standalone; Shake256 in Ed448; MGF */
+ if (EVP_MD_xof(md)) {
+ ERR_raise(ERR_LIB_RSA, RSA_R_DIGEST_NOT_ALLOWED);
+ return 0;
+ }
+ if (EVP_MD_xof(mgf1md)) {
+ ERR_raise(ERR_LIB_RSA, RSA_R_MGF1_DIGEST_NOT_ALLOWED);
+ return 0;
+ }
+#endif
+
mdlen = EVP_MD_get_size(md);
if (mdlen <= 0) {
ERR_raise(ERR_LIB_RSA, RSA_R_INVALID_LENGTH);
@@ -112,10 +124,8 @@ int ossl_rsa_padding_add_PKCS1_OAEP_mgf1_ex(OSSL_LIB_CTX *libctx,
dbmask_len = emlen - mdlen;
dbmask = OPENSSL_malloc(dbmask_len);
- if (dbmask == NULL) {
- ERR_raise(ERR_LIB_RSA, ERR_R_MALLOC_FAILURE);
+ if (dbmask == NULL)
goto err;
- }
/* step 3e: dbMask = MGF(mgfSeed, nLen - HLen - 1) */
if (PKCS1_MGF1(dbmask, dbmask_len, seed, mdlen, mgf1md) < 0)
@@ -184,6 +194,18 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
if (mgf1md == NULL)
mgf1md = md;
+#ifdef FIPS_MODULE
+ /* XOF are approved as standalone; Shake256 in Ed448; MGF */
+ if (EVP_MD_xof(md)) {
+ ERR_raise(ERR_LIB_RSA, RSA_R_DIGEST_NOT_ALLOWED);
+ return -1;
+ }
+ if (EVP_MD_xof(mgf1md)) {
+ ERR_raise(ERR_LIB_RSA, RSA_R_MGF1_DIGEST_NOT_ALLOWED);
+ return -1;
+ }
+#endif
+
mdlen = EVP_MD_get_size(md);
if (tlen <= 0 || flen <= 0 || mdlen <= 0)
@@ -203,16 +225,12 @@ int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
dblen = num - mdlen - 1;
db = OPENSSL_malloc(dblen);
- if (db == NULL) {
- ERR_raise(ERR_LIB_RSA, ERR_R_MALLOC_FAILURE);
+ if (db == NULL)
goto cleanup;
- }
em = OPENSSL_malloc(num);
- if (em == NULL) {
- ERR_raise(ERR_LIB_RSA, ERR_R_MALLOC_FAILURE);
+ if (em == NULL)
goto cleanup;
- }
/*
* Caller is encouraged to pass zero-padded message created with
@@ -342,7 +360,7 @@ int PKCS1_MGF1(unsigned char *mask, long len,
if (c == NULL)
goto err;
mdlen = EVP_MD_get_size(dgst);
- if (mdlen < 0)
+ if (mdlen <= 0)
goto err;
/* step 4 */
for (i = 0; outlen < len; i++) {