From d3636a864c20f78f77b4c996e7381bb7ee33653c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Nie=C3=9Fen?= Date: Mon, 21 Mar 2022 16:30:07 +0100 Subject: [PATCH] src: refactor IsSupportedAuthenticatedMode Improve the function's structure and clarify the special handling of ChaCha20-Poly1305. Remove the IS_OCB_MODE macro. PR-URL: https://github.com/nodejs/node/pull/42368 Reviewed-By: Antoine du Hamel Reviewed-By: Darshan Sen --- src/crypto/crypto_cipher.cc | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/crypto/crypto_cipher.cc b/src/crypto/crypto_cipher.cc index d6c6f0c4375aad..05acefb60113c1 100644 --- a/src/crypto/crypto_cipher.cc +++ b/src/crypto/crypto_cipher.cc @@ -24,21 +24,20 @@ using v8::Uint32; using v8::Value; namespace crypto { -#ifdef OPENSSL_NO_OCB -# define IS_OCB_MODE(mode) false -#else -# define IS_OCB_MODE(mode) ((mode) == EVP_CIPH_OCB_MODE) -#endif - namespace { bool IsSupportedAuthenticatedMode(const EVP_CIPHER* cipher) { - const int mode = EVP_CIPHER_mode(cipher); - // Check `chacha20-poly1305` separately, it is also an AEAD cipher, - // but its mode is 0 which doesn't indicate - return EVP_CIPHER_nid(cipher) == NID_chacha20_poly1305 || - mode == EVP_CIPH_CCM_MODE || - mode == EVP_CIPH_GCM_MODE || - IS_OCB_MODE(mode); + switch (EVP_CIPHER_mode(cipher)) { + case EVP_CIPH_CCM_MODE: + case EVP_CIPH_GCM_MODE: +#ifndef OPENSSL_NO_OCB + case EVP_CIPH_OCB_MODE: +#endif + return true; + case EVP_CIPH_STREAM_CIPHER: + return EVP_CIPHER_nid(cipher) == NID_chacha20_poly1305; + default: + return false; + } } bool IsSupportedAuthenticatedMode(const EVP_CIPHER_CTX* ctx) {