Additional compatibility fix for MDC2 signature format.
authorDr. Stephen Henson <steve@openssl.org>
Wed, 15 Feb 2012 14:27:25 +0000 (14:27 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Wed, 15 Feb 2012 14:27:25 +0000 (14:27 +0000)
Update RSA EVP_PKEY_METHOD to use the OCTET STRING form of MDC2 signature:
this will make all versions of MDC2 signature equivalent.

CHANGES
crypto/rsa/rsa_pmeth.c

diff --git a/CHANGES b/CHANGES
index d4163ca955b4a1be8616b987b570f723fabd2de1..a45aa8af1ac8d52b4d317d57175d402020d79596 100644 (file)
--- a/CHANGES
+++ b/CHANGES
      the correct format in RSA_verify so both forms transparently work.
      [Steve Henson]
 
+  *) Add compatibility with old MDC2 signatures which use an ASN1 OCTET
+     STRING form instead of a DigestInfo.
+     [Steve Henson]
+
   *) Some servers which support TLS 1.0 can choke if we initially indicate
      support for TLS 1.2 and later renegotiate using TLS 1.0 in the RSA
      encrypted premaster secret. As a workaround use the maximum pemitted
index caee3f6af6a1643070f2ef2cdd456adf45d24010..a59e2ee4c07fe2ee0c518b6529674e86153a2b92 100644 (file)
@@ -169,7 +169,20 @@ static int pkey_rsa_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
                                        RSA_R_INVALID_DIGEST_LENGTH);
                        return -1;
                        }
-               if (rctx->pad_mode == RSA_X931_PADDING)
+
+               if (EVP_MD_type(rctx->md) == NID_mdc2)
+                       {
+                       unsigned int sltmp;
+                       if (rctx->pad_mode != RSA_PKCS1_PADDING)
+                               return -1;
+                       ret = RSA_sign_ASN1_OCTET_STRING(NID_mdc2,
+                                               tbs, tbslen, sig, &sltmp, rsa);
+
+                       if (ret <= 0)
+                               return ret;
+                       ret = sltmp;
+                       }
+               else if (rctx->pad_mode == RSA_X931_PADDING)
                        {
                        if (!setup_tbuf(rctx, ctx))
                                return -1;