* Add Crypt for 2.4.3
This commit is contained in:
parent
22f11c1810
commit
e2950efbe6
@ -84,7 +84,7 @@ void WorldSocket::OnRead()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(GetSession()->GetInstance()->GetConf()->client > CLIENT_CLASSIC_WOW)
|
if(GetSession()->GetInstance()->GetConf()->client > CLIENT_TBC)//Funny, old sources have this in TBC already...
|
||||||
{
|
{
|
||||||
// read first byte and check if size is 3 or 2 bytes
|
// read first byte and check if size is 3 or 2 bytes
|
||||||
uint8 firstSizeByte;
|
uint8 firstSizeByte;
|
||||||
@ -115,8 +115,8 @@ void WorldSocket::OnRead()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
ServerPktHeader hdr;
|
ServerPktHeader hdr;
|
||||||
ibuf.Read(((char*)&hdr), sizeof(ServerPktHeader)); // read header, except first byte
|
ibuf.Read(((char*)&hdr), sizeof(ServerPktHeader)); // read header
|
||||||
(_crypt.*pDecryptRecv)(((uint8*)&hdr), sizeof(ServerPktHeader)); // decrypt all except first
|
(_crypt.*pDecryptRecv)(((uint8*)&hdr), sizeof(ServerPktHeader)); // decrypt all
|
||||||
|
|
||||||
_remaining = ntohs(hdr.size) - 2;
|
_remaining = ntohs(hdr.size) - 2;
|
||||||
_opcode = hdr.cmd;
|
_opcode = hdr.cmd;
|
||||||
@ -176,7 +176,15 @@ void WorldSocket::InitCrypt(BigNumber *k)
|
|||||||
pEncryptSend = &AuthCrypt::EncryptSend_6005;
|
pEncryptSend = &AuthCrypt::EncryptSend_6005;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
case CLIENT_TBC:
|
||||||
|
{
|
||||||
|
logdebug("Setting Crypt to Build 8606");
|
||||||
|
pInit = &AuthCrypt::Init_8606;
|
||||||
|
pDecryptRecv = &AuthCrypt::DecryptRecv_6005;
|
||||||
|
pEncryptSend = &AuthCrypt::EncryptSend_6005;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case CLIENT_WOTLK:
|
||||||
{
|
{
|
||||||
logdebug("Setting Crypt to Build 12340");
|
logdebug("Setting Crypt to Build 12340");
|
||||||
pInit = &AuthCrypt::Init_12340;
|
pInit = &AuthCrypt::Init_12340;
|
||||||
@ -184,6 +192,9 @@ void WorldSocket::InitCrypt(BigNumber *k)
|
|||||||
pEncryptSend = &AuthCrypt::EncryptSend_12340;
|
pEncryptSend = &AuthCrypt::EncryptSend_12340;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
logerror("Error setting up Crypt - will crash now (check conf)");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
(_crypt.*pInit)(k);
|
(_crypt.*pInit)(k);
|
||||||
const char *hexstr = k->AsHexStr();
|
const char *hexstr = k->AsHexStr();
|
||||||
|
|||||||
@ -78,6 +78,25 @@ void AuthCrypt::EncryptSend_12340(uint8 *data, size_t len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void AuthCrypt::Init_8606(BigNumber *K)
|
||||||
|
{
|
||||||
|
uint8 *key = new uint8[SHA_DIGEST_LENGTH];
|
||||||
|
|
||||||
|
uint8 recvSeed[SEED_KEY_SIZE] = { 0x38, 0xA7, 0x83, 0x15, 0xF8, 0x92, 0x25, 0x30, 0x71, 0x98, 0x67, 0xB1, 0x8C, 0x4, 0xE2, 0xAA };
|
||||||
|
HmacHash recvHash(SEED_KEY_SIZE, (uint8*)recvSeed);
|
||||||
|
recvHash.UpdateBigNumber(K);
|
||||||
|
recvHash.Finalize();
|
||||||
|
memcpy(key, recvHash.GetDigest(), SHA_DIGEST_LENGTH);
|
||||||
|
|
||||||
|
_key.resize(SHA_DIGEST_LENGTH);
|
||||||
|
std::copy(key, key + SHA_DIGEST_LENGTH, _key.begin());
|
||||||
|
delete[] key;
|
||||||
|
|
||||||
|
_send_i = _send_j = _recv_i = _recv_j = 0;
|
||||||
|
_initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//1.12.2
|
//1.12.2
|
||||||
void AuthCrypt::Init_6005(BigNumber *K)
|
void AuthCrypt::Init_6005(BigNumber *K)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -39,6 +39,9 @@ class AuthCrypt
|
|||||||
void DecryptRecv_12340(uint8 *, size_t);
|
void DecryptRecv_12340(uint8 *, size_t);
|
||||||
void EncryptSend_12340(uint8 *, size_t);
|
void EncryptSend_12340(uint8 *, size_t);
|
||||||
|
|
||||||
|
//2.4.3
|
||||||
|
void Init_8606(BigNumber *K);
|
||||||
|
|
||||||
//1.12.X
|
//1.12.X
|
||||||
void Init_6005(BigNumber *K);
|
void Init_6005(BigNumber *K);
|
||||||
void SetKey_6005(uint8 *, size_t);
|
void SetKey_6005(uint8 *, size_t);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user