Files
azerothcore-wotlk/src/common/Cryptography/HMACSHA1.cpp
Viste(kirill) 53364abcd7 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
2018-05-02 13:57:57 +03:00

62 lines
1.4 KiB
C++

/*
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-GPL2
* Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
*/
#include "HMACSHA1.h"
#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)
{
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_free(m_ctx);
}
void HmacHash::UpdateData(const std::string &str)
{
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);
}
void HmacHash::Finalize()
{
uint32 length = 0;
HMAC_Final(m_ctx, m_digest, &length);
ASSERT(length == SHA_DIGEST_LENGTH);
}
uint8* HmacHash::ComputeHash(BigNumber* bn)
{
HMAC_Update(m_ctx, bn->AsByteArray().get(), bn->GetNumBytes());
Finalize();
return m_digest;
}