diff --git a/Akari.Prototype.Server/Services/AuthManager.cs b/Akari.Prototype.Server/Services/AuthManager.cs index 532fcc5..51823b4 100644 --- a/Akari.Prototype.Server/Services/AuthManager.cs +++ b/Akari.Prototype.Server/Services/AuthManager.cs @@ -33,10 +33,10 @@ namespace Akari.Prototype.Server.Services _keys = new ConcurrentDictionary>(); } - public void Auth(string name, string token) + public void Auth(string name, byte[] token) { // Derive key and store it - using var key = Security.Argon2idDeriveBytes(token, name, AuthKeysLength, clear: true); + using var key = Security.Argon2idDeriveBytes(token, Encoding.UTF8.GetBytes(name), AuthKeysLength, clear: true); SetKey(name, new AesGcm(key.Buffer)); } diff --git a/Akari.Prototype.Server/Services/FingerprintManager.cs b/Akari.Prototype.Server/Services/FingerprintManager.cs index 5a291ff..09a072d 100644 --- a/Akari.Prototype.Server/Services/FingerprintManager.cs +++ b/Akari.Prototype.Server/Services/FingerprintManager.cs @@ -107,7 +107,7 @@ namespace Akari.Prototype.Server.Services return GetEnumerator(); } - public void VerifyFingerprint(string name, string token) + public void VerifyFingerprint(string name, byte[] token) { _logger.LogDebug($"Verifying hash for {name}"); diff --git a/Akari.Prototype.Server/Services/IAuthManager.cs b/Akari.Prototype.Server/Services/IAuthManager.cs index b8f5c96..bc130ce 100644 --- a/Akari.Prototype.Server/Services/IAuthManager.cs +++ b/Akari.Prototype.Server/Services/IAuthManager.cs @@ -11,7 +11,7 @@ namespace Akari.Prototype.Server.Services { IEnumerable>> Pairs { get; } - void Auth(string name, string token); + void Auth(string name, byte[] token); bool Remove(string name); } diff --git a/Akari.Prototype.Server/Services/IFingerprintManager.cs b/Akari.Prototype.Server/Services/IFingerprintManager.cs index 20e9d20..4fe0600 100644 --- a/Akari.Prototype.Server/Services/IFingerprintManager.cs +++ b/Akari.Prototype.Server/Services/IFingerprintManager.cs @@ -13,6 +13,6 @@ namespace Akari.Prototype.Server.Services bool Remove(string name); void Set(string name, string hash); - void VerifyFingerprint(string name, string token); + void VerifyFingerprint(string name, byte[] token); } } diff --git a/Akari.Prototype.Server/Services/TcpProviderService.cs b/Akari.Prototype.Server/Services/TcpProviderService.cs index dfef2bf..c193ffc 100644 --- a/Akari.Prototype.Server/Services/TcpProviderService.cs +++ b/Akari.Prototype.Server/Services/TcpProviderService.cs @@ -9,6 +9,7 @@ using System.IO; using System.Linq; using System.Net; using System.Net.Sockets; +using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -135,7 +136,11 @@ namespace Akari.Prototype.Server.Services return; } - _fingerprintManager.VerifyFingerprint(text[..splitIndex], text[(splitIndex + 1)..]); + var handle = GCHandle.Alloc(text, GCHandleType.Pinned); + + _fingerprintManager.VerifyFingerprint(text[..splitIndex], Convert.FromBase64String(text[(splitIndex + 1)..])); + + handle.Free(); } public override void Dispose()