The logic in the main signing and verifying functions to check lengths was
authorRichard Levitte <levitte@openssl.org>
Tue, 26 Nov 2002 11:14:32 +0000 (11:14 +0000)
committerRichard Levitte <levitte@openssl.org>
Tue, 26 Nov 2002 11:14:32 +0000 (11:14 +0000)
incorrect.  Fortunately, there is a second check that's correct, when adding
the pads.
PR: 355

crypto/rsa/rsa.h
crypto/rsa/rsa_pk1.c
crypto/rsa/rsa_saos.c
crypto/rsa/rsa_sign.c

index 98b3bd7..b2e25e4 100644 (file)
@@ -175,6 +175,8 @@ struct rsa_st
 #define RSA_NO_PADDING         3
 #define RSA_PKCS1_OAEP_PADDING 4
 
 #define RSA_NO_PADDING         3
 #define RSA_PKCS1_OAEP_PADDING 4
 
+#define RSA_PKCS1_PADDING_SIZE 11
+
 #define RSA_set_app_data(s,arg)         RSA_set_ex_data(s,0,arg)
 #define RSA_get_app_data(s)             RSA_get_ex_data(s,0)
 
 #define RSA_set_app_data(s,arg)         RSA_set_ex_data(s,0,arg)
 #define RSA_get_app_data(s)             RSA_get_ex_data(s,0)
 
index c1edd67..8560755 100644 (file)
@@ -68,7 +68,7 @@ int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen,
        int j;
        unsigned char *p;
 
        int j;
        unsigned char *p;
 
-       if (flen > (tlen-11))
+       if (flen > (tlen-RSA_PKCS1_PADDING_SIZE))
                {
                RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1,RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE);
                return(0);
                {
                RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1,RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE);
                return(0);
index 85adacc..423cb50 100644 (file)
@@ -77,7 +77,7 @@ int RSA_sign_ASN1_OCTET_STRING(int type,
 
        i=i2d_ASN1_OCTET_STRING(&sig,NULL);
        j=RSA_size(rsa);
 
        i=i2d_ASN1_OCTET_STRING(&sig,NULL);
        j=RSA_size(rsa);
-       if ((i-RSA_PKCS1_PADDING) > j)
+       if (i > (j-RSA_PKCS1_PADDING_SIZE))
                {
                RSAerr(RSA_F_RSA_SIGN_ASN1_OCTET_STRING,RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY);
                return(0);
                {
                RSAerr(RSA_F_RSA_SIGN_ASN1_OCTET_STRING,RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY);
                return(0);
index 2a44090..c53ca73 100644 (file)
@@ -113,7 +113,7 @@ int RSA_sign(int type, const unsigned char *m, unsigned int m_len,
                i=i2d_X509_SIG(&sig,NULL);
        }
        j=RSA_size(rsa);
                i=i2d_X509_SIG(&sig,NULL);
        }
        j=RSA_size(rsa);
-       if ((i-RSA_PKCS1_PADDING) > j)
+       if (i > (j-RSA_PKCS1_PADDING_SIZE))
                {
                RSAerr(RSA_F_RSA_SIGN,RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY);
                return(0);
                {
                RSAerr(RSA_F_RSA_SIGN,RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY);
                return(0);