crypto: fix auth tag length error when mode != GCM

PR-URL: https://github.com/nodejs/node/pull/42383
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
Tobias Nießen
2022-03-20 13:18:52 +01:00
committed by GitHub
parent 7fdb9d5534
commit cc94563c14
2 changed files with 17 additions and 2 deletions

View File

@@ -593,7 +593,8 @@ bool CipherBase::InitAuthenticated(
// Tell OpenSSL about the desired length.
if (!EVP_CIPHER_CTX_ctrl(ctx_.get(), EVP_CTRL_AEAD_SET_TAG, auth_tag_len,
nullptr)) {
THROW_ERR_CRYPTO_INVALID_AUTH_TAG(env());
THROW_ERR_CRYPTO_INVALID_AUTH_TAG(
env(), "Invalid authentication tag length: %u", auth_tag_len);
return false;
}

View File

@@ -44,7 +44,7 @@ const errMessages = {
state: / state/,
FIPS: /not supported in FIPS mode/,
length: /Invalid initialization vector/,
authTagLength: /Invalid authentication tag/
authTagLength: /Invalid authentication tag length/
};
const ciphers = crypto.getCiphers();
@@ -687,3 +687,17 @@ for (const test of TEST_CASES) {
});
}
}
{
const key = Buffer.alloc(32);
const iv = Buffer.alloc(12);
for (const authTagLength of [0, 17]) {
assert.throws(() => {
crypto.createCipheriv('chacha20-poly1305', key, iv, { authTagLength });
}, {
code: 'ERR_CRYPTO_INVALID_AUTH_TAG',
message: errMessages.authTagLength
});
}
}