diff options
Diffstat (limited to 'lib/Hashing.Portable/src')
-rw-r--r-- | lib/Hashing.Portable/src/Argon2/SafeArgon2Library.cs | 4 | ||||
-rw-r--r-- | lib/Hashing.Portable/src/IdentityUtility/JwtPayload.cs | 21 | ||||
-rw-r--r-- | lib/Hashing.Portable/src/ManagedHash.cs | 22 | ||||
-rw-r--r-- | lib/Hashing.Portable/src/ManagedHashAlgImpl.cs | 48 |
4 files changed, 61 insertions, 34 deletions
diff --git a/lib/Hashing.Portable/src/Argon2/SafeArgon2Library.cs b/lib/Hashing.Portable/src/Argon2/SafeArgon2Library.cs index 0ce2fa7..779d627 100644 --- a/lib/Hashing.Portable/src/Argon2/SafeArgon2Library.cs +++ b/lib/Hashing.Portable/src/Argon2/SafeArgon2Library.cs @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023 Vaughn Nugent +* Copyright (c) 2024 Vaughn Nugent * * Library: VNLib * Package: VNLib.Hashing.Portable @@ -52,7 +52,7 @@ namespace VNLib.Hashing { LibHandle = lib; //Get the native method - methodHandle = lib.GetMethod<Argon2InvokeHash>(); + methodHandle = lib.GetFunction<Argon2InvokeHash>(); } ///<inheritdoc/> diff --git a/lib/Hashing.Portable/src/IdentityUtility/JwtPayload.cs b/lib/Hashing.Portable/src/IdentityUtility/JwtPayload.cs index eb33e00..1fc5f61 100644 --- a/lib/Hashing.Portable/src/IdentityUtility/JwtPayload.cs +++ b/lib/Hashing.Portable/src/IdentityUtility/JwtPayload.cs @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023 Vaughn Nugent +* Copyright (c) 2024 Vaughn Nugent * * Library: VNLib * Package: VNLib.Hashing.Portable @@ -22,6 +22,7 @@ * along with VNLib.Hashing.Portable. If not, see http://www.gnu.org/licenses/. */ +using System.Text.Json; using System.Collections.Generic; using VNLib.Utils; @@ -31,9 +32,9 @@ namespace VNLib.Hashing.IdentityUtility /// <summary> /// A fluent api structure for adding and committing claims to a <see cref="JsonWebToken"/> /// </summary> - public readonly record struct JwtPayload : IIndexable<string, object> + public readonly record struct JwtPayload : IIndexable<string, object?> { - private readonly Dictionary<string, object> Claims; + private readonly Dictionary<string, object?> Claims; private readonly JsonWebToken Jwt; internal JwtPayload(JsonWebToken jwt, int initialCapacity) @@ -43,7 +44,7 @@ namespace VNLib.Hashing.IdentityUtility } ///<inheritdoc/> - public readonly object this[string key] + public readonly object? this[string key] { get => Claims[key]; set => Claims[key] = value; @@ -55,7 +56,7 @@ namespace VNLib.Hashing.IdentityUtility /// <param name="claim">The clame name</param> /// <param name="value">The value of the claim</param> /// <returns>The chained response object</returns> - public readonly JwtPayload AddClaim(string claim, object value) + public readonly JwtPayload AddClaim(string claim, object? value) { Claims.Add(claim, value); return this; @@ -69,5 +70,15 @@ namespace VNLib.Hashing.IdentityUtility Jwt.WritePayload(Claims); Claims.Clear(); } + + /// <summary> + /// Writes all claims to the <see cref="JsonWebToken"/> payload segment + /// </summary> + /// <param name="options">Json serializer options to pass to the serializer</param> + public readonly void CommitClaims(JsonSerializerOptions? options) + { + Jwt.WritePayload(Claims, options); + Claims.Clear(); + } } } diff --git a/lib/Hashing.Portable/src/ManagedHash.cs b/lib/Hashing.Portable/src/ManagedHash.cs index 429660f..ae3b35b 100644 --- a/lib/Hashing.Portable/src/ManagedHash.cs +++ b/lib/Hashing.Portable/src/ManagedHash.cs @@ -321,7 +321,7 @@ namespace VNLib.Hashing HashEncodingMode.Hexadecimal => Convert.ToHexString(hashBuffer), HashEncodingMode.Base64 => Convert.ToBase64String(hashBuffer), HashEncodingMode.Base32 => VnEncoding.ToBase32String(hashBuffer), - HashEncodingMode.Base64Url => VnEncoding.ToBase64UrlSafeString(hashBuffer, true), + HashEncodingMode.Base64Url => VnEncoding.Base64UrlEncode(hashBuffer, true), _ => throw new ArgumentException("Encoding mode is not supported"), }; } @@ -343,7 +343,7 @@ namespace VNLib.Hashing HashEncodingMode.Hexadecimal => Convert.ToHexString(hashBuffer), HashEncodingMode.Base64 => Convert.ToBase64String(hashBuffer), HashEncodingMode.Base32 => VnEncoding.ToBase32String(hashBuffer), - HashEncodingMode.Base64Url => VnEncoding.ToBase64UrlSafeString(hashBuffer, true), + HashEncodingMode.Base64Url => VnEncoding.Base64UrlEncode(hashBuffer, true), _ => throw new ArgumentException("Encoding mode is not supported"), }; } @@ -366,15 +366,15 @@ namespace VNLib.Hashing { return alg switch { - HashAlg.SHA3_512 => computeHashInternal(in _3_sha512, data, buffer, key), - HashAlg.SHA3_384 => computeHashInternal(in _3_sha384, data, buffer, key), - HashAlg.SHA3_256 => computeHashInternal(in _3_sha256, data, buffer, key), - HashAlg.BlAKE2B => computeHashInternal(in _blake2bAlg, data, buffer, key), - HashAlg.SHA512 => computeHashInternal(in _sha512Alg, data, buffer, key), - HashAlg.SHA384 => computeHashInternal(in _sha384Alg, data, buffer, key), - HashAlg.SHA256 => computeHashInternal(in _sha256Alg, data, buffer, key), - HashAlg.SHA1 => computeHashInternal(in _sha1Alg, data, buffer, key), - HashAlg.MD5 => computeHashInternal(in _md5Alg, data, buffer, key), + HashAlg.SHA3_512 => computeHashInternal(in _3_sha512, data, buffer, key), + HashAlg.SHA3_384 => computeHashInternal(in _3_sha384, data, buffer, key), + HashAlg.SHA3_256 => computeHashInternal(in _3_sha256, data, buffer, key), + HashAlg.BlAKE2B => computeHashInternal(in _blake2bAlg, data, buffer, key), + HashAlg.SHA512 => computeHashInternal(in _sha512Alg, data, buffer, key), + HashAlg.SHA384 => computeHashInternal(in _sha384Alg, data, buffer, key), + HashAlg.SHA256 => computeHashInternal(in _sha256Alg, data, buffer, key), + HashAlg.SHA1 => computeHashInternal(in _sha1Alg, data, buffer, key), + HashAlg.MD5 => computeHashInternal(in _md5Alg, data, buffer, key), _ => throw new ArgumentException("Invalid hash algorithm", nameof(alg)) }; diff --git a/lib/Hashing.Portable/src/ManagedHashAlgImpl.cs b/lib/Hashing.Portable/src/ManagedHashAlgImpl.cs index eae8903..be4062e 100644 --- a/lib/Hashing.Portable/src/ManagedHashAlgImpl.cs +++ b/lib/Hashing.Portable/src/ManagedHashAlgImpl.cs @@ -47,10 +47,12 @@ namespace VNLib.Hashing public readonly int HashSize => (int)HashAlg.SHA1; ///<inheritdoc/> - public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) => SHA1.TryHashData(data, output, out count); + public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) + => SHA1.TryHashData(data, output, out count); ///<inheritdoc/> - public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) => HMACSHA1.TryHashData(key, data, output, out count); + public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) + => HMACSHA1.TryHashData(key, data, output, out count); } private readonly struct Sha256 : IHashAlgorithm @@ -59,10 +61,12 @@ namespace VNLib.Hashing public readonly int HashSize => (int)HashAlg.SHA256; ///<inheritdoc/> - public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) => SHA256.TryHashData(data, output, out count); + public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) + => SHA256.TryHashData(data, output, out count); ///<inheritdoc/> - public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) => HMACSHA256.TryHashData(key, data, output, out count); + public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) + => HMACSHA256.TryHashData(key, data, output, out count); } private readonly struct Sha384 : IHashAlgorithm @@ -71,10 +75,12 @@ namespace VNLib.Hashing public readonly int HashSize => (int)HashAlg.SHA384; ///<inheritdoc/> - public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) => SHA384.TryHashData(data, output, out count); + public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) + => SHA384.TryHashData(data, output, out count); ///<inheritdoc/> - public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) => HMACSHA384.TryHashData(key, data, output, out count); + public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) + => HMACSHA384.TryHashData(key, data, output, out count); } private readonly struct Sha512 : IHashAlgorithm @@ -83,10 +89,12 @@ namespace VNLib.Hashing public readonly int HashSize => (int)HashAlg.SHA512; ///<inheritdoc/> - public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) => SHA512.TryHashData(data, output, out count); + public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) + => SHA512.TryHashData(data, output, out count); ///<inheritdoc/> - public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) => HMACSHA512.TryHashData(key, data, output, out count); + public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) + => HMACSHA512.TryHashData(key, data, output, out count); } private readonly struct Md5 : IHashAlgorithm @@ -95,10 +103,12 @@ namespace VNLib.Hashing public readonly int HashSize => (int)HashAlg.MD5; ///<inheritdoc/> - public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) => MD5.TryHashData(data, output, out count); + public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) + => MD5.TryHashData(data, output, out count); ///<inheritdoc/> - public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) => HMACMD5.TryHashData(key, data, output, out count); + public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) + => HMACMD5.TryHashData(key, data, output, out count); } private readonly struct Sha3_256 : IHashAlgorithm @@ -109,10 +119,12 @@ namespace VNLib.Hashing public readonly int HashSize => (int)HashAlg.SHA256; ///<inheritdoc/> - public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) => SHA3_256.TryHashData(data, output, out count); + public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) + => SHA3_256.TryHashData(data, output, out count); ///<inheritdoc/> - public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) => HMACSHA3_256.TryHashData(key, data, output, out count); + public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) + => HMACSHA3_256.TryHashData(key, data, output, out count); } private readonly struct Sha3_384 : IHashAlgorithm @@ -123,10 +135,12 @@ namespace VNLib.Hashing public readonly int HashSize => (int)HashAlg.SHA384; ///<inheritdoc/> - public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) => SHA3_384.TryHashData(data, output, out count); + public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) + => SHA3_384.TryHashData(data, output, out count); ///<inheritdoc/> - public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) => HMACSHA3_384.TryHashData(key, data, output, out count); + public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) + => HMACSHA3_384.TryHashData(key, data, output, out count); } private readonly struct Sha3_512 : IHashAlgorithm @@ -137,10 +151,12 @@ namespace VNLib.Hashing public readonly int HashSize => (int)HashAlg.SHA512; ///<inheritdoc/> - public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) => SHA3_512.TryHashData(data, output, out count); + public readonly bool TryComputeHash(ReadOnlySpan<byte> data, Span<byte> output, out int count) + => SHA3_512.TryHashData(data, output, out count); ///<inheritdoc/> - public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) => HMACSHA3_512.TryHashData(key, data, output, out count); + public readonly bool TryComputeHmac(ReadOnlySpan<byte> key, ReadOnlySpan<byte> data, Span<byte> output, out int count) + => HMACSHA3_512.TryHashData(key, data, output, out count); } private readonly struct Blake2b : IHashAlgorithm |