rsa_verify_hash: fix possible bleichenbacher signature attack

This commit is contained in:
Steffen Jaeckel 2014-08-06 15:03:46 +02:00
parent c6dfef95eb
commit 5eb9743410

View File

@ -103,7 +103,7 @@ int rsa_verify_hash_ex(const unsigned char *sig, unsigned long siglen,
} else { } else {
/* PKCS #1 v1.5 decode it */ /* PKCS #1 v1.5 decode it */
unsigned char *out; unsigned char *out;
unsigned long outlen, loid[16]; unsigned long outlen, loid[16], reallen;
int decoded; int decoded;
ltc_asn1_list digestinfo[2], siginfo[2]; ltc_asn1_list digestinfo[2], siginfo[2];
@ -145,8 +145,14 @@ int rsa_verify_hash_ex(const unsigned char *sig, unsigned long siglen,
goto bail_2; goto bail_2;
} }
if ((err = der_length_sequence(siginfo, 2, &reallen)) != CRYPT_OK) {
XFREE(out);
goto bail_2;
}
/* test OID */ /* test OID */
if ((digestinfo[0].size == hash_descriptor[hash_idx].OIDlen) && if ((reallen == outlen) &&
(digestinfo[0].size == hash_descriptor[hash_idx].OIDlen) &&
(XMEMCMP(digestinfo[0].data, hash_descriptor[hash_idx].OID, sizeof(unsigned long) * hash_descriptor[hash_idx].OIDlen) == 0) && (XMEMCMP(digestinfo[0].data, hash_descriptor[hash_idx].OID, sizeof(unsigned long) * hash_descriptor[hash_idx].OIDlen) == 0) &&
(siginfo[1].size == hashlen) && (siginfo[1].size == hashlen) &&
(XMEMCMP(siginfo[1].data, hash, hashlen) == 0)) { (XMEMCMP(siginfo[1].data, hash, hashlen) == 0)) {