rsa_verify_hash: fix possible bleichenbacher signature attack
This commit is contained in:
parent
c6dfef95eb
commit
5eb9743410
@ -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)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user