pkcs#1 v1.5 decode: fix missing check of PS length in EMSA mode

This commit is contained in:
Steffen Jaeckel 2014-08-19 19:20:22 +02:00
parent 2b3c603c6c
commit d51715db72

View File

@ -65,9 +65,8 @@ int pkcs_1_v1_5_decode(const unsigned char *msg,
}
ps_len = i++ - 2;
if ((i >= modulus_len) || (ps_len < 8)) {
/* There was no octet with hexadecimal value 0x00 to separate ps from m,
* or the length of ps is less than 8 octets.
if (i >= modulus_len) {
/* There was no octet with hexadecimal value 0x00 to separate ps from m.
*/
result = CRYPT_INVALID_PACKET;
goto bail;
@ -87,6 +86,14 @@ int pkcs_1_v1_5_decode(const unsigned char *msg,
ps_len = i - 2;
}
if (ps_len < 8)
{
/* The length of ps is less than 8 octets.
*/
result = CRYPT_INVALID_PACKET;
goto bail;
}
if (*outlen < (msglen - (2 + ps_len + 1))) {
*outlen = msglen - (2 + ps_len + 1);
result = CRYPT_BUFFER_OVERFLOW;