< Summary

Information
Class: AsiBackbone.Signing.ManagedKey.ManagedKeySignResult
Assembly: AsiBackbone.Signing.ManagedKey
File(s): /home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Signing.ManagedKey/ManagedKeySignResult.cs
Line coverage
93%
Covered lines: 41
Uncovered lines: 3
Coverable lines: 44
Total lines: 116
Line coverage: 93.1%
Branch coverage
62%
Covered branches: 10
Total branches: 16
Branch coverage: 62.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%210%
.ctor(...)100%11100%
get_Signature()100%11100%
get_SignatureAlgorithm()100%11100%
get_KeyId()100%11100%
get_KeyVersion()100%11100%
get_ProviderOperationId()100%11100%
get_SignedUtc()100%11100%
get_Metadata()100%11100%
Create(...)100%11100%
NormalizeOptional(...)50%22100%
NormalizeMetadata(...)64.28%151485.71%

File(s)

/home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Signing.ManagedKey/ManagedKeySignResult.cs

#LineLine coverage
 1using System.Collections.ObjectModel;
 2
 3namespace AsiBackbone.Signing.ManagedKey;
 4
 5/// <summary>
 6/// Represents the result returned by a host-owned managed-key signing client.
 7/// </summary>
 8public sealed class ManagedKeySignResult
 9{
 010    private static readonly ReadOnlyDictionary<string, string> EmptyMetadata =
 011        new(new Dictionary<string, string>(StringComparer.Ordinal));
 12
 413    private ManagedKeySignResult(
 414        string signature,
 415        string signatureAlgorithm,
 416        string keyId,
 417        string? keyVersion,
 418        string? providerOperationId,
 419        DateTimeOffset signedUtc,
 420        IReadOnlyDictionary<string, string> metadata)
 21    {
 422        ArgumentException.ThrowIfNullOrWhiteSpace(signature);
 423        ArgumentException.ThrowIfNullOrWhiteSpace(signatureAlgorithm);
 424        ArgumentException.ThrowIfNullOrWhiteSpace(keyId);
 25
 426        Signature = signature.Trim();
 427        SignatureAlgorithm = signatureAlgorithm.Trim();
 428        KeyId = keyId.Trim();
 429        KeyVersion = NormalizeOptional(keyVersion);
 430        ProviderOperationId = NormalizeOptional(providerOperationId);
 431        SignedUtc = signedUtc.ToUniversalTime();
 432        Metadata = metadata;
 433    }
 34
 35    /// <summary>
 36    /// Gets the provider-neutral encoded signature value or provider signature reference.
 37    /// </summary>
 438    public string Signature { get; }
 39
 40    /// <summary>
 41    /// Gets the provider-neutral signature algorithm descriptor.
 42    /// </summary>
 443    public string SignatureAlgorithm { get; }
 44
 45    /// <summary>
 46    /// Gets the managed key identifier or key URI reference used to sign.
 47    /// </summary>
 448    public string KeyId { get; }
 49
 50    /// <summary>
 51    /// Gets the managed key version used to sign, when supplied by the provider.
 52    /// </summary>
 453    public string? KeyVersion { get; }
 54
 55    /// <summary>
 56    /// Gets a safe provider operation identifier, when supplied.
 57    /// </summary>
 858    public string? ProviderOperationId { get; }
 59
 60    /// <summary>
 61    /// Gets the UTC timestamp when the provider completed signing.
 62    /// </summary>
 463    public DateTimeOffset SignedUtc { get; }
 64
 65    /// <summary>
 66    /// Gets safe provider-neutral metadata returned by the managed-key client.
 67    /// </summary>
 468    public IReadOnlyDictionary<string, string> Metadata { get; }
 69
 70    /// <summary>
 71    /// Creates a successful managed-key sign result.
 72    /// </summary>
 73    public static ManagedKeySignResult Create(
 74        string signature,
 75        string signatureAlgorithm,
 76        string keyId,
 77        string? keyVersion,
 78        DateTimeOffset signedUtc,
 79        string? providerOperationId = null,
 80        IReadOnlyDictionary<string, string>? metadata = null)
 81    {
 482        return new ManagedKeySignResult(
 483            signature,
 484            signatureAlgorithm,
 485            keyId,
 486            keyVersion,
 487            providerOperationId,
 488            signedUtc,
 489            NormalizeMetadata(metadata));
 90    }
 91
 92    private static string? NormalizeOptional(string? value)
 93    {
 894        return string.IsNullOrWhiteSpace(value) ? null : value.Trim();
 95    }
 96
 97    private static ReadOnlyDictionary<string, string> NormalizeMetadata(IReadOnlyDictionary<string, string>? metadata)
 98    {
 499        if (metadata is null || metadata.Count == 0)
 100        {
 0101            return EmptyMetadata;
 102        }
 103
 4104        Dictionary<string, string> normalized = new(StringComparer.Ordinal);
 105
 24106        foreach (KeyValuePair<string, string> item in metadata)
 107        {
 8108            if (!string.IsNullOrWhiteSpace(item.Key))
 109            {
 8110                normalized[item.Key.Trim()] = item.Value?.Trim() ?? string.Empty;
 111            }
 112        }
 113
 4114        return normalized.Count == 0 ? EmptyMetadata : new ReadOnlyDictionary<string, string>(normalized);
 115    }
 116}