Core/Crypto: Transitional Cryptography update for OpenSSL 1.1
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: cmangos/mangos-wotlk@e1b0048
This commit is contained in:
@@ -8,38 +8,54 @@
|
||||
#include "BigNumber.h"
|
||||
#include "Common.h"
|
||||
|
||||
#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(), NULL);
|
||||
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(const std::string &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(const uint8* 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user