feat(net): add SRP6_Client

This commit is contained in:
fallenoak 2023-01-05 22:49:20 -06:00 committed by GitHub
parent 5d1a800076
commit cb62e2dcfe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 45 additions and 2 deletions

View File

@ -1,4 +1,4 @@
file(GLOB PRIVATE_SOURCES "*.cpp" "connection/*.cpp" "grunt/*.cpp" "login/*.cpp")
file(GLOB PRIVATE_SOURCES "*.cpp" "connection/*.cpp" "grunt/*.cpp" "login/*.cpp" "srp/*.cpp")
add_library(net STATIC
${PRIVATE_SOURCES}

View File

@ -82,7 +82,7 @@ void Grunt::ClientLink::LogonNewSession(const Grunt::ClientLink::Logon& logon) {
*decoration = '\0';
}
// TODO SRP6_Client::BeginAuthentication
this->m_srpClient.BeginAuthentication(accountNameUnDecorated, password);
CDataStoreCache<1024> clientChallenge;

View File

@ -5,6 +5,7 @@
#include "net/connection/WowConnectionResponse.hpp"
#include "net/grunt/Pending.hpp"
#include "net/grunt/Timer.hpp"
#include "net/srp/SRP6_Client.hpp"
#include "net/Types.hpp"
#include <storm/Thread.hpp>
@ -31,6 +32,7 @@ class Grunt::ClientLink : public WowConnectionResponse, Grunt::Pending, Grunt::T
Grunt::Timer m_timer;
uint32_t m_clientIP = 0;
int32_t m_state;
SRP6_Client m_srpClient;
SCritSect m_critSect;
WowConnection* m_connection = nullptr;
ClientResponse* m_clientResponse;

View File

@ -0,0 +1,24 @@
#include "net/srp/SRP6_Client.hpp"
#include <cstring>
int32_t SRP6_Client::BeginAuthentication(const char* accountName, const char* password) {
if (!accountName || !password) {
return -1;
}
SHA1_Init(&this->ctx);
SHA1_CONTEXT ctx;
SHA1_Init(&ctx);
SHA1_Update(&ctx, reinterpret_cast<const uint8_t*>(accountName), strlen(accountName));
SHA1_Final(this->accountNameDigest, &ctx);
SHA1_Init(&ctx);
SHA1_Update(&ctx, reinterpret_cast<const uint8_t*>(accountName), strlen(accountName));
SHA1_Update(&ctx, reinterpret_cast<const uint8_t*>(":"), 1u);
SHA1_Update(&ctx, reinterpret_cast<const uint8_t*>(password), strlen(password));
SHA1_Final(this->interimDigest, &ctx);
return 0;
}

View File

@ -0,0 +1,17 @@
#ifndef NET_SRP_SRP6_CLIENT_HPP
#define NET_SRP_SRP6_CLIENT_HPP
#include <common/SHA1.hpp>
class SRP6_Client {
public:
// Member variables
uint8_t accountNameDigest[SHA1_DIGEST_SIZE];
uint8_t interimDigest[SHA1_DIGEST_SIZE];
SHA1_CONTEXT ctx;
// Member functions
int32_t BeginAuthentication(const char* accountName, const char* password);
};
#endif