diff --git a/Streetwriters.Identity/Helpers/PasswordHelper.cs b/Streetwriters.Identity/Helpers/PasswordHelper.cs index 1ff0725..c4446c0 100644 --- a/Streetwriters.Identity/Helpers/PasswordHelper.cs +++ b/Streetwriters.Identity/Helpers/PasswordHelper.cs @@ -1,38 +1,40 @@ -/* -This file is part of the Notesnook Sync Server project (https://notesnook.com/) - -Copyright (C) 2023 Streetwriters (Private) Limited - -This program is free software: you can redistribute it and/or modify -it under the terms of the Affero GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -Affero GNU General Public License for more details. - -You should have received a copy of the Affero GNU General Public License -along with this program. If not, see . -*/ - -using System; -using System.Text; -using Sodium; - -namespace Streetwriters.Identity.Helpers -{ - internal class PasswordHelper - { - public static bool VerifyPassword(string password, string hash) - { - return PasswordHash.ArgonHashStringVerify(hash, password); - } - - public static string CreatePasswordHash(string password) - { - return PasswordHash.ArgonHashString(password, 3, 65536); - } - } +/* +This file is part of the Notesnook Sync Server project (https://notesnook.com/) + +Copyright (C) 2023 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the Affero GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +Affero GNU General Public License for more details. + +You should have received a copy of the Affero GNU General Public License +along with this program. If not, see . +*/ + +using System; +using System.Text; +using Geralt; + +namespace Streetwriters.Identity.Helpers +{ + internal class PasswordHelper + { + public static bool VerifyPassword(string password, string hash) + { + return Argon2id.VerifyHash(Encoding.UTF8.GetBytes(hash), Encoding.UTF8.GetBytes(password)); + } + + public static string CreatePasswordHash(string password) + { + Span hash = new(new byte[128]); + Argon2id.ComputeHash(hash, Encoding.UTF8.GetBytes(password), 3, 65536); + return Encoding.UTF8.GetString(hash); + } + } } \ No newline at end of file diff --git a/Streetwriters.Identity/Services/PasswordHasher.cs b/Streetwriters.Identity/Services/PasswordHasher.cs index f1f268e..83d44e6 100644 --- a/Streetwriters.Identity/Services/PasswordHasher.cs +++ b/Streetwriters.Identity/Services/PasswordHasher.cs @@ -1,47 +1,43 @@ -/* -This file is part of the Notesnook Sync Server project (https://notesnook.com/) - -Copyright (C) 2023 Streetwriters (Private) Limited - -This program is free software: you can redistribute it and/or modify -it under the terms of the Affero GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -Affero GNU General Public License for more details. - -You should have received a copy of the Affero GNU General Public License -along with this program. If not, see . -*/ - -using System; -using Microsoft.AspNetCore.Identity; -using Streetwriters.Common.Models; -using Streetwriters.Identity.Helpers; - -namespace Streetwriters.Identity.Services -{ - public class Argon2PasswordHasher : IPasswordHasher where TUser : User - { - public string HashPassword(TUser user, string password) - { - if (password == null) - throw new ArgumentNullException(nameof(password)); - - return PasswordHelper.CreatePasswordHash(password); - } - - public PasswordVerificationResult VerifyHashedPassword(TUser user, string hashedPassword, string providedPassword) - { - if (hashedPassword == null) - throw new ArgumentNullException(nameof(hashedPassword)); - if (providedPassword == null) - throw new ArgumentNullException(nameof(providedPassword)); - - return PasswordHelper.VerifyPassword(providedPassword, hashedPassword) ? PasswordVerificationResult.Success : PasswordVerificationResult.Failed; - } - } +/* +This file is part of the Notesnook Sync Server project (https://notesnook.com/) + +Copyright (C) 2023 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the Affero GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +Affero GNU General Public License for more details. + +You should have received a copy of the Affero GNU General Public License +along with this program. If not, see . +*/ + +using System; +using Microsoft.AspNetCore.Identity; +using Streetwriters.Common.Models; +using Streetwriters.Identity.Helpers; + +namespace Streetwriters.Identity.Services +{ + public class Argon2PasswordHasher : IPasswordHasher where TUser : User + { + public string HashPassword(TUser user, string password) + { + ArgumentNullException.ThrowIfNullOrEmpty(password, nameof(password)); + return PasswordHelper.CreatePasswordHash(password); + } + + public PasswordVerificationResult VerifyHashedPassword(TUser user, string hashedPassword, string providedPassword) + { + ArgumentNullException.ThrowIfNullOrEmpty(hashedPassword, nameof(hashedPassword)); + ArgumentNullException.ThrowIfNullOrEmpty(providedPassword, nameof(providedPassword)); + + return PasswordHelper.VerifyPassword(providedPassword, hashedPassword) ? PasswordVerificationResult.Success : PasswordVerificationResult.Failed; + } + } } \ No newline at end of file diff --git a/Streetwriters.Identity/Streetwriters.Identity.csproj b/Streetwriters.Identity/Streetwriters.Identity.csproj index 86bc6d9..5261bf7 100644 --- a/Streetwriters.Identity/Streetwriters.Identity.csproj +++ b/Streetwriters.Identity/Streetwriters.Identity.csproj @@ -1,43 +1,43 @@ - - - - net8.0 - Streetwriters.Identity.Program - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PreserveNewest - - - - - - + + + + net8.0 + Streetwriters.Identity.Program + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + + + \ No newline at end of file