< Summary

Information
Class: AsiBackbone.Core.Signing.VerificationPolicyEvaluator
Assembly: AsiBackbone.Core
File(s): /home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/Signing/VerificationPolicyEvaluator.cs
Line coverage
100%
Covered lines: 39
Uncovered lines: 0
Coverable lines: 39
Total lines: 73
Line coverage: 100%
Branch coverage
94%
Covered branches: 47
Total branches: 50
Branch coverage: 94%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Evaluate(...)100%11100%
Categorize(...)94%5050100%
Matches(...)100%11100%

File(s)

/home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/Signing/VerificationPolicyEvaluator.cs

#LineLine coverage
 1namespace AsiBackbone.Core.Signing;
 2
 3/// <summary>
 4/// Evaluates provider-neutral signature verification results against host verification policy.
 5/// </summary>
 6public static class VerificationPolicyEvaluator
 7{
 8    /// <summary>
 9    /// Evaluates a signed governance artifact and verification result against verification policy.
 10    /// </summary>
 11    public static VerificationPolicyOutcome Evaluate<TArtifact>(
 12        SignedGovernanceArtifact<TArtifact> artifact,
 13        SignatureVerificationResult verificationResult,
 14        VerificationPolicyOptions? options = null)
 15    {
 3216        ArgumentNullException.ThrowIfNull(artifact);
 3217        ArgumentNullException.ThrowIfNull(verificationResult);
 18
 3219        return VerificationPolicyOutcome.CreateCore(
 3220            artifact.ArtifactType,
 3221            artifact.ArtifactId,
 3222            artifact.SigningHash,
 3223            artifact.HashAlgorithm,
 3224            artifact.SigningMetadata,
 3225            verificationResult,
 3226            options);
 27    }
 28
 29    /// <summary>
 30    /// Maps a provider-neutral verification result to a stable verification category.
 31    /// </summary>
 32    public static SignatureVerificationCategory Categorize(SignatureVerificationResult verificationResult)
 33    {
 5634        ArgumentNullException.ThrowIfNull(verificationResult);
 35
 5636        if (verificationResult.IsValid)
 37        {
 438            return SignatureVerificationCategory.Valid;
 39        }
 40
 5241        string failureCode = verificationResult.FailureCode ?? string.Empty;
 5242        string status = verificationResult.Status ?? string.Empty;
 43
 5244        return Matches(status, "MissingSignature") || Matches(failureCode, "missing")
 5245            ? SignatureVerificationCategory.MissingSignature
 5246            : Matches(failureCode, "hash")
 5247            ? SignatureVerificationCategory.HashMismatch
 5248            : Matches(failureCode, "canonicalization") || Matches(failureCode, "payload-schema") || Matches(failureCode,
 5249            ? SignatureVerificationCategory.CanonicalizationMismatch
 5250            : Matches(failureCode, "unsupported") || Matches(failureCode, "algorithm")
 5251            ? SignatureVerificationCategory.UnsupportedAlgorithm
 5252            : Matches(failureCode, "revoked") || Matches(failureCode, "disabled")
 5253            ? SignatureVerificationCategory.RevokedKey
 5254            : (Matches(failureCode, "unknown") && Matches(failureCode, "key"))
 5255            || Matches(failureCode, "key-version")
 5256            || Matches(failureCode, "key.mismatch")
 5257            || Matches(failureCode, "key-mismatch")
 5258            ? SignatureVerificationCategory.UnknownKeyVersion
 5259            : Matches(failureCode, "provider-unavailable")
 5260            || Matches(failureCode, "unavailable")
 5261            || Matches(failureCode, "timeout")
 5262            || Matches(failureCode, "network")
 5263            ? SignatureVerificationCategory.ProviderUnavailable
 5264            : Matches(failureCode, "invalid") || Matches(failureCode, "malformed") || Matches(failureCode, "signature")
 5265            ? SignatureVerificationCategory.InvalidSignature
 5266            : SignatureVerificationCategory.Failed;
 67    }
 68
 69    private static bool Matches(string value, string pattern)
 70    {
 51671        return value.Contains(pattern, StringComparison.OrdinalIgnoreCase);
 72    }
 73}