diff options
Diffstat (limited to 'src/lib/libcrypto/rsa/rsa_sign.c')
| -rw-r--r-- | src/lib/libcrypto/rsa/rsa_sign.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/lib/libcrypto/rsa/rsa_sign.c b/src/lib/libcrypto/rsa/rsa_sign.c index cee09eccb1..db86f1ac58 100644 --- a/src/lib/libcrypto/rsa/rsa_sign.c +++ b/src/lib/libcrypto/rsa/rsa_sign.c | |||
| @@ -185,6 +185,23 @@ int RSA_verify(int dtype, const unsigned char *m, unsigned int m_len, | |||
| 185 | sig=d2i_X509_SIG(NULL,&p,(long)i); | 185 | sig=d2i_X509_SIG(NULL,&p,(long)i); |
| 186 | 186 | ||
| 187 | if (sig == NULL) goto err; | 187 | if (sig == NULL) goto err; |
| 188 | |||
| 189 | /* Excess data can be used to create forgeries */ | ||
| 190 | if(p != s+i) | ||
| 191 | { | ||
| 192 | RSAerr(RSA_F_RSA_VERIFY,RSA_R_BAD_SIGNATURE); | ||
| 193 | goto err; | ||
| 194 | } | ||
| 195 | |||
| 196 | /* Parameters to the signature algorithm can also be used to | ||
| 197 | create forgeries */ | ||
| 198 | if(sig->algor->parameter | ||
| 199 | && ASN1_TYPE_get(sig->algor->parameter) != V_ASN1_NULL) | ||
| 200 | { | ||
| 201 | RSAerr(RSA_F_RSA_VERIFY,RSA_R_BAD_SIGNATURE); | ||
| 202 | goto err; | ||
| 203 | } | ||
| 204 | |||
| 188 | sigtype=OBJ_obj2nid(sig->algor->algorithm); | 205 | sigtype=OBJ_obj2nid(sig->algor->algorithm); |
| 189 | 206 | ||
| 190 | 207 | ||
