From 561b40c3d85be1417f5390b2e39cbf6964d9828b Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Thu, 25 Jun 2020 13:06:31 -0700 Subject: [PATCH] Moves Argon2 to real nuget (#163) --- .github/workflows/dotnet-core.yml | 19 +- ModernUO.sln | 8 - Projects/Argon2/Argon2.cs | 111 ------- Projects/Argon2/Argon2.csproj | 29 -- Projects/Argon2/Argon2.nuspec | 15 - Projects/Argon2/Argon2Context.cs | 33 --- Projects/Argon2/Argon2Error.cs | 83 ------ Projects/Argon2/Argon2Exception.cs | 18 -- Projects/Argon2/Argon2PasswordHasher.cs | 279 ------------------ Projects/Argon2/Argon2Type.cs | 18 -- Projects/Argon2/HashMetadata.cs | 58 ---- Projects/Argon2/packages.lock.json | 9 - .../runtimes/linux-x64/native/libargon2.so | Bin 220936 -> 0 bytes .../runtimes/osx-x64/native/libargon2.dylib | Bin 50424 -> 0 bytes .../runtimes/win-x64/native/libargon2.dll | Bin 32768 -> 0 bytes Projects/Server.Tests/packages.lock.json | 8 +- Projects/Server/packages.lock.json | 8 +- Projects/UOContent.Tests/packages.lock.json | 26 +- .../Security/Argon2PasswordProtection.cs | 4 +- Projects/UOContent/UOContent.csproj | 3 +- Projects/UOContent/packages.lock.json | 32 +- 21 files changed, 43 insertions(+), 718 deletions(-) delete mode 100644 Projects/Argon2/Argon2.cs delete mode 100644 Projects/Argon2/Argon2.csproj delete mode 100644 Projects/Argon2/Argon2.nuspec delete mode 100644 Projects/Argon2/Argon2Context.cs delete mode 100644 Projects/Argon2/Argon2Error.cs delete mode 100644 Projects/Argon2/Argon2Exception.cs delete mode 100644 Projects/Argon2/Argon2PasswordHasher.cs delete mode 100644 Projects/Argon2/Argon2Type.cs delete mode 100644 Projects/Argon2/HashMetadata.cs delete mode 100644 Projects/Argon2/packages.lock.json delete mode 100755 Projects/Argon2/runtimes/linux-x64/native/libargon2.so delete mode 100755 Projects/Argon2/runtimes/osx-x64/native/libargon2.dylib delete mode 100755 Projects/Argon2/runtimes/win-x64/native/libargon2.dll diff --git a/.github/workflows/dotnet-core.yml b/.github/workflows/dotnet-core.yml index 127615744..6ed6e0b63 100644 --- a/.github/workflows/dotnet-core.yml +++ b/.github/workflows/dotnet-core.yml @@ -32,7 +32,6 @@ jobs: with: path: | ~/.nuget/packages - !~/.nuget/packages/argon2.bindings !~/.nuget/packages/zlib.bindings ${{ github.workspace }}/Projects/*/obj/project.assets.json ${{ github.workspace }}/Projects/*/obj/project.nuget.cache @@ -40,17 +39,6 @@ jobs: key: ${{ matrix.os }}-nuget-cache-v6-${{ hashFiles('**/packages.lock.json') }} restore-keys: | ${{ matrix.os }}-nuget-cache-v3 - - name: Argon2 Library Cache - id: argon2-cache - uses: actions/cache@v2 - with: - path: | - ~/.nuget/packages/argon2.bindings - ${{ github.workspace }}/Projects/Argon2/** - ${{ github.workspace }}/packages/Argon2.Bindings*.nupkg - key: ${{ matrix.os }}-argon2-cache-v6-${{ hashFiles('Projects/Argon2/*') }} - restore-keys: | - ${{ matrix.os }}-argon2-cache-v4 - name: ZLib Library Cache id: zlib-cache uses: actions/cache@v2 @@ -67,13 +55,8 @@ jobs: - name: Pack ZLib NuGet if: steps.zlib-cache.outputs.cache-hit != 'true' run: dotnet pack -c Release -o packages Projects/ZLib/ZLib.csproj - - name: Build Argon2 - run: dotnet build -c Release Projects/Argon2/Argon2.csproj - - name: Pack Argon2 NuGet - if: steps.argon2-cache.outputs.cache-hit != 'true' - run: dotnet pack -c Release -o packages Projects/Argon2/Argon2.csproj - name: Restore dependencies - if: steps.nuget-cache.outputs.cache-hit != 'true' || steps.argon2-cache.outputs.cache-hit != 'true' || steps.zlib-cache.outputs.cache-hit != 'true' + if: steps.nuget-cache.outputs.cache-hit != 'true' || steps.zlib-cache.outputs.cache-hit != 'true' run: dotnet restore --force-evaluate - name: Build Server run: dotnet build -c Release --no-restore Projects/Server/Server.csproj diff --git a/ModernUO.sln b/ModernUO.sln index 2301feaa2..63e8144f5 100644 --- a/ModernUO.sln +++ b/ModernUO.sln @@ -2,8 +2,6 @@ # Visual Studio Version 16 VisualStudioVersion = 16.0.29102.190 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Argon2", "Projects\Argon2\Argon2.csproj", "{97150E9D-5561-4D3C-9B78-E795544507D0}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "Projects\Server\Server.csproj", "{5E93BB35-3661-4822-9A8A-859726BAD87F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UOContent", "Projects\UOContent\UOContent.csproj", "{83CF2484-BCCB-4B7C-9C5F-7AB43AEA5E8F}" @@ -45,12 +43,6 @@ Global {3C4797F9-603E-44EF-8E8C-9275CC9EA74B}.Debug|x64.Build.0 = Debug|x64 {3C4797F9-603E-44EF-8E8C-9275CC9EA74B}.Release|x64.ActiveCfg = Release|x64 {3C4797F9-603E-44EF-8E8C-9275CC9EA74B}.Release|x64.Build.0 = Release|x64 - {97150E9D-5561-4D3C-9B78-E795544507D0}.Analyze|x64.ActiveCfg = Analyze|x64 - {97150E9D-5561-4D3C-9B78-E795544507D0}.Analyze|x64.Build.0 = Analyze|x64 - {97150E9D-5561-4D3C-9B78-E795544507D0}.Debug|x64.ActiveCfg = Debug|x64 - {97150E9D-5561-4D3C-9B78-E795544507D0}.Debug|x64.Build.0 = Debug|x64 - {97150E9D-5561-4D3C-9B78-E795544507D0}.Release|x64.ActiveCfg = Release|x64 - {97150E9D-5561-4D3C-9B78-E795544507D0}.Release|x64.Build.0 = Release|x64 {3B030CD2-DB29-4BC2-9C90-D90804B30757}.Analyze|x64.ActiveCfg = Analyze|x64 {3B030CD2-DB29-4BC2-9C90-D90804B30757}.Analyze|x64.Build.0 = Analyze|x64 {3B030CD2-DB29-4BC2-9C90-D90804B30757}.Debug|x64.ActiveCfg = Debug|x64 diff --git a/Projects/Argon2/Argon2.cs b/Projects/Argon2/Argon2.cs deleted file mode 100644 index 5a05d33b6..000000000 --- a/Projects/Argon2/Argon2.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System.Runtime.InteropServices; - -namespace System.Security.Cryptography -{ - internal interface IArgon2 - { - public Argon2Error Hash(uint t_cost, uint m_cost, uint parallelism, - ReadOnlySpan pwd, - ReadOnlySpan salt, - Span hash, - Span encoded, - int type, int version); - - Argon2Error Verify(ReadOnlySpan encoded, ReadOnlySpan pwd, int pwdlen, int type); - - // TODO: Change str to use ReadOnlySpan then convert to pointer later - Argon2Error Decode(Argon2Context ctx, ReadOnlySpan str, int type); - } - - internal static class Argon2 - { - internal static readonly bool IsDarwin = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); - internal static readonly bool IsFreeBSD = RuntimeInformation.IsOSPlatform(OSPlatform.FreeBSD); - internal static readonly bool IsLinux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux); - internal static readonly bool IsUnix = IsLinux || IsDarwin || IsFreeBSD; - - internal static readonly IArgon2 Library = IsUnix ? (IArgon2)new UnixArgon2() : new WindowsArgon2(); - } - - internal class WindowsArgon2 : IArgon2 - { - public Argon2Error Hash(uint t_cost, uint m_cost, uint parallelism, - ReadOnlySpan pwd, - ReadOnlySpan salt, - Span hash, - Span encoded, - int type, int version) => - SafeNativeMethods.argon2_hash(t_cost, m_cost, parallelism, - in pwd.GetPinnableReference(), pwd.Length, - in salt.GetPinnableReference(), salt.Length, - ref hash.GetPinnableReference(), hash.Length, - ref encoded.GetPinnableReference(), encoded.Length, - type, version - ); - - public Argon2Error Verify(ReadOnlySpan encoded, ReadOnlySpan pwd, int pwdlen, int type) => - SafeNativeMethods.argon2_verify(in encoded.GetPinnableReference(), in pwd.GetPinnableReference(), pwdlen, type); - - public Argon2Error Decode(Argon2Context ctx, ReadOnlySpan str, int type) => - SafeNativeMethods.decode_string(ctx, in str.GetPinnableReference(), type); - - internal static class SafeNativeMethods - { - [DllImport("libargon2.dll", EntryPoint = "argon2_hash", CallingConvention = CallingConvention.Cdecl)] - internal static extern Argon2Error argon2_hash(uint t_cost, uint m_cost, uint parallelism, - in byte pwd, int pwdlen, - in byte salt, int saltlen, - ref byte hash, int hashlen, - ref byte encoded, int encodedlen, - int type, int version - ); - - [DllImport("libargon2.dll", EntryPoint = "argon2_verify", CallingConvention = CallingConvention.Cdecl)] - internal static extern Argon2Error argon2_verify(in byte encoded, in byte pwd, int pwdlen, int type); - - [DllImport("libargon2.dll", EntryPoint = "decode_string", CallingConvention = CallingConvention.Cdecl)] - internal static extern Argon2Error decode_string(Argon2Context ctx, in byte str, int type); - } - } - - internal class UnixArgon2 : IArgon2 - { - public Argon2Error Hash(uint t_cost, uint m_cost, uint parallelism, - ReadOnlySpan pwd, - ReadOnlySpan salt, - Span hash, - Span encoded, - int type, int version) => - SafeNativeMethods.argon2_hash(t_cost, m_cost, parallelism, - in pwd.GetPinnableReference(), pwd.Length, - in salt.GetPinnableReference(), salt.Length, - ref hash.GetPinnableReference(), hash.Length, - ref encoded.GetPinnableReference(), encoded.Length, - type, version - ); - - public Argon2Error Verify(ReadOnlySpan encoded, ReadOnlySpan pwd, int pwdlen, int type) => - SafeNativeMethods.argon2_verify(in encoded.GetPinnableReference(), in pwd.GetPinnableReference(), pwdlen, type); - - public Argon2Error Decode(Argon2Context ctx, ReadOnlySpan str, int type) => - SafeNativeMethods.decode_string(ctx, in str.GetPinnableReference(), type); - - internal static class SafeNativeMethods - { - [DllImport("argon2", EntryPoint = "argon2_hash")] - internal static extern Argon2Error argon2_hash(uint t_cost, uint m_cost, uint parallelism, - in byte pwd, int pwdlen, - in byte salt, int saltlen, - ref byte hash, int hashlen, - ref byte encoded, int encodedlen, - int type, int version - ); - - [DllImport("argon2", EntryPoint = "argon2_verify")] - internal static extern Argon2Error argon2_verify(in byte encoded, in byte pwd, int pwdlen, int type); - - [DllImport("argon2", EntryPoint = "decode_string")] - internal static extern Argon2Error decode_string(Argon2Context ctx, in byte str, int type); - } - } -} diff --git a/Projects/Argon2/Argon2.csproj b/Projects/Argon2/Argon2.csproj deleted file mode 100644 index c42829969..000000000 --- a/Projects/Argon2/Argon2.csproj +++ /dev/null @@ -1,29 +0,0 @@ - - - 1.2.7 - System.Security.Cryptography - Argon2.Bindings - true - false - true - Debug;Release;Analyze - 1.2.7 - - - - true - runtimes/win-x64/native - Always - - - true - runtimes/osx-x64/native - Always - - - true - runtimes/linux-x64/native - Always - - - diff --git a/Projects/Argon2/Argon2.nuspec b/Projects/Argon2/Argon2.nuspec deleted file mode 100644 index bf03a1491..000000000 --- a/Projects/Argon2/Argon2.nuspec +++ /dev/null @@ -1,15 +0,0 @@ - - - - Argon2.Bindings - 1.1.8 - Kamron Batman - Kamron Batman - MIT - https://github.com/modernUO/ModernUO - false - Argon2 C# Bindings for ModernUO - Updated to use spans/pointers - Copyright 2020 - - diff --git a/Projects/Argon2/Argon2Context.cs b/Projects/Argon2/Argon2Context.cs deleted file mode 100644 index 25a5b030e..000000000 --- a/Projects/Argon2/Argon2Context.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Runtime.InteropServices; - -namespace System.Security.Cryptography -{ - [StructLayout(LayoutKind.Sequential)] - internal class Argon2Context - { - public IntPtr Out; - public uint OutLen; - - public IntPtr Pwd; - public uint PwdLen; - - public IntPtr Salt; - public uint SaltLen; - - public IntPtr Secret; - public uint SecretLen; - - public IntPtr AssocData; - public uint AssocDataLen; - - public uint TimeCost; - public uint MemoryCost; - public uint Lanes; - public uint Threads; - - public IntPtr AllocateCallback; - public IntPtr FreeCallback; - - public uint Flags; - } -} diff --git a/Projects/Argon2/Argon2Error.cs b/Projects/Argon2/Argon2Error.cs deleted file mode 100644 index bdb645236..000000000 --- a/Projects/Argon2/Argon2Error.cs +++ /dev/null @@ -1,83 +0,0 @@ -namespace System.Security.Cryptography -{ - /// - /// An enumeration of the possible error codes which are returned from Daniel Dinu and - /// Dmitry Khovratovich's Argon2 library. - /// - /// Some of these error conditions cannot be reached while using the C# PasswordHasher wrapper - /// - public enum Argon2Error - { - /// - /// The operation was successful - /// - OK = 0, - - /// - /// The output hash length is less than 4 bytes - /// - OUTPUT_TOO_SHORT = -2, - - /// - /// The salt is less than 8 bytes - /// - SALT_TOO_SHORT = -6, - - /// - /// The salt is too big - /// - SALT_TOO_LONG = -7, - - /// - /// The time cost is less than 1 - /// - TIME_TOO_SMALL = -12, - - /// - /// The memory cost is less than 8 (KiB) - /// - MEMORY_TOO_LITTLE = -14, - /// - /// The memory cost is greater than 2^21 (KiB) (2 GiB) - /// - MEMORY_TOO_MUCH = -15, - - /// - /// The parallelism is less than 1 - /// - LANES_TOO_FEW = -16, - /// - /// The parallelism is greater than 16,777,215 - /// - LANES_TOO_MANY = -17, - - /// - /// Memory allocation failed - /// - MEMORY_ALLOCATION_ERROR = -22, - - /// - /// The parallelism is less than 1 - /// - THREADS_TOO_FEW = -28, - /// - /// The parallelism is greater than 16,777,215 - /// - THREADS_TOO_MANY = -29, - - /// - /// This will not be returned from the C# PasswordHasher wrapper - /// - DECODING_FAIL = -32, - - /// - /// Unable to create the number of threads requested - /// - THREAD_FAIL = -33, - - /// - /// This will not be returned from the C# PasswordHasher wrapper - /// - VERIFY_MISMATCH = -35 - } -} diff --git a/Projects/Argon2/Argon2Exception.cs b/Projects/Argon2/Argon2Exception.cs deleted file mode 100644 index b7a7a2ad6..000000000 --- a/Projects/Argon2/Argon2Exception.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace System.Security.Cryptography -{ - /// - /// An exception class to wrap the errors returned by Daniel Dinu and Dmitry Khovratovich's Argon2 library. - /// - /// Except through very unusual conditions, the only exceptions which could be thrown from PasswordHasher - /// are Argon2Exception, ArgumentNullException, DllNotFoundException (if libargon2.dll is not found) - /// - public class Argon2Exception : Exception - { - /// - /// Construct an Argon2Exception with the specified Argon2 error code - /// Which method the Argon2Exception originated from - /// The error returned from the Argon2 library - /// - public Argon2Exception(string action, Argon2Error error) : base($"Error during Argon2 {action}: ({(int)error}) {error}") {} - } -} diff --git a/Projects/Argon2/Argon2PasswordHasher.cs b/Projects/Argon2/Argon2PasswordHasher.cs deleted file mode 100644 index 6f72e482f..000000000 --- a/Projects/Argon2/Argon2PasswordHasher.cs +++ /dev/null @@ -1,279 +0,0 @@ -using System.Runtime.InteropServices; -using System.Text; - -namespace System.Security.Cryptography -{ - /// - /// PasswordHasher is a class for creating Argon2 hashes and verifying them. This is a wrapper around - /// Daniel Dinu and Dmitry Khovratovich's Argon2 library. - /// - public class Argon2PasswordHasher - { - private static RandomNumberGenerator m_Rng; - - /// - /// How many iterations of the Argon2 hash to perform - /// - public uint TimeCost { get; set; } - - /// - /// How much memory to use while hashing in kibibytes (KiB) - /// - public uint MemoryCost { get; set; } - - /// - /// How many threads to use while hashing - /// - public uint Parallelism { get; set; } - - /// - /// The type of Argon2 hashing algorithm to use - /// Argon2d - The memory access is dependent upon the hash value (vulnerable to side-channel attacks) - /// Argon2i - The memory access is independent upon the hash value (safe from side-channel atacks) - /// - public Argon2Type ArgonType { get; set; } - - /// - /// Length of the generated raw hash in bytes - /// - public uint HashLength { get; set; } - - /// - /// How strings should be decoded when passed to the Hash method. - /// The default is Encoding.UTF8. - /// - public Encoding StringEncoding { get; set; } - - /// - /// Randomizer used to generate salts - /// - public RandomNumberGenerator Rng { get; set; } - - /// - /// Initialize the Argon2 PasswordHasher with default performance and algorithm settings based upon the environment the hashing will be used in. - /// You should perform your own profiling to determine what the parameters should be for your specific usage; however, this attempts to provide - /// some reasonable defaults. - /// - public Argon2PasswordHasher(RandomNumberGenerator rng = null) - { - TimeCost = 3; - MemoryCost = 8192; - Parallelism = 1; - ArgonType = Argon2Type.Argon2i; - HashLength = 32; - StringEncoding = Encoding.UTF8; - Rng = rng ?? (m_Rng ??= new RNGCryptoServiceProvider()); - } - - /// - /// Hash the password using Argon2 with a cryptographically-secure, random, 16-byte salt. - /// This is the only overload of the Hash method that the typical user will need to use for password storage. The other overloads are provided for interoperability purposes. - /// Do not compare two Argon2 hashes directly. Instead, use the Verify or VerifyAndUpdate methods. - /// A string representing the password to be hashed. The password is first decoded into bytes using StringEncoding (default: Encoding.UTF8) - /// A formatted string representing the hashed password, encoded with the parameters used to perform the hash - /// - public string Hash(ReadOnlySpan password) - { - Span salt = stackalloc byte[16]; - Rng.GetBytes(salt); - return Hash(password, salt); - } - - /// - /// Hash the raw password bytes using Argon2 with the specified salt bytes. - /// Unless you need to specify your own salt for interoperability purposes, prefer the Hash(byte[] password) overload instead. - /// Do not compare two Argon2 hashes directly. Instead, use the Verify or VerifyAndUpdate methods. - /// The raw bytes of the password to be hashed - /// The raw salt bytes to be used for the hash. The salt must be at least 8 bytes. - /// A formatted string representing the hashed password, encoded with the parameters used to perform the hash - /// - public string Hash(ReadOnlySpan password, ReadOnlySpan salt) - { - Span hash = stackalloc byte[(int)HashLength]; - Span encoded = stackalloc byte[(int)(39 + ((HashLength + salt.Length) * 4 + 3) / 3)]; - Span passwordBytes = stackalloc byte[StringEncoding.GetByteCount(password)]; - StringEncoding.GetBytes(password, passwordBytes); - - var result = Argon2.Library.Hash( - TimeCost, - MemoryCost, - Parallelism, - passwordBytes, - salt, - hash, - encoded, - (int)ArgonType, - 0x13 - ); - - if (result != Argon2Error.OK) - throw new Argon2Exception("hashing", result); - - var firstNonNull = encoded.Length - 2; - while (encoded[firstNonNull] == 0) - firstNonNull--; - - return Encoding.ASCII.GetString(encoded.Slice(0, firstNonNull + 1)); - } - - /// - /// Hash the password using Argon2 with the specified salt. The HashRaw methods may be used for password-based key derivation. - /// Unless you're using HashRaw for key deriviation or for interoperability purposes, the Hash methods should be used in favor of the HashRaw methods. - /// The raw bytes of the password to be hashed - /// The raw salt bytes to be used for the hash. The salt must be at least 8 bytes. - /// A byte array containing only the resulting hash - /// - public void HashRaw(ReadOnlySpan password, ReadOnlySpan salt, Span hash) - { - Span passwordBytes = stackalloc byte[StringEncoding.GetByteCount(password)]; - StringEncoding.GetBytes(password, passwordBytes); - - var result = Argon2.Library.Hash( - TimeCost, - MemoryCost, - Parallelism, - passwordBytes, - salt, - hash, - null, - (int)ArgonType, - 0x13 - ); - - if (result != Argon2Error.OK) - throw new Argon2Exception("raw hashing", result); - } - - - /// - /// Hashes the password and verifies that the password results in the specified hash. - /// The ArgonType must of this PasswordHasher object must match what was used to generate expectedHash. - /// The other parameters (timeCost, etc.) do not need to match and the parameters embedded in the expectedHash will be used. - /// Hashing the password should result in this hash - /// The password to hash and compare its result to expectedHash. The password is first decoded into bytes using StringEncoding (default: Encoding.UTF8) - /// Whether the password results in the expectedHash when hashed - /// - public bool Verify(ReadOnlySpan expectedHash, ReadOnlySpan password) - { - Span expectedHashBytes = stackalloc byte[StringEncoding.GetByteCount(expectedHash)]; - StringEncoding.GetBytes(expectedHash, expectedHashBytes); - Span passwordBytes = stackalloc byte[StringEncoding.GetByteCount(password)]; - StringEncoding.GetBytes(password, passwordBytes); - return Verify(expectedHashBytes, passwordBytes); - } - - /// - /// Hashes the raw password bytes and verifies that the password results in the specified hash. - /// The ArgonType must of this PasswordHasher object must match what was used to generate expectedHash. - /// The other parameters (timeCost, etc.) do not need to match and the parameters embedded in the expectedHash will be used. - /// Hashing the password should result in this hash - /// The raw password bytes to hash and compare its result to expectedHash - /// Whether the password results in the expectedHash when hashed - /// - public bool Verify(ReadOnlySpan expectedHash, ReadOnlySpan password) - { - var result = Argon2.Library.Verify(expectedHash, password, password.Length, (int)ArgonType); - - if (result == Argon2Error.OK || result == Argon2Error.VERIFY_MISMATCH || result == Argon2Error.DECODING_FAIL) - return result == Argon2Error.OK; - - throw new Argon2Exception("verifying", result); - } - - /// - /// Hashes the password and verifies that the password results in the specified hash. (See Verify method) - /// If the password verification is successful, this method checks to see if the memory cost, time cost, and parallelism - /// match the parameters the PasswordHasher object was constructed with. If they do not much, then the password is rehashed - /// using the new parameters and the result is outputted via the newFormattedHash parameter. - /// Hashing the password should result in this hash - /// The raw password bytes to hash and compare its result to expectedHash - /// Whether the cost parameters of expectedHash differ from the PasswordHasher object and if the password was rehashed using th new parameters. This is always false if the password was incorrect. - /// If isUpdated is true, then newFormattedHash is the password hashed with the new cost parameters. If isUpdated is false, then newFormattedHash is expectedHash. - /// Whether the password results in the expectedHash when hashed - /// - public bool VerifyAndUpdate(ReadOnlySpan expectedHash, ReadOnlySpan password, out bool isUpdated, out string newFormattedHash) - { - bool verified = Verify(expectedHash, password); - - if (verified) - { - var hashMetadata = ExtractMetadata(expectedHash); - - if (hashMetadata.MemoryCost != MemoryCost || hashMetadata.TimeCost != TimeCost || hashMetadata.Parallelism != Parallelism) - { - isUpdated = true; - byte[] salt = hashMetadata.Salt; - newFormattedHash = Hash(password, salt); - return true; - } - } - - isUpdated = false; - newFormattedHash = expectedHash.ToString(); - return verified; - } - - /// - /// Extracts the memory cost, time cost, etc. used to generate the Argon2 hash. - /// An encoded Argon2 hash created by the Hash method - /// The hash metadata or null if the formattedHash was not a valid encoded Argon2 hash - /// - public static HashMetadata ExtractMetadata(ReadOnlySpan formattedHash) - { - var context = new Argon2Context - { - Out = Marshal.AllocHGlobal(formattedHash.Length), // ensure the space to hold the hash is long enough - OutLen = (uint)formattedHash.Length, - Pwd = Marshal.AllocHGlobal(1), - PwdLen = 1, - Salt = Marshal.AllocHGlobal(formattedHash.Length), // ensure the space to hold the salt is long enough - SaltLen = (uint)formattedHash.Length, - Secret = Marshal.AllocHGlobal(1), - SecretLen = 1, - AssocData = Marshal.AllocHGlobal(1), - AssocDataLen = 1, - TimeCost = 0, - MemoryCost = 0, - Lanes = 0, - Threads = 0 - }; - - try - { - var type = formattedHash.StartsWith("$argon2i") ? Argon2Type.Argon2i : Argon2Type.Argon2d; - formattedHash = $"{formattedHash.ToString()}\0"; - - Span bytes = stackalloc byte[formattedHash.Length]; - Encoding.ASCII.GetBytes(formattedHash, bytes); - - var result = Argon2.Library.Decode(context, bytes, (int)type); - - if (result != Argon2Error.OK) - return null; - - var salt = new byte[context.SaltLen]; - var hash = new byte[context.OutLen]; - Marshal.Copy(context.Salt, salt, 0, salt.Length); - Marshal.Copy(context.Out, hash, 0, hash.Length); - - return new HashMetadata - { - ArgonType = type, - MemoryCost = context.MemoryCost, - TimeCost = context.TimeCost, - Parallelism = context.Threads, - Salt = salt, - Hash = hash - }; - } - finally - { - Marshal.FreeHGlobal(context.Out); - Marshal.FreeHGlobal(context.Pwd); - Marshal.FreeHGlobal(context.Salt); - Marshal.FreeHGlobal(context.Secret); - Marshal.FreeHGlobal(context.AssocData); - } - } - } -} diff --git a/Projects/Argon2/Argon2Type.cs b/Projects/Argon2/Argon2Type.cs deleted file mode 100644 index 3195a90f9..000000000 --- a/Projects/Argon2/Argon2Type.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace System.Security.Cryptography -{ - /// - /// The type of Argon2 hashing algorithm to use. - /// - public enum Argon2Type - { - /// - /// The memory access is dependent upon the hash value (vulnerable to side-channel attacks) - /// - Argon2d = 0, - - /// - /// The memory access is independent upon the hash value (safe from side-channel atacks) - /// - Argon2i = 1 - } -} diff --git a/Projects/Argon2/HashMetadata.cs b/Projects/Argon2/HashMetadata.cs deleted file mode 100644 index a08995353..000000000 --- a/Projects/Argon2/HashMetadata.cs +++ /dev/null @@ -1,58 +0,0 @@ -namespace System.Security.Cryptography -{ - /// - /// HashMetadata represents the information stored in the encoded Argon2 format - /// - public class HashMetadata - { - /// - /// The type of Argon2 hashing algorithm to use - /// Argon2d - The memory access is dependent upon the hash value (vulnerable to side-channel attacks) - /// Argon2i - The memory access is independent upon the hash value (safe from side-channel atacks) - /// - public Argon2Type ArgonType { get; set; } - - /// - /// How much memory to use while hashing in kibibytes (KiB) - /// - public uint MemoryCost { get; set; } - - /// - /// How many iterations of the Argon2 hash to perform - /// - public uint TimeCost { get; set; } - - /// - /// How many threads to use while hashing - /// - public uint Parallelism { get; set; } - - /// - /// The raw bytes of the salt - /// - public byte[] Salt { get; set; } - - /// - /// The raw bytes of the hash - /// - public byte[] Hash { get; set; } - - - /// - /// A base-64 encoded string of the salt, minus the padding (=) characters - /// - public string GetBase64Salt() => Convert.ToBase64String(Salt).Replace("=", ""); - - /// - /// A base-64 encoded string of the hash, minus the padding (=) characters - /// - public string GetBase64Hash() => Convert.ToBase64String(Hash).Replace("=", ""); - - - /// - /// Converts HashMetadata back into the original Argon2 formatted string. - /// - public override string ToString() => - $"$argon2{(ArgonType == Argon2Type.Argon2i ? "i" : "d")}$v=19$m={MemoryCost},t={TimeCost},p={Parallelism}${GetBase64Salt()}${GetBase64Hash()}"; - } -} diff --git a/Projects/Argon2/packages.lock.json b/Projects/Argon2/packages.lock.json deleted file mode 100644 index 9c9abd993..000000000 --- a/Projects/Argon2/packages.lock.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "version": 1, - "dependencies": { - ".NETCoreApp,Version=v3.1": {}, - ".NETCoreApp,Version=v3.1/linux-x64": {}, - ".NETCoreApp,Version=v3.1/osx-x64": {}, - ".NETCoreApp,Version=v3.1/win-x64": {} - } -} \ No newline at end of file diff --git a/Projects/Argon2/runtimes/linux-x64/native/libargon2.so b/Projects/Argon2/runtimes/linux-x64/native/libargon2.so deleted file mode 100755 index 1097b8dcd77d87c7c4ea16c3d37cd2f5838a4659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220936 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 diff --git a/Projects/Argon2/runtimes/osx-x64/native/libargon2.dylib b/Projects/Argon2/runtimes/osx-x64/native/libargon2.dylib deleted file mode 100755 index 0b2ae92052c1f3fde0269684afcf228a993de154..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50424 zcmeIb3w%`7xi`Eg7YGRKLBU3gI#FsvMajseL_sq!1AA}=Vga>PoCK0UDkM3{1hB0V z90F{|=}AxVQjfOrtM+(2$7B3n^@|s91~3-{94>OT5&>ai6e1{BP2T_WthFaQLuh&J z*Yo!Ler(vY)^lCYde(KXwf4>jXTIp@ttggcMNxX;9)Pi-9bgdP@&LGI_dKH{Dq7CA}-+W`tte;+Q0`yNN`FQI{{T@(C4f0SI(}8 zqY~{auM{N1WP&YmZbeCx`nv2ReZF~x^UDg$!I!A7N$Pt>>L3_y>AKFbZ%%1RMOTIs z^_49YqO~%U1b54Cmu8Ond~+)N<;5j)B|cG~^_PP1eW}EN4K>|t1=8oMELl`sQs65t zDJo^SdwC3BA|y9T1q3JRkR%SMp2Tqbd``yZHU=QB*I5>K)yr zn@~RA+|n+uonN06XMH4ZTt*!>VE8Se9J+9kaG0LZg+voGRr{3XmxYshtgR2 zf}%KKK+ao=Qjb3565w)i^CgWN1z;57R*CK@XnIpouI_>Gec&jao4y`@^VgGZ+4jeG zU)%Ao4<7&eX5ehNDG5dGtEAwjIQzKQ@T4ChZcdNN!SD;&ZYi*!yR;}HDl5v#D|AnP zu)<%s;HC*?&s;C{WFepTAU;gOl<$kzMGsu`z(o)IBY9w^rhgjfO!8k7=(PB=syizu zRG-j7{huvEcOFXpH3h0OGHV@UUliD)u^j=%IQ| z|2Ved21>H>`vk`}V0Zv9KnqoZxG(mL!AK*l1=i=>>$rc`x}uv5)75L7io*8a?YPS^ z(=lVZw)FFrNZg}`wMfkN_E{LORzHnlL<_pCj5^Jz6+pT5O-U zR12I=Q6KRE^y-_v`g(`nsaI~-XGS&sgV^tjp%E@x_Bs;N^mRd3PS876)1SSEB!e?; z`r~3|uGh5CYD(IvABhcz^=|#+>ahO@`Z|w(QVUkvVuvpyr<{!K zo2MwPRIYD-2KLq}#60?OPw*j|Cs>)O1s_V+syqFcph!IWnb>M@d#g|QCwqd0S>Eb{ z{@b+B|0U9iR|6xXu;{_-B!yXj9#(C_F$z^p&1yZ%diU>Euw z3H4voqg1CI?}!Evfp^{dw~lvOPz)$wb=fPxIP?!ReVbc9;n9!A+KZ^PB3h)?rdIz3 zR8+t1x~odBri$#)*L(ECv3~=TTW{3#YO2MAd7QITD`kvU`w{o?~aoJBmcUv+-Ex4Mr#>SD#AXn#D7UEQGGZ8xVmUAnL zC-^$09b8RT#(H;ILngc|Q$_#sJvaiGR7&iLAm@qO?-I0cEf^vlfm3M}ee5UfTU#AK z>T3i0PidiFoYM3TEpjAT>uk`E2M$=+doRI1sLR^0lSS&$u>C}lS~|E8X#;95a;RhN zL&k7WFear4&~Q5lZ4|rD4#d%q5LG@S_|qb_t%aaH1nmX1n+2U?(m3>t=|_b5_B4pa zDC)NZbM#A+VGZv=W<5d2h`Jfj`&yvEss$R8)N1m4TVL?AjYpfc>b-uA_-4QkvhzMN z@F)^59sEKe*>AGsePSG9XTG6hz;=Mh`w6=p$*jd4DN@UtrXtdWNQ5#2%)<>@_FDg7 z^^G9|9XAiTTz%tgpAM~at(G0FZ0p?Yc<0YB>SO~=?bT&zXuvM}!Bz#K(Wx8bk$&8* zcj!A}_o2t8(MX4cD>yaHTivWK`vm}ZaDXFl+9)&^Fiw5LIi=>%+Z}-xQEqpD$AkK7 zF1MEpWVspXbGAp)Z^6j#P<)Vcjzn>dwR=YXO@-%&pS-BElSmg87=ruAB2ivn&pA(d zfo&+vzwqMnWN+|aZ5mYHNEvu@%4O;s;XVy0H+S}y%FjDD*LM}0Kgk{z197}!!A`Y$ z2GzEwxc_<+j#g&1=A+dyY;T^`Is<@uO%9LOZ_)$XtX4;yeqvUu|6~_^jg$w9<<|)Q zI}MoTD_lS9Ct~A({5#f<(Cq)2_2a|*f8hENFF!8m*n?k-B3zDQk2mo}0J=Bv3Bdfd zCa!@ev59ZUix(kgE7XpL{NuOp!EAI7{qa9S`|c_~YM8M%kN;iEudnZaVEN6w{~xsd z1sbmlbY8b;5YMaUG~!Wm3YNsRU<#fg@jy8O^BB`3R>J%;*QGaL-ssS`JM^#hvlxGq z7FpeMBG57vvw1BzF4C4{?~FZnAI*^P%(pN0&J>ESb7GSDDxz-vJtroPf8ywRr`{R6 zm!pkN%=2anzWEC)Q6vmVQFE#yqc0zO!`$hSBi*^EH zDKKKzx-R(0y#}m>mJ^4TeQKdo3#}0G_Jw2Z;i4KX*snpe_iNOGo`y8d?rBV;n3ZBy ziltL5T?>R$wDDE2vvM<@rLDbG>r|_1{hoSvRJBgFs&_|J>ol8c^<}98zo!la#yZKy z*r{3S-R}cqQwL7V0yYPdxvKT<93h%ZOalQ8oDA%wJW$I(%@fozLCpgd*yWVIYW+1m zKC0Fy8KU%8FoN_5+(3b_F0U2*b%LKE=4S-+Gj8At!LdB7u>L3qPcp>(j9`Ao4O}5O zmbWnDuiH6zk|E}21oJa);0nR9oM(a7Ut7^>!+wUCpApQ@xPdDK$8sAp{yIzWGsOIi zV1C98Tp>7?=Lr5>!Osx$GlKaUH*kgESe_^N%LG3|%+CnsXWYOQf@67=;I9$<3^6|= zn4fX*KXWXv75sIApCRUF1oJZv{ulgV!5mf&ZI`5D3djD!CLe~#eK75oe_KO>l*aqz$3 z&lCJ*f}bJgX9V*z4*nPXRf4}p@H52xj9`Ao!T*B4R`AyeeukKz5zNmx_+Rjc1%FiV zGsOIiV1CBI|AN0o@V5(ohM1ob%+EOZU+~lB2Kk?ZCmCXXMle6);D6>=ZWH`jf}bJg zX9V*z4*nPXIf6e|@H52xj9`Ao!T*9kPw3H}rpISNedU-|-R$qL>FxHd+Q~0H+2P6?wBY1CT3zUig^A9n zJJ_oY%Vj5H!I?C+^|Iq3JIuON*KU2+ISZEJ`G?kPrss;)7q{MtgmzQXgM+Epm+`{L zB~VW5qSMfmx`UJF5r{NZ;Kb-h%VeD`UGdgbq|f=G1w0f*FI^p;FW-?ma2Ti%R%*cY!k!u-Pjn#(rFX8 zoxzDi+<{X`>LU};K}`;MhIV>G&(iSh4!N?h?oIdLvr{#SuasY;;V6FLeGD6F4sJH`j3@yakwd{2j zj$3X*U3tky;Jym zqH1+^MDgqCXqli|SA9!*Fq$L2?As=eM-YGP+g*qw^31m}jtmr>6V!o%jrFu+{70l; z2j&n=5kdnWVw@=U{rx~+T18fuh5e}DhpB>>fY%+IgbIF`D)+Rx}=NEzdQEzo!IrK_UsJyazWeW&fv6k=MB>a1t;}G zJHBdC$dlIDcD+-5V``cUh`~QJy`90S{T!Xm`W7_HW?B$+gdA8| z-vDrn7WvGk4U3ZUKBOgZI=M2%-rUx!GeW8~OA}J$z5+|I)P%a)yV#!ye4hFCVJwtz zn+amW+8LZYgqBa1Jq#eQ#AZRejH=cD3l$uDF@YuhuuS#`09oS^S4ghrWD*tD(6sgeN*??B< zwH$V5HMB>>CAs-8lE^@(ZFIV@Ed_ZGP(=JvEQRV zR9C$fr!ml+mVJY+7501elUO(P1Q$eW96^`OoxQ&Na;N^uu!uW2ZgXt+b=2>x)t5pI zls4(EdZ%9aPJ=6qEu;0Mh$KBa#xhqu_P~(R#57I6!wRdk(C9N(h+&a_wp8;X(sXyO zM?&bF@i-J%mre;T*CUP_yteEJwvXy6uGQa1+8@VeNgUos( zbjw51h2)`Jg&4|VPlm{Y4Qehp4y69YtOGFC2%YJY3FdD)ZR>yHStcll5qO`J;N&al>R=c9iSU)%rTF zM}vjHuMFFBQHQpbA4F|!>Wm<*sHS_HZq@p!kF;PyVc*+k#~i8c$1aR7S7Rq7zDHcc z+8S-_1$XvGl}F#+N8KOlECgbk?;sa+#u^Y}Co-@;(=^I3XWOnWWk!EabF9m>!0n2E zP(2!dXJAQMN(H7&_0+W^z%K$Vu*8Zc`v>wIdUho^EmK`ar;O^)kj&|{@=d^Jf#o^D zl7r|=hz9S@tv^OAXVS`F3Qn658np>nCHq+UGl3-@F#Qe?ZG+H$as5$nE~Ra4MP2bA zg5b1!h!!B)0TXQ&;z%zK#W-!AzXUVe%0>09K*Hc72m(ve6}9@uh_!n0Q{DU~nOXk@ ze)xbv{pW}UmW&0{rHHlOLDV+JX~1>B5v>yl_Z5Divt0xSMG!-PB-QF2)LSN=KQQfI zrepSjk^Kdl6^i*~;Nc<2^KP1V@}j>dG&e^JO?F~FNV6B0{R@wnezd-jj6O26nx-OZ zW~haNfhlR~Ku?+#=yrjo38*^InT7=zPg)l6RzhTkY!Z*97f)I)@L2+%Bk@>t@uZaj zpDXZrj9->k1xKp`A4{vDFtfT$P^%=hR#NK(wMI~DB{eLmQ9-Q})Uc$sNNT&FMg_G+ zQWc9x*GeIBC#VW0RG2cRQD;F`WeKX4(8!~t=16L;pk@hbj-=*EYMG$s3TmFDR!M4& zpq2@0m88~6YMr3g2x_gQh9xyBsC9xGmedwWZ5Pz2pteY=f{}o7WTg=K6;$3jr2I;1 zmY`Zu%P7ATfSMzzxq_M{s5z3FC#hwEnk%Szl3FFHHG*0us8y0$E2(vYS|g~nk{XuO zsG!yfYFJWRB(+^oqk`HZsR~tQ%CD%@?Se{kH!fdE%@R~Ap^;xn&5_hxLCq4>97)ZS z)G|TM71TUQt&-FlK`mpdw~7+2m83c*xoXr*Z!O`&5+4=#I^e^EZ;|+RgpSVloVPwO zL=9Lm(QT~Wh{lL&tvDJ}hEnL%UnZ0mis*?oeO( zP{aH@@=0GUGz!lx4@I@?lM5@g&}(V@u$XNALf$Kq9+Vhjvw(gKkbZRzPM*isp8{Ub8dr4c^3*x#V2ZL;lViMDGM ztB zZYC^eLhiYQ1x)aqOPIlg`_3iY3W8H#otX4c=1)JD{}K?iV1<=dR5LMJz@?O@*l~i5!{86q+PA76;=A#@>V^G}=g`8l0YKXnYR%;KZ@# z7pxM3S<;lThTuG5N)nrr6|5K=D`Hc|3R5t#rNnzOi-i)?cxKceIuU#i#D_?6-PPiFH@$NIWL*k_DX`&hhnI%A=BKS<>7IJSZHPNAPyB^l_)U&Qsx>%_%$>gh}}Y5!PEc%k*^kiX4@!QgzrUbK02jV z`7e%l={zFkzl*POfKxw(hrD~RE>Gu7W9!D7^WL>S9_+0J7h&V~ZmWisob2I9b=9S` zCL{Kfv3k$Xc-)fSF}Z?f`EbP=nz6@bKsnOi#zsvXi)dIxvk-k*L~-Ue^=T2cA-Y0D z(-HNHs1?zC5rsYdr*iZXckpt}zD3h7agUsYm79ra@Hn=pCt49=gL+~*LK{LG!c2sj z2(u7oAsmZvtop`UJ#Y|K8fUrU56toM&vm>D2X>toZT4+)yXHN^9$|<+SLZ}i| zZ^xiX@uz8x6X_^rCqkN3cDDT@Hf=#zBFE6U9dU%;&}7 z9}dex<#h5SyKpJT*o7q`N-n%tM9GDkh>{CO zizvD9S`j4|sv?@^)W3{;lBWKD&2Zg^TIjL9-JJQJaHe{9SRLk~yAF3P?i$=x>M%ZF zih!RShE-FMV*sJx%_`If9wRzD`mtE=8jMK5GZo^s! z%igCx`#K25{ctT9|B}zk&Em8u+xD({P51q)T&${+!&BJd9bJw1IE-=YUvYnSnBswl zbFrxL5u(_pa|D;SAm#}Tx4M^pyA)CNkw43cL^GtAZ7+LFEcVLi;|(ds%@;$j$N9G2g=Kn2q5 zew4;o-!h*kpJyQ#oJH|mI#Co4O(8<7shGJ;V^2UM_3^S`dBs1BOFS5vw@t^U@3 z+pw(qzvjLTL_H&JIJK&y{CLSYAnF+L<(R8{w|qVA1t3-eQIF;cr&m`Y?zSBFgi?i% z88In1Us*pj`I#@M1PExt!F{iNk4JyJ3H%1dt8egHHctpTm5rX{*WM#$EmBP!=oTI) z(>?ZMT4XICVP-NDkt!Q)ZvdXHwM2oV7}Byt-S)LplV9VswMauI+((}BS~emj%XW8U zZKfyrc}~q^KMdQoNF$}d*|gv^J;$)W>b6JRkw~V;{w$dUQ%L(RdKpI#QMRS6SyPjr zmx--K{lJjNrXxM5hi-IykF&kWoOzH5@&vi4ycQg9yXxK_W0rPb`bY8nAPLToC;6Q} zvs;2(avu9>&9a&ejYRN1%*!jG$!*!B*>`yDF?S@KiM&JKCD4ad$;hDd$`)u5*&P`o zS)@sdwlrvwNS1rcS}4G4K%|P4Y>BwHguVKEnE%!Qg-ycXj4Ka%E!#ZF&wNO>1ZSkj zJoepi0#zmh>kK;6KSyc8^PCpJ?H>E<_x<4Jy*jG!C@xdgoSR#C3I zVXvm2@!&0!;Im|e7FlQWqRPqYX4!?hLry?VU|*p&ARQDk+dv7Uko9Jd{eaifKZmU1#h&h=DcAz zj@Nd`(Q9N|!l*4=Rw&XSH$d#5=Kx6+KpQ`fo|dcc#^Niei-GctO!tiBv^+XuWoe#~ zuai+8ouYYG&&U_3o_KVME(XWyl?*OU*G87vJa+7#A{eP zlO=1oXJpP;&&X;jG>@KxIaTTcnjD#C`_z4#XZu_5o^{u3-#k9z?YY3`xlr*VsRFO+ z^)U2zjhUO#Ng2-oYq`TZ8~o>k6v^JA@)1HU@Jkv+UjQx`Xd#MaVvZJ=t|{jq$3wqL z&hvzRnaA^kVGXeXFqo$e9kG1ua;Vm1o`6^JooGW?r&=dwAq)q9O9psCg?P-M zchq91?U+I25Drs~mXGjkTg5_CFhBU zg(sjY;XEwfH#`Lm^eQ30N=1ixf~l=MVT0bTx#ZT$KHlmt)ao{H;~gn=*?tle^UB-R z726pdR#%1T^_IsY?!f6Bb;TNBZB1(R8%%BXUoD^T@C4=2*P?C2M)1k`2N$&d7A&CB zxVVNMLSj3!P%kr6uZH(9dbXf~0Ll@N66%Y-0fKmk14o;d!Yj37CuRg}Z7|pFi zq=DzxuJzIiJfz|5K~DQi@EkA0kmM)N$Y#U&bRhpp1FD#GOXZL$i`|7F}e`VkOU{KGPscCM#mm|>F;tn*}urf$Q>^1NzYUblnhMwhBQ#=t6G%Qrb!Q(X? zJX?#v5kU2Mgr0#DU0dqgRN`D8sN?vzU2xi7 zb!8e?zW+|Ap&R%Nxp3*7RAbpHJR+jYcm|o0ZW8tGQ>;>;ZVe}w#eFqZK+;!P0+PPE zR6w%DH=0{KO_9iXXz`7DSBn?E6ZPnM>`(Apj`%f|Gsz+M{1qT@XiYd$42NSq>r%Xd(NNj*B68kJaU8^mum zQ+H+V+U~poXVlCWtw&%T2}^-AyTyUi6aF+i-iPymk;hu|+s$&kCi+;=jpsGIadDlY zxBL1=;PZ6eG{@1((llpqZl=By@65gUF07@KIJck^@aTo%s#}M8LUSx0)pg+Q7F2w- z`Ujxkypl&>fV$8ai~fi}%v-VSi?gw7WA6dswR~C~_NvZL)#?+-rlWE4eO4~X(H$ev z;-G;?-KR-*&F{o@1tq(ino(%&NZKuJLeNtUPTP2#hW``D78`Ui6Jx9HZWkBuZPA&V4x?(m_Eyqyq{-G8eJPA$0 zsjX&B-#M;tdDu~PDhtCc9Z7gRvJ8XlDB>3HO{>*E1mMu`&V`Y;b{Tm%_Q5bRa{f?Z z<>xr{fDX;|s7r}k`2`ROR_>ur@4QyNLsYi15=OpfHZpRKk^fB0hLMi|fRP>;`7{P^ z>F=YlAF+{MVdEyX`e)#CJ!)};a-!qlM|um^zSXHW;#_9-F?GeQq*GmU67LPeiCeYM zpnrjn*ohtLimQlf*#Rg13d?Mr;m|ZZ4j!vI-M4(Lur7k`$f7>JcG(uSx}8d2|5Cg~ zegJ?&Uo->vJ&vkzmZ55O6exFS1{4KdVGTpKJGjJ#&pbq9lPDRg8ZVOyeDOfTflC~= zRI90bSe0b_BP;XE1A(iGv#D5R4?{V+4s*I`BZa{FFK)oqHpYF*?&YG7Rp#t8a2 z2A>*AH#KqBqt2npvOX;O#2r|lEbD_82UEG?E_(lb)nU=A=cx+K300wTWxN{v5=NjJ z+}HXNM)t({sUF37MVGx9XHUhUZ*%H=C9cpvA;ZVb8Qvf>e4I0Uz!iE` zWcUbju|sC~eVO6khzuX&j2v@?{#|7F3$T7DGiP*otc4fRV1yU5O=rtXqknb%mZdx5S0V9HA!?O8ig40iVMG+ob~x*1O<< z{p^7Ku0G#5^<(Ec;CN3CK#3nPIpBnFK!YQK0?DA>X-A(uOV3dD{Z2feCsSEFEF!a4 zV3ckfBI-RHfDgMY8t@hxP3N}#C$~DPxA^v{3)2F=x_3v+CZu8Wut&Jw0NHH@5p)24nq=6qZ5-EW}yfWJ&@(XdQKQ zAAnD!kw+$2_E8#GPB7BIVAy}mdD5tqY5Y6spj=$la~coC)A%OMNMpFaD-Dcg{kLK! z(^EbM$~0U?8gD{H5BcaFPvfbsG|IZtn1M7(&XdN=8NyeeAmn_^>^Y4;5}gZjlt?39 zmR^*G%@w?FXlDI?y!6sbZuOOQcqGlhs9H_s5$c!Y)OQVQ!kFpri;**_66atySTKP} z!rJ92G)s5(4t4p*cwq-Mz^k8eQT>?!(B6!09Ei5;dit6UmMR{hOz=_#_L%yq0G6(g zAq`Vq)+6ZCy`*9xcE#PD?>qITNJ|X$R{_;81(0-vcG<|4HutVf3JrjLMN{k;_5{^&?O zG8FY%E!~v>M-$){@b*7OybiSlf=gVrIJE0j%NEos2uRnG5IwX&uKymPGXg>f2&EfA zd?Aa89r*IdlE>*$5#h7+Tm!|sj;Un_I-t4qiz0RF=dka&h&+d`33^wUm$!^dVyQ|~9biedm_C%F|!eBY*H7kTkh@OHF-RK6Ww zL@D2v2DlWjp_OkXa0`9orWAIRre+E)RBO)06@YjYnqs8sW74#Xl16nag(vpHze^U> zkird6vlpUE_)9~ia~EO00fs*dL_F&u)qg8G2GSED9;zs(N%amwk;{ZtJISi@DBIQm zsloqAQfkLq(ut4W>}!YK*K??*K}#c3)V+;Rvabn0OG3F^2`NP(6NU^~H>-+L+eE3+ zM}lPb@%eH-hAE{`=XOXC0u#4Je)c~Tpu@BX#?eQ}9 zBsq$FtG0#mglk9dwsAooJpzv&-HV?ys6|H);fAx%tcT%8(Zr7)L;`0H6Lf+YzaYjV zz;S}5qpu?~kjIaKZ~F)_e0&KpR4{htJ~*k(RfQia`Zj3hTD%X*w7nn-xec8`+hNj( zj6u^8Qt~p_4MZrtHdNEn{>{Q(s=IrsoX6e(Z|(gAvAwO39(w~dl(`=rcd1K;T#0>M zD|zX85>iWLFGw9-snO}RATB#SZgBCAPs{#Tt$rOVSZ;l*C;N!HtOH9ihzBBPociW% z=)Z3d;pBp%U~=aSl{g$3AD-MATC%fzzprR<=Hj^yy`UrBGAX zE3*l&3~l?w5%}bGN9Z@w4oAq1DJ&*pp;y@sOz1+6$rns$oW%NWw&Bssg(wM8n+vH-1Zyec8eIdf9UA5-ZXAweu2*y z(vZE`(b<3xHS&<{)jw-}i-+tJ@gdtAnlTy`s)sTAmaDj?Q42=%?nsp|+F&;rwXUQ8 zZN!T)8%_N$j@j1>ofpUK{|jUGTi@r7?Yv|5OGN*h$85jQLbc}aIA&ih^74N;W}mu} zbNJspX8#MP+S8c5QrPp~J!WTcvOEI+tz-6~E6AgN!w(WA_ncF>Ex#GFlfJqLEEc;=*h-;T8oJDpnXUT+G}{QJc>d4E)3ddXo%*) z@-rT^w`H8AVVs9b4C7+ZK9v#eY0%z!zCpVZkB9HksJ)`KN{-qqO{4ZfN8lhv?NvkL z!?tIr9JgN^8XvfwL*pa&s-f|r`<|XDP@R|{l!q~mu(Pz7(&o{1> zg=Cqd!G--0dh*5IcxPqb*0b$c_9P^4+bD7aFTh$MXaaRTfiOY>|1_4$KKquapOi~e;Uit`Wg9c z0DM_%j=poz=d;#z?eHY7A7%D~rT8u~Ud$IK@k7aYGS@qUlZVoxKn8z)ghbQ;L6K5EYj$=oMkK^1Ny$yvoe}~eZA4T7=RG+9UY3q&m>=7x%`<1R` zVTZcvJ(q=Im3KMy_EDC~XicUKBoal3q4zptyS7-)%Vz&W1EtA69|h~ z0$vT6Omt90aX#vbw)H|nlt^&eAO}95fX|Dmubjb>-Y$f@Cxk|guzZXu6Mci_fmy6EQeClpW!dLihSrmVvcfkM!bbT_f&v&Ug)37hg$hPs1E~3Ezf!9F{1$B+_M|AWuGM|>Kh_~x#CtK;ON zAyp4Wm7ohp54L+$XG`FrCIwq-`*2o2cEKpCWC zKDVB}l%nCR91hZJmIkbm^6Ms+GY-6FY;^|7@|MbU!PVF{qHF71eE)@|8!1iyWxVsy zHlT~8s0M~-lZ%26g|W!vy0vtW8t4mzgWm9;mfpG%YfxtYO$ZGcq3@FJn-KDhz(y)^ zh71^RY~X2A#N9!|4X_VZW{xBXClp9OKw>-SKZRrJrkQ@SXmFTgSnzv#2vq zQPshbfn~4CR`795M--LkDYRNtp4iU;y0GJ`#&IWNMa*6Kl(q)$??iFX7c#g!rv%>_ zPt{RBH6^%eJZYa2d}e$tLM_zqd$eJfaSYuLw(d4e2`(FdiU@XWiShQA775#?0=o;? zsiA)8XV!WxVRuHmM|~yYwKRF`IQxd07DIJv%*1iGb5!agO}Blkhu)5AwbB_qeA@lR zsi06|4!!w~P`@Oh)(f>bxi?i8Ns@XxUH4G!6kX(EO7OAq)F+{`gvMQ=S@vof$6@_0 zlr3dc!4{Tg-zRLc(b>_d$Sn0ru>KmaWv@HqI85K=wY<-#B+;EmGRb^Bj3+XaK9A-7 zDY|r%p%1U7G-i<@oC?0G0U^u2E~ReE*{P7B)JQo_2jUY0Q*>c4`SwLn$V%!+9r|f( zH}}>oVeL($$h3?mRNjbYX`d2&ZG0N%rGfWD8<3Y)?&?| z##hMLCtk~TI@k*3kyb7f2lhdGPG>FB!P!Y11H*w!6p6QVd_`$-0fosglrJivI$}Z&XkhS$`VG)5&0U6S8DBba1VDXdv&Ygr z6;;wos_Yv)XaJETHdGJf^Re;mki8=`uCLe9>|Sj+$eYoMOm22tPJ8W}=^#PmNV*$` zGxd{rC_g6|r162r(i+#zRZl-TEi|08c3I@k_!3$_@LF2&S(7H5bsvl!>#bdMG!U#^ zL)#9`a)v8%+)`M0Eq!o@-1V+ur90yr=sV;|F2tyLl#7GD0nWt%<|cgl5=Dak20PD4 zCoZRDoI&w_s3p&gB75#F4ODm7m%8xf6xoIlR6c20mo#LbCqE9%1hINfw|Ax|t3uqZK}$XcW6{EYFDPzPCE1KkMGYP(7sS{SkaHjNX}7tAC4GKL#D@;GRO0zQFN@jvk*o-aLgZ*T2Jf zLy4VlyrCq!k2jPH>dtB@H$9IxwQPOjcthtE|Nk6sIF<8`H30tBZvPN#~aE5jW=Z6IpYoGiwej_Oc-x$fdBe*)#0^e|S_`2$){?fk)`{QDUH{+fSl_?OmUJAbf> zf1lvrr}+12{(Xjjf6u?Q{QLjlmkvx_^&BFO>775Y_r)3Ad4z1G6Mpk>v_fh9h+^2R zQChcBjLs3ZHc>2>VrwXNKgC|7*v~2U62%r%td?TSDfR@#R#EIRioHa!M<_<8by^ow zjMjKsODNVtu>!;pc3mlHcsT94jJFMqmkf<}3yoI_w>)y_%e{ZAJXu1|tF)Yhl`NV|DA;=9zgvr)EdJY*I1Hq~r~J1h z$@u=b2jC{hQb;tCLqRLVOL*eJ-WTgOGE8Y)f}8YG8k8QvBxmptp7;zMq?^(pUeZUh zWG|&dX%b9vq7$CdC0(SKe+EM3G)`iR%a1L-zwGkj{;LwK@-bP^xYNjK>v-9|Z* zPSR&w#7jC1e~}#NAYEhw$&#(4$B-pmhTTLn@^mRYCg&-Zs{Gh>*=QBhGkr#RnVSYV^S2;80fJVc?pa87w)qV{e$W}8vG zpwKp_w4#f1LH_*t$~oxy@L-|hEnHAq{$LOMJrIP%47jSOaFK0(eo0}4LePTzk_ROi zcS?e*hudb8{|!gZFD#kspGR3QDfQd36n0XNA{FG&bJ#_$dlnG1M3F?t_9&ZQa86Rv z4e(&;oP2+AX^E|{yu7qrnK7@>R#aYCXj>p12#(qLa~_~Paor*YDRq7(QF(n6OHnNs z`%wxaH0dZW6kf7bRL+@aTUc0LK{k{Y*@UQ3U5)H4D6UwL@1HYInF_xamXub`ooDmU zD=*A1Fcp=7@D^88;18DDP!TE@6qfia6j#Zd(gH#ilfRspqz++3(u+Dgk!O^19FuL}jGg`yg;;jp$4c`YlOUkq*Y z@+;;kGfN&QDP1HT4<8j2;^YjSPNvhtbh>vqPT&4uex>Nsu~El;?Qn#2QAqtNF3XmC zQY{%uk|p1gY{^5X>;#f-<8RSZoci2;_{-AEc!W@tJc!#Y06?&%D3UvMp0U9iluD0l3aEpCVn?6No6-F z$+;sGOWs%|r6yakwA`*JSviU&=ckbQsbU#;34K7M=WF}J0{;gYhGh7V3>V1oUKvi2 z;g4l_jSRneNa*>q4C`h1qzsqHaIy>s$?(%(3Az80;U8r98yPN^p-+aI4DB+!T84dP zc;uHt-xe8$W%yq*{GAK~GAxtfeKK^(aDoieWtb_$Y#EAFF8*Hhz(o&S^uR?AT=c+2 z4_x%XMGsu`z(o&S^uR?AT=c*{rU!OmU4yRuGW=YICuFEB6!g9_93;c5Wtb_$n`Jmo zhLdENE5o13P-qitDMtKac+mqFJ#f(j7d>#%0~bAT(E}GfaM1%7J#f(j7d>#%0~bB; z_w~TQ3~SyGuT}0JnB(*LD*QNN;+r$?0pHxp{PF_j&VN#Ba(p;~Qc>tvs=`S%IRy{S zF92KRY~SqSl7hl=rK%psWcjkxkfr4cYnuIw!tzq3Mk!BY5Gv-BJxH1fXBCN+mE*Wn zk%3H4uz-$;5VH;VIegNEpiDq?E{5V+h|}4l(m4c;C5V$DC`UkKHy{mAnK+i>!yzXe zjv{QX30t_hm^tq;;eL+eT*Q|LT!p_JM}7#JC!mr!3(5duA;X7re*N;5$1UJ~DP@kb zJ7sZcxo#9TvkXX;y{%0QtHC|`NcS(Rp=`&!P&72 ze2Pt}vxsv=@nlz~D#Q?*S*aZYp(y=SU1jl+MehI`y_V9yULZ~rn~Z;jc%6)QARfM+#ObGn ze%k4$?ne~EnVTd!vIXx~ROI8xTWyLst3>7WLJHXIB!!RfC!vb1PAMo{?8~2DHZNa! zFBNX%dg4Q6s4P^rrxfSUSC;jHN%(4SQYl)Ds74(rJr?u}_yTI}NV0@}!Z_uVgr;Fs zgWA+$G%oX1*JZ&JF9w;=HHS1#h^qNfHFV-fx??-E3ft%Gm0Ft z1$EP>ywywjb#Eo5xC9>A+pDsS+JO@2T~rL?l$E{toZ%|wJlIP)jT2FP>`VEo*8_zQ zDjm?@UP}7^2|sle_^DllGg;wk3x3;I&~FR<&GKZ~)c;p+Zpm-<=0^T*Z?LXnR{pJe zoZ>b7+ww<>*EX^W{;h4I_^DcX#0zJw2IYkrV4nbgxlu|IG9kob3h0^A0;DA}S+II`t_Vt}d2P57a6ZgdUDf#RVinCL@s=i#P{;Hg9>02jd| zAC~etQr>`xPV!;gbP-JQVFGXwO!8H9pc$7(${R4zNxp?5xF{fbGfeV%bWj@CPYwGe zO#CFDMMPYNycs6>8p&TO@ z&M49qmhuLCq4GH2$k#S0Z@`8;{V7-RzZ%-n_-f-N%>S9wkLT5zEJrrDL+`s8}Nn7=ScbMrMv-OsC=%J zA1UPx_(J9Lq$yn_x;m zjPuWQT_@!Y*pM$1GIk4cL&+OOQ9iBwu3_3=S!8z=pge$I~~%Bwr^H z_Zaz?upytNh>PH<_%XvI-y-?vOL+qZiTkg*g#ObEv;Efz{R<8IC2Yvo2y)zhGfeU} z>LhUmq`Uze@=^4wbP-JUn_-e~AI4CVnz4 zmtKg%6_+=`BwsU1(BC%lFJVJIC&7PanB=2lgnYAx9hFMKV>Q9$x$nB?8}e2YKgpY6lCP5T^-|t| z4SD%^5%;ed{!97a2z}=K?*!aa{%d6VSN0Y8H((=uJbm&-FxhX0$$sN`aF`)4pAQZB z+~n@^W|-t#?iBPfQr>_K`S8H*@@AOiYv%~MOUfItA)h12asQcNPG8Dpxj_>K1SiiC~l`*jjFp3mqtf8sZuzdn_)@%(X2!p8G0{Yh}*H=a+gl(0?C|9>Q5 zWBz}egpKDB`m;|YZ#=K(OW1hcu8^=*>I+ENcpi9C!p8H-3lcV-cj@m~aen0U=m&

pBTED3)l;hO7& zJr=YZ%D?eEahUD((*Sq`3GT#l=#Qk&pp*)78!7VrgB1%?8?JG*I2Gjw6Kj z*Ycp#MgcA%qMbb zY@NX}Y~sK<+aO;frssM9J7nGG_<4l1)r3-ws^D7F+ zi~>M~CHB7JHNkyXmsmyd+y(hc4{p3kWPm7&&&QU)LknqtX~fJ5d^TXj1NjTeOG{?w z`|(+c5kDy`E3GK@mzEb7R*Wc{H|NGh#U&+$vT#d!oW~ITLz-9=omXoy2)N4I^jW zd!zGrREDB%96cG(6Qhs6pn;k!wqp&a$_&#eGpDq?@Vk^J$=x`zD1Y{kv#B)CZTRNi z$kckz83gGB12r`|32?rit*0)ct2^q}1958+>O`YKb2_It>7oCl4D{SjF|+IiMT0%p zoNi6+FU$eHW4jYW%LqjdG2f-Ur09)Vqef*HaRZbXQFIC8&R-j=jFHID(baVsnC^pL zS8vsQL_4=16H}S*l0zYRW7gQLF#k#`xfD%qQgdSYBB4U2K5ZjrOcj*|SGc^5#0+ZA9S*g#Qiq6ya$A diff --git a/Projects/Argon2/runtimes/win-x64/native/libargon2.dll b/Projects/Argon2/runtimes/win-x64/native/libargon2.dll deleted file mode 100755 index da586a22182c0c319a1e015d8deb8b8abf18abb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 Dz&u2f diff --git a/Projects/Server.Tests/packages.lock.json b/Projects/Server.Tests/packages.lock.json index 5d44ca9b9..7e772b14b 100644 --- a/Projects/Server.Tests/packages.lock.json +++ b/Projects/Server.Tests/packages.lock.json @@ -1184,7 +1184,7 @@ "ZLib.Bindings": { "type": "Transitive", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" }, "ModernUO": { "type": "Project", @@ -2068,7 +2068,7 @@ "ZLib.Bindings": { "type": "Transitive", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" } }, ".NETCoreApp,Version=v3.1/osx-x64": { @@ -2942,7 +2942,7 @@ "ZLib.Bindings": { "type": "Transitive", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" } }, ".NETCoreApp,Version=v3.1/win-x64": { @@ -3799,7 +3799,7 @@ "ZLib.Bindings": { "type": "Transitive", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" } } } diff --git a/Projects/Server/packages.lock.json b/Projects/Server/packages.lock.json index 2759f8dce..437f618b4 100644 --- a/Projects/Server/packages.lock.json +++ b/Projects/Server/packages.lock.json @@ -46,7 +46,7 @@ "type": "Direct", "requested": "[1.0.2, )", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" }, "Libuv": { "type": "Transitive", @@ -116,7 +116,7 @@ "type": "Direct", "requested": "[1.0.2, )", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" }, "Libuv": { "type": "Transitive", @@ -132,7 +132,7 @@ "type": "Direct", "requested": "[1.0.2, )", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" }, "Libuv": { "type": "Transitive", @@ -148,7 +148,7 @@ "type": "Direct", "requested": "[1.0.2, )", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" }, "Libuv": { "type": "Transitive", diff --git a/Projects/UOContent.Tests/packages.lock.json b/Projects/UOContent.Tests/packages.lock.json index 65f9742fb..412f5c164 100644 --- a/Projects/UOContent.Tests/packages.lock.json +++ b/Projects/UOContent.Tests/packages.lock.json @@ -40,8 +40,8 @@ }, "Argon2.Bindings": { "type": "Transitive", - "resolved": "1.2.7", - "contentHash": "ZmxtDx9RwHdRBHSq8d97VNHF0el1OAQzWQAtMyT+F/1KApVjBpPcqXVr4eAvAp8qQqBSl5y3WhEvBMBRBdkpgw==" + "resolved": "1.3.0", + "contentHash": "cxRZ+nwH33QozaFBAftjctf9PoNEXgcEI5dBHHDkWI24EwCeOXRp0M+h5muavQADfxIvPG9o4FNCSnP7VkV6wQ==" }, "Libuv": { "type": "Transitive", @@ -1330,7 +1330,7 @@ "ZLib.Bindings": { "type": "Transitive", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" }, "ModernUO": { "type": "Project", @@ -1345,7 +1345,7 @@ "uocontent": { "type": "Project", "dependencies": { - "Argon2.Bindings": "1.2.7", + "Argon2.Bindings": "1.3.0", "MailKit": "2.7.0", "Microsoft.AspNetCore.Connections.Abstractions": "3.1.5", "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.5", @@ -1358,8 +1358,8 @@ ".NETCoreApp,Version=v3.1/linux-x64": { "Argon2.Bindings": { "type": "Transitive", - "resolved": "1.2.7", - "contentHash": "ZmxtDx9RwHdRBHSq8d97VNHF0el1OAQzWQAtMyT+F/1KApVjBpPcqXVr4eAvAp8qQqBSl5y3WhEvBMBRBdkpgw==" + "resolved": "1.3.0", + "contentHash": "cxRZ+nwH33QozaFBAftjctf9PoNEXgcEI5dBHHDkWI24EwCeOXRp0M+h5muavQADfxIvPG9o4FNCSnP7VkV6wQ==" }, "Libuv": { "type": "Transitive", @@ -2242,14 +2242,14 @@ "ZLib.Bindings": { "type": "Transitive", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" } }, ".NETCoreApp,Version=v3.1/osx-x64": { "Argon2.Bindings": { "type": "Transitive", - "resolved": "1.2.7", - "contentHash": "ZmxtDx9RwHdRBHSq8d97VNHF0el1OAQzWQAtMyT+F/1KApVjBpPcqXVr4eAvAp8qQqBSl5y3WhEvBMBRBdkpgw==" + "resolved": "1.3.0", + "contentHash": "cxRZ+nwH33QozaFBAftjctf9PoNEXgcEI5dBHHDkWI24EwCeOXRp0M+h5muavQADfxIvPG9o4FNCSnP7VkV6wQ==" }, "Libuv": { "type": "Transitive", @@ -3132,14 +3132,14 @@ "ZLib.Bindings": { "type": "Transitive", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" } }, ".NETCoreApp,Version=v3.1/win-x64": { "Argon2.Bindings": { "type": "Transitive", - "resolved": "1.2.7", - "contentHash": "ZmxtDx9RwHdRBHSq8d97VNHF0el1OAQzWQAtMyT+F/1KApVjBpPcqXVr4eAvAp8qQqBSl5y3WhEvBMBRBdkpgw==" + "resolved": "1.3.0", + "contentHash": "cxRZ+nwH33QozaFBAftjctf9PoNEXgcEI5dBHHDkWI24EwCeOXRp0M+h5muavQADfxIvPG9o4FNCSnP7VkV6wQ==" }, "Libuv": { "type": "Transitive", @@ -4019,7 +4019,7 @@ "ZLib.Bindings": { "type": "Transitive", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" } } } diff --git a/Projects/UOContent/Accounting/Security/Argon2PasswordProtection.cs b/Projects/UOContent/Accounting/Security/Argon2PasswordProtection.cs index b79d5cafa..ecf1be8e0 100644 --- a/Projects/UOContent/Accounting/Security/Argon2PasswordProtection.cs +++ b/Projects/UOContent/Accounting/Security/Argon2PasswordProtection.cs @@ -26,7 +26,9 @@ namespace Server.Accounting.Security public class Argon2PasswordProtection : IPasswordProtection { public static IPasswordProtection Instance = new Argon2PasswordProtection(); - private Argon2PasswordHasher m_PasswordHasher = new Argon2PasswordHasher(RandomProviders.SecureProvider as RandomNumberGenerator); + private Argon2PasswordHasher m_PasswordHasher = new Argon2PasswordHasher( + rng: RandomProviders.SecureProvider as RandomNumberGenerator + ); public string EncryptPassword(string plainPassword) => m_PasswordHasher.Hash(plainPassword); diff --git a/Projects/UOContent/UOContent.csproj b/Projects/UOContent/UOContent.csproj index 26077283e..3bcd8e3b5 100644 --- a/Projects/UOContent/UOContent.csproj +++ b/Projects/UOContent/UOContent.csproj @@ -66,9 +66,10 @@ + - + diff --git a/Projects/UOContent/packages.lock.json b/Projects/UOContent/packages.lock.json index 5681950c3..bdc0444c5 100644 --- a/Projects/UOContent/packages.lock.json +++ b/Projects/UOContent/packages.lock.json @@ -4,9 +4,9 @@ ".NETCoreApp,Version=v3.1": { "Argon2.Bindings": { "type": "Direct", - "requested": "[1.2.7, )", - "resolved": "1.2.7", - "contentHash": "ZmxtDx9RwHdRBHSq8d97VNHF0el1OAQzWQAtMyT+F/1KApVjBpPcqXVr4eAvAp8qQqBSl5y3WhEvBMBRBdkpgw==" + "requested": "[1.3.0, )", + "resolved": "1.3.0", + "contentHash": "cxRZ+nwH33QozaFBAftjctf9PoNEXgcEI5dBHHDkWI24EwCeOXRp0M+h5muavQADfxIvPG9o4FNCSnP7VkV6wQ==" }, "MailKit": { "type": "Direct", @@ -58,7 +58,7 @@ "type": "Direct", "requested": "[1.0.2, )", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" }, "Libuv": { "type": "Transitive", @@ -799,15 +799,15 @@ ".NETCoreApp,Version=v3.1/linux-x64": { "Argon2.Bindings": { "type": "Direct", - "requested": "[1.2.7, )", - "resolved": "1.2.7", - "contentHash": "ZmxtDx9RwHdRBHSq8d97VNHF0el1OAQzWQAtMyT+F/1KApVjBpPcqXVr4eAvAp8qQqBSl5y3WhEvBMBRBdkpgw==" + "requested": "[1.3.0, )", + "resolved": "1.3.0", + "contentHash": "cxRZ+nwH33QozaFBAftjctf9PoNEXgcEI5dBHHDkWI24EwCeOXRp0M+h5muavQADfxIvPG9o4FNCSnP7VkV6wQ==" }, "ZLib.Bindings": { "type": "Direct", "requested": "[1.0.2, )", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" }, "Libuv": { "type": "Transitive", @@ -1502,15 +1502,15 @@ ".NETCoreApp,Version=v3.1/osx-x64": { "Argon2.Bindings": { "type": "Direct", - "requested": "[1.2.7, )", - "resolved": "1.2.7", - "contentHash": "ZmxtDx9RwHdRBHSq8d97VNHF0el1OAQzWQAtMyT+F/1KApVjBpPcqXVr4eAvAp8qQqBSl5y3WhEvBMBRBdkpgw==" + "requested": "[1.3.0, )", + "resolved": "1.3.0", + "contentHash": "cxRZ+nwH33QozaFBAftjctf9PoNEXgcEI5dBHHDkWI24EwCeOXRp0M+h5muavQADfxIvPG9o4FNCSnP7VkV6wQ==" }, "ZLib.Bindings": { "type": "Direct", "requested": "[1.0.2, )", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" }, "Libuv": { "type": "Transitive", @@ -2205,15 +2205,15 @@ ".NETCoreApp,Version=v3.1/win-x64": { "Argon2.Bindings": { "type": "Direct", - "requested": "[1.2.7, )", - "resolved": "1.2.7", - "contentHash": "ZmxtDx9RwHdRBHSq8d97VNHF0el1OAQzWQAtMyT+F/1KApVjBpPcqXVr4eAvAp8qQqBSl5y3WhEvBMBRBdkpgw==" + "requested": "[1.3.0, )", + "resolved": "1.3.0", + "contentHash": "cxRZ+nwH33QozaFBAftjctf9PoNEXgcEI5dBHHDkWI24EwCeOXRp0M+h5muavQADfxIvPG9o4FNCSnP7VkV6wQ==" }, "ZLib.Bindings": { "type": "Direct", "requested": "[1.0.2, )", "resolved": "1.0.2", - "contentHash": "oMnRfnRHzfboCS/SXUrrqbDVtM/9h5LkHkB8GuyUq70BYkJRza7CNZxLR+F6IKOTNDcDO68VVCID4DA5Sj8c4Q==" + "contentHash": "KlvJLY55UYpwlxbiX+lJbTuaMWBK3mja3BC3GzTlCA3uHRYxsllL9uYqpe4poFe6l8NMBS/k759+ns8pbeXeMg==" }, "Libuv": { "type": "Transitive",