summaryrefslogtreecommitdiff
path: root/csgo-loader/csgo-client/Security/Encryption.cpp
diff options
context:
space:
mode:
authorboris <wzn@moneybot.cc>2018-12-30 15:00:51 +1300
committerboris <wzn@moneybot.cc>2018-12-30 15:00:51 +1300
commitd786e65a9a262638e74f6ebcf1b296917897ae49 (patch)
tree17199ab95db8a59abf4d3bf40543296d76e8659e /csgo-loader/csgo-client/Security/Encryption.cpp
parent0340821cc614fda2a94a96c255d16105dd2f6f9a (diff)
unban marcus or suffer my wrath
grr
Diffstat (limited to 'csgo-loader/csgo-client/Security/Encryption.cpp')
-rw-r--r--csgo-loader/csgo-client/Security/Encryption.cpp133
1 files changed, 42 insertions, 91 deletions
diff --git a/csgo-loader/csgo-client/Security/Encryption.cpp b/csgo-loader/csgo-client/Security/Encryption.cpp
index 6bc3640..133946a 100644
--- a/csgo-loader/csgo-client/Security/Encryption.cpp
+++ b/csgo-loader/csgo-client/Security/Encryption.cpp
@@ -1,6 +1,4 @@
#include <Security/Encryption.hpp>
-#include <Security/RuntimeSecurity.hpp>
-#include <UserExperience/UserInterface.hpp>
#define FE(x) (((x) << 1) ^ ((((x)>>7) & 1) * 0x1b))
#define FD(x) (((x) >> 1) ^ (((x) & 1) ? 0x8d : 0))
@@ -100,20 +98,14 @@ namespace Wrapper
{
}
-#pragma optimize("", off)
-
ByteArray::size_type Aes256::encrypt(const ByteArray& key, const ByteArray& plain, ByteArray& encrypted)
{
Aes256 aes(key);
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_START);
-
aes.encrypt_start(plain.size(), encrypted);
aes.encrypt_continue(plain, encrypted);
aes.encrypt_end(encrypted);
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_END);
-
return encrypted.size();
}
@@ -132,14 +124,10 @@ namespace Wrapper
{
Aes256 aes(key);
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_START);
-
aes.decrypt_start(encrypted.size());
aes.decrypt_continue(encrypted, plain);
aes.decrypt_end(plain);
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_END);
-
return plain.size();
}
@@ -252,8 +240,6 @@ namespace Wrapper
{
unsigned char i, rcon;
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_START);
-
copy_key();
add_round_key(buffer, 0);
for(i = 1, rcon = 1; i < NUM_ROUNDS; ++i)
@@ -269,8 +255,6 @@ namespace Wrapper
shift_rows(buffer);
expand_enc_key(&rcon);
add_round_key(buffer, i);
-
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_END);
}
ByteArray::size_type Aes256::decrypt_start(const ByteArray::size_type encrypted_length)
@@ -364,8 +348,6 @@ namespace Wrapper
{
unsigned char i, rcon = 1;
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_START);
-
copy_key();
for(i = NUM_ROUNDS / 2; i > 0; --i)
expand_enc_key(&rcon);
@@ -384,16 +366,12 @@ namespace Wrapper
sub_bytes_inv(buffer);
}
add_round_key(buffer, i);
-
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_END);
}
void Aes256::expand_enc_key(unsigned char* rc)
{
unsigned char i;
- WRAP_IF_RELEASE(MUTATE_START);
-
m_rkey[0] = m_rkey[0] ^ sbox[m_rkey[29]] ^ (*rc);
m_rkey[1] = m_rkey[1] ^ sbox[m_rkey[30]];
m_rkey[2] = m_rkey[2] ^ sbox[m_rkey[31]];
@@ -402,15 +380,11 @@ namespace Wrapper
for(i = 4; i < 16; i += 4)
{
- m_rkey[i] = m_rkey[i] ^ m_rkey[i - 4];
+ m_rkey[i] = m_rkey[i] ^ m_rkey[i - 4];
m_rkey[i + 1] = m_rkey[i + 1] ^ m_rkey[i - 3];
m_rkey[i + 2] = m_rkey[i + 2] ^ m_rkey[i - 2];
m_rkey[i + 3] = m_rkey[i + 3] ^ m_rkey[i - 1];
}
-
- WRAP_IF_RELEASE(MUTATE_END);
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_START);
-
m_rkey[16] = m_rkey[16] ^ sbox[m_rkey[12]];
m_rkey[17] = m_rkey[17] ^ sbox[m_rkey[13]];
m_rkey[18] = m_rkey[18] ^ sbox[m_rkey[14]];
@@ -423,16 +397,12 @@ namespace Wrapper
m_rkey[i + 2] = m_rkey[i + 2] ^ m_rkey[i - 2];
m_rkey[i + 3] = m_rkey[i + 3] ^ m_rkey[i - 1];
}
-
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_END);
}
void Aes256::expand_dec_key(unsigned char* rc)
{
unsigned char i;
- WRAP_IF_RELEASE(MUTATE_START);
-
for(i = 28; i > 16; i -= 4)
{
m_rkey[i + 0] = m_rkey[i + 0] ^ m_rkey[i - 4];
@@ -446,9 +416,6 @@ namespace Wrapper
m_rkey[18] = m_rkey[18] ^ sbox[m_rkey[14]];
m_rkey[19] = m_rkey[19] ^ sbox[m_rkey[15]];
- WRAP_IF_RELEASE(MUTATE_END);
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_START);
-
for(i = 12; i > 0; i -= 4)
{
m_rkey[i + 0] = m_rkey[i + 0] ^ m_rkey[i - 4];
@@ -462,8 +429,6 @@ namespace Wrapper
m_rkey[1] = m_rkey[1] ^ sbox[m_rkey[30]];
m_rkey[2] = m_rkey[2] ^ sbox[m_rkey[31]];
m_rkey[3] = m_rkey[3] ^ sbox[m_rkey[28]];
-
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_END);
}
void Aes256::sub_bytes(unsigned char* buffer)
@@ -504,72 +469,56 @@ namespace Wrapper
{
unsigned char i, j, k, l; /* to make it potentially parallelable :) */
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_START);
-
- i = buffer[1];
- buffer[1] = buffer[5];
- buffer[5] = buffer[9];
- buffer[9] = buffer[13];
+ i = buffer[1];
+ buffer[1] = buffer[5];
+ buffer[5] = buffer[9];
+ buffer[9] = buffer[13];
buffer[13] = i;
- j = buffer[10];
+ j = buffer[10];
buffer[10] = buffer[2];
- buffer[2] = j;
-
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_END);
- WRAP_IF_RELEASE(MUTATE_START);
+ buffer[2] = j;
- k = buffer[3];
- buffer[3] = buffer[15];
+ k = buffer[3];
+ buffer[3] = buffer[15];
buffer[15] = buffer[11];
buffer[11] = buffer[7];
- buffer[7] = k;
+ buffer[7] = k;
- l = buffer[14];
+ l = buffer[14];
buffer[14] = buffer[6];
- buffer[6] = l;
-
- WRAP_IF_RELEASE(MUTATE_END);
+ buffer[6] = l;
}
void Aes256::shift_rows_inv(unsigned char* buffer)
{
unsigned char i, j, k, l; /* same as above :) */
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_START);
-
- i = buffer[1];
- buffer[1] = buffer[13];
+ i = buffer[1];
+ buffer[1] = buffer[13];
buffer[13] = buffer[9];
- buffer[9] = buffer[5];
- buffer[5] = i;
+ buffer[9] = buffer[5];
+ buffer[5] = i;
- j = buffer[2];
- buffer[2] = buffer[10];
+ j = buffer[2];
+ buffer[2] = buffer[10];
buffer[10] = j;
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_END);
- WRAP_IF_RELEASE(MUTATE_START);
-
- k = buffer[3];
- buffer[3] = buffer[7];
- buffer[7] = buffer[11];
+ k = buffer[3];
+ buffer[3] = buffer[7];
+ buffer[7] = buffer[11];
buffer[11] = buffer[15];
buffer[15] = k;
- l = buffer[6];
- buffer[6] = buffer[14];
+ l = buffer[6];
+ buffer[6] = buffer[14];
buffer[14] = l;
-
- WRAP_IF_RELEASE(MUTATE_END);
}
void Aes256::mix_columns(unsigned char* buffer)
{
unsigned char i, a, b, c, d, e;
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_START);
-
for(i = 0; i < 16; i += 4)
{
a = buffer[i];
@@ -584,16 +533,12 @@ namespace Wrapper
buffer[i + 2] ^= e ^ rj_xtime(c^d);
buffer[i + 3] ^= e ^ rj_xtime(d^a);
}
-
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_END);
}
void Aes256::mix_columns_inv(unsigned char* buffer)
{
unsigned char i, a, b, c, d, e, x, y, z;
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_START);
-
for(i = 0; i < 16; i += 4)
{
a = buffer[i];
@@ -610,31 +555,29 @@ namespace Wrapper
buffer[i + 2] ^= x ^ rj_xtime(c^d);
buffer[i + 3] ^= y ^ rj_xtime(d^a);
}
-
- WRAP_IF_RELEASE(VM_EAGLE_BLACK_END);
}
-#pragma optimize("", on)
-
inline unsigned char rj_xtime(unsigned char x)
{
return (x & 0x80) ? ((x << 1) ^ 0x1b) : (x << 1);
}
// Wrapper for the AES256 encryption algorithm.
- void Encryption::Start() { ERROR_ASSERT("[000F:00001A00] Failed to initialize. Please contact an administrator."); }
+ void Encryption::Start() { }
void Encryption::Start(ByteArray &EncryptionKey)
{
- // The client can only be initialized with an existing key.
- if(EncryptionKey.empty())
+ // If an encryption key is provided, initialise the wrapper with
+ // the passed parameter.
+ if(!EncryptionKey.empty())
+ {
+ for(auto &It : EncryptionKey)
+ m_EncryptionKey.emplace_back(It);
+ }
+ else
+ {
Start();
-
- WRAP_IF_DEBUG(printf("[DEBUG] Received handshake: %zd bytes.\n[DEBUG] Data: ", EncryptionKey.size()););
- WRAP_IF_DEBUG(for(auto &It : EncryptionKey) { printf("%02x ", It); });
- WRAP_IF_DEBUG(printf("\n"));
-
- std::copy(EncryptionKey.begin(), EncryptionKey.end(), m_EncryptionKey.begin());
+ }
}
ByteArray Encryption::Encrypt(ByteArray &Data)
@@ -642,7 +585,11 @@ namespace Wrapper
// Encrypt outgoing data.
ByteArray Encrypted;
+ #ifdef DEBUG
+ Encrypted = Data;
+ #else
Aes256::encrypt(m_EncryptionKey, Data, Encrypted);
+ #endif
return Encrypted;
}
@@ -652,7 +599,11 @@ namespace Wrapper
// Decrypt incoming data.
ByteArray Decrypted;
+ #ifdef DEBUG
+ Decrypted = Data;
+ #else
Aes256::decrypt(m_EncryptionKey, Data, Decrypted);
+ #endif
return Decrypted;
}