diff options
Diffstat (limited to 'src/Volume/Cipher.cpp')
-rw-r--r-- | src/Volume/Cipher.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/Volume/Cipher.cpp b/src/Volume/Cipher.cpp index be8cc3eb..1b5df79f 100644 --- a/src/Volume/Cipher.cpp +++ b/src/Volume/Cipher.cpp @@ -24,6 +24,23 @@ #endif #include "Crypto/cpu.h" +extern "C" int IsAesHwCpuSupported () +{ +#ifdef TC_AES_HW_CPU + static bool state = false; + static bool stateValid = false; + + if (!stateValid) + { + state = g_hasAESNI ? true : false; + stateValid = true; + } + return state && Cipher::IsHwSupportEnabled(); +#else + return false; +#endif +} + namespace VeraCrypt { Cipher::Cipher () : Initialized (false) @@ -349,6 +366,39 @@ namespace VeraCrypt { camellia_set_key (key, ScheduledKey.Ptr()); } + + void CipherCamellia::EncryptBlocks (byte *data, size_t blockCount) const + { + if (!Initialized) + throw NotInitialized (SRC_POS); + +#if CRYPTOPP_BOOL_X64 + camellia_encrypt_blocks ( ScheduledKey.Ptr(), data, data, blockCount); +#else + Cipher::EncryptBlocks (data, blockCount); +#endif + } + + void CipherCamellia::DecryptBlocks (byte *data, size_t blockCount) const + { + if (!Initialized) + throw NotInitialized (SRC_POS); + +#if CRYPTOPP_BOOL_X64 + camellia_decrypt_blocks ( ScheduledKey.Ptr(), data, data, blockCount); +#else + Cipher::DecryptBlocks (data, blockCount); +#endif + } + + bool CipherCamellia::IsHwSupportAvailable () const + { +#if CRYPTOPP_BOOL_X64 + return true; +#else + return false; +#endif + } // GOST89 void CipherGost89::Decrypt (byte *data) const |