Implementation of pkey_rsa_verify. Some constification.
[openssl.git] / crypto / rsa / rsa_sign.c
index 91f03406d01dc9a67ed6ecbb682cedff9f310318..52c8c985d065c7a8582e9ef4ce9345250fa17d29 100644 (file)
@@ -144,7 +144,7 @@ int RSA_sign(int type, const unsigned char *m, unsigned int m_len,
 
 int int_rsa_verify(int dtype, const unsigned char *m, unsigned int m_len,
                unsigned char *rm, unsigned int *prm_len,
-               unsigned char *sigbuf, unsigned int siglen,
+               const unsigned char *sigbuf, unsigned int siglen,
                RSA *rsa)
        {
        int i,ret=0,sigtype;
@@ -220,9 +220,18 @@ int int_rsa_verify(int dtype, const unsigned char *m, unsigned int m_len,
                        }
                if (rm)
                        {
-                       memcpy(rm, sig->digest->data, sig->digest->length);
-                       *prm_len = sig->digest->length;
-                       ret = 1;
+                       const EVP_MD *md;
+                       md = EVP_get_digestbynid(dtype);
+                       if (md && (EVP_MD_size(md) != sig->digest->length))
+                               RSAerr(RSA_F_RSA_VERIFY,
+                                               RSA_R_INVALID_DIGEST_LENGTH);
+                       else
+                               {
+                               memcpy(rm, sig->digest->data,
+                                                       sig->digest->length);
+                               *prm_len = sig->digest->length;
+                               ret = 1;
+                               }
                        }
                else if (((unsigned int)sig->digest->length != m_len) ||
                        (memcmp(m,sig->digest->data,m_len) != 0))
@@ -243,7 +252,7 @@ err:
        }
 
 int RSA_verify(int dtype, const unsigned char *m, unsigned int m_len,
-               unsigned char *sigbuf, unsigned int siglen,
+               const unsigned char *sigbuf, unsigned int siglen,
                RSA *rsa)
        {