SdJwt.Net.Wallet
1.0.2
dotnet add package SdJwt.Net.Wallet --version 1.0.2
NuGet\Install-Package SdJwt.Net.Wallet -Version 1.0.2
<PackageReference Include="SdJwt.Net.Wallet" Version="1.0.2" />
<PackageVersion Include="SdJwt.Net.Wallet" Version="1.0.2" />
<PackageReference Include="SdJwt.Net.Wallet" />
paket add SdJwt.Net.Wallet --version 1.0.2
#r "nuget: SdJwt.Net.Wallet, 1.0.2"
#:package SdJwt.Net.Wallet@1.0.2
#addin nuget:?package=SdJwt.Net.Wallet&version=1.0.2
#tool nuget:?package=SdJwt.Net.Wallet&version=1.0.2
SdJwt.Net.Wallet
Generic, extensible identity wallet implementation for .NET.
Overview
This package provides a generic wallet foundation for building identity wallet applications, supporting multiple credential formats and protocols. The architecture is informed by production EUDI Android/iOS implementations and the OWF .NET ecosystem.
Features
Core Capabilities
- Credential Management: Store, retrieve, filter, and present credentials
- Key Management: Generate, sign, and manage cryptographic keys with HAIP compliance
- Format Plugins: Extensible credential format handling (SD-JWT VC, mdoc)
- Protocol Adapters: OpenID4VCI and OpenID4VP support
Advanced Features
- Batch credential policy support (
OneTimeUse,RotateUse) - Deferred credential polling for OID4VCI
- DPoP proof hooks for issuance token exchange (
IDPoPProofProvider) - Wallet/key attestation hooks (WIA/WUA) via
IWalletAttestationsProvider - Transaction logging hooks via
ITransactionLogger - Live document status resolution hook (
IDocumentStatusResolver) - Multi-issuer configuration registry for OID4VCI
- Resumable issuance sessions
- Presentation session abstractions for remote and proximity flows
Planned Extensions
- Full proximity transport handling (BLE/NFC/QR handover)
- Per-issuer DPoP policy profile
- DCQL support for OpenID4VP matching
Installation
dotnet add package SdJwt.Net.Wallet
Quick Start
using SdJwt.Net.Wallet;
using SdJwt.Net.Wallet.Core;
using SdJwt.Net.Wallet.Storage;
using SdJwt.Net.Wallet.Protocols;
using SdJwt.Net.Wallet.Attestation;
using SdJwt.Net.Wallet.Audit;
using SdJwt.Net.Wallet.Issuance;
using SdJwt.Net.Wallet.Status;
ICredentialStore store = new InMemoryCredentialStore();
IKeyManager keyManager = /* your IKeyManager implementation */;
IOid4VciAdapter oid4VciAdapter = /* your OID4VCI adapter */;
IOid4VpAdapter oid4VpAdapter = /* your OID4VP adapter */;
IWalletAttestationsProvider attestationProvider = /* optional */;
ITransactionLogger transactionLogger = /* optional */;
IDPoPProofProvider dpopProofProvider = /* optional */;
IDocumentStatusResolver statusResolver = /* optional */;
var wallet = new GenericWallet(
store,
keyManager,
options: new WalletOptions
{
WalletId = "my-wallet",
DisplayName = "My Wallet",
Oid4VciAdapter = oid4VciAdapter,
Oid4VpAdapter = oid4VpAdapter,
WalletAttestationsProvider = attestationProvider,
TransactionLogger = transactionLogger,
DPoPProofProvider = dpopProofProvider,
DocumentStatusResolver = statusResolver
});
// Process credential offer (OID4VCI)
var offer = await wallet.ProcessCredentialOfferAsync("openid-credential-offer://...");
var issuance = await wallet.AcceptCredentialOfferAsync(offer);
// Process presentation request (OID4VP)
var request = await wallet.ProcessPresentationRequestAsync("openid4vp://...");
var result = await wallet.CreateAndSubmitPresentationAsync(request);
// Optional attestation helpers
var wia = await wallet.GenerateWalletAttestationAsync("key-id");
var wua = await wallet.GenerateKeyAttestationAsync(new[] { "key-id" }, nonce: "issuer-nonce");
// Optional session abstraction
var remoteSession = wallet.CreateRemotePresentationSession();
// Optional status resolver path
var status = await wallet.CheckStatusAsync("credential-id");
// Optional multi-issuer registration and resumable issuance
await wallet.RegisterIssuerConfigurationAsync(new WalletIssuerConfiguration
{
IssuerName = "issuer-a",
CredentialIssuer = "https://issuer-a.example.com"
});
var pending = await wallet.StartIssuanceSessionAsync(offer);
var resumed = await wallet.ResumeIssuanceSessionAsync(pending.SessionId);
Architecture
SdJwt.Net.Wallet/
Core/ # Core models and abstractions
CredentialModels.cs
ICredentialManager.cs
IKeyManager.cs
WalletOptions.cs
Formats/ # Credential format plugins
ICredentialFormatPlugin.cs
SdJwtVcFormatPlugin.cs
Protocols/ # Protocol adapters
IOid4VciAdapter.cs
IOid4VpAdapter.cs
IDPoPProofProvider.cs
DPoPProofRequest.cs
Storage/ # Storage abstractions
ICredentialStore.cs
Issuance/ # Issuer registry and pending issuance sessions
WalletIssuerConfiguration.cs
PendingIssuanceSession.cs
Attestation/ # Wallet attestation
IWalletAttestationsProvider.cs
Audit/ # Transaction logging
TransactionType.cs
TransactionStatus.cs
TransactionLog.cs
ITransactionLogger.cs
Sessions/ # Presentation session abstractions
IPresentationSession.cs
PresentationFlowType.cs
RemotePresentationSession.cs
ProximityPresentationSession.cs
Status/ # Live status resolution abstractions
IDocumentStatusResolver.cs
DocumentStatus.cs
DocumentStatusResult.cs
GenericWallet.cs
Dependencies
This package builds on top of the SD-JWT .NET ecosystem:
| Package | Purpose |
|---|---|
| SdJwt.Net | Core SD-JWT operations |
| SdJwt.Net.Vc | Verifiable Credentials |
| SdJwt.Net.Oid4Vci | Credential issuance |
| SdJwt.Net.Oid4Vp | Presentation protocol |
| SdJwt.Net.PresentationExchange | DIF PEX matching |
| SdJwt.Net.HAIP | Cryptographic compliance |
| SdJwt.Net.StatusList | Credential status |
Related Documentation
License
Apache 2.0
| 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
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.6)
- SdJwt.Net (>= 1.0.2)
- SdJwt.Net.HAIP (>= 1.0.2)
- SdJwt.Net.Oid4Vci (>= 1.0.2)
- SdJwt.Net.Oid4Vp (>= 1.0.2)
- SdJwt.Net.PresentationExchange (>= 1.0.2)
- SdJwt.Net.StatusList (>= 1.0.2)
- SdJwt.Net.Vc (>= 1.0.2)
- System.IdentityModel.Tokens.Jwt (>= 8.12.1)
-
net10.0
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.6)
- SdJwt.Net (>= 1.0.2)
- SdJwt.Net.HAIP (>= 1.0.2)
- SdJwt.Net.Oid4Vci (>= 1.0.2)
- SdJwt.Net.Oid4Vp (>= 1.0.2)
- SdJwt.Net.PresentationExchange (>= 1.0.2)
- SdJwt.Net.StatusList (>= 1.0.2)
- SdJwt.Net.Vc (>= 1.0.2)
- System.IdentityModel.Tokens.Jwt (>= 8.12.1)
-
net8.0
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.6)
- SdJwt.Net (>= 1.0.2)
- SdJwt.Net.HAIP (>= 1.0.2)
- SdJwt.Net.Oid4Vci (>= 1.0.2)
- SdJwt.Net.Oid4Vp (>= 1.0.2)
- SdJwt.Net.PresentationExchange (>= 1.0.2)
- SdJwt.Net.StatusList (>= 1.0.2)
- SdJwt.Net.Vc (>= 1.0.2)
- System.IdentityModel.Tokens.Jwt (>= 8.12.1)
-
net9.0
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.6)
- SdJwt.Net (>= 1.0.2)
- SdJwt.Net.HAIP (>= 1.0.2)
- SdJwt.Net.Oid4Vci (>= 1.0.2)
- SdJwt.Net.Oid4Vp (>= 1.0.2)
- SdJwt.Net.PresentationExchange (>= 1.0.2)
- SdJwt.Net.StatusList (>= 1.0.2)
- SdJwt.Net.Vc (>= 1.0.2)
- System.IdentityModel.Tokens.Jwt (>= 8.12.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on SdJwt.Net.Wallet:
| Package | Downloads |
|---|---|
|
SdJwt.Net.Eudiw
EU Digital Identity Wallet (EUDIW) profile implementation for the SD-JWT .NET ecosystem. Provides eIDAS 2.0 compliance, ARF validation, EU Trust List integration, PID credential handling, and QEAA/EAA support for European digital identity verification. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version 1.0.0: Initial release of SD-JWT Wallet for .NET. Generic,
extensible wallet implementation supporting credential management, key management, and
protocol adapters for OpenID4VCI/VP.