feat: Implement DefaultCryptoHmac for compliance-aware HMAC operations

- Added DefaultCryptoHmac class implementing ICryptoHmac interface.
- Introduced purpose-based HMAC computation methods.
- Implemented verification methods for HMACs with constant-time comparison.
- Created HmacAlgorithms and HmacPurpose classes for well-known identifiers.
- Added compliance profile support for HMAC algorithms.
- Included asynchronous methods for HMAC computation from streams.
This commit is contained in:
StellaOps Bot
2025-12-06 00:41:04 +02:00
parent 43c281a8b2
commit f0662dd45f
362 changed files with 8441 additions and 22338 deletions

View File

@@ -0,0 +1,55 @@
namespace StellaOps.Cryptography;
/// <summary>
/// Well-known HMAC algorithm identifiers used by compliance profiles.
/// </summary>
public static class HmacAlgorithms
{
/// <summary>
/// HMAC using SHA-256 (FIPS 198-1, RFC 2104).
/// Used by: world, fips, kcmvp, eidas profiles.
/// </summary>
public const string HmacSha256 = "HMAC-SHA256";
/// <summary>
/// HMAC using SHA-384 (FIPS 198-1, RFC 2104).
/// </summary>
public const string HmacSha384 = "HMAC-SHA384";
/// <summary>
/// HMAC using SHA-512 (FIPS 198-1, RFC 2104).
/// </summary>
public const string HmacSha512 = "HMAC-SHA512";
/// <summary>
/// HMAC using GOST R 34.11-2012 Stribog 256-bit (RFC 6986).
/// Used by: gost profile.
/// </summary>
public const string HmacGost3411 = "HMAC-GOST3411";
/// <summary>
/// HMAC using SM3 (GB/T 32905-2016).
/// Used by: sm profile.
/// </summary>
public const string HmacSm3 = "HMAC-SM3";
/// <summary>
/// All known HMAC algorithms for validation.
/// </summary>
public static readonly IReadOnlyList<string> All = new[]
{
HmacSha256,
HmacSha384,
HmacSha512,
HmacGost3411,
HmacSm3
};
/// <summary>
/// Validates whether the given algorithm is a known HMAC algorithm.
/// </summary>
/// <param name="algorithmId">The algorithm identifier to validate.</param>
/// <returns>True if the algorithm is known; otherwise, false.</returns>
public static bool IsKnown(string? algorithmId)
=> !string.IsNullOrWhiteSpace(algorithmId) && All.Contains(algorithmId);
}