Skip to content

Commit a2fccb0

Browse files
add support for qcert_creation_acceptance transaction data (#327)
* add support for qcert_creation_acceptance transaction data Signed-off-by: kenkosmowski <ken.kosmowski@gmx.de> * cleanup Signed-off-by: Kevin <kevin.dinh@lissi.id> * move credential_ids to transaction data properties Signed-off-by: kenkosmowski <ken.kosmowski@gmx.de> --------- Signed-off-by: kenkosmowski <ken.kosmowski@gmx.de> Signed-off-by: Kevin <kevin.dinh@lissi.id> Co-authored-by: Kevin <kevin.dinh@lissi.id>
1 parent 051d521 commit a2fccb0

File tree

20 files changed

+164
-42
lines changed

20 files changed

+164
-42
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
using WalletFramework.Oid4Vc.Oid4Vp.PresentationExchange.Models;
1111
using WalletFramework.Oid4Vc.Oid4Vp.TransactionDatas;
1212
using static WalletFramework.Oid4Vc.Oid4Vp.Models.ClientIdScheme;
13-
using WalletFramework.Oid4Vc.Qes;
13+
using WalletFramework.Oid4Vc.Qes.Authorization;
1414
using WalletFramework.Oid4Vc.RelyingPartyAuthentication;
1515

1616
namespace WalletFramework.Oid4Vc.Oid4Vp.Models;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using LanguageExt;
22
using WalletFramework.Oid4Vc.Oid4Vp.TransactionDatas;
3-
using WalletFramework.Oid4Vc.Qes;
3+
using WalletFramework.Oid4Vc.Qes.Authorization;
44

55
namespace WalletFramework.Oid4Vc.Oid4Vp.Models;
66

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using LanguageExt;
22
using WalletFramework.Core.Credentials.Abstractions;
33
using WalletFramework.Oid4Vc.Oid4Vp.TransactionDatas;
4-
using WalletFramework.Oid4Vc.Qes;
4+
using WalletFramework.Oid4Vc.Qes.Authorization;
55

66
namespace WalletFramework.Oid4Vc.Oid4Vp.Models;
77

src/WalletFramework.Oid4Vc/Oid4Vp/PresentationExchange/Models/InputDescriptor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using WalletFramework.Core.Functional;
55
using WalletFramework.MdocLib;
66
using WalletFramework.Oid4Vc.Oid4Vp.Models;
7-
using WalletFramework.Oid4Vc.Qes;
7+
using WalletFramework.Oid4Vc.Qes.Authorization;
88
using WalletFramework.SdJwtVc.Models;
99

1010
namespace WalletFramework.Oid4Vc.Oid4Vp.PresentationExchange.Models;

src/WalletFramework.Oid4Vc/Oid4Vp/Services/Oid4VpClientService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
using WalletFramework.Oid4Vc.Oid4Vp.PresentationExchange.Models;
3737
using WalletFramework.Oid4Vc.Oid4Vp.TransactionDatas;
3838
using WalletFramework.Oid4Vc.Oid4Vp.TransactionDatas.Errors;
39-
using WalletFramework.Oid4Vc.Qes;
39+
using WalletFramework.Oid4Vc.Qes.Authorization;
4040
using WalletFramework.SdJwtVc.Models;
4141
using WalletFramework.SdJwtVc.Models.Records;
4242
using WalletFramework.SdJwtVc.Services.SdJwtVcHolderService;

src/WalletFramework.Oid4Vc/Oid4Vp/TransactionDatas/TransactionData.cs

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
using WalletFramework.Core.Json;
66
using WalletFramework.Oid4Vc.Oid4Vp.Models;
77
using WalletFramework.Oid4Vc.Payment;
8-
using WalletFramework.Oid4Vc.Qes;
8+
using WalletFramework.Oid4Vc.Qes.Authorization;
9+
using WalletFramework.Oid4Vc.Qes.CertCreation;
910

1011
namespace WalletFramework.Oid4Vc.Oid4Vp.TransactionDatas;
1112

1213
public class TransactionData(
13-
OneOf<PaymentTransactionData, QesAuthorizationTransactionData> input
14-
) : OneOfBase<PaymentTransactionData, QesAuthorizationTransactionData>(input)
14+
OneOf<PaymentTransactionData, QesAuthorizationTransactionData, QCertCreationTransactionData> input)
15+
: OneOfBase<PaymentTransactionData, QesAuthorizationTransactionData, QCertCreationTransactionData>(input)
1516
{
1617
public static Validation<TransactionData> FromBase64Url(Base64UrlString base64UrlString) =>
1718
from jObject in base64UrlString.DecodeToJObject()
@@ -20,36 +21,48 @@ from properties in TransactionDataProperties.FromJObject(jObject, base64UrlStrin
2021
{
2122
TransactionDataTypeValue.Payment => PaymentTransactionData.FromJObject(jObject, properties),
2223
TransactionDataTypeValue.Qes => QesAuthorizationTransactionData.FromJObject(jObject, properties),
24+
TransactionDataTypeValue.QCertCreation => QCertCreationTransactionData.FromJObject(jObject, properties),
2325
_ => throw new InvalidOperationException()
2426
}
2527
select transactionData;
28+
29+
public static TransactionData WithPaymentTransactionData(PaymentTransactionData input)
30+
{
31+
return new TransactionData(input);
32+
}
33+
34+
public static TransactionData WithQesAuthorizationTransactionData(QesAuthorizationTransactionData input)
35+
{
36+
return new TransactionData(input);
37+
}
38+
39+
public static TransactionData WithQCertCreationTransactionData(QCertCreationTransactionData input)
40+
{
41+
return new TransactionData(input);
42+
}
2643
}
2744

2845
public static class TransactionDataFun
2946
{
3047
public static TransactionDataType GetTransactionDataType(this TransactionData transactionData) =>
31-
transactionData.Match(
32-
payment => payment.TransactionDataProperties.Type,
33-
qes => qes.TransactionDataProperties.Type);
48+
transactionData.GetTransactionDataProperties().Type;
3449

35-
public static IEnumerable<TransactionDataHashesAlg> GetHashesAlg(this TransactionData transactionData) =>
36-
transactionData.Match(
37-
payment => payment.TransactionDataProperties.TransactionDataHashesAlg,
38-
qes => qes.TransactionDataProperties.TransactionDataHashesAlg);
50+
public static IEnumerable<TransactionDataHashesAlg> GetHashesAlg(this TransactionData transactionData) =>
51+
transactionData.GetTransactionDataProperties().TransactionDataHashesAlg;
3952

4053
public static Base64UrlString GetEncoded(this TransactionData transactionData) =>
41-
transactionData.Match(
42-
payment => payment.TransactionDataProperties.Encoded,
43-
qes => qes.TransactionDataProperties.Encoded);
54+
transactionData.GetTransactionDataProperties().Encoded;
4455

4556
public static Option<PresentationCandidate> FindCandidateForTransactionData(
4657
this IEnumerable<PresentationCandidate> candidates,
47-
TransactionData transactionData)
48-
{
49-
var credentialIds = transactionData.Match(
50-
payment => payment.TransactionDataProperties.CredentialIds.Select(id => id.AsString),
51-
qes => qes.TransactionDataProperties.CredentialIds.Select(id => id.AsString));
52-
53-
return candidates.FirstOrDefault(candidate => credentialIds.Contains(candidate.Identifier));
54-
}
58+
TransactionData transactionData) => candidates.FirstOrDefault(candidate =>
59+
transactionData.GetTransactionDataProperties().CredentialIds.Select(id => id.AsString)
60+
.Contains(candidate.Identifier));
61+
62+
private static TransactionDataProperties GetTransactionDataProperties(this TransactionData transactionData) =>
63+
transactionData.Match(
64+
payment => payment.TransactionDataProperties,
65+
qes => qes.TransactionDataProperties,
66+
qcert => qcert.TransactionDataProperties);
67+
5568
}

src/WalletFramework.Oid4Vc/Oid4Vp/TransactionDatas/TransactionDataArray.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ from base64UrlStrings in arrayValidation
1818

1919
public static class TransactionDataArrayFun
2020
{
21-
public static Validation<IEnumerable<TransactionData>> Decode(this TransactionDataArray array) =>
22-
array.EncodedTransactionDataStrings.TraverseAll(TransactionData.FromBase64Url);
21+
public static Validation<IEnumerable<TransactionData>> Decode(this TransactionDataArray array)
22+
{
23+
return array.EncodedTransactionDataStrings.TraverseAll(TransactionData.FromBase64Url);
24+
}
2325
}

src/WalletFramework.Oid4Vc/Oid4Vp/TransactionDatas/TransactionDataProperties.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public static Validation<TransactionDataProperties> FromJObject(JObject jObject,
1717
from jToken in jObject.GetByKey("type")
1818
from type in TransactionDataType.FromJToken(jToken)
1919
select type;
20-
20+
2121
var idsValidation =
2222
from jToken in jObject.GetByKey("credential_ids")
2323
from jArray in jToken.ToJArray()

src/WalletFramework.Oid4Vc/Oid4Vp/TransactionDatas/TransactionDataType.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ namespace WalletFramework.Oid4Vc.Oid4Vp.TransactionDatas;
77
public enum TransactionDataTypeValue
88
{
99
Payment,
10-
Qes
10+
Qes,
11+
QCertCreation
1112
}
1213

1314
public static class TransactionDataTypeValueFun
@@ -17,6 +18,7 @@ public static string AsString(this TransactionDataTypeValue value) =>
1718
{
1819
TransactionDataTypeValue.Payment => SupportedTransactionDataTypeConstants.Payment,
1920
TransactionDataTypeValue.Qes => SupportedTransactionDataTypeConstants.Qes,
21+
TransactionDataTypeValue.QCertCreation => SupportedTransactionDataTypeConstants.QCertCreation,
2022
_ => throw new ArgumentOutOfRangeException(nameof(value), value, null)
2123
};
2224
}
@@ -26,6 +28,8 @@ public static class SupportedTransactionDataTypeConstants
2628
public const string Payment = "payment_data";
2729

2830
public const string Qes = "qes_authorization";
31+
32+
public const string QCertCreation = "qcert_creation_acceptance";
2933
}
3034

3135
public readonly struct TransactionDataType
@@ -51,6 +55,7 @@ public static Validation<TransactionDataType> FromJToken(JToken jToken)
5155
{
5256
SupportedTransactionDataTypeConstants.Payment => new TransactionDataType(TransactionDataTypeValue.Payment),
5357
SupportedTransactionDataTypeConstants.Qes => new TransactionDataType(TransactionDataTypeValue.Qes),
58+
SupportedTransactionDataTypeConstants.QCertCreation => new TransactionDataType(TransactionDataTypeValue.QCertCreation),
5459
_ => throw new ArgumentOutOfRangeException()
5560
};
5661
}

src/WalletFramework.Oid4Vc/Payment/PaymentTransactionData.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@ from paymentDataToken in jObject.GetByKey("payment_data")
1414
from paymentDataJObject in paymentDataToken.ToJObject()
1515
from paymentData in PaymentData.FromJObject(paymentDataJObject)
1616
let paymentTransactionData = new PaymentTransactionData(transactionDataProperties, paymentData)
17-
select new TransactionData(paymentTransactionData);
17+
select TransactionData.WithPaymentTransactionData(paymentTransactionData);
1818
}

0 commit comments

Comments
 (0)