diff options
Diffstat (limited to 'src/shared/Auth')
-rw-r--r-- | src/shared/Auth/AuthCrypt.cpp | 6 | ||||
-rw-r--r-- | src/shared/Auth/BigNumber.cpp | 5 | ||||
-rw-r--r-- | src/shared/Auth/BigNumber.h | 2 | ||||
-rw-r--r-- | src/shared/Auth/Hmac.cpp | 9 | ||||
-rw-r--r-- | src/shared/Auth/Hmac.h | 1 | ||||
-rw-r--r-- | src/shared/Auth/SARC4.cpp | 8 | ||||
-rw-r--r-- | src/shared/Auth/SARC4.h | 4 |
7 files changed, 20 insertions, 15 deletions
diff --git a/src/shared/Auth/AuthCrypt.cpp b/src/shared/Auth/AuthCrypt.cpp index 26dc24ec5f6..b34b922b16a 100644 --- a/src/shared/Auth/AuthCrypt.cpp +++ b/src/shared/Auth/AuthCrypt.cpp @@ -23,7 +23,7 @@ #include "Log.h" #include "BigNumber.h" -AuthCrypt::AuthCrypt() +AuthCrypt::AuthCrypt() : _clientDecrypt(SHA_DIGEST_LENGTH), _serverEncrypt(SHA_DIGEST_LENGTH) { _initialized = false; } @@ -35,11 +35,11 @@ AuthCrypt::~AuthCrypt() void AuthCrypt::Init(BigNumber *K) { - uint8 ServerEncryptionKey[SEED_KEY_SIZE] = { 0x22, 0xBE, 0xE5, 0xCF, 0xBB, 0x07, 0x64, 0xD9, 0x00, 0x45, 0x1B, 0xD0, 0x24, 0xB8, 0xD5, 0x45 }; + uint8 ServerEncryptionKey[SEED_KEY_SIZE] = { 0xCC, 0x98, 0xAE, 0x04, 0xE8, 0x97, 0xEA, 0xCA, 0x12, 0xDD, 0xC0, 0x93, 0x42, 0x91, 0x53, 0x57 }; HmacHash serverEncryptHmac(SEED_KEY_SIZE, (uint8*)ServerEncryptionKey); uint8 *encryptHash = serverEncryptHmac.ComputeHash(K); - uint8 ServerDecryptionKey[SEED_KEY_SIZE] = { 0xF4, 0x66, 0x31, 0x59, 0xFC, 0x83, 0x6E, 0x31, 0x31, 0x02, 0x51, 0xD5, 0x44, 0x31, 0x67, 0x98 }; + uint8 ServerDecryptionKey[SEED_KEY_SIZE] = { 0xC2, 0xB3, 0x72, 0x3C, 0xC6, 0xAE, 0xD9, 0xB5, 0x34, 0x3C, 0x53, 0xEE, 0x2F, 0x43, 0x67, 0xCE }; HmacHash clientDecryptHmac(SEED_KEY_SIZE, (uint8*)ServerDecryptionKey); uint8 *decryptHash = clientDecryptHmac.ComputeHash(K); diff --git a/src/shared/Auth/BigNumber.cpp b/src/shared/Auth/BigNumber.cpp index 930622c54c3..c4811d2b95f 100644 --- a/src/shared/Auth/BigNumber.cpp +++ b/src/shared/Auth/BigNumber.cpp @@ -166,7 +166,7 @@ bool BigNumber::isZero() const return BN_is_zero(_bn)!=0; } -uint8 *BigNumber::AsByteArray(int minSize) +uint8 *BigNumber::AsByteArray(int minSize, bool reverse) { int length = (minSize >= GetNumBytes()) ? minSize : GetNumBytes(); @@ -183,7 +183,8 @@ uint8 *BigNumber::AsByteArray(int minSize) BN_bn2bin(_bn, (unsigned char *)_array); - std::reverse(_array, _array + length); + if (reverse) + std::reverse(_array, _array + length); return _array; } diff --git a/src/shared/Auth/BigNumber.h b/src/shared/Auth/BigNumber.h index 1e31951f93c..1dd43c83fc7 100644 --- a/src/shared/Auth/BigNumber.h +++ b/src/shared/Auth/BigNumber.h @@ -83,7 +83,7 @@ class BigNumber struct bignum_st *BN() { return _bn; } uint32 AsDword(); - uint8* AsByteArray(int minSize = 0); + uint8* AsByteArray(int minSize = 0, bool reverse = true); const char *AsHexStr(); const char *AsDecStr(); diff --git a/src/shared/Auth/Hmac.cpp b/src/shared/Auth/Hmac.cpp index 4446bdb38ce..07fbd4821fb 100644 --- a/src/shared/Auth/Hmac.cpp +++ b/src/shared/Auth/Hmac.cpp @@ -23,10 +23,8 @@ HmacHash::HmacHash(uint32 len, uint8 *seed) { - ASSERT(len == SEED_KEY_SIZE); - HMAC_CTX_init(&m_ctx); - HMAC_Init_ex(&m_ctx, seed, SEED_KEY_SIZE, EVP_sha1(), NULL); + HMAC_Init_ex(&m_ctx, seed, len, EVP_sha1(), NULL); } HmacHash::~HmacHash() @@ -44,6 +42,11 @@ void HmacHash::UpdateData(const uint8 *data, int length) HMAC_Update(&m_ctx, data, length); } +void HmacHash::UpdateData(const std::string &str) +{ + UpdateData((uint8 const*)str.c_str(), str.length()); +} + void HmacHash::Finalize() { uint32 length = 0; diff --git a/src/shared/Auth/Hmac.h b/src/shared/Auth/Hmac.h index 147b7106f8e..845d6e84802 100644 --- a/src/shared/Auth/Hmac.h +++ b/src/shared/Auth/Hmac.h @@ -36,6 +36,7 @@ class HmacHash ~HmacHash(); void UpdateBigNumber(BigNumber *bn); void UpdateData(const uint8 *data, int length); + void UpdateData(const std::string &str); void Finalize(); uint8 *ComputeHash(BigNumber *bn); uint8 *GetDigest() { return (uint8*)m_digest; } diff --git a/src/shared/Auth/SARC4.cpp b/src/shared/Auth/SARC4.cpp index f59bb7f0c53..80cad4991e9 100644 --- a/src/shared/Auth/SARC4.cpp +++ b/src/shared/Auth/SARC4.cpp @@ -19,18 +19,18 @@ #include "Auth/SARC4.h" #include <openssl/sha.h> -SARC4::SARC4() +SARC4::SARC4(uint8 len) { EVP_CIPHER_CTX_init(&m_ctx); EVP_EncryptInit_ex(&m_ctx, EVP_rc4(), NULL, NULL, NULL); - EVP_CIPHER_CTX_set_key_length(&m_ctx, SHA_DIGEST_LENGTH); + EVP_CIPHER_CTX_set_key_length(&m_ctx, len); } -SARC4::SARC4(uint8 *seed) +SARC4::SARC4(uint8 *seed, uint8 len) { EVP_CIPHER_CTX_init(&m_ctx); EVP_EncryptInit_ex(&m_ctx, EVP_rc4(), NULL, NULL, NULL); - EVP_CIPHER_CTX_set_key_length(&m_ctx, SHA_DIGEST_LENGTH); + EVP_CIPHER_CTX_set_key_length(&m_ctx, len); EVP_EncryptInit_ex(&m_ctx, NULL, NULL, seed, NULL); } diff --git a/src/shared/Auth/SARC4.h b/src/shared/Auth/SARC4.h index 3f15328d6cb..768856c7fe7 100644 --- a/src/shared/Auth/SARC4.h +++ b/src/shared/Auth/SARC4.h @@ -25,8 +25,8 @@ class SARC4 { public: - SARC4(); - SARC4(uint8 *seed); + SARC4(uint8 len); + SARC4(uint8 *seed, uint8 len); ~SARC4(); void Init(uint8 *seed); void UpdateData(int len, uint8 *data); |