Harmonize Tru64 and Linux make rules.
[oweals/openssl.git] / crypto / rsa / rsa_pmeth.c
index 0b42f1f434d1a865a023f7a656849922cda3efa8..7fe1b62ce3377a03037ec51f52085b23ce143be8 100644 (file)
@@ -605,12 +605,16 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
                return 1;
 
                case EVP_PKEY_CTRL_RSA_OAEP_MD:
+               case EVP_PKEY_CTRL_GET_RSA_OAEP_MD:
                if (rctx->pad_mode != RSA_PKCS1_OAEP_PADDING)
                        {
                        RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_PADDING_MODE);
-                       return 0;
+                       return -2;
                        }
-               rctx->md = p2;
+               if (type == EVP_PKEY_CTRL_GET_RSA_OAEP_MD)
+                       *(const EVP_MD **)p2 = rctx->md;
+               else
+                       rctx->md = p2;
                return 1;
 
                case EVP_PKEY_CTRL_MD:
@@ -643,11 +647,34 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
                return 1;
 
                case EVP_PKEY_CTRL_RSA_OAEP_LABEL:
-               OPENSSL_free(rctx->oaep_label);
-               rctx->oaep_label = p2;
-               rctx->oaep_labellen = p1;
+               if (rctx->pad_mode != RSA_PKCS1_OAEP_PADDING)
+                       {
+                       RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_PADDING_MODE);
+                       return -2;
+                       }
+               if (rctx->oaep_label)
+                       OPENSSL_free(rctx->oaep_label);
+               if (p2 && p1 > 0)
+                       {
+                       rctx->oaep_label = p2;
+                       rctx->oaep_labellen = p1;
+                       }
+               else
+                       {
+                       rctx->oaep_label = NULL;
+                       rctx->oaep_labellen = 0;
+                       }
                return 1;
 
+               case EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL:
+               if (rctx->pad_mode != RSA_PKCS1_OAEP_PADDING)
+                       {
+                       RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_PADDING_MODE);
+                       return -2;
+                       }
+               *(unsigned char **)p2 = rctx->oaep_label;
+               return rctx->oaep_labellen;
+
                case EVP_PKEY_CTRL_DIGESTINIT:
                case EVP_PKEY_CTRL_PKCS7_ENCRYPT:
                case EVP_PKEY_CTRL_PKCS7_DECRYPT:
@@ -655,16 +682,6 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
                return 1;
 #ifndef OPENSSL_NO_CMS
                case EVP_PKEY_CTRL_CMS_DECRYPT:
-               {
-               X509_ALGOR *alg = NULL;
-               ASN1_OBJECT *encalg = NULL;
-               if (p2)
-                       CMS_RecipientInfo_ktri_get0_algs(p2, NULL, NULL, &alg);
-               if (alg)
-                       X509_ALGOR_get0(&encalg, NULL, NULL, alg);
-               if (encalg && OBJ_obj2nid(encalg) == NID_rsaesOaep)
-                       rctx->pad_mode = RSA_PKCS1_OAEP_PADDING;
-               }
                case EVP_PKEY_CTRL_CMS_ENCRYPT:
                case EVP_PKEY_CTRL_CMS_SIGN:
                return 1;