SdJwt.Net.Eudiw
1.0.2
dotnet add package SdJwt.Net.Eudiw --version 1.0.2
NuGet\Install-Package SdJwt.Net.Eudiw -Version 1.0.2
<PackageReference Include="SdJwt.Net.Eudiw" Version="1.0.2" />
<PackageVersion Include="SdJwt.Net.Eudiw" Version="1.0.2" />
<PackageReference Include="SdJwt.Net.Eudiw" />
paket add SdJwt.Net.Eudiw --version 1.0.2
#r "nuget: SdJwt.Net.Eudiw, 1.0.2"
#:package SdJwt.Net.Eudiw@1.0.2
#addin nuget:?package=SdJwt.Net.Eudiw&version=1.0.2
#tool nuget:?package=SdJwt.Net.Eudiw&version=1.0.2
SdJwt.Net.Eudiw
EU Digital Identity Wallet (EUDIW) profile implementation for the SD-JWT .NET ecosystem.
Overview
This package provides ready-to-use configuration and validation for EUDIW compliance under eIDAS 2.0 regulation:
- ARF Compliance: Architecture Reference Framework validation
- EU Trust Lists: LOTL integration and issuer trust validation
- PID Handling: Person Identification Data credential processing
- QEAA/EAA: Qualified and non-qualified attestation support
- RP Registration: Relying Party registration validation
Installation
dotnet add package SdJwt.Net.Eudiw
Quick Start
Validate ARF Compliance
using SdJwt.Net.Eudiw.Arf;
var validator = new ArfProfileValidator();
// Validate algorithm is ARF-compliant
bool isValid = validator.ValidateAlgorithm("ES256"); // true
// Validate credential type
var result = validator.ValidateCredentialType("eu.europa.ec.eudi.pid.1");
if (result.IsValid)
{
Console.WriteLine($"Credential type: {result.CredentialType}"); // Pid
}
Process PID Credentials
using SdJwt.Net.Eudiw.Credentials;
var handler = new PidCredentialHandler();
var claims = new Dictionary<string, object>
{
["family_name"] = "Mustermann",
["given_name"] = "Erika",
["birth_date"] = "1964-08-12",
["issuance_date"] = "2024-01-01",
["expiry_date"] = "2029-01-01",
["issuing_authority"] = "Bundesdruckerei",
["issuing_country"] = "DE"
};
var validation = handler.Validate(claims);
if (validation.IsValid)
{
var credential = handler.ToPidCredential(claims);
Console.WriteLine($"{credential.GivenName} {credential.FamilyName}");
}
Validate EU Member State
using SdJwt.Net.Eudiw.Arf;
var validator = new ArfProfileValidator();
// Check if issuing country is EU member state
bool isEu = validator.ValidateMemberState("DE"); // true
bool isNotEu = validator.ValidateMemberState("US"); // false
Validate RP Registration
using SdJwt.Net.Eudiw.RelyingParty;
var validator = new RpRegistrationValidator();
var registration = new RpRegistration
{
ClientId = "https://rp.example.com",
OrganizationName = "Example Corp",
RedirectUris = new[] { "https://rp.example.com/callback" },
ResponseTypes = new[] { "vp_token" },
TrustFramework = "eu.eudiw.trust"
};
var result = validator.Validate(registration);
if (result.IsValid)
{
Console.WriteLine("RP registration is valid");
}
EudiWallet (Holder Application)
For building wallet applications, use the EudiWallet class which provides built-in ARF compliance:
using SdJwt.Net.Eudiw;
using SdJwt.Net.Wallet.Core;
using SdJwt.Net.Wallet.Storage;
// Create EUDI-compliant wallet
var store = new InMemoryCredentialStore();
IKeyManager keyManager = /* your IKeyManager implementation */;
var options = new EudiWalletOptions
{
WalletId = "citizen-wallet-001",
EnforceArfCompliance = true,
MinimumHaipLevel = 2,
ValidateIssuerTrust = true,
SupportedCredentialTypes = new[]
{
EudiwConstants.Pid.DocType,
EudiwConstants.Mdl.DocType
}
};
var wallet = new EudiWallet(store, keyManager, eudiOptions: options);
// Validate algorithm compliance
wallet.ValidateAlgorithm("ES256"); // true (ARF-compliant)
wallet.ValidateAlgorithm("RS256"); // false (not in ARF)
// Validate member states
wallet.ValidateMemberState("DE"); // true
wallet.ValidateMemberState("US"); // false
// Store credential with ARF validation
try
{
var stored = await wallet.StoreCredentialAsync(credential);
}
catch (ArfComplianceException ex)
{
// Algorithm or format not ARF-compliant
}
// Find PID/mDL credentials
var pidCredentials = await wallet.FindPidCredentialsAsync();
var mdlCredentials = await wallet.FindMdlCredentialsAsync();
// Create presentation with ARF enforcement
var presentation = await wallet.CreatePresentationAsync(
credentialId, disclosurePaths, audience, nonce);
Credential Types
| Type | Format | Description |
|---|---|---|
| PID | mdoc | Person Identification Data (national ID equivalent) |
| mDL | mdoc | Mobile Driving License per ISO 18013-5 |
| QEAA | SD-JWT VC | Qualified attestations (diplomas, certifications) |
| EAA | SD-JWT VC | Non-qualified attestations (memberships) |
ARF Algorithm Support
The package enforces ARF-mandated cryptographic algorithms:
| Algorithm | Support |
|---|---|
| ES256 | Required (HAIP Level 2) |
| ES384 | Supported |
| ES512 | Supported |
EU Member States
Full support for all 27 EU member states:
AT, BE, BG, CY, CZ, DE, DK, EE, ES, FI, FR, GR, HR, HU, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK
Related Packages
- SdJwt.Net - Core SD-JWT implementation
- SdJwt.Net.Wallet - Generic wallet infrastructure (base for EudiWallet)
- SdJwt.Net.Mdoc - ISO 18013-5 mdoc support
- SdJwt.Net.HAIP - High Assurance Interoperability Profile
- SdJwt.Net.Oid4Vp - OpenID4VP presentation protocol
License
Apache 2.0 - See LICENSE
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- SdJwt.Net (>= 1.0.2)
- SdJwt.Net.HAIP (>= 1.0.2)
- SdJwt.Net.Mdoc (>= 1.0.2)
- SdJwt.Net.Oid4Vp (>= 1.0.2)
- SdJwt.Net.Vc (>= 1.0.2)
- SdJwt.Net.Wallet (>= 1.0.2)
-
net10.0
- SdJwt.Net (>= 1.0.2)
- SdJwt.Net.HAIP (>= 1.0.2)
- SdJwt.Net.Mdoc (>= 1.0.2)
- SdJwt.Net.Oid4Vp (>= 1.0.2)
- SdJwt.Net.Vc (>= 1.0.2)
- SdJwt.Net.Wallet (>= 1.0.2)
-
net8.0
- SdJwt.Net (>= 1.0.2)
- SdJwt.Net.HAIP (>= 1.0.2)
- SdJwt.Net.Mdoc (>= 1.0.2)
- SdJwt.Net.Oid4Vp (>= 1.0.2)
- SdJwt.Net.Vc (>= 1.0.2)
- SdJwt.Net.Wallet (>= 1.0.2)
-
net9.0
- SdJwt.Net (>= 1.0.2)
- SdJwt.Net.HAIP (>= 1.0.2)
- SdJwt.Net.Mdoc (>= 1.0.2)
- SdJwt.Net.Oid4Vp (>= 1.0.2)
- SdJwt.Net.Vc (>= 1.0.2)
- SdJwt.Net.Wallet (>= 1.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.