Skip to content

Commit dfa6f72

Browse files
committed
Refactored away from bool to enum.
1 parent 5aa4881 commit dfa6f72

File tree

4 files changed

+15
-9
lines changed

4 files changed

+15
-9
lines changed

Src/Fido2/AuthenticatorAttestationResponse.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public async Task<RegisteredPublicKeyCredential> VerifyAsync(
153153
if (metadataService?.ConformanceTesting() is true && metadataEntry is null && attType != AttestationType.None && AttestationObject.Fmt is not "fido-u2f")
154154
throw new Fido2VerificationException(Fido2ErrorCode.AaGuidNotFound, "AAGUID not found in MDS test metadata");
155155

156-
TrustAnchor.Verify(metadataEntry, trustPath, metadataService?.ConformanceTesting() is true);
156+
TrustAnchor.Verify(metadataEntry, trustPath, metadataService?.ConformanceTesting() is true ? FidoValidationMode.FidoConformance2024 : FidoValidationMode.Default);
157157

158158
// 22. Assess the attestation trustworthiness using the outputs of the verification procedure in step 14, as follows:
159159
// If self attestation was used, check if self attestation is acceptable under Relying Party policy.
@@ -257,7 +257,7 @@ private async Task<byte[]> DevicePublicKeyRegistrationAsync(
257257
if (metadataService?.ConformanceTesting() is true && metadataEntry is null && attType != AttestationType.None && devicePublicKeyAuthenticatorOutput.Fmt is not "fido-u2f")
258258
throw new Fido2VerificationException(Fido2ErrorCode.AaGuidNotFound, "AAGUID not found in MDS test metadata");
259259

260-
TrustAnchor.Verify(metadataEntry, trustPath, metadataService?.ConformanceTesting() is true);
260+
TrustAnchor.Verify(metadataEntry, trustPath, metadataService?.ConformanceTesting() is true ? FidoValidationMode.FidoConformance2024 : FidoValidationMode.Default);
261261

262262
// Check status reports for authenticator with undesirable status
263263
var latestStatusReport = metadataEntry?.GetLatestStatusReport();

Src/Fido2/Extensions/CryptoUtils.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public static HashAlgorithmName HashAlgFromCOSEAlg(COSE.Algorithm alg)
4949
};
5050
}
5151

52-
public static bool ValidateTrustChain(X509Certificate2[] trustPath, X509Certificate2[] attestationRootCertificates, bool conformance = false)
52+
public static bool ValidateTrustChain(X509Certificate2[] trustPath, X509Certificate2[] attestationRootCertificates, FidoValidationMode validationMode = FidoValidationMode.Default)
5353
{
5454
// https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-metadata-statement-v2.0-id-20180227.html#widl-MetadataStatement-attestationRootCertificates
5555

@@ -102,10 +102,10 @@ public static bool ValidateTrustChain(X509Certificate2[] trustPath, X509Certific
102102
chain.ChainPolicy.TrustMode = X509ChainTrustMode.CustomRootTrust;
103103

104104
// if the attestation cert has a CDP extension, go ahead and turn on online revocation checking
105-
if (!string.IsNullOrEmpty(CDPFromCertificateExts(trustPath[0].Extensions)) && !conformance)
106-
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
107-
108-
// don't allow unknown root now that we have a custom root
105+
if (!string.IsNullOrEmpty(CDPFromCertificateExts(trustPath[0].Extensions)) && validationMode != FidoValidationMode.FidoConformance2024)
106+
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
107+
108+
// don't allow unknown root now that we have a custom root
109109
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
110110

111111
// now, verify chain again with all checks turned on

Src/Fido2/FidoValidationMode.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
public enum FidoValidationMode
2+
{
3+
WebAuthNLevel3,
4+
FidoConformance2024,
5+
Default = WebAuthNLevel3
6+
}

Src/Fido2/TrustAnchor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace Fido2NetLib;
88

99
public static class TrustAnchor
1010
{
11-
public static void Verify(MetadataBLOBPayloadEntry? metadataEntry, X509Certificate2[] trustPath, bool conformance)
11+
public static void Verify(MetadataBLOBPayloadEntry? metadataEntry, X509Certificate2[] trustPath, FidoValidationMode validationMode = FidoValidationMode.Default)
1212
{
1313
if (trustPath != null && metadataEntry?.MetadataStatement?.AttestationTypes is not null)
1414
{
@@ -34,7 +34,7 @@ static bool ContainsAttestationType(MetadataBLOBPayloadEntry entry, MetadataAtte
3434
throw new Fido2VerificationException(Fido2ErrorMessages.InvalidCertificateChain);
3535
}
3636

37-
if (!CryptoUtils.ValidateTrustChain(trustPath, attestationRootCertificates, conformance))
37+
if (!CryptoUtils.ValidateTrustChain(trustPath, attestationRootCertificates, validationMode))
3838
{
3939
throw new Fido2VerificationException(Fido2ErrorMessages.InvalidCertificateChain);
4040
}

0 commit comments

Comments
 (0)