From 165ae9e4f0e8b2ca36e5100ade37e5d3c92a4cb4 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Thu, 20 Aug 2020 23:23:23 -0400 Subject: [PATCH] Make it so we can login to accounts created with TC --- Source/BNetServer/Networking/RestSession.cs | 6 +++--- Source/Framework/Util/Extensions.cs | 7 +++++-- Source/Game/Accounts/AccountManager.cs | 20 ++++++++++---------- Source/Game/Accounts/BNetAccountManager.cs | 4 ++-- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/Source/BNetServer/Networking/RestSession.cs b/Source/BNetServer/Networking/RestSession.cs index 2f8077160..dead8cdf0 100644 --- a/Source/BNetServer/Networking/RestSession.cs +++ b/Source/BNetServer/Networking/RestSession.cs @@ -86,7 +86,7 @@ namespace BNetServer.Networking uint loginTicketExpiry = result.Read(4); bool isBanned = result.Read(5) != 0; - if (CalculateShaPassHash(login, password) == pass_hash) + if (CalculateShaPassHash(login.ToUpper(), password.ToUpper()) == pass_hash) { if (loginTicket.IsEmpty() || loginTicketExpiry < Time.UnixTime) { @@ -168,8 +168,8 @@ namespace BNetServer.Networking string CalculateShaPassHash(string name, string password) { SHA256 sha256 = SHA256.Create(); - var i = sha256.ComputeHash(Encoding.UTF8.GetBytes(name)); - return sha256.ComputeHash(Encoding.UTF8.GetBytes(i.ToHexString() + ":" + password)).ToHexString(); + var email = sha256.ComputeHash(Encoding.UTF8.GetBytes(name)); + return sha256.ComputeHash(Encoding.UTF8.GetBytes(email.ToHexString() + ":" + password)).ToHexString(true); } } } diff --git a/Source/Framework/Util/Extensions.cs b/Source/Framework/Util/Extensions.cs index 1c2c89f4e..0752cd57d 100644 --- a/Source/Framework/Util/Extensions.cs +++ b/Source/Framework/Util/Extensions.cs @@ -36,9 +36,12 @@ namespace System return (lValue & lFlag) != 0; } - public static string ToHexString(this byte[] byteArray) + public static string ToHexString(this byte[] byteArray, bool reverse = false) { - return byteArray.Aggregate("", (current, b) => current + b.ToString("X2")); + if (reverse) + return byteArray.Reverse().Aggregate("", (current, b) => current + b.ToString("X2")); + else + return byteArray.Aggregate("", (current, b) => current + b.ToString("X2")); } public static byte[] ToByteArray(this string str) diff --git a/Source/Game/Accounts/AccountManager.cs b/Source/Game/Accounts/AccountManager.cs index c02fa9d8f..2daecfa3e 100644 --- a/Source/Game/Accounts/AccountManager.cs +++ b/Source/Game/Accounts/AccountManager.cs @@ -45,13 +45,13 @@ namespace Game if (GetId(username) != 0) return AccountOpResult.NameAlreadyExist; // username does already exist - (byte[] salt, byte[] verifier) registrationData = SRP6.MakeRegistrationData(username, password); + (byte[] salt, byte[] verifier) = SRP6.MakeRegistrationData(username, password); PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.INS_ACCOUNT); stmt.AddValue(0, username); - stmt.AddValue(1, registrationData.Item1); - stmt.AddValue(2, registrationData.Item2); - stmt.AddValue(2, email); + stmt.AddValue(1, salt); + stmt.AddValue(2, verifier); + stmt.AddValue(3, email); stmt.AddValue(4, email); if (bnetAccountId != 0 && bnetIndex != 0) { @@ -163,10 +163,10 @@ namespace Game stmt.AddValue(1, accountId); DB.Login.Execute(stmt); - (byte[] salt, byte[] verifier) registrationData = SRP6.MakeRegistrationData(newUsername, newPassword); + (byte[] salt, byte[] verifier) = SRP6.MakeRegistrationData(newUsername, newPassword); stmt = DB.Login.GetPreparedStatement(LoginStatements.UPD_LOGON); - stmt.AddValue(0, registrationData.salt); - stmt.AddValue(1, registrationData.verifier); + stmt.AddValue(0, salt); + stmt.AddValue(1, verifier); stmt.AddValue(2, accountId); DB.Login.Execute(stmt); @@ -190,11 +190,11 @@ namespace Game if (newPassword.Length > MaxAccountLength) return AccountOpResult.PassTooLong; - (byte[] salt, byte[] verifier) registrationData = SRP6.MakeRegistrationData(username, newPassword); + (byte[] salt, byte[] verifier) = SRP6.MakeRegistrationData(username, newPassword); PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.UPD_LOGON); - stmt.AddValue(0, registrationData.salt); - stmt.AddValue(1, registrationData.verifier); + stmt.AddValue(0, salt); + stmt.AddValue(1, verifier); stmt.AddValue(2, accountId); DB.Login.Execute(stmt); diff --git a/Source/Game/Accounts/BNetAccountManager.cs b/Source/Game/Accounts/BNetAccountManager.cs index 0fc323ee5..0960eba0a 100644 --- a/Source/Game/Accounts/BNetAccountManager.cs +++ b/Source/Game/Accounts/BNetAccountManager.cs @@ -41,7 +41,7 @@ namespace Game PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.INS_BNET_ACCOUNT); stmt.AddValue(0, email); - stmt.AddValue(1, CalculateShaPassHash(email, password)); + stmt.AddValue(1, CalculateShaPassHash(email.ToUpper(), password.ToUpper())); DB.Login.DirectExecute(stmt); uint newAccountId = GetId(email); @@ -176,7 +176,7 @@ namespace Game { SHA256 sha256 = SHA256.Create(); var i = sha256.ComputeHash(Encoding.UTF8.GetBytes(name)); - return sha256.ComputeHash(Encoding.UTF8.GetBytes(i.ToHexString() + ":" + password)).ToHexString(); + return sha256.ComputeHash(Encoding.UTF8.GetBytes(i.ToHexString() + ":" + password)).ToHexString(true); } } }