fix: defer AES CBC w/ HMAC decryption after tag verification passes

This commit is contained in:
Filip Skokan 2021-04-09 22:10:10 +02:00
parent b8b668ebbd
commit 812e03fcf4

View file

@ -44,13 +44,17 @@ const decrypt = (size, sign, { [KEYOBJECT]: keyObject }, ciphertext, { iv, tag =
const expectedTag = sign({ [KEYOBJECT]: macKey }, macData, tag).slice(0, keySize)
const macCheckPassed = timingSafeEqual(tag, expectedTag)
if (!macCheckPassed) {
throw new JWEDecryptionFailed()
}
let cleartext
try {
const cipher = createDecipheriv(`aes-${size}-cbc`, encKey, iv)
cleartext = Buffer.concat([cipher.update(ciphertext), cipher.final()])
} catch (err) {}
if (!cleartext || !macCheckPassed) {
if (!cleartext) {
throw new JWEDecryptionFailed()
}