diff options
| author | Egor Tensin <egor@tensin.name> | 2026-06-18 18:22:01 +0200 |
|---|---|---|
| committer | Egor Tensin <egor@tensin.name> | 2026-06-18 19:21:44 +0200 |
| commit | 2342ade23c3e8a8855cfb55f9b15818978bfb333 (patch) | |
| tree | b13bb6ad104288bcfaeedef1d02e37e427024a3d /aesxx | |
| parent | Revert "cmake: treat warnings as errors" (diff) | |
| download | aes-tools-2342ade23c3e8a8855cfb55f9b15818978bfb333.tar.gz aes-tools-2342ade23c3e8a8855cfb55f9b15818978bfb333.zip | |
switch to if constexpr (..) to remove clutter
Diffstat (limited to 'aesxx')
| -rw-r--r-- | aesxx/include/aesxx/api.hpp | 66 | ||||
| -rw-r--r-- | aesxx/include/aesxx/mode.hpp | 21 | ||||
| -rw-r--r-- | aesxx/utils/block_dumper.hpp | 30 | ||||
| -rw-r--r-- | aesxx/utils/decrypt_block.cpp | 2 | ||||
| -rw-r--r-- | aesxx/utils/encrypt_block.cpp | 2 |
5 files changed, 27 insertions, 94 deletions
diff --git a/aesxx/include/aesxx/api.hpp b/aesxx/include/aesxx/api.hpp index 1797a85..70891c9 100644 --- a/aesxx/include/aesxx/api.hpp +++ b/aesxx/include/aesxx/api.hpp @@ -48,72 +48,32 @@ void derive_decryption_keys( typename Types<algorithm>::RoundKeys& decryption_keys ); -template < - Algorithm algorithm, - Mode mode, - typename std::enable_if<ModeRequiresInitVector<mode>::value>::type* = nullptr> +template <Algorithm algorithm, Mode mode> void encrypt_block( const typename Types<algorithm>::Block& plaintext, const typename Types<algorithm>::RoundKeys& round_keys, typename Types<algorithm>::Block& iv, typename Types<algorithm>::Block& ciphertext -); - -template < - Algorithm algorithm, - Mode mode, - typename std::enable_if<!ModeRequiresInitVector<mode>::value>::type* = nullptr> -void encrypt_block( - const typename Types<algorithm>::Block& plaintext, - const typename Types<algorithm>::RoundKeys& round_keys, - typename Types<algorithm>::Block& ciphertext -); - -template < - Algorithm algorithm, - Mode mode, - typename std::enable_if<!ModeRequiresInitVector<mode>::value>::type* = nullptr> -void encrypt_block( - const typename Types<algorithm>::Block& plaintext, - const typename Types<algorithm>::RoundKeys& round_keys, - typename Types<algorithm>::Block&, - typename Types<algorithm>::Block& ciphertext ) { - encrypt_block<algorithm, mode>(plaintext, round_keys, ciphertext); + if constexpr (mode_requires_init_vector(mode)) { + encrypt_block(plaintext, round_keys, iv, ciphertext); + } else { + encrypt_block(plaintext, round_keys, ciphertext); + } } -template < - Algorithm algorithm, - Mode mode, - typename std::enable_if<ModeRequiresInitVector<mode>::value>::type* = nullptr> +template <Algorithm algorithm, Mode mode> void decrypt_block( const typename Types<algorithm>::Block& ciphertext, const typename Types<algorithm>::RoundKeys& round_keys, typename Types<algorithm>::Block& iv, typename Types<algorithm>::Block& plaintext -); - -template < - Algorithm algorithm, - Mode mode, - typename std::enable_if<!ModeRequiresInitVector<mode>::value>::type* = nullptr> -void decrypt_block( - const typename Types<algorithm>::Block& ciphertext, - const typename Types<algorithm>::RoundKeys& round_keys, - typename Types<algorithm>::Block& plaintext -); - -template < - Algorithm algorithm, - Mode mode, - typename std::enable_if<!ModeRequiresInitVector<mode>::value>::type* = nullptr> -void decrypt_block( - const typename Types<algorithm>::Block& ciphertext, - const typename Types<algorithm>::RoundKeys& round_keys, - typename Types<algorithm>::Block&, - typename Types<algorithm>::Block& plaintext ) { - decrypt_block<algorithm, mode>(ciphertext, round_keys, plaintext); + if constexpr (mode_requires_init_vector(mode)) { + encrypt_block(plaintext, round_keys, iv, ciphertext); + } else { + encrypt_block(plaintext, round_keys, ciphertext); + } } template <Algorithm algorithm, Mode mode> @@ -147,7 +107,7 @@ struct DecryptWrapper { typename Types<algorithm>::RoundKeys encryption_keys; expand_key<algorithm>(key, encryption_keys); - if (ModeUsesEncryptionKeysOnly<mode>::value) { + if constexpr (mode_uses_encryption_keys_only(mode)) { decryption_keys = encryption_keys; } else { derive_decryption_keys<algorithm>(encryption_keys, decryption_keys); diff --git a/aesxx/include/aesxx/mode.hpp b/aesxx/include/aesxx/mode.hpp index e4391a4..9fbcaae 100644 --- a/aesxx/include/aesxx/mode.hpp +++ b/aesxx/include/aesxx/mode.hpp @@ -13,26 +13,11 @@ namespace aes { typedef AES_Mode Mode; -template <Mode mode> -struct ModeRequiresInitVector : public std::true_type {}; - -template <> -struct ModeRequiresInitVector<AES_ECB> : public std::false_type {}; - -template <Mode mode> -struct ModeUsesEncryptionKeysOnly : public std::true_type {}; - -inline bool mode_requires_init_vector(Mode mode) { +inline constexpr bool mode_requires_init_vector(Mode mode) { return mode != AES_ECB; } -template <> -struct ModeUsesEncryptionKeysOnly<AES_ECB> : public std::false_type {}; - -template <> -struct ModeUsesEncryptionKeysOnly<AES_CBC> : public std::false_type {}; - -inline bool mode_uses_encryption_keys_only(Mode mode) { +inline constexpr bool mode_uses_encryption_keys_only(Mode mode) { return mode != AES_ECB && mode != AES_CBC; } @@ -41,6 +26,7 @@ inline bool mode_uses_encryption_keys_only(Mode mode) { inline void encrypt_block<AES_##prefix, AES_ECB>( \ const typename Types<AES_##prefix>::Block& plaintext, \ const typename Types<AES_##prefix>::RoundKeys& encryption_keys, \ + typename Types<AES_##prefix>::Block&, \ typename Types<AES_##prefix>::Block& ciphertext \ ) { \ ciphertext = aes_##prefix##_encrypt_block_ECB(plaintext, &encryption_keys); \ @@ -51,6 +37,7 @@ inline bool mode_uses_encryption_keys_only(Mode mode) { inline void decrypt_block<AES_##prefix, AES_ECB>( \ const typename Types<AES_##prefix>::Block& ciphertext, \ const typename Types<AES_##prefix>::RoundKeys& decryption_keys, \ + typename Types<AES_##prefix>::Block&, \ typename Types<AES_##prefix>::Block& plaintext \ ) { \ plaintext = aes_##prefix##_decrypt_block_ECB(ciphertext, &decryption_keys); \ diff --git a/aesxx/utils/block_dumper.hpp b/aesxx/utils/block_dumper.hpp index f05d41c..8284b67 100644 --- a/aesxx/utils/block_dumper.hpp +++ b/aesxx/utils/block_dumper.hpp @@ -70,30 +70,16 @@ void dump_wrapper(const aes::DecryptWrapper<algorithm, mode>& wrapper) { dump_decryption_keys<algorithm>(wrapper.decryption_keys); } -template < - aes::Algorithm algorithm, - aes::Mode mode, - typename std::enable_if<aes::ModeRequiresInitVector<mode>::value>::type* = nullptr> +template <aes::Algorithm algorithm, aes::Mode mode> void dump_next_iv(const aes::EncryptWrapper<algorithm, mode>& wrapper) { - dump_block<algorithm>("Next initialization vector", wrapper.iv); + if constexpr (aes::mode_requires_init_vector(mode)) { + dump_block<algorithm>("Next initialization vector", wrapper.iv); + } } -template < - aes::Algorithm algorithm, - aes::Mode mode, - typename std::enable_if<!aes::ModeRequiresInitVector<mode>::value>::type* = nullptr> -void dump_next_iv(const aes::EncryptWrapper<algorithm, mode>&) {} - -template < - aes::Algorithm algorithm, - aes::Mode mode, - typename std::enable_if<aes::ModeRequiresInitVector<mode>::value>::type* = nullptr> +template <aes::Algorithm algorithm, aes::Mode mode> void dump_next_iv(const aes::DecryptWrapper<algorithm, mode>& wrapper) { - dump_block<algorithm>("Next initialization vector", wrapper.iv); + if constexpr (aes::mode_requires_init_vector(mode)) { + dump_block<algorithm>("Next initialization vector", wrapper.iv); + } } - -template < - aes::Algorithm algorithm, - aes::Mode mode, - typename std::enable_if<!aes::ModeRequiresInitVector<mode>::value>::type* = nullptr> -void dump_next_iv(const aes::DecryptWrapper<algorithm, mode>&) {} diff --git a/aesxx/utils/decrypt_block.cpp b/aesxx/utils/decrypt_block.cpp index 317e6fd..f06221d 100644 --- a/aesxx/utils/decrypt_block.cpp +++ b/aesxx/utils/decrypt_block.cpp @@ -23,7 +23,7 @@ template <aes::Algorithm algorithm, aes::Mode mode> void decrypt_with_mode(const Input& input, bool verbose = false) { typename aes::Types<algorithm>::Block iv; - if (aes::ModeRequiresInitVector<mode>()) { + if constexpr (aes::mode_requires_init_vector(mode)) { aes::from_string<algorithm>(iv, input.iv); if (verbose) dump_iv<algorithm>(iv); diff --git a/aesxx/utils/encrypt_block.cpp b/aesxx/utils/encrypt_block.cpp index 5fdefd0..6bde766 100644 --- a/aesxx/utils/encrypt_block.cpp +++ b/aesxx/utils/encrypt_block.cpp @@ -23,7 +23,7 @@ template <aes::Algorithm algorithm, aes::Mode mode> void encrypt_with_mode(const Input& input, bool verbose = false) { typename aes::Types<algorithm>::Block iv; - if (aes::ModeRequiresInitVector<mode>::value) { + if constexpr (aes::mode_requires_init_vector(mode)) { aes::from_string<algorithm>(iv, input.iv); if (verbose) dump_iv<algorithm>(iv); |
