namespace StellaOps.AdvisoryAI.Attestation;
///
/// Result of verifying an attestation.
///
public sealed record AiAttestationVerificationResult
{
/// Whether verification succeeded.
public required bool Valid { get; init; }
/// Verification timestamp.
public required DateTimeOffset VerifiedAt { get; init; }
/// Signing key ID if signed.
public string? SigningKeyId { get; init; }
/// Key expiration if applicable.
public DateTimeOffset? KeyExpiresAt { get; init; }
/// Digest verification result.
public bool DigestValid { get; init; }
/// Signature verification result.
public bool? SignatureValid { get; init; }
/// Verification failure reason if invalid.
public string? FailureReason { get; init; }
///
/// Creates a successful verification result.
///
public static AiAttestationVerificationResult Success(
DateTimeOffset verifiedAt,
string? signingKeyId = null,
DateTimeOffset? keyExpiresAt = null) => new()
{
Valid = true,
VerifiedAt = verifiedAt,
SigningKeyId = signingKeyId,
KeyExpiresAt = keyExpiresAt,
DigestValid = true,
SignatureValid = signingKeyId != null ? true : null
};
///
/// Creates a failed verification result.
///
public static AiAttestationVerificationResult Failure(
DateTimeOffset verifiedAt,
string reason,
bool digestValid = false,
bool? signatureValid = null) => new()
{
Valid = false,
VerifiedAt = verifiedAt,
DigestValid = digestValid,
SignatureValid = signatureValid,
FailureReason = reason
};
}