diff options
author | Warlockbugs <Warlockbugs@users.noreply.github.com> | 2018-03-04 17:53:41 +0300 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2018-03-04 15:53:41 +0100 |
commit | efef6b5e36a8cd8eca023b8aa6a5d8cbd532ca68 (patch) | |
tree | 47e8c0cf598600387543431db2a2312c14f9129a /src/common/Cryptography/HMACSHA1.cpp | |
parent | 1560224d73085801fbde85056bb1117905d1308c (diff) |
Core/Crypto: Transitional Cryptography update for OpenSSL 1.1 (#21533)
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/HMACSHA1.cpp')
-rw-r--r-- | src/common/Cryptography/HMACSHA1.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/common/Cryptography/HMACSHA1.cpp b/src/common/Cryptography/HMACSHA1.cpp index ce8df47b605..c5e6e448fe3 100644 --- a/src/common/Cryptography/HMACSHA1.cpp +++ b/src/common/Cryptography/HMACSHA1.cpp @@ -21,38 +21,53 @@ #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 + HmacHash::HmacHash(uint32 len, uint8* seed) { - HMAC_CTX_init(&m_ctx); - HMAC_Init_ex(&m_ctx, seed, len, EVP_sha1(), nullptr); + m_ctx = HMAC_CTX_new(); + HMAC_Init_ex(m_ctx, seed, len, EVP_sha1(), nullptr); memset(m_digest, 0, sizeof(m_digest)); } HmacHash::~HmacHash() { - HMAC_CTX_cleanup(&m_ctx); + HMAC_CTX_free(m_ctx); } void HmacHash::UpdateData(std::string const& str) { - HMAC_Update(&m_ctx, (uint8 const*)str.c_str(), str.length()); + HMAC_Update(m_ctx, reinterpret_cast<uint8 const*>(str.c_str()), str.length()); } void HmacHash::UpdateData(uint8 const* data, size_t len) { - HMAC_Update(&m_ctx, data, len); + HMAC_Update(m_ctx, data, len); } void HmacHash::Finalize() { uint32 length = 0; - HMAC_Final(&m_ctx, (uint8*)m_digest, &length); + HMAC_Final(m_ctx, m_digest, &length); ASSERT(length == SHA_DIGEST_LENGTH); } -uint8 *HmacHash::ComputeHash(BigNumber* bn) +uint8* HmacHash::ComputeHash(BigNumber* bn) { - HMAC_Update(&m_ctx, bn->AsByteArray().get(), bn->GetNumBytes()); + HMAC_Update(m_ctx, bn->AsByteArray().get(), bn->GetNumBytes()); Finalize(); - return (uint8*)m_digest; + return m_digest; } |