瀏覽代碼

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

Steffen Jaeckel 11 年之前
父節點
當前提交
d51715db72
共有 1 個文件被更改,包括 10 次插入3 次删除
  1. 10 3
      src/pk/pkcs1/pkcs_1_v1_5_decode.c

+ 10 - 3
src/pk/pkcs1/pkcs_1_v1_5_decode.c

@@ -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;