Explorar o código

Merge pull request #454 from libtom/pr/wycheproof-padding

Wycheproof failing PKCS7 depadding test
karel-m %!s(int64=7) %!d(string=hai) anos
pai
achega
60eb5d0591
Modificáronse 2 ficheiros con 10 adicións e 1 borrados
  1. 1 1
      src/misc/padding/padding_depad.c
  2. 9 0
      tests/padding_test.c

+ 1 - 1
src/misc/padding/padding_depad.c

@@ -36,7 +36,7 @@ int padding_depad(const unsigned char *data, unsigned long *length, unsigned lon
    if (type < LTC_PAD_ONE_AND_ZERO) {
       pad = data[padded_length - 1];
 
-      if (pad > padded_length) return CRYPT_INVALID_ARG;
+      if (pad > padded_length || pad == 0) return CRYPT_INVALID_ARG;
 
       unpadded_length = padded_length - pad;
    } else {

+ 9 - 0
tests/padding_test.c

@@ -194,6 +194,15 @@ int padding_test(void)
       }
    }
 
+   /* wycheproof failing test - https://github.com/libtom/libtomcrypt/pull/454 */
+   {
+      unsigned char data[] = { 0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
+      unsigned long len = sizeof(data);
+      int err;
+
+      err = padding_depad(data, &len, (LTC_PAD_PKCS7 | 16));
+      if (err == CRYPT_OK) return CRYPT_FAIL_TESTVECTOR; /* should fail */
+   }
 
    return CRYPT_OK;
 }