diff options
Diffstat (limited to 'src/common/Cryptography/HmacHash.cpp')
-rw-r--r-- | src/common/Cryptography/HmacHash.cpp | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/common/Cryptography/HmacHash.cpp b/src/common/Cryptography/HmacHash.cpp index 5144c98d76c..d5945517da0 100644 --- a/src/common/Cryptography/HmacHash.cpp +++ b/src/common/Cryptography/HmacHash.cpp @@ -21,44 +21,58 @@ #include "Errors.h" #include <cstring> +#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x10100000L +HMAC_CTX* HMAC_CTX_new() +{ + HMAC_CTX *ctx = new HMAC_CTX(); + HMAC_CTX_init(ctx); + return ctx; +} + +void HMAC_CTX_free(HMAC_CTX* ctx) +{ + HMAC_CTX_cleanup(ctx); + delete ctx; +} +#endif + template<HashCreateFn HashCreator, uint32 DigestLength> -HmacHash<HashCreator, DigestLength>::HmacHash(uint32 len, uint8 const* seed) +HmacHash<HashCreator, DigestLength>::HmacHash(uint32 len, uint8 const* seed) : _ctx(HMAC_CTX_new()) { - HMAC_CTX_init(&_ctx); - HMAC_Init_ex(&_ctx, seed, len, HashCreator(), NULL); + HMAC_Init_ex(_ctx, seed, len, HashCreator(), nullptr); memset(_digest, 0, DigestLength); } template<HashCreateFn HashCreator, uint32 DigestLength> HmacHash<HashCreator, DigestLength>::~HmacHash() { - HMAC_CTX_cleanup(&_ctx); + HMAC_CTX_free(_ctx); } template<HashCreateFn HashCreator, uint32 DigestLength> -void HmacHash<HashCreator, DigestLength>::UpdateData(const std::string &str) +void HmacHash<HashCreator, DigestLength>::UpdateData(std::string const& str) { - HMAC_Update(&_ctx, (uint8 const*)str.c_str(), str.length()); + HMAC_Update(_ctx, reinterpret_cast<uint8 const*>(str.c_str()), str.length()); } template<HashCreateFn HashCreator, uint32 DigestLength> -void HmacHash<HashCreator, DigestLength>::UpdateData(const uint8* data, size_t len) +void HmacHash<HashCreator, DigestLength>::UpdateData(uint8 const* data, size_t len) { - HMAC_Update(&_ctx, data, len); + HMAC_Update(_ctx, data, len); } template<HashCreateFn HashCreator, uint32 DigestLength> void HmacHash<HashCreator, DigestLength>::Finalize() { uint32 length = 0; - HMAC_Final(&_ctx, _digest, &length); + HMAC_Final(_ctx, _digest, &length); ASSERT(length == DigestLength); } template<HashCreateFn HashCreator, uint32 DigestLength> uint8* HmacHash<HashCreator, DigestLength>::ComputeHash(BigNumber* bn) { - HMAC_Update(&_ctx, bn->AsByteArray().get(), bn->GetNumBytes()); + HMAC_Update(_ctx, bn->AsByteArray().get(), bn->GetNumBytes()); Finalize(); return _digest; } |