diff options
-rw-r--r-- | src/lib/prov/commoncrypto/commoncrypto.h | 2 | ||||
-rw-r--r-- | src/lib/prov/commoncrypto/commoncrypto_hash.cpp | 146 |
2 files changed, 73 insertions, 75 deletions
diff --git a/src/lib/prov/commoncrypto/commoncrypto.h b/src/lib/prov/commoncrypto/commoncrypto.h index da4adc8bf..34b2a3f35 100644 --- a/src/lib/prov/commoncrypto/commoncrypto.h +++ b/src/lib/prov/commoncrypto/commoncrypto.h @@ -14,8 +14,6 @@ #include <memory> #include <string> -#include <CommonCrypto/CommonCrypto.h> - namespace Botan { class HashFunction; diff --git a/src/lib/prov/commoncrypto/commoncrypto_hash.cpp b/src/lib/prov/commoncrypto/commoncrypto_hash.cpp index 81afa0e01..bb5a5debe 100644 --- a/src/lib/prov/commoncrypto/commoncrypto_hash.cpp +++ b/src/lib/prov/commoncrypto/commoncrypto_hash.cpp @@ -7,7 +7,7 @@ #include <botan/hash.h> #include <botan/internal/commoncrypto.h> - +#include <CommonCrypto/CommonCrypto.h> #include <unordered_map> namespace Botan { @@ -19,67 +19,67 @@ class CommonCrypto_HashFunction final : public HashFunction { public: - struct digest_config_t { - std::string name; - size_t digestLength; - size_t blockSize; - int (*init)(CTX *); - int (*update)(CTX *, const void *, CC_LONG len); - int (*final)(unsigned char *, CTX*); - }; - - void clear() override - { - if(m_info.init(&m_ctx) != 1) - throw CommonCrypto_Error("CC_" + m_info.name + "_Init"); - } - - std::string provider() const override { return "commoncrypto"; } - std::string name() const override { return m_info.name; } - - HashFunction* clone() const override - { - return new CommonCrypto_HashFunction(m_info); - } - - std::unique_ptr<HashFunction> copy_state() const override - { - return std::unique_ptr<CommonCrypto_HashFunction>( - new CommonCrypto_HashFunction(m_info, m_ctx)); - } - - size_t output_length() const override - { - return m_info.digestLength; - } - - size_t hash_block_size() const override - { - return m_info.blockSize; - } - - CommonCrypto_HashFunction(const digest_config_t& info) : - m_info(info) - { - clear(); - } - - CommonCrypto_HashFunction(const digest_config_t& info, const CTX &ctx) : - m_ctx(ctx), m_info(info) {} + struct digest_config_t { + std::string name; + size_t digestLength; + size_t blockSize; + int (*init)(CTX *); + int (*update)(CTX *, const void *, CC_LONG len); + int (*final)(unsigned char *, CTX*); + }; + + void clear() override + { + if(m_info.init(&m_ctx) != 1) + throw CommonCrypto_Error("CC_" + m_info.name + "_Init"); + } + + std::string provider() const override { return "commoncrypto"; } + std::string name() const override { return m_info.name; } + + HashFunction* clone() const override + { + return new CommonCrypto_HashFunction(m_info); + } + + std::unique_ptr<HashFunction> copy_state() const override + { + return std::unique_ptr<CommonCrypto_HashFunction>( + new CommonCrypto_HashFunction(m_info, m_ctx)); + } + + size_t output_length() const override + { + return m_info.digestLength; + } + + size_t hash_block_size() const override + { + return m_info.blockSize; + } + + CommonCrypto_HashFunction(const digest_config_t& info) : + m_info(info) + { + clear(); + } + + CommonCrypto_HashFunction(const digest_config_t& info, const CTX &ctx) : + m_ctx(ctx), m_info(info) {} private: void add_data(const uint8_t input[], size_t length) override - { - if(m_info.update(&m_ctx, input, length) != 1) + { + if(m_info.update(&m_ctx, input, length) != 1) throw CommonCrypto_Error("CC_" + m_info.name + "_Update"); - } + } void final_result(uint8_t output[]) override - { - if(m_info.final(output, &m_ctx) != 1) + { + if(m_info.final(output, &m_ctx) != 1) throw CommonCrypto_Error("CC_" + m_info.name + "_Final"); - clear(); - } + clear(); + } CTX m_ctx; digest_config_t m_info; @@ -89,28 +89,28 @@ class CommonCrypto_HashFunction final : public HashFunction std::unique_ptr<HashFunction> make_commoncrypto_hash(const std::string& name) { -#define MAKE_COMMONCRYPTO_HASH_3(name, hash, ctx) \ - std::unique_ptr<HashFunction>( \ - new CommonCrypto_HashFunction<CC_ ## ctx ## _CTX >({ \ - name, \ - CC_ ## hash ## _DIGEST_LENGTH, \ - CC_ ## hash ## _BLOCK_BYTES, \ - CC_ ## hash ## _Init, \ - CC_ ## hash ## _Update, \ - CC_ ## hash ## _Final \ - })); - -#define MAKE_COMMONCRYPTO_HASH_2(name, id) \ - MAKE_COMMONCRYPTO_HASH_3(name, id, id) - -#define MAKE_COMMONCRYPTO_HASH_1(id) \ - MAKE_COMMONCRYPTO_HASH_2(#id, id) +#define MAKE_COMMONCRYPTO_HASH_3(name, hash, ctx) \ + std::unique_ptr<HashFunction>( \ + new CommonCrypto_HashFunction<CC_ ## ctx ## _CTX >({ \ + name, \ + CC_ ## hash ## _DIGEST_LENGTH, \ + CC_ ## hash ## _BLOCK_BYTES, \ + CC_ ## hash ## _Init, \ + CC_ ## hash ## _Update, \ + CC_ ## hash ## _Final \ + })); + +#define MAKE_COMMONCRYPTO_HASH_2(name, id) \ + MAKE_COMMONCRYPTO_HASH_3(name, id, id) + +#define MAKE_COMMONCRYPTO_HASH_1(id) \ + MAKE_COMMONCRYPTO_HASH_2(#id, id) #if defined(BOTAN_HAS_SHA2_32) if(name == "SHA-224") return MAKE_COMMONCRYPTO_HASH_3(name, SHA224, SHA256); if(name == "SHA-256") - return MAKE_COMMONCRYPTO_HASH_2(name, SHA256); + return MAKE_COMMONCRYPTO_HASH_2(name, SHA256); #endif #if defined(BOTAN_HAS_SHA2_64) if(name == "SHA-384") @@ -127,7 +127,7 @@ make_commoncrypto_hash(const std::string& name) #if defined(BOTAN_HAS_MD5) if(name == "MD5") return MAKE_COMMONCRYPTO_HASH_1(MD5); - #endif +#endif #if defined(BOTAN_HAS_MD4) if(name == "MD4") |