diff options
author | Warlockbugs <Warlockbugs@users.noreply.github.com> | 2018-03-04 17:26:08 +0300 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2018-03-04 15:26:08 +0100 |
commit | 87bd1126ff3a6e8ba83fc01985d20e3436d926be (patch) | |
tree | b19d78acf6407b0afc4151a5e871d1370a1b5f5b /src/common/Cryptography/HmacHash.cpp | |
parent | 7e643662fda63c92f32cf78323acdbd08732ccea (diff) |
Core/Crypto: Transitional Cryptography update for OpenSSL 1.1 (#21534)
Support for both OpenSSL 1.0 LTS and OpenSSL 1.1 versions.
Many Linux distributions are still on 1.0 and will stay on LTS for quite
some time.
Port of CMaNGOS commit: https://github.com/cmangos/mangos-wotlk/commit/e1b0048f052eda46bb27d20224d0339960816ac2
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; } |