aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-05-04 11:49:32 +0200
committerShauren <shauren.trinity@gmail.com>2014-05-04 11:49:32 +0200
commitf0d6f87138a915825f9986fae80ccd1fb72c154c (patch)
tree82cab127aa24d4e6c6cd5af9587f0ed5f8b49ef9
parent769fadd104978b8a45995dc652539b2c619b54f1 (diff)
Core/Battle.net: Fixed encryption
-rw-r--r--src/server/authserver/Server/BattlenetPacketCrypt.cpp17
-rw-r--r--src/server/shared/Cryptography/HmacHash.cpp2
2 files changed, 11 insertions, 8 deletions
diff --git a/src/server/authserver/Server/BattlenetPacketCrypt.cpp b/src/server/authserver/Server/BattlenetPacketCrypt.cpp
index 10aa684e10a..31fcfdd930a 100644
--- a/src/server/authserver/Server/BattlenetPacketCrypt.cpp
+++ b/src/server/authserver/Server/BattlenetPacketCrypt.cpp
@@ -26,14 +26,17 @@ Battlenet::PacketCrypt::PacketCrypt() : ::PacketCrypt(SHA256_DIGEST_LENGTH)
void Battlenet::PacketCrypt::Init(BigNumber* K)
{
uint8 ServerEncryptionKey[SEED_KEY_SIZE] = { 0x68, 0xE0, 0xC7, 0x2E, 0xDD, 0xD6, 0xD2, 0xF3, 0x1E, 0x5A, 0xB1, 0x55, 0xB1, 0x8B, 0x63, 0x1E };
- HmacHash serverEncryptHmac(SEED_KEY_SIZE, ServerEncryptionKey, EVP_sha256(), SHA256_DIGEST_LENGTH);
- uint8 *encryptHash = serverEncryptHmac.ComputeHash(K);
-
uint8 ClientDecryptionKey[SEED_KEY_SIZE] = { 0xDE, 0xA9, 0x65, 0xAE, 0x54, 0x3A, 0x1E, 0x93, 0x9E, 0x69, 0x0C, 0xAA, 0x68, 0xDE, 0x78, 0x39 };
- HmacHash clientDecryptHmac(SEED_KEY_SIZE, ClientDecryptionKey, EVP_sha256(), SHA256_DIGEST_LENGTH);
- uint8 *decryptHash = clientDecryptHmac.ComputeHash(K);
- _clientDecrypt.Init(decryptHash);
- _serverEncrypt.Init(encryptHash);
+ HmacHash serverEncryptHmac(K->GetNumBytes(), K->AsByteArray().get(), EVP_sha256(), SHA256_DIGEST_LENGTH);
+ serverEncryptHmac.UpdateData(ServerEncryptionKey, SEED_KEY_SIZE);
+ serverEncryptHmac.Finalize();
+
+ HmacHash clientDecryptHmac(K->GetNumBytes(), K->AsByteArray().get(), EVP_sha256(), SHA256_DIGEST_LENGTH);
+ clientDecryptHmac.UpdateData(ClientDecryptionKey, SEED_KEY_SIZE);
+ clientDecryptHmac.Finalize();
+
+ _clientDecrypt.Init(clientDecryptHmac.GetDigest());
+ _serverEncrypt.Init(serverEncryptHmac.GetDigest());
_initialized = true;
}
diff --git a/src/server/shared/Cryptography/HmacHash.cpp b/src/server/shared/Cryptography/HmacHash.cpp
index 7a365ade457..71fc362ae5d 100644
--- a/src/server/shared/Cryptography/HmacHash.cpp
+++ b/src/server/shared/Cryptography/HmacHash.cpp
@@ -20,7 +20,7 @@
#include "BigNumber.h"
#include "Common.h"
-HmacHash::HmacHash(uint32 len, uint8 *seed, EVP_MD const* hasher, uint32 digestLength)
+HmacHash::HmacHash(uint32 len, uint8 *seed, EVP_MD const* hasher, uint32 digestLength) : _digestLength(digestLength)
{
HMAC_CTX_init(&_ctx);
HMAC_Init_ex(&_ctx, seed, len, hasher, NULL);