Make it so we can login to accounts created with TC

This commit is contained in:
hondacrx
2020-08-20 23:23:23 -04:00
parent 062eecf20b
commit 165ae9e4f0
4 changed files with 20 additions and 17 deletions
+3 -3
View File
@@ -86,7 +86,7 @@ namespace BNetServer.Networking
uint loginTicketExpiry = result.Read<uint>(4); uint loginTicketExpiry = result.Read<uint>(4);
bool isBanned = result.Read<ulong>(5) != 0; bool isBanned = result.Read<ulong>(5) != 0;
if (CalculateShaPassHash(login, password) == pass_hash) if (CalculateShaPassHash(login.ToUpper(), password.ToUpper()) == pass_hash)
{ {
if (loginTicket.IsEmpty() || loginTicketExpiry < Time.UnixTime) if (loginTicket.IsEmpty() || loginTicketExpiry < Time.UnixTime)
{ {
@@ -168,8 +168,8 @@ namespace BNetServer.Networking
string CalculateShaPassHash(string name, string password) string CalculateShaPassHash(string name, string password)
{ {
SHA256 sha256 = SHA256.Create(); SHA256 sha256 = SHA256.Create();
var i = sha256.ComputeHash(Encoding.UTF8.GetBytes(name)); var email = sha256.ComputeHash(Encoding.UTF8.GetBytes(name));
return sha256.ComputeHash(Encoding.UTF8.GetBytes(i.ToHexString() + ":" + password)).ToHexString(); return sha256.ComputeHash(Encoding.UTF8.GetBytes(email.ToHexString() + ":" + password)).ToHexString(true);
} }
} }
} }
+5 -2
View File
@@ -36,9 +36,12 @@ namespace System
return (lValue & lFlag) != 0; 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) public static byte[] ToByteArray(this string str)
+10 -10
View File
@@ -45,13 +45,13 @@ namespace Game
if (GetId(username) != 0) if (GetId(username) != 0)
return AccountOpResult.NameAlreadyExist; // username does already exist 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); PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.INS_ACCOUNT);
stmt.AddValue(0, username); stmt.AddValue(0, username);
stmt.AddValue(1, registrationData.Item1); stmt.AddValue(1, salt);
stmt.AddValue(2, registrationData.Item2); stmt.AddValue(2, verifier);
stmt.AddValue(2, email); stmt.AddValue(3, email);
stmt.AddValue(4, email); stmt.AddValue(4, email);
if (bnetAccountId != 0 && bnetIndex != 0) if (bnetAccountId != 0 && bnetIndex != 0)
{ {
@@ -163,10 +163,10 @@ namespace Game
stmt.AddValue(1, accountId); stmt.AddValue(1, accountId);
DB.Login.Execute(stmt); 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 = DB.Login.GetPreparedStatement(LoginStatements.UPD_LOGON);
stmt.AddValue(0, registrationData.salt); stmt.AddValue(0, salt);
stmt.AddValue(1, registrationData.verifier); stmt.AddValue(1, verifier);
stmt.AddValue(2, accountId); stmt.AddValue(2, accountId);
DB.Login.Execute(stmt); DB.Login.Execute(stmt);
@@ -190,11 +190,11 @@ namespace Game
if (newPassword.Length > MaxAccountLength) if (newPassword.Length > MaxAccountLength)
return AccountOpResult.PassTooLong; 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); PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.UPD_LOGON);
stmt.AddValue(0, registrationData.salt); stmt.AddValue(0, salt);
stmt.AddValue(1, registrationData.verifier); stmt.AddValue(1, verifier);
stmt.AddValue(2, accountId); stmt.AddValue(2, accountId);
DB.Login.Execute(stmt); DB.Login.Execute(stmt);
+2 -2
View File
@@ -41,7 +41,7 @@ namespace Game
PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.INS_BNET_ACCOUNT); PreparedStatement stmt = DB.Login.GetPreparedStatement(LoginStatements.INS_BNET_ACCOUNT);
stmt.AddValue(0, email); stmt.AddValue(0, email);
stmt.AddValue(1, CalculateShaPassHash(email, password)); stmt.AddValue(1, CalculateShaPassHash(email.ToUpper(), password.ToUpper()));
DB.Login.DirectExecute(stmt); DB.Login.DirectExecute(stmt);
uint newAccountId = GetId(email); uint newAccountId = GetId(email);
@@ -176,7 +176,7 @@ namespace Game
{ {
SHA256 sha256 = SHA256.Create(); SHA256 sha256 = SHA256.Create();
var i = sha256.ComputeHash(Encoding.UTF8.GetBytes(name)); 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);
} }
} }
} }