Wycheproof failing PKCS7 depadding test
@@ -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 {
@@ -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;