aboutsummaryrefslogtreecommitdiff
path: root/lib/Hashing.Portable/src
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Hashing.Portable/src')
-rw-r--r--lib/Hashing.Portable/src/Argon2/SafeArgon2Library.cs4
-rw-r--r--lib/Hashing.Portable/src/IdentityUtility/JwtPayload.cs21
-rw-r--r--lib/Hashing.Portable/src/ManagedHash.cs22
-rw-r--r--lib/Hashing.Portable/src/ManagedHashAlgImpl.cs48
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