pkcs#1 v1.5 decode: fix missing check of PS length in EMSA mode
This commit is contained in:
parent
2b3c603c6c
commit
d51715db72
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user