// Copyright (C) 2007-2025 EQ2EMulator // Licensed under GPL v3 #include "crypto.h" #include #include #include #include int64 Crypto::RSADecrypt(uchar* text, int16 size) noexcept { int64 ret = 0; std::array buffer{}; for (int i = 7; i >= 0; --i) { buffer[7 - i] = text[i]; } std::memcpy(&ret, buffer.data(), 8); return ret; } void Crypto::RC4Decrypt(uchar* text, int32 size) noexcept { const std::lock_guard lock(m_crypto_mutex); client->Cypher(text, size); } void Crypto::RC4Encrypt(uchar* text, int32 size) noexcept { const std::lock_guard lock(m_crypto_mutex); server->Cypher(text, size); } void Crypto::setRC4Key(int64 key) noexcept { rc4_key = key; if (key > 0) { encrypted = true; client = std::make_unique(~key); server = std::make_unique(key); std::array temp{}; client->Cypher(temp.data(), 20); server->Cypher(temp.data(), 20); } else { encrypted = false; client.reset(); server.reset(); } }