Add some rough estimation

This commit is contained in:
momo5502 2016-02-23 13:39:38 +01:00
parent 69e72430e6
commit 9c246fecb5
2 changed files with 20 additions and 4 deletions

View File

@ -52,7 +52,20 @@ namespace Components
if (Auth::TokenContainer.generating) if (Auth::TokenContainer.generating)
{ {
Localization::Set("MPUI_SECURITY_INCREASE_MESSAGE", Utils::VA("Increasing security level from %d to %d"/* (approx. 1 min)"*/, Auth::GetSecurityLevel(), Auth::TokenContainer.targetLevel)); static int lastCalc = 0;
static double mseconds = 0;
if (!lastCalc || (Game::Com_Milliseconds() - lastCalc) > 1000)
{
int diff = Game::Com_Milliseconds() - Auth::TokenContainer.startTime;
double hashPMS = (Auth::TokenContainer.hashes * 1.0) / diff;
double requiredHashes = std::pow(2, Auth::TokenContainer.targetLevel) - Auth::TokenContainer.hashes;
mseconds = requiredHashes / hashPMS;
mseconds *= 2; // Times 2, cause well, we might not hit it the first time :P
if (mseconds < 0) mseconds = 0;
}
Localization::Set("MPUI_SECURITY_INCREASE_MESSAGE", Utils::VA("Increasing security level from %d to %d (est. %s)", Auth::GetSecurityLevel(), Auth::TokenContainer.targetLevel, Utils::FormatTimeSpan(static_cast<int>(mseconds)).data()));
} }
else if(Auth::TokenContainer.thread) else if(Auth::TokenContainer.thread)
{ {
@ -177,8 +190,9 @@ namespace Components
Auth::TokenContainer.thread = new std::thread([&level] () Auth::TokenContainer.thread = new std::thread([&level] ()
{ {
Auth::TokenContainer.generating = true; Auth::TokenContainer.generating = true;
Auth::TokenContainer.hashes = 0;
Auth::TokenContainer.startTime = Game::Com_Milliseconds(); Auth::TokenContainer.startTime = Game::Com_Milliseconds();
Auth::IncrementToken(Auth::GuidToken, Auth::GuidKey.GetPublicKey(), Auth::TokenContainer.targetLevel, &Auth::TokenContainer.cancel); Auth::IncrementToken(Auth::GuidToken, Auth::GuidKey.GetPublicKey(), Auth::TokenContainer.targetLevel, &Auth::TokenContainer.cancel, &Auth::TokenContainer.hashes);
Auth::TokenContainer.generating = false; Auth::TokenContainer.generating = false;
if (Auth::TokenContainer.cancel) if (Auth::TokenContainer.cancel)
@ -219,7 +233,7 @@ namespace Components
return bits; return bits;
} }
void Auth::IncrementToken(Utils::Cryptography::Token& token, std::string publicKey, uint32_t zeroBits, bool* cancel) void Auth::IncrementToken(Utils::Cryptography::Token& token, std::string publicKey, uint32_t zeroBits, bool* cancel, uint64_t* count)
{ {
if (zeroBits > 512) return; // Not possible, due to SHA512 if (zeroBits > 512) return; // Not possible, due to SHA512
@ -233,6 +247,7 @@ namespace Components
do do
{ {
++tempToken; ++tempToken;
if (count) ++(*count);
level = Auth::GetZeroBits(tempToken, publicKey); level = Auth::GetZeroBits(tempToken, publicKey);
// Store level if higher than the last one // Store level if higher than the last one

View File

@ -16,7 +16,7 @@ namespace Components
static void IncreaseSecurityLevel(uint32_t level, std::string command = ""); static void IncreaseSecurityLevel(uint32_t level, std::string command = "");
static uint32_t GetZeroBits(Utils::Cryptography::Token token, std::string publicKey); static uint32_t GetZeroBits(Utils::Cryptography::Token token, std::string publicKey);
static void IncrementToken(Utils::Cryptography::Token& token, std::string publicKey, uint32_t zeroBits, bool* cancel = nullptr); static void IncrementToken(Utils::Cryptography::Token& token, std::string publicKey, uint32_t zeroBits, bool* cancel = nullptr, uint64_t* count = nullptr);
private: private:
@ -44,6 +44,7 @@ namespace Components
uint32_t targetLevel; uint32_t targetLevel;
int startTime; int startTime;
std::string command; std::string command;
uint64_t hashes;
}; };
static AuthInfo ClientAuthInfo[18]; static AuthInfo ClientAuthInfo[18];