Skip to content

Commit 051d521

Browse files
authored
Make TrustResult enum more expressive (#326)
* Make TrustResult enum for expressive Signed-off-by: Johannes Tuerk <johannes.tuerk@lissi.id> * make id in Credential Query optional Signed-off-by: Johannes Tuerk <johannes.tuerk@lissi.id> * remove credneitalSet overasking Signed-off-by: Johannes Tuerk <johannes.tuerk@lissi.id> --------- Signed-off-by: Johannes Tuerk <johannes.tuerk@lissi.id>
1 parent 1d4972f commit 051d521

File tree

6 files changed

+17
-40
lines changed

6 files changed

+17
-40
lines changed

src/WalletFramework.Oid4Vc/Dcql/Models/CredentialQuery.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class CredentialQuery
3838
/// This MUST be a string identifying the Credential in the response.
3939
/// </summary>
4040
[JsonProperty(IdJsonKey)]
41-
public string Id { get; set; } = null!;
41+
public string? Id { get; set; } = null!;
4242

4343
/// <summary>
4444
/// Represents a collection, where each value contains a collection of identifiers for elements in claims that
@@ -59,7 +59,7 @@ public static Validation<CredentialQuery> FromJObject(JObject json)
5959
}
6060

6161
return ValidationFun.Valid(value.Value.ToString());
62-
});
62+
}).ToOption();
6363

6464
var format = json.GetByKey(FormatJsonKey)
6565
.OnSuccess(token => token.ToJValue())
@@ -112,13 +112,13 @@ public static Validation<CredentialQuery> FromJObject(JObject json)
112112
}
113113

114114
private static CredentialQuery Create(
115-
string id,
115+
Option<string> id,
116116
string format,
117117
CredentialMetaQuery meta,
118118
Option<IEnumerable<CredentialClaimQuery>> claims,
119119
Option<IEnumerable<IEnumerable<string>>> claimSets) => new()
120120
{
121-
Id = id,
121+
Id = id.ToNullable(),
122122
Format = format,
123123
Meta = meta,
124124
Claims = claims.ToNullable()?.ToArray(),

src/WalletFramework.Oid4Vc/Oid4Vp/Models/AuthorizationRequest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public record AuthorizationRequest
112112
public X509Chain? X509TrustChain { get; init; }
113113

114114
[JsonIgnore]
115-
public RpAuthResult RpAuthResult { get; init; } = RpAuthResult.GetWithLevelAbort();
115+
public RpAuthResult RpAuthResult { get; init; } = RpAuthResult.GetWithLevelUnknown();
116116

117117
[JsonIgnore]
118118
public OneOf<DcqlQuery, PresentationDefinition> Requirements =>

src/WalletFramework.Oid4Vc/RelyingPartyAuthentication/RegistrationCertificate/OverAskingValidationResult.cs

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ internal static OverAskingValidationResult Validate(RequestObject requestObject)
2222
.Where(attachment => attachment.Format == Constants.RegistrationCertificateFormat) ?? [];
2323

2424
List<string> certifiedClaims = [];
25-
List<IEnumerable<string>> certifiedClaimSets = [];
2625

2726
var areTrustChainsValid = true;
2827
foreach (var registrationCertificateAttachment in registrationCertificateAttachments)
@@ -37,17 +36,6 @@ internal static OverAskingValidationResult Validate(RequestObject requestObject)
3736
})
3837
);
3938

40-
var registrationCertifiedClaimSets = registrationCertificate.CredentialSets.Match(
41-
credentialsSets =>
42-
{
43-
return credentialsSets.SelectMany(
44-
set => set.Options ?? Enumerable.Empty<string[]>()
45-
);
46-
},
47-
() => []);
48-
49-
certifiedClaimSets.AddRange(registrationCertifiedClaimSets);
50-
5139
var isValidChain = registrationCertificate.Certificates.IsTrustChainValid();
5240
if (!isValidChain)
5341
{
@@ -76,20 +64,7 @@ internal static OverAskingValidationResult Validate(RequestObject requestObject)
7664
return certifiedClaims.Contains(requestedAttribute);
7765
});
7866

79-
var requestedClaimSets = authorizationRequest
80-
.DcqlQuery!
81-
.CredentialSetQueries?
82-
.SelectMany(query => query.Options ?? []) ?? [];
83-
84-
var isOverAskingClaimSets = !requestedClaimSets.All(requestedClaimSet =>
85-
{
86-
return certifiedClaimSets.Any(certifiedClaimSet =>
87-
{
88-
return requestedClaimSet.All(certifiedClaimSet.Contains);
89-
});
90-
});
91-
92-
return new OverAskingValidationResult(!isOverAskingClaims && !isOverAskingClaimSets);
67+
return new OverAskingValidationResult(!isOverAskingClaims);
9368
},
9469
_ => new OverAskingValidationResult(true)
9570
);

src/WalletFramework.Oid4Vc/RelyingPartyAuthentication/RpAuthResult.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ from accessCertificate in AccessCertificate.FromRequestObject(requestObject)
3030
return result.Match(
3131
rpAuthResult => rpAuthResult,
3232
// TODO: Log
33-
_ => new RpAuthResult(RpTrustLevel.Abort)
33+
_ => new RpAuthResult(RpTrustLevel.ValidationFailed)
3434
);
3535
}
3636

37-
public static RpAuthResult GetWithLevelAbort() => new(RpTrustLevel.Abort);
37+
public static RpAuthResult GetWithLevelUnknown() => new(RpTrustLevel.Unknown);
3838
}
3939

4040
public static class RpAuthResultFun
@@ -45,11 +45,11 @@ public static RpTrustLevel CalculateTrustLevel(
4545
{
4646
if (accessCertificateValidationResult.IsValid is false)
4747
{
48-
return RpTrustLevel.Abort;
48+
return RpTrustLevel.AccessCertificateValidationFailed;
4949
}
5050

5151
return overAskingValidationResult.IsValid
52-
? RpTrustLevel.Green
53-
: RpTrustLevel.Red;
52+
? RpTrustLevel.ValidationSuccessful
53+
: RpTrustLevel.OverAskingValidationFailed;
5454
}
5555
}

src/WalletFramework.Oid4Vc/RelyingPartyAuthentication/RpTrustLevel.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ namespace WalletFramework.Oid4Vc.RelyingPartyAuthentication;
22

33
public enum RpTrustLevel
44
{
5-
Green,
6-
Red,
7-
Abort
5+
ValidationSuccessful,
6+
AccessCertificateValidationFailed,
7+
OverAskingValidationFailed,
8+
ValidationFailed,
9+
Unknown
810
}

test/WalletFramework.Oid4Vc.Tests/RelyingPartyAuthentication/RPAuthenticationTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,6 @@ public void Valid_Request_results_in_Trust_Level_Green()
4141

4242
var sut = RpAuthResult.ValidateRequestObject(requestObject, rpRegistrarCert);
4343

44-
sut.TrustLevel.Should().Be(RpTrustLevel.Green);
44+
sut.TrustLevel.Should().Be(RpTrustLevel.ValidationSuccessful);
4545
}
4646
}

0 commit comments

Comments
 (0)