Configure Wallet Provider
To enable wallet providing, you must configure a wallet provider instance with three required sections: wallet instance attestation (or wallet app attestation), wallet unit attestation, and wallet registration policy.
Minimal configuration
Here's the minimum required configuration to enable wallet provider functionality:
walletProvider:
PROCIVIS_ONE: # Instance name (choose any name)
type: PROCIVIS_ONE # Must be exactly "PROCIVIS_ONE"
display: walletProvider.procivisOne
params:
public:
walletName: "My Wallet"
walletLink: "https://example.com"
walletRegistration: OPTIONAL
walletAppAttestation:
expirationTime: 86400
integrityCheck:
enabled: false
walletUnitAttestation:
expirationTime: 2678400
deviceAuthLeeway: 60
The instance name (PROCIVIS_ONE in this example) can be any identifier
you choose. However, the type field must be exactly PROCIVIS_ONE to
invoke the correct provider implementation.
Wallet registration policy
The wallet registration policy controls whether wallets must register with the provider to obtain attestations.
walletRegistration: OPTIONAL
Policy options:
DISABLED- Wallets cannot register or obtain attestationsOPTIONAL- Wallets may register to obtain attestations but can function without themMANDATORY- Wallets must register and obtain attestations to function
This setting is included in the wallet provider metadata retrieved by wallet
apps from /ssi/wallet-provider/v1/{walletProvider}, allowing wallets to
behave according to your policy.
Wallet Instance Attestation (WIA)
WIAs verify the integrity and authenticity of the wallet application.
Required fields:
walletAppAttestation:
expirationTime: 86400 # Attestation validity in seconds
integrityCheck:
enabled: false # Set to true to enable platform verification
"Wallet App Attestation" (WAA) was renamed to "Wallet Instance Attestation" (WIA) by the EU Architecture Reference Framework (ARF). Configuration values maintain the original term.
Integrity check
The integrityCheck block is required and integrity check is enabled
by default. To disable integrity check, set
walletAppAttestation.integrityCheck.enabled: false.
walletAppAttestation:
expirationTime: 86400
integrityCheck:
enabled: true
android:
bundleId: com.example.wallet
signingCertificateFingerprints:
- "FA:C6:17:..."
- "G9:45:B1:..."
trustedAttestationCAs:
- "-----BEGIN CERTIFICATE-----\n..."
ios:
bundleId: com.example.wallet
trustedAttestationCAs:
- "-----BEGIN CERTIFICATE-----\n..."
enforceProductionBuild: true # Excludes debug / development builds
When enabled, the system validates:
- Certificate changes against trusted platform certificate authorities
- App bundle identifiers match configured values
- (iOS) Apps are production builds if
enforceProductionBuildis true
Wallet unit attestation
Wallet unit attestation verifies cryptographic keys generated by wallet instances.
Required fields:
walletUnitAttestation:
expirationTime: 2678400 # Attestation validity in seconds
Revocation support
To enable attestation revocation:
walletUnitAttestation:
expirationTime: 2678400
revocationMethod: TOKENSTATUSLIST # Must match the name of a revocation provider with type `TOKENSTATUSLIST`
Without a revocation method configured, unit attestations cannot be revoked and are valid until they expire.
Optional configurations
EUDI Wallet metadata
Include general_info according to
EUDI Wallet technical specifications:
eudiWalletInfo:
providerName: "Example Provider"
solutionId: "EXAMPLE_PROVIDER"
solutionVersion: "1"
wscdType: HYBRID
App version requirements
Enforce minimum app versions and block specific releases:
appVersion:
minimum: "v1.50.0" # Required minimum version. Earlier versions are blocked
minimumRecommended: "v1.60.0" # Recommended minimum version. End users are suggested to update the app
reject: # Explicitly blocked versions. This is useful if, for example, a version has a known security issue
- "v1.51.3"
- "v1.51.4"
updateScreen:
link: "https://example.com/update" # URL for version update information
The wallet app retrieves this information from
/ssi/wallet-provider/v1/{walletProvider} to enforce version requirements
and recommendations.
Complete configuration example
Here's a fully configured wallet provider with all features enabled:
walletProvider:
PROCIVIS_ONE:
type: PROCIVIS_ONE
display: walletProvider.procivisOne
params:
public:
walletAppAttestation:
walletName: "Example Wallet"
walletLink: "https://example.com"
integrityCheck:
enabled: true
expirationTime: 86400
android:
bundleId: com.example.wallet
signingCertificateFingerprints:
- "FA:C6:17:45:DC:50:D6:..."
trustedAttestationCAs:
- "-----BEGIN CERTIFICATE-----\n..."
ios:
bundleId: com.example.wallet
trustedAttestationCAs:
- "-----BEGIN CERTIFICATE-----\n..."
enforceProductionBuild: true
walletUnitAttestation:
expirationTime: 2678400
revocationMethod: TOKENSTATUSLIST
eudiWalletInfo:
# EUDI wallet metadata
appVersion:
minimum: "v1.50.0"
minimumRecommended: "v1.60.0"
reject:
- "v1.51.3"
updateScreen:
link: "https://example.com/update"