diff options
author | Jack Lloyd <[email protected]> | 2016-09-15 09:16:46 -0400 |
---|---|---|
committer | Jack Lloyd <[email protected]> | 2016-09-15 09:25:49 -0400 |
commit | 04bf8dc51861bab37d6260de8b318dc71ea4bba7 (patch) | |
tree | 03cf4b8d607607444049bc2b9880abc4c1fc6a8e /src/lib/modes | |
parent | a7eba3629cc0d76444f5241fb4b9e8793ddb61cd (diff) |
Add T::provider() to allow user to inquire about implementation used
For block ciphers, stream ciphers, hashes, MACs, and cipher modes.
Cipher_Mode already had it, with a slightly different usage.
Diffstat (limited to 'src/lib/modes')
-rw-r--r-- | src/lib/modes/aead/gcm/gcm.cpp | 10 | ||||
-rw-r--r-- | src/lib/modes/aead/gcm/gcm.h | 2 | ||||
-rw-r--r-- | src/lib/modes/cipher_mode.h | 15 |
3 files changed, 19 insertions, 8 deletions
diff --git a/src/lib/modes/aead/gcm/gcm.cpp b/src/lib/modes/aead/gcm/gcm.cpp index e23551cb4..590c0d0ce 100644 --- a/src/lib/modes/aead/gcm/gcm.cpp +++ b/src/lib/modes/aead/gcm/gcm.cpp @@ -185,6 +185,16 @@ std::string GCM_Mode::name() const return (m_cipher_name + "/GCM"); } +const char* GCM_Mode::provider() const + { +#if defined(BOTAN_HAS_GCM_CLMUL) + if(CPUID::has_clmul()) + return "clmul"; +#endif + + return "base"; + } + size_t GCM_Mode::update_granularity() const { return m_BS; diff --git a/src/lib/modes/aead/gcm/gcm.h b/src/lib/modes/aead/gcm/gcm.h index ba0d6cad8..f0176f36a 100644 --- a/src/lib/modes/aead/gcm/gcm.h +++ b/src/lib/modes/aead/gcm/gcm.h @@ -36,6 +36,8 @@ class BOTAN_DLL GCM_Mode : public AEAD_Mode size_t tag_size() const override { return m_tag_size; } void clear() override; + + const char* provider() const override; protected: GCM_Mode(BlockCipher* cipher, size_t tag_size); diff --git a/src/lib/modes/cipher_mode.h b/src/lib/modes/cipher_mode.h index 73a5f7d96..fa4c0aa8d 100644 --- a/src/lib/modes/cipher_mode.h +++ b/src/lib/modes/cipher_mode.h @@ -113,14 +113,6 @@ class BOTAN_DLL Cipher_Mode */ virtual bool valid_nonce_length(size_t nonce_len) const = 0; - /** - * Return some short name describing the provider of this tranformation. - * Useful in cases where multiple implementations are available (eg, - * different implementations of AES). Default "core" is used for the - * 'standard' implementation included in the library. - */ - virtual std::string provider() const { return "core"; } - virtual std::string name() const = 0; virtual void clear() = 0; @@ -174,6 +166,13 @@ class BOTAN_DLL Cipher_Mode key_schedule(key, length); } + /** + * @return provider information about this implementation. Default is "base", + * might also return "sse2", "avx2", "openssl", or some other arbitrary string. + * The return value is guaranteed to point to a string literal constant. + */ + virtual const char* provider() const { return "base"; } + private: virtual void key_schedule(const byte key[], size_t length) = 0; }; |