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