Release 5.12.0:
- W3C JWT VC:
- Presentation validation: Now verifies that the subject field contains the VP issuer's public key (VC holder's public key).
- Replaced
CredentialSubjectabstract class withJsonElementfor W3C VCcredentialSubjectfield. Polymorphic deserialization usingtypediscriminator is unreliable since W3C Data Model Spec 1.1 doesn't guarantee this field's presence. - Deprecate
LibraryInitializer.registerExtensionLibraryoverloads that take aSerializersModule; use the overloads without it.
- Digital Credentials API:
- Add issuance data classes:
CredentialCreationOptions,DigitalCredentialCreationOptions,DigitalCredentialCreateRequest,DigitalCredentialOfferReturn, andDigitalCredentialOfferReturnData. These classes are based on a preliminary specification and are subject to change. - Add
CredentialRequestOptions.create()method which automatically setsmediationto required and takes the list of requests, make the default constructor private. - Change:
DCAPIWalletRequestnow exposes and serializescredentialIds; deprecated single-ID constructors keep the old call shape available.
- Add issuance data classes:
- ISO mdoc:
- Preserve
Document.errorsin parsed ISO document results instead of failing validation - Add data classes from ISO/IEC 18013-5 from 2026 update
- BREAKING Change: Return type of
Iso180137AnnexCVerifier.validateResponsefromIso180137AnnexCResponseResultto reworkedKmmResult<Iso180137AnnexCVerifiedPresentationResult>
- Preserve
- OpenID for Verifiable Presentations:
- Change: Executing unsatisfiable DCQL queries no longer throws on matching, only on submission.
- Change:
Holder.matchInputDescriptorsAgainstCredentialStoreV2now acceptsfilterByIds: Collection<String>?for multi-credential DC API selections. - Change: Update DCQLClaimsQuery and DCQLCredentialQuery to OpenID4VP 1.0
- Change: Do not fail when only matching credentials without submitting a presentation
- Allow issuance and verification of
IdentifierListRevocation Mechanism - Change: Don't send response on user initiated signature cancellation
- BREAKING CHANGE: The result type from
verifyAuthnResponse,AuthnResponseResulthas been reworked to a data class - DCQL: Add custom credential types and proper satisfaction evaluation
- Add: DCQL submission requirements validation
- Add
VerifierMetadataModeforOpenId4VpRequestOptionsto provide them out-of-band when necessary, e.g. for Age Verification
- OpenID for Verifiable Credential Issuance:
- Moved the class
RefreshTokenInfofromOpenId4VciClienttoSubjectCredentialStore.ktand renamed it toCredentialRenewalInfoto better describe its role in the renewal process. KeptRefreshTokenInfoin the original package for backward compatibility - Added
CredentialRenewalInfotoSubjectCredentialStore.StoreEntry - Added support for refresh tokens in BearerTokenService
- Change: When no cryptographic holder binding is required, present raw W3C Verifiable Credentials
- Change: When no cryptographic holder binding is required and no holder binding is available in SdJwt credentials, still accept those credentials
- Change: OpenId4VPRequestOptions now transports a presentation request directly instead of credentials and presentation mechanism
- Change: Return type of
Verifier.verifyPresentationSdJwtfromVerifyPresentationResulttoKmmResult<VerifyPresentationResult.SuccessSdJwt> - Change: Return type of
Verifier.verifyPresentationVcJwtfromVerifyPresentationResulttoKmmResult<VerifyPresentationResult.Success> - Change: Return type of
Verifier.verifyPresentationIsoMdocfromVerifyPresentationResulttoKmmResult<VerifyPresentationResult.SuccessIso> - Add:
Verifier.verifyUnsignedVcJws - Add:
AuthnResponseResult.SuccessUnsigned - Add:
CreatePresentationResult.VcJws - Rename:
CreatePresentationResult.SignedtoCreatePresentationResult.VpJws - Add method
loadUnitAttestationPoptoWalletService - Add data class
LoadUnitAttestationPopInputtoWalletService - Deprecate
OAuth2KtorClientmethodsloadClientAttestationJwtandsignClientAttestationPop, point toloadInstanceAttestationandloadInstanceAttestationPop - Deprecate
WalletServicemethodloadKeyAttestation, point toloadUnitAttestationPop - Change method
ProofValidator.verifyAttestationProofto suspend - Add member
statusListTokenResolvertoCredentialIssuer - Add member
preferredTtltoKeyAttestationRequired
- Moved the class
- OAuth 2.0:
- In
SimpleAuthorizationServiceimplement JWT Response for OAuth Token Introspection - In
SimpleAuthorizationServicedeprecatecredentialOffer*methods to prevent configuration identifier mismatches - In
SimpleAuthorizationServiceaddoffer*methods to take pairs of credential schemes and representations
- In
- SD-JWT:
- Fix presentation of nested claims with the last name segment being present in structures with different names (e.g.
countryinplace_of_birthandaddress)
- Fix presentation of nested claims with the last name segment being present in structures with different names (e.g.
- Dependencies:
- Update to Signum 3.21.0 fixing CBOR parsing and tolerating cursed X.509 certificate encodings
- Remove code elements deprecated in 5.11.0
Release 5.11.1:
- OAuth 2.0:
- Fix bug in
SimpleAuthorizationRequestvalidatingissuer_stateon pushed authorization requests twice (and failing on the second time)
- Fix bug in
Release 5.11.0:
- Digital Credentials API:
- Add request/response models for OpenID4VP and ISO 18013-7 Annex C flows, including protocol identifiers, wallet/verifier request options, and typed responses
- Add serializers for
DeviceRequest,EncryptionInfo, and encrypted responses for Annex C/DC API interop
- ISO/IEC 18013-5 and 18013-7:
- Introduce Annex C verifier and request options to create mdoc requests, derive session transcripts, and validate encrypted device responses
- Adapt wallet data classes to prepare support for iOS
- Add data classes and serializers for zero-knowledge proofs
- Add
ZkSystemParamRegistryto enable zero-knowledge backends to register serializers for their custom parameters
- Token status list:
- Add
IdentifierListandIdentifierListInfoand related classes - Add
RevocationListandRevocationListInfosealed classes - Replace
Statusclaim withRevocationListInfoin VC / SD-JWT / MSO payloads - CBOR encoded token status list shall not be tagged with 24 like other COSE payloads (
d818in hex) - Move some methods from
IssuerCredentialStoreto new interfaceReferencedTokenStoreto decoupleStatusListAgentfromIssuerAgent
- Add
- OpenID for Verifiable Credential Issuance:
- In
SimpleAuthorizationServiceadd parameterconfigurationIdsto methodcredentialOfferWithAuthorizationCode - Support different supported credential formats having the same scope value (as this is covered by the spec)
- Be sure to use correct JWE encryption algorithm on issuer and wallet side and advertise keys correctly
- In
WalletEncryptionServiceadd constructor parameterfallbackJweEncryptionAlgorithmand deprecatedsupportedJweEncryptionAlgorithm
- In
- OpenID for Verifiable Presentations:
- In
OpenId4VpVerifieradd constructor parametersupportedJweEncryptionAlgorithmsto advertise in metadata, deprecatingsupportedJweEncryptionAlgorithmandsupportedJweAlgorithm - In
RequestOptionsdeprecate propertyencryption, as this depends on the response mode - In
AuthnResponseResultreturned fromOpenId4VpVerifier.validateAuthnResponse()remove parameterstate - In
OpenId4VpVerifierremovevalidateAuthnResponse(input: Map) - In
OpenId4VpVerifieradd option to provideexternalIdwhen validating authn responses, useful for DCAPI flows - Rename
RequestOptionstoOpenId4VpRequestOptionsand add DC API/DCQL options likeexpected_origins, optionalclient_id, and strictertransaction_datachecks - Build session transcripts for DC API responses, verify
expected_origins, and parse DC APIOpenId4VpResponseinputs without requiringstate
- In
- DCQL in OpenID for Verifiable Presentations:
- Support attribute
multiplein inDCQLCredentialQuery - Support attribute
require_cryptographic_holder_bindinginDCQLCredentialQuery - Support attribute
trusted_authoritiesinDCQLCredentialQuery, for Authority Key Identifierakionly - Result in
VerifiableDCQLPresentationValidationResultsnow carries a map of query id to a list ofAuthnResponseResultinstead of a single one - Support queries for W3C Verifiable Credentials (format
jwt_vc_json), with thanks to etnafed
- Support attribute
- OpenID4VC High Assurance Interoperability Profile (HAIP):
- Add
VerifyStatusListTokenHAIPand related resolver/tests to enforce requirements from draft 04
- Add
- OAuth 2.0:
- In
SimpleAuthorizationServiceofferclient_attestation_pop_signing_alg_values_supportedandclient_attestation_signing_alg_values_supportedin line with OAuth 2.0 Attestation-Based Client Authentication OAuth2KtorClient: Read and cacheDPoP-Noncefrom success responses and include it in subsequent DPoP proofs- In
SimpleAuthorizationServiceprovide methodsparWithDpopNonce,tokenWithDpopNonceanduserInfoWithDpopNonceto provide nonces to clients for their next request
- In
- Refactoring:
- Move shared nonce/map store utilities and add helpers to choose encryption keys and compute session transcript thumbprints to main module
- Deprecations:
at.asitplus.wallet.lib.oidvci.NonceServiceis nowat.asitplus.wallet.lib.NonceServiceat.asitplus.wallet.lib.oidvci.DefaultNonceServiceis nowat.asitplus.wallet.lib.DefaultNonceServiceat.asitplus.wallet.lib.oidvci.MapStoreis nowat.asitplus.wallet.lib.utils.MapStoreat.asitplus.wallet.lib.oidvci.DefaultMapStoreis nowat.asitplus.wallet.lib.utils.DefaultMapStoreat.asitplus.wallet.lib.openid.RequestOptionsis nowat.asitplus.wallet.lib.openid.OpenId4VpRequestOptionsat.asitplus.dcapi.request.DCAPIRequestis nowat.asitplus.dcapi.request.DCAPIWalletRequestat.asitplus.dcapi.request.Oid4vpDCAPIRequestis nowat.asitplus.dcapi.request.DCAPIWalletRequest.OpenId4VpUnsignedorat.asitplus.dcapi.request.DCAPIWalletRequest.OpenId4VpSigned
- Dependency Updates:
- Gradle 9.2.0
- Kotlin 2.3.0
- Dokka 2.10.0
- Return value checker defaults to
check - AGP 8.12.3
- Ktor 3.3.3
- Bouncy Castle 1.83 (no more forcing exact version)
- TestBalloon 0.8.2-K2.3.0
- Signum 3.19.3
Release 5.10.1:
- Proximity presentations:
- Return multiple ISO mDoc credentials in one device response when generating a presentation in proximity flows
- OpenID for Verifiable Presentations:
- In
RequestOptionsdeprecate propertyencryption, as this depends on the response mode - In
OpenId4VpVerifierremovevalidateAuthnResponse(input: Map) - In
OpenId4VpVerifieradd option to provideexternalIdto methodsvalidateAuthnRequest()andsubmitAuthnRequest(), useful for DCAPI flows
- In
Release 5.10.0:
- Token status list:
- Remove
StatusTokenValidator - Remove
StatusTokenIntegrityValidatorclass - Refactor
StatusListToken.StatusListJwttoStatusListJwt - Refactor
StatusListToken.StatusListCwttoStatusListCwt
- Remove
- OAuth 2.0:
- Use correct path for metadata retrieval (inserting strings between host component and path component)
- Support reading resource-server provided nonce for OAuth 2.0 Demonstrating Proof of Possession (DPoP)
- Use pushed authorization requests when AS supports it
- Use signed authorization requests when AS supports it (but not necessarily when using PAR)
- OpenID for Verifiable Credential Issuance:
- Update implementation to 1.0 from 2025-09-16
- Remove code elements deprecated in 5.9.0
- Drop single
proofin credential request - Support credential response encryption correctly, see changed API in
CredentialIssuer.credential() - Correctly verify credential request regarding
credential_configuration_idandcredential_identifiers - Support credential request encryption correctly, if metadata is set at Issuer
- OpenID for Verifiable Presentations:
- Update implementation to 1.0 from 2025-07-09
- Remove code elements deprecated in 5.9.0
- Use correct syntax for
vp_tokenin responses to DCQL queries, i.e., with an array - Drop session transcript implementation from ISO/IEC 18013-7:2024 Annex B, which was pre-OpenID4VP 1.0
- Remove deprecated format identifier
vc+sd-jwt(nowdc+sd-jwt) - Remove deprecated client identifier prefix scheme
x509_san_uri - Use correct response encryption acc. to values stated in
encrypted_response_enc_values_supportedinsideclient_metadata - Correct evaluation of
vp_formats_supportedinsideclient_metadata - Advertise correct wallet metadata for retrieving authn requests, e.g.
client_id_prefixes_supported - Drop support for signed-then-encrypted responses, as in OpenID4VP 1.0
- Drop support for mdoc generated nonces, as in OpenID4VP 1.0
- Deprecate method
validateAuthnResponse(input: Map<String, String>)inOpenId4VpVerifierbecause it eluded correct input parsing - When returning multiple ISO mDoc credentials, make sure to create one device response object per document, wrapping in separate VP tokens
- SD-JWT:
- Fix creation of SD JWTs containing structures that are selectively disclosable
- Fix creation of arrays in SD JWTs ... issuers are advised to use
ClaimToBeIssuedArrayElementfor such elements
- Issuance:
- Introduce duration to subtract for the issuance date of credentials, see
IssuerAgent.issuanceOffset - Do not issue SD-JWT credentials with a unique identifier in
jti - Truncate issuing timestamps to seconds
- Introduce duration to subtract for the issuance date of credentials, see
- Remote Qualified Electronic Signatures:
- Remove modules deprecated in 5.9.0:
vck-rqes,rqes-data-classes
- Remove modules deprecated in 5.9.0:
Release 5.9.1
- Remove bogus testballoon-shim dependency
Release 5.9.0
- Remove code elements deprecated in 5.8.0
- Gradle modules:
- Change dependency structure of modules
- Remove
vck-rqesmodule, relevant classes have been moved tovck-openid - Rename
rqes-data-classestocsc-data-classes - Move DIF-related classes to
dif-data-classes - Move OpenId-related classes to
openid-data-classes - Remove class
Initializerfromvck-openid
- Remote Qualified Electronic Signatures:
- Refactor
RqesWalletServiceto be stateless - Remove "UC5-flow" option in RQES flows
- Remove
transactionDatafromKeyBindingJws - Remove
QesAuthorizationDetails - Refactor
AuthorizationDetailsto sealed class - Remove
QesInputDescriptor - Refactor
InputDescriptorto sealed class - Remove
RqesRequestOptions - Remove
RequestOptionsinterface - Rename
OpenIdRequestOptionstoRequestOptions - Refactor
TransactionDatato sealed class - In
TransactionDatamakecredentialIdsmandatory - Refactor
RequestParametersto sealed class
- Refactor
- Validation:
- Improve validation of JWT VC
- Remove subclass
InvalidStructurefromVerifier.VerifyCredentialResult, is now mapped toValidationError
- Refactor handling of key material:
- Introduce interface
PublishedKeyMaterialto indicate clients can lookup that key with theidentifierused as akeyIdin a key set - Other key material gets randomly assigned identifiers to not rely on DIDs
- For JVM add
PublishedKeyStoreMaterialto load keys from Java key stores with a fixed identifier - In class
HolderAgentrequire theidentifierto be a URI, set in the constructor, as required for SD-JWT and JWT VC - Key material will be referenced by its
keyIdand key set URL or by its certificate or plain public key in JWS proofs
- Introduce interface
- Remove workarounds and deprecated features:
- OpenID4VP: Verify mDoc generated nonce correctly (not supporting broken EUDIW RI)
- OpenID4VP: Only send the
responseparameter when usingdirect_post.jwt(not supporting broken EUDIW RI) - OpenID4VP: Use credential format identifier
dc+sd-jwteverywhere - OpenID4VP: Discard option to use deprecated
client_id_schemeparameter inClientIdSchemesubclasses - OpenID4VP: Do not read the explicit parameter
client_id_scheme(it's prefixed in theclient_id) - OpenID4VP: Do not send signed JWT as authentication responses, but always encrypt them when using
direct_post.jwt - OpenID4VP: Remove
signDeviceAuthFallbackinOpenId4VpHolderwhich has been used for mDoc presentations, but was not part of any spec - OpenID4VP: Remove
BackwardsCompatibleDCQLQuerySerializerwhich has been able to parse DCQL queries as strings in addition to the usual JSON object - OpenID4VP: Never sign responses, either send it in plain or encrypted (OpenID4VP 1.0 has dropped JARM)
- DCAPI: Remove (already deprecated) preview data class
PreviewDCAPIRequest, either use OpenID4VP or ISO 18013-7 Annex C
- JWE:
- Add
EncryptJweSymmetricFunandEncryptJweSymmetricandDecryptJweSymmetric
- Add
- OAuth 2.0:
- Refactor the split between credential issuer (OpenID4VCI) and authorization server (OAuth2.0)
SimpleAuthorizationServicesupports token exchange acc. to RFC 8693SimpleAuthorizationServicesupports token introspection acc. to RFC 7662- Implement
RemoteOAuth2AuthorizationServerAdapterso that credential issuers may be connected to external OAuth2.0 authorization servers - Implement
OAuth2KtorClientto implement a ktor-based client for OAuth 2.0, including OAuth 2.0 Demonstrating Proof of Possession (DPoP) - Remove generics from methods in
OpenId4VpHolderand work directly withAuthorizationRequestParameters - In
PresentationFactoryreplaceRequestParametersin function signatures to work directly withAuthorizationRequestParameters - Remove all parameters from
RequestParameters, moved into their respective implementing class - Add data class
JarRequestParametersimplementingRequestParametersto handle JWT-secured authorization requests explicitly - In
AuthorizationServiceandSimpleAuthorizationServicedeprecate methodauthorizewithAuthenticationRequestParameters, useRequestParametersinstead - In
AuthorizationServiceandSimpleAuthorizationServicedeprecate methodparwithAuthenticationRequestParameters, useRequestParametersinstead - In
OAuth2Clientadd methodcreateAuthRequestJarto make intent more explicit - Allow
SimpleAuthorizationServiceto toggle usage of PAR and JAR with newrequirePushedAuthorizationRequestsandrequestObjectSigningAlgorithmsparameters
- Cryptography:
- Use secure random for source of nonces by default, but also expose constructor parameters to override it
- Update implementation of OpenID for Verifiable Credential Issuance to draft 17:
- Offer
signedMetadatainCredentialIssuer - In
OpenIdAuthorizationDetailsdeprecate properties that have been dropped from the spec:format,docType,sdJwtVcTypeandcredentialDefinition - In
SupportedCredentialFormatadd new property aboutCredentialMetadata, movingdisplayandclaims - In
TokenResponseParametersremoveclientNoncethat has been dropped in OID4VCI draft 14 - In
CredentialRequestParametersdeprecateproof, useproofsinstead - Use correct error values for
unknown_credential_configurationandunknown_credential_identifier - In
CredentialIssuerdeprecate constructor parametersencryptCredentialRequest,requireEncryption,supportedJweAlgorithms,supportedJweEncryptionAlgorithms - In
CredentialIssuerintroduce constructor parameterencryptionServicewhich handles credential request decryption and credential response encryption - In
CredentialIssuerdeprecate methodnonce() - In
CredentialIssueradd methodnonceWithDpopNonce()to provide a DPoP nonce to clients (only when the AS is internal) - In
CredentialIssueruse the COSE algorithm identifiers (e.g. -7) for signing algorithm values in the metadata - In
WalletServicedeprecate constructor parametersrequestEncryption,decryptionKeyMaterial,supportedJweAlgorithm,supportedJweEncryptionAlgorithm - In
WalletServiceintroduce constructor parameterencryptionServicewhich handles credential request encryption and credential response decryption - In
WalletServiceadd methodparseCredentialResponseto transform the received credential response from the issuer intoStoreCredentialInput - In
WalletServicedeprecate methodcreateCredentialRequestand replace it withcreateCredentialto handle encryption
- Offer
- Presentation classes:
- In
CreatePresentationResult.Signedadd property containingJwsSigned<VerifiablePresentationJws> - In
CreatePresentationResult.SdJwtadd property containingSdJwtSigned - Deprecate
SdJwtSigned.parse(), please migrate toSdJwtSigned.parseCatching() - OpenID for Verifiable Presentations: Update implementation to draft 29:
- In
AuthenticationRequestParametersdeprecate memberclient_metadata_uri - In
RequestOptionsdeprecate memberclientMetadataUrl - In
OpenIdConstantsdeprecate memberX509SanUri - In
AuthenticationRequestParametersandAuthorizationResponsePreparationStateaddVerifierInfoto display to user - In
RelyingPartyMetadatadeprecatevp_formats, replace withvp_formats_supported, using correct algorithm values - Change
DCQLCredentialQuery.metato be mandatory - Add
DCQLEmptyCredentialMetadataAndValidityConstraints - In
OpenId4VpVerifieradd constructor parameterdecryptionKeyMaterialto supply a key for decrypting encrypted responses from holders - In
OAuth2AuthorizationServerMetadatadeprecateclient_id_schemes_supported, replace withclient_id_prefixes_supported - Add
ClientIdScheme.CertificateHashmapping to client identifier prefixx509_hashfrom OpenID4VP - Use session transcript for mDoc presentations as defined in OpenID4VP
- Deprecate and refactor methods in
OpenId4VpHolderandOpenId4VpWalletto fetch external resources only once, clients need to callstartAuthorizationResponsePreparation()and thenfinalizeAuthorizationResponse() OpenId4VpHolderdoes not return aKmmResult.failurewhen building the response fails, but returnsAuthenticationResponseResultcontaining error parametersOpenId4VpWalletdoes not send an error response to the verifier automatically- Extend
RequestParametersFromwith sub-classes forDcApiSignedandDcApiUnsigned, removing the parameterdcApiRequestfrom several methods inOpenId4VpVerifierandOpenId4VpWallet - Extend
RequestParametersFrom.JwsSignedwith aparentmember - Extend
RequestParametersFrom.Jsonwith aparentmember
- In
- SD-JWT:
- Honour digest defined in
_sd_algparameter to allow for more digests in issuance and verification of selective disclosures items
- Honour digest defined in
- Make it possible to disable all apple targets by setting Gradle property
disableAppleTargets=true(either throughgradle.properties/local.propertiesor as env variable) - Dependency Updates:
- Kotlin 2.2.21
- Signum 3.18.2 / Supreme 0.10.2
- Build Updates:
- AGP 8.12.3 with new Android KMP Library Plugin
- Migrate from Kotest to TestBalloon
- Remove dodgy Swift-Klib workarounds
Release 5.8.0:
- Refactor
AuthorizationServiceStrategy- Allow for general AuthorizationDetails
- Remove
filterAuthorizationDetailsfunction - Add
validateAuthorizationDetailsfunction - Add
matchAuthorizationDetailsfunction - Add
RqesAuthorizationServiceStrategyclass
- Refactor
SimpleAuthorizationServiceand- Add
SimpleQtspAuthorizationServiceclass - Remove
AuthorizationDetailmatching and validation from class to interface function
- Add
- Code organization:
- Remove code elements deprecated in
5.7.0 - Remove all remaining
serialize()anddeserialize()methods in data classes - Move data classes for token status into artifact
openid-data-classes, keeping the namespace - Move data classes for VC and SD-JWT into artifact
openid-data-classes, keeping the namespace
- Remove code elements deprecated in
- Refactoring of ISO data classes:
- Move data classes from
vcktoopenid-data-classes - List of classes moved:
MobileSecurityObject,Document,IssuerSigned,DeviceResponse
- Move data classes from
- Issuer:
- Extract interface
StatusListIssuerout ofIssuerto separate credential issuing and status list management - Rework interface
IssuerCredentialStore, deprecating methodsstoreGetNewIndexand classIssuerCredentialStore.Credential - In
Issuer.IssuedCredentialadd the typed credentials as properties, add propertyuserInfo - In
StatusListIssuerdeprecate methodsrevokeCredentials()andrevokeCredentialsWithId(), callers should userevokeCredential() - In
CredentialIssuerdeprecate constructor parametercredentialProvider, replace withcredentialDataProvider - Extend
CredentialToBeIssuedto contain propertiesexpiration,scheme,subjectPublicKey,userInfo - In
CredentialIssuermove constructor parameter for loading data to methodcredential() - Extract
ProofValidatorout ofCredentialIssuer - Extract
CredentialSchemeMappingout of various top-level methods - In
SimpleAuthorizationServicedeprecate constructor parameterdataProvider, useauthorize()withOAuth2LoadUserFuninstead - In
AuthorizationServicedeprecateauthorize()methods, addingauthorize()withOAuth2LoadUserFun
- Extract interface
- Credential schemes:
- Provide fallback credential schemes, to be used when no matching scheme is registered with this library:
SdJwtFallbackCredentialSchemeVcFallbackCredentialSchemeIsoMdocFallbackCredentialScheme
- Note that these schemes are not resolved automatically, and need to be used explicitly in client applications
- Provide fallback credential schemes, to be used when no matching scheme is registered with this library:
- SD-JWT:
- Add data class for SD-JWT VC Type metadata in
SdJwtTypeMetadata - Update signum to provide SD-JWT VC Type metadata in
vctmin the header of a SD-JWT
- Add data class for SD-JWT VC Type metadata in
- Validation:
- Remove internal class
Parserand data classesParseVpResultandParseVcResult - Extract
ValidatorMdoc,ValidatorSdJwt,ValidatorVcJwsfromValidator - In
HolderAgentadd constructor parameters forvalidatorVcJws,validatorSdJwt,validatorMdoc - In
Validatordeprecate constructor parameterresolveStatusListToken, clients shall usetokenStatusResolverinstead - In
Verifierremove parameterchallengefromverifyPresentationIsoMdoc() - Rename
SdJwtValidatortoSdJwtDecoded - In
VerifiablePresentationParsedadd the input data too, that is theVerifiablePresentationJws - In
IsoDocumentParsedadd the input data too, that is theDocument
- Remove internal class
- Respond to failed authentication request with error:
- In class
OpenId4VpWalletadd methodsendAuthnErrorResponse - In data class
OAuth2Erroradd memberstate - In data class
AuthenticationResponseadd membererror, makeparamsoptional - In class
AuthenticationResponseFactoryadd membersignError - In class
OpenId4VpHolderadd membersignError, add methodcreateAuthnErrorResponse
- In class
- Dependency Updates:
- Kotlin 2.2.0
- Signum 3.17.0 / Supreme 0.9.0
- kotlinx.datetime 0.7.1.
- This moves Instant and Clock to stdlib
- (but introduces typealiases for easier migration)
- Also forces serialization 1.9.0
- Update to latest conventions plugin:
- Bouncy Castle 1.81!!
- Serialization 1.9.0
- Coroutines 1.10.2
- Ktor 3.2.2
- Kotest 6.0.0.M6
- Update JsonPath4K to 3.0.0
- Disable bogus ios X64 test tasks
- Help XCode to get its act together
- Add a manual test workflow to try different kotlin/ksp/kotest versions
Release 5.7.2:
- Presentation Exchange: Fix validation of optional constraint fields
Release 5.7.1:
- Signum 3.16.3/Supreme 0.8.3 to fix certificate encoding in JWS header
- Remove okio dependency and use Supreme digest calculation instead
- Set correct header when retrieving authn requests
Release 5.7.0:
- Remote Qualified Electronic Signatures:
- Remove code elements deprecated in
5.6.0
- Remove code elements deprecated in
- JWS and COSE handling:
- Remove code elements deprecated in
5.6.0
- Remove code elements deprecated in
- OpenID for Verifiable Credential Issuance:
- Expose
oauth2ClientinWalletService - Remove code elements deprecated in
5.6.3inOpenId4VciClient - Update
transaction_data_hashesaccording to result from openid/OpenID4VP#621
- Expose
- Holder:
- Replace
keyPairwithkeyMaterial
- Replace
- Functions:
- Replace type aliases with functional interfaces (providing named parameters in implementations)
- Make cryptographic verification functions suspending
- Fully integrated crypto functionality based on Signum 3.16.2. This carries over breaking changes:
- All debug-only kotlinx.serialization for cryptographic datatypes like certificates, public keys, etc. was removed
- This finally cleans up the RSAorHMAC
SignatureAlgorithm.RSAorHMACis now properly split intoSignatureAlgorithmandMessageAuthenticationCode. Both implementDataIntegrityAlgorithm.- This split also affects
JwsAlgorithm, which now has subtypes:SignatureandMAC. Hence,JwsAlgorithm.ES256->JwsAlgorithm.Signature.ES256
- Separate credential timeliness validation from content semantics validation
- Change
Validatorconstructor to include configuration of the credential timeliness validator - Change
Validator.verifyVcJwsto not perform timeliness validation - Change
Validator.verifySdJwtto not perform timeliness validation - Replace property
isRevokedwith propertyfreshnessSummaryin:Verifier.VerifyPresentationResult.SuccessSdJwtIsoDocumentParsedAuthnResponseResult.SuccessSdJwt
- Change type of
VerifiablePresentationParsed.verifiableCredentialsandrevokedVerifiableCredentialstoCollection<VcJwsVerificationResultWrapper> - Rename
VerifiablePresentationParsed.verifiableCredentialstoVerifiablePresentationParsed.freshVerifiableCredentials - Rename
VerifiablePresentationParsed.revokedVerifiableCredentialstoVerifiablePresentationParsed.notVerifiablyFreshVerifiableCredentials - Remove
Validator.checkRevocationStatusin favor ofValidator.checkCredentialFreshness - Remove
Holder.StoredCredential.status - Remove
Verifier.VerifyCredentialResult.Revoked - Add constructor parameter
Validator.acceptedTokenStatusesto allow library client to define token statuses deemed valid
- Change
- Add support for Digital Credentials API as defined in OID4VP draft 28 and ISO 18013-7 Annex C:
- Implement
DCAPIRequestfor requests received via the Digital Credentials API, with implementations for OID4VP (Oid4vpDCAPIRequest), ISO 18013-7 Annex C (IsoMdocRequest) and a non-standardised preview protocol (PreviewDCAPIRequest) - New property of type
Oid4vpDCAPIRequestfor requests originating from the Digital Credentials API inAuthorizationResponsePreparationState - New parameter of type
Oid4vpDCAPIRequestfor requests originating from the Digital Credentials API inOpenId4VpHolder.parseAuthenticationRequestParameters,RequestParameters.extractAudiencePresentationFactory.createPresentationPresentationFactory.calcDeviceSignatureRequestParser.parseRequestParametersRequestParser.extractRequestObjectRequestParser.parseRequestObjectJwsRequestParser.matchRequestParameterCasesHolderAgent.getValidCredentialsByPriority - New optional parameter
filterByIdof typeStringinHolder.matchInputDescriptorsAgainstCredentialStore,HolderAgent.getValidCredentialsByPriorityHolderAgent.matchInputDescriptorsAgainstCredentialStoreHolderAgent.matchDCQLQueryAgainstCredentialStoreto filter credentials by id - New method
SubjectCredentialStore.getDcApiIdto generate an id of typeStringfor a credential - New optional property of type
DCAPIHandoverforSessionTranscript
- Implement
- Return member of interface
AuthenticationResultinstead ofAuthenticationSuccessas authorization response inOpenId4VpWallet. Can either beAuthenticationSuccess: contains aredirectUri(same behaviour as in 5.6.x)AuthenticationForward: contains theauthenticationResponseResultfor responses via the Digital Credentials API
- Refactoring of ISO data classes:
- Move data classes from
vcktoopenid-data-classes - Remove
serialize()anddeserialize()methods, please use the preferred serializer directly (e.g.vckCborSerializer) - List of classes moved:
ClientIdToHash,DeviceAuth,DeviceAuthentication,DeviceKeyInfo,DeviceRequest,DeviceSigned,DeviceSignedItemListSerializer,DeviceSignedList,DocRequest,ItemsRequest,IssuerSignedItem,IssuerSignedItemSerializer,IsserSignedList,IssuerSignedListSerializer,ItemsRequestList,ItemsRequestListSerializer,KeyAuthorization,NamespacedDeviceNameSpacesSerializer,NamespacedIssuerSignedListSerializer,ResponseUriToHash,ServerItemsRequest,ServerRequest,ServerResponse,SessionTranscript,SingleItemsRequest,ValidityInfo,ValueDigest,ValueDigestList,ValueDigestListSerializer
- Move data classes from
- Additional:
- Remove
Holder.StoredCredentialin favor ofSubjectCredentialStore.StoreEntry - Update AGP to 8.6.1 for composite builds with Valera
- Make
OAuth2Exceptionserializable - Add data class
LocalDateOrInstantto be used by credentials
- Remove
Release 5.6.6:
- OpenID for Verifiable Presentations:
- Fix applying presentation exchange filters to credentials (
arrayandobjectfilters)
- Fix applying presentation exchange filters to credentials (
- OpenID for Verifiable Credential Issuance:
- On issued SD-JWT VC do not validate subject but the confirmation claim
- Do not require
proof_typeinproofsin a credential request to be set
Release 5.6.5:
- OpenID for Verifiable Presentations:
- Change JSON Path serialization for claims to dot notation (for EUDIW reference implementation)
- Change
vctfilter to containconstinstead ofpattern(for EUDIW reference implementation) - Treat requested attributes as optional, if not explicitly set as required
- Treat selected submission from the user as valid, let verifier decide if submission shall be accepted
Release 5.6.4:
- OpenID for Verifiable Presentations:
- Correctly handle requested attributes with nested paths, i.e.
address.formatted
- Correctly handle requested attributes with nested paths, i.e.
- OAuth2.0:
- In
OAuth2Client.createAuthRequest()renamewrapAsPartowrapAsJarto match its semantics
- In
- OpenID for Verifiable Credential Issuance:
- Sign authn request as JAR only when AS supports it
- Support extracting
credential_configuration_idfrom server's authorization details - In
OpenId4VciClientmake constructor parameterloadClientAttestationJwtoptional - In
OpenId4VciClientmake constructor parametersignClientAttestationPopoptional
Release 5.6.3:
- OpenID for Verifiable Credential Issuance:
- Increase interop with wwWallet (optional parameter
proof_signing_alg_values_supported) - Expose
oauth2ClientinWalletService - In
OpenId4VciClientdeprecate constructor parameters needed for callbacks, and returnCredentialIssuanceResultin method calls instead- Deprecates parameters
openUrlExternally,storeProvisioningContext,loadProvisioningContext,storeCredential,storeRefreshToken - Deprecates methods
startProvisioningWithAuthRequest,resumeWithAuthCode(withoutcontext),refreshCredential,loadCredentialWithOffer
- Deprecates parameters
- Increase interop with wwWallet (optional parameter
Release 5.6.2:
- OpenID for Verifiable Presentations:
- Send
stateparameter fordirect_post.jwtto increase compatibility with buggy verifiers
- Send
Release 5.6.1:
- Expose details for
ConstraintFieldsEvaluationException - Token status list:
- Errors in status list lookup lead to a
nulltoken status, not to an error as before, i.e.TokenStatusEvaluationExceptionis never thrown
- Errors in status list lookup lead to a
- Remote Qualified Electronic Signatures:
- In
RqesOpenId4VpHolderfix validation of signing credentials
- In
Release 5.6.0:
- Remote Qualified Electronic Signatures:
- Fix erroneous
InputDescriptorencoding inPresentationDefinitionwhen more specific type was known (i.e.DidInputDescriptor/QesInputDescriptor) via contexutal serialziation - Allow fully compliant OID4VP and UC5
transactionDatahandling - Deprecate
RqesOpenId4VpVerifier - Change
TransactionDatafrom sealed class to interface - Fix erroneous
TransactionDataencoding inAuthenticationRequest - Change transaction data and related data elements from set to list
- Change transaction data elements from their class to JsonPrimitive
- Add
TransactionDataBase64Uritypealias for JsonPrimitive - Add transaction data verification to
OpenID4VpVerifier.validateAuthnResponse
- Fix erroneous
- OpenID for Verifiable Credential Issuance:
- Remove code elements deprecated in 5.5.0
- OpenID for Verifiable Presentations:
- In
OpenId4VpVerifieradd constructor parametersupportedAlgorithms - In
OpenId4VpWalletremoveopenUrlExternally, and instead return the redirected URL from the verifier
- In
- Use functions over services:
- Replace
VerifierCryptoServicewithVerifySignatureFun - Replace
VerifierJwsServicewithVerifyJwsObjectFun,VerifyJwsSignatureWithCnfFunandVerifyJwsSignatureWithKeyFun - Replace
VerifierCoseServicewithVerifyCoseSignatureFun - Replace
JwsService.createSignedJwt()withSignJwtFun - Replace
JwsService.createSignedJwsAddingParams()withSignJwtFunandJwsHeaderIdentifierFun - Replace
JwsService.encryptJweObject()withEncryptJweFun - Replace
JwsService.decryptJweObject()withDecryptJweFun - Replace
CoseService.createSignedCose()withSignCoseFun - Replace
CoseService.createSignedCoseWithDetachedPayload()withSignCoseDetachedFun
- Replace
Release 5.5.4:
- Token status list:
- Add considerations for separating the semantics "no token status mechanism is defined" from "evaluating token status failed"
- Provide revocation status to verifier
- DCQL:
- Parse new format of claim query in OpenID4VP Draft 28
Release 5.5.3:
- Fix DCQL Query serialization/deserialization in
AuthenticationRequestParameters - Status List:
- Set correct JWT type for JWT header:
statuslist+jwt
- Set correct JWT type for JWT header:
- OpenID for Verifiable Presentations:
- In
OpenId4VpWalletdeprecateopenUrlExternally, and instead return the redirected URL from the verifier
- In
- ISO proximity presentations:
- Fix session transcript for QR and NFC handover
Release 5.5.2:
- OpenID for Verifiable Presentations:
- Fix parsing
groupin presentation exchange input descriptors - Set content type for authentication responses to
application/x-www-form-urlencoded, without the charset appended - Fix ISO mDoc presentations containing multiple documents in one device response
- Fix parsing
- When creating JWS, and
x5cheader is set, do not setjwkandkid - When creating JWS, and
jwkheader is set, do not setkid
Release 5.5.1:
- OpenID for Verifiable Credential Issuance:
- Support AS metadata files at
/.well-known/oauth-authorization-server
- Support AS metadata files at
- OpenID for Verifiable Presentations:
- In
RequestOptionsCredentialaddidas an optional parameter - Remove mixed-in SIOP parameters in authn requests
- In
ClientIdSchemeadd parameteruseDeprecatedClientIdSchemeto supportclient_id_schemefor OpenID4VP previous to Draft 22
- In
- OAuth2:
- In
OAuth2Client.createAuthRequest()add parameterwrapAsParto control wrapping the authn request in a JWS for pushed authorization requests
- In
- RQES:
- Add
transactionDatatoOpenIdRequestOptions - Deprecate
RqesOpenId4VpVerifier - Change
TransactionDatafrom sealed class to interface - Fix erroneous
TransactionDataencoding inAuthenticationRequest
- Add
Release 5.5.0:
- Remove elements deprecated in 5.4.0 when introducing DCQL:
- Class
CredentialSubmission, replaced withPresentationExchangeCredentialDisclosure - In
HolderremovecreatePresentation()taking inPresentationDefinition - In
HolderremovecreatePresentation()taking inCredentialSubmission - In
OpenId4VpHolderremovefinalizeAuthorizationResponse()taking inCredentialSubmission - In
OpenId4VpHolderremovefinalizeAuthorizationResponseParameters()taking inCredentialSubmission - In
OpenId4VpWalletremovefinalizeAuthorizationResponseParameters()taking inCredentialSubmission
- Class
- Update implementation of OpenID for Verifiable Credential Issuance to draft 15:
- Remove functionality to request issuance of certain claims only, as this has been dropped from OpenID4VCI entirely
- Remove format-specific parameters in credential request, replacing with
credential_configuration_id - In the credential response (
CredentialResponseParameters), replace singlecredentialwith arraycredentials, containing thecredentialitself, but issue both variants for now - In the supported credential formats (
SupportedCredentialFormat) of the issuer, use the new format for claim names - In the authorization details (
OpenIdAuthorizationDetails), use the new format for claim names - Deprecate
WalletService.RequestOptions.requestedAttributes - Deprecate methods in
OpenId4VciClientcontaining parameter forrequestedAttributes - In
OpenId4VciClient.startProvisioningWithAuthRequest()remove parameterrequestedAttributes - In
OpenId4VciClient.loadCredentialWithOffer()remove parameterrequestedAttributes - In
WalletService, deprecateCredentialRequestInput - In
WalletService, deprecatecreateCredentialRequest(CredentialRequestInput), provide new methodcreateCredentialRequest(TokenResponseParameters)for direct processing of the token response - In
IssuerMetadata, setscopeforSupportedCredentialFormatto a unique string (the credential configuration id) - Iron out details for filtering scope and authorization details in
SimpleAuthorizationService SimpleAuthorizationServicecorrectly validates requested credentials in credential request and issued access tokensSimpleAuthorizationServicecorrectly validates requested credentials in authn request and token request- Remove proof type
cwt, which has been removed from draft 14 - The
CredentialIssuerissues more the same credential to different keys, if more than one proof is contained in the credential request - Add rudimentary implementation of key attestation proofs in
WalletServiceandCredentialIssuer - Update
OpenId4VciClient(invck-openid-ktor) to support updated process and all security features with different crypto services - Remove
c_noncefrom token response, migrate to nonce endpoint inCredentialIssuer WalletServicesupports requesting encrypted credentialsCredentialIssuersupports encrypting issued credentials- In
CredentialIssuerdeprecate methods for credential offers, moving them toSimpleAuthorizationService
- Update implementation of authorization service for OpenID4VC High Assurance Interoperability Profile draft 03:
SimpleAuthorizationServiceimplements pushed authorization requestsSimpleAuthorizationServiceimplements attestation-based client authentication as defined in OAuth 2.0 Attestation-Based Client AuthenticationSimpleAuthorizationServicerequires constructor parameter to select access token strategyTokenService.jwt()implements sender-constrained access tokens as defined in OAuth 2.0 Demonstrating Proof of Possession (DPoP)TokenService.bearer()implements traditional bearer access tokens- In
SimpleAuthorizationServiceadd constructor parameter to validate the client attestation JWT - In
CredentialIssuer.credential()callers need to pass the wholeAuthorizationheader instead of just the access token value - In
OAuth2Clientadd constructor parameterjwsServicete enable sending JWT-secured authorization requests - Enable issuing and usage of (JWT-based, sender-constrained) refresh tokens, e.g. extend
AuthorizationForToken, add grant typerefresh_token - Add method to
OpenId4VciClientto refresh a credential with a refresh token that has been received when loading the credential - Remove methods from internal interface
OAuth2AuthorizationServerAdapter - In
CredentialAuthorizationServiceStrategymove constructor parameterdataProviderof typeOAuth2DataProvidertoSimpleAuthorizationService - Fixed
OpenId4VpWalletparameter requirements for finalizing an authorization response - Improved error logging and exposing for presentation exchange input evaluation
- Release inner disclosures for nested SD-JWT claims too
- Temp. allow validation of incorrectly encoded mdoc generated nonces in session transcripts for ISO 18013-7 presentations (see PR)
- Error handling:
- Add subclasses of
OAuth2Exceptionto write more precise error handling code
- Add subclasses of
- Update dependencies:
- Update
signumto 3.15.2, supporting X.509 certificates in v1, v2 too - Delegate key agreement to Signum's implementation -> key agreement functions are now
suspending - Update JsonPath4K
- Update to Kotlin 2.1.20
- Introduce dedicated Android targets, separate from JVM targets, that compile to JDK 8 / API-Level 30
- Update
- Refactorings in
rqes-data-classes:- Remove
Csc-Prefix from nearly all CSC data classes - Rename
CscSignatureRequestParameterstoQtspSignatureRequest - Rename
SignatureResponsetoQtspSignatureResponse - Rename
SignDocResponsetoSignDocResponseParameters - Rename
SignHashResponsetoSignHashResponseParameters - Fixed default values for CSC data classes
- Remove
Release 5.4.3:
- Fix property names for serialized RQES data classes
Release 5.4.2:
- Fix auth tag size calculation
Release 5.4.1:
- Fix encoding
dcql_queryin authentication request, it is now a string - Provide default values for RQES data classes
Release 5.4.0:
- Extend support for POTENTIAL UC5: Remote qualified electronic signatures
- Update data classes in
rqes-data-classes - See main classes
RqesOpenId4VpHolderandRqesOpenId4VpVerifierinvck-rqes - OpenID4VP: Update implementation to draft 23, adding transaction data hashes to the response of the Wallet
- Rename
RequestOptionstoOpenIdRequestOptions - Add
transactionDatatoPresentationRequestParameters
- Update data classes in
- Implement Digital Credentials Query Language (DCQL) from OpenID for Verifiable Presentations:
- Add DCQL library in module
openid-data-classes(modulevcknow depends on this module because of dcql queries) AuthenticationRequestParameters: Add memberdcqlQueryCredentialFormatEnum: Add methodcoerceDeprecationsto coerce deprecatedVC_SD_JWTtoDC_SD_JWTHolder: Deprecate previous methods for creating presentations, add new methods for creating presentations supporting DCQL and presentation exchange- Add class
CredentialPresentation - Add class
CredentialPresentationRequest - Change
PresentationResponseParametersto directly reveal the parameters necessary for creating a response - Add subclasses to
PresentationResponseParametersfor working with raw presentation results - Add subclass
VerifiableDCQLPresentationValidationResultsofAuthnResponseResultto preserve credential query identifiers AuthorizationResponsePreparationStatenow holds general credential presentation requestOpenId4VpHolder: Add presentation methods supporting both presentation mechanisms and deprecate previously existing presentation methodsOpenId4VpVerifier: AddprepareAuthnRequestandsubmitAuthnRequestto allow customization of presentation request, add validation support for DCQL presentationsRequestOptions: Add memberpresentationMechanismto explicitly select DCQL or PresentationExchange
- Add DCQL library in module
- Error handling:
- Preserve more causes for errors
- In
AuthnRespnoseResult.Erroraddcause, which optionally holds the cause for the error - In
AuthnRespnoseResult.ValidationErroraddcause, which optionally holds the cause for the error
- Improve support for ISO mDocs:
- In
IssuerSignedItem, tagInstantvalues with CBOR tag0, andLocalDatewith CBOR tag1004
- In
- Updates:
- signum to 3.13.0, fixing COSE headers with more than one certificate
- Remove elements marked as deprecated in 5.3.0:
OidcSiopVerifier,OidcSiopWallet,Verifier.verifyPresentation(),OpenId4VpVerifier.validateAuthnResponseFromPost()
Release 5.3.3:
- ISO: Fix serialization of device authentication bytes acc. to ISO 18013-7
- ISO: Fix generating
mdocGeneratedNoncefor device authentication acc. to ISO 18013-7 - OpenID4VP: Support extracting authentication response from JWS inside JWE
Release 5.3.2:
- ISO: Do not tag instants in CBOR with tag 1004
- ISO: Fix calculation of value digests for
IssuerSignedItems
Release 5.3.1:
- Add optional parameter
issuerUritoClientIdScheme.PreRegistered - Fix validation of KB-JWT for SD-JWT presentations
Release 5.3.0:
- Implement token status list from token-status-list-06, replacing implementation of Revocation List 2020:
Holder:- Remove
setRevocationList - Change
StoredCredentialrevocation status to token status
- Remove
InMemoryIssuerCredentialStore:- Change
revokesemantics totoken statussemantics - Add token status bitsize
- Change iso credential identifier to make it deterministic
- Change
Issuer:- Change
buildRevocationListtobuildStatusList - Add functions for issuing status lists and status list tokens
- Remove
compileCurrentRevocationLists - Add inheritance from token status agent interfaces
- Change
IssuerAgent- Add revocation status for iso credentials
- Change revocation status to token status
IssuerCredentialStore- Change revocation status semantics to token status semantics
Validator:- Change revocation status to token status
- Change revocation check to token status invalid check by using new status mechanism
- Add validation for status list tokens
Verifier:- Remove
setRevocationList - Add
verifyRevocationStatusListJwtIntegrityandverifyRevocationStatusListCwtIntegrity
- Remove
CoseService:- Add check without specifying signer (using cose signed public key or trust store)
VerifiableCredential: ChangecredentialStatustostatusand using new status mechanismVerifiableCredentialSdJwt: ChangecredentialStatusto use new status mechanismMobileSecurityObject: Add status mechanismiosMain/DefaultZlibService: Verify compression method was deflate when inflating
- Implement device response including session transcript and handover structure acc. to ISO/IEC 18013-7 Annex B for mDoc responses:
CoseServiceadds methodcreateSignedCoseWithDetachedPayloadto not serialize the payload in theCoseSignedstructure- Move
at.asitplus.wallet.lib.agent.Holder.PresentationResponseParameterstoat.asitplus.wallet.lib.agent.PresentationResponseParameters - Move
at.asitplus.wallet.lib.agent.Holder.CreatePresentationResulttoat.asitplus.wallet.lib.agent.CreatePresentationResult - In
Holder.createPresentation()replace parameterschallengeandaudiencewithPresentationRequestParameters, extending the possible inputs for calculating the verifiable presentation - In
VerifierandVerifierAgentadd methodsverifyPresentationVcJwt(),verifyPresentationSdJwt()andverifyPresentationIsoMdoc()to directly verify typed objects - For verification of credentials and presentations add
ValidationErrorcases to sealed classes - In
OidcSiopVerifierreplacestateToNonceStoreandstateToResponseTypeStorewithstateToAuthnRequestStore
- OpenID4VP refactorings:
- Deprecate
OidcSiopVerifier, useat.asitplus.wallet.lib.openid.OpenId4VpVerifierinstead - Move classes
ClientIdScheme,RequestOptions,AuthResponseResultout ofOpenId4VpVerifier - Change type of
RequestOptionsCredential.requestedAttributesfromListtoSet - Change type of
RequestOptionsCredential.requestedOptionalAttributesfromListtoSet - Deprecate
OidcSiopWallet, useat.asitplus.wallet.lib.openid.OpenId4VpHolderinstead - Move
RequestObjectJwsVerifierfromat.asitplus.wallet.lib.oidctoat.asitplus.wallet.lib.openid - Move
RemoteResourceRetrieverFunctionfromat.asitplus.wallet.lib.oidctoat.asitplus.wallet.lib - Move
AuthorizationResponsePreparationStatefromat.asitplus.wallet.lib.oidc.helperstoat.asitplus.wallet.lib.openid
- Deprecate
- Update implementation of OpenID4VP to draft 23:
- Support credential format identifier
dc+sd-jwtin addition tovc+sd-jwt - Drop
client_id_schemeand encode it as a prefix toclient_id - Set
vp_formats_supportedin wallet's metadata - Remove
OpenId4VpVerifier.createSignedMetadata(), as signed metadata is not covered by any spec - Remove
OpenId4VpVerifier.createQrCodeUrl(), replace withcreateAutnRequest(requestOptions, creationOptions)andCreationOptions.RequestByReference - Remove
OpenId4VpVerifier.createAuthnRequestUrl(), replace withcreateAutnRequest(requestOptions, creationOptions)andCreationOptions.Query - Remove
OpenId4VpVerifier.createAuthnRequestUrlWithRequestObject(), replace withcreateAutnRequest(requestOptions, creationOptions)andCreationOptions.RequestByValue - Remove
OpenId4VpVerifier.createAuthnRequestUrlWithRequestObjectByReference(), replace withcreateAutnRequest(requestOptions, creationOptions)andCreationOptions.RequestByReference - Add explicit
redirect_urito allClientIdSchemesforOpenId4VpVerifier - Sub classes of
ClientIdSchemeare not data classes, to allow passing parameters with the same names as the sealed base class - Verify requirements whether requests must or must not be signed acc. to the client identifier scheme
- Support
wallet_nonceandrequest_uri_methodfor replay detection on Wallet side
- Support credential format identifier
- General cleanup:
- Remove
SchemaIndex - Remove
VcLibException
- Remove
- Dependency updates:
- Update signum to 3.12.1
- Add isolated DCQL implementation
Release 5.2.4:
- SD-JWT: Be more lenient in parsing
statusinformation from credentials - ISO: Do not tag instants in CBOR with tag 1004
- ISO: Fix calcluation of value digests
Release 5.2.3:
- Be more lenient in parsing OpenId authentication requests
- OpenID4VP: Use correct format of algorithms in metadata for
vp_formats.vc+sd-jwt - SD-JWT: Support creating SD-JWT with nested structures by passing
.in the claim names, e.g.address.region, seeSdJwtCreatorandClaimToBeIssued
Release 5.2.2:
- Remote qualified electronic signatures:
- Add request, response and auxiliary data classes defined in CSC API v2.0.0.2 Ch. 11.4
credentials/listand Ch. 11.5credentials/info
- Add request, response and auxiliary data classes defined in CSC API v2.0.0.2 Ch. 11.4
- Fix serialization of device signed items in ISO credentials
Release 5.2.1:
- Fix COSE signature deserialization and verification, due to signum 3.12.0
Release 5.2.0:
- Remote qualified electronic signatures:
- New
Initializerobject invck-openidwhich needs to be called at the start of the project if artifact is used - New artifacts
rqes-data-classesandvck-rqeswhich allow handling of remote signature requests as described by the draft of POTENTIAL use-case 5 which is based on the CSC API v2.0.0.2 - To use
vck-rqesthe newInitializerobject invck-rqeswhich needs to be called at the start of the project if artifact is used - It fully overrides and replaces the effect of the initializer in
vck-openid - Change class
InputDescriptortoDifInputDescriptorwhich now implements new interfaceInputDescriptor - New class
QesInputDescriptorimplementsInputDescriptor - Refactor sealed class
AuthorizationDetailsto interface- Refactor subclass
OpenIdCredentialto classOpenIdAuthorizationDetailswhich implementsAuthrorizationDetails - Refactor subclass
CSCCredentialto classCscAuthorizationDetailswhich implementsAuthorizationDetails
- Refactor subclass
- New interface
RequestParameters - Remove RQES components from
AuthenticationRequestParameters - New class
CscAuthenticationRequestParameterswhich now holds the RQES components - New class
SignatureRequestParameters - Refactor
AuthenticationRequestParametersFromto generic sealed classRequestParametersFrom - Refactor
AuthenticationRequestParserto open classRequestParser
- New
- Selective Disclosure JWT:
- Validate confirmation claims correctly
- ISO 18013-5 credentials:
- Serialize and deserialize device signed items correctly (i.e. considering the namespace of the element)
- Refactorings:
- Adapt to changes in
signum, i.e. the classesJwsSigned,JweDecrypted,CoseSignedare now typed to their payload, leading to changes inCoseServiceandJwsServiceto add overloads for typed payloads, as well as members in data classes containing e.g.JwsSigned<*> - Add constructor parameter
identifiertoIssuerAgent, to be used as theissuerproperty in issued credentials - Remove function
verifyPresentationContainsAttributes()fromVerifier, andVerifierAgent - Remove function
verifyVcJws(it: String): VerifyCredentialResultfromVerifierAgent, was only forwarding call toValidatoranyway - Remove secondary constructor from
OidcSiopVerifier - Remove
keyMaterialfrom interfaceVerifier - Add option to request optional attributes in
OidcSiopVerifier.RequestOptionsCredential - In subclasses of
SubjectCredentialStore.StoreEntryreplacescheme: ConstantIndex.CredentialSchemewithschemaUri: Stringto actually make it serializable
- Adapt to changes in
- Key material:
- Refactor extracting the audience of a verifiable presentation from an OpenID Authn Request (now uses the
client_idoraudiencebefore extracting key identifiers) - Add
customKeyIdtoKeyMaterialto not use the DID encoding as the identifier for keys - Do not expect the
audienceof a verifiable presentation to always incude the identifier of a key, but the identifier of the verifier (which may be anything) - Remove additional constructors of
VerifierAgent, add the required constructor parameteridentifier
- Refactor extracting the audience of a verifiable presentation from an OpenID Authn Request (now uses the
- OpenID for Verifiable Credential Issuance:
- Add
issuerStatetoOAuth2Client.createAuthRequestfor OID4VCI flows - Add extension functions to
JwsServiceto create JWTs for OAuth 2.0 Attestation-Based Client Authentication - New artefact
vck-openid-ktorimplements a ktor client for OpenID for Verifiable Credential Issuance and OpenID for Verifiable Presentations - Remove
scopePresentationDefinitionRetrieverfromOidcSiopWalletto keep implementation simple
- Add
- Dependency Updates:
- Signum 3.11.1
- Kotlin 2.1.0 through Conventions 2.1.0+20241204
Release 5.1.0:
- Drop ARIES protocol implementation, and the
vck-ariesartifact - Add
credentialSchemeandsubjectPublicKeyto internalCredentialToBeIssued - Refactor
issueCredentialofIssuerto directly get the credential-to-be-issued - Remove now useless interface
IssuerCredentialDataProvider - Replace
buildIssuerCredentialDataProviderOverrideinCredentialIssuerwithcredentialProviderto extract user information into a credential - Remove
dataProviderfromIssuerAgents constructor, as it is not needed with the new issuing interface anyway - Replace
relyingPartyUrlwithclientIdSchemeonOidcSiopVerifiers constructor, to clarify use ofclient_idin requests - Rename objects in
OpenIdConstants.ProofType,OpenIdConstants.CliendIdSchemeandOpenIdConstants.ResponseMode - In all OpenID data classes, serialize strings only, and parse them to crypto data classes (from signum) in a separate property (this increases interop, as we can deserialize unsupported algorithms too)
- Add
publicKeyLookupfunction toDefaultVerifierJwsServiceto provide valid keys for JWS objects out-of-band (e.g. when they're not included in the header of the JWS) - OID4VCI:
WalletServicesupports building multiple authorization details to request a token for more than one credential- Remove
buildAuthorizationDetails(RequestOptions)forWalletService, please migrate tobuildScope(RequestOptions) - Note that multiple
scopevalues may be joined with a whitespace
- ISO: Fix deserializing issuer signed items when element identifiers are read after the element values
- SD-JWT:
- Add implementation of JWT VC issuer metadata, see
JwtVcIssuerMetadata - Pass around decoded data with
SdJwtSignedin several result classes likeVerifyPresentationResult.SuccessSdJwt - Rename
disclosurestoreconstructedJsonObjectin several result classes likeAuthnResponseResult.SuccessSdJwt - Correctly implement confirmation claim in
VerifiableCredentialSdJwt, migrating fromJsonWebKeytoConfirmationClaim - Change type of
claimValueinSelectiveDisclosureItemfromJsonPrimitivetoJsonElementto be able to process nested disclosures - Implement deserialization of complex objects, including array claims
- Add option to issue nested disclosures, by using
ClaimToBeIssuedrecursively, see documentation there
- Add implementation of JWT VC issuer metadata, see
Release 5.0.1:
- Update JsonPath4K to 2.4.0
- Fix XCF export with transitive dependencies
- Fix verifiable presentation of ISO credentials to contain
DeviceResponseinstead of aDocument - Data classes for verification result of ISO structures now may contain more than one document
Release 5.0.0:
- Remove
OidcSiopWallet.newDefaultInstance()and replace it with a constructor - Remove
OidcSiopVerifier.newInstance()methods and replace them with constructors - Remove
Validator.newDefaultInstance()methods and replace them with constructors - Remove
WalletService.newDefaultInstance()methods and replace them with constructors
- Add
TransactionDataEntryclass - Add
DocumentDigestEntryclass - Add
DocumentDigestEntryCSCclass - Add
DocumentLocationsEntryclass - Add
Methodclass - Update
InputDescriptors- New member
transaction_data - Removed member
schema
- New member
- Update
AuthorizationDetails- Now sealed class with subclasses
OpenIdCredentialCSCCredential
- Now sealed class with subclasses
- Extend
AuthenticationRequestParametersto be able to handle CSC/QES flows - Extend
TokenRequestParametersto be able to handle CSC/QES flows - Extend
TokenResponseParametersto be able to handle CSC/QES flows
- In
TokenRequestParameters, changetransactionCodetoString, as it needs to be entered by the user potentially - Add extension method to build DPoP headers acc. to RFC 9449, see
WalletService
- Proper registration of serializers for ISO credentials (breaking change), see API in
LibraryInitializer - Update dependencies to have everything aligned with Kotlin 2.0.20:
- Kotlin 2.0.20
- EU PID + MDL Credentials in test scope
- Serialization 1.7.2 proper
- JsonPath4K 2.3.0 (with proper Kotlin 2.0.20 support)
- Signum 3.7.0 (only dependency updates to align everything, no alignments in code)
- Add
KeyStoreMaterialto JVM target for convenience
- Update implementation of OpenID for Verifiable Credential Issuance to draft 14 from 2024-08-21
- Move some fields from
IssuerMetadatatoOAuth2AuthorizationServerMetadatato match the semantics - Remove proof type
cwtfor OpenID for Verifiable Credential Issuance, as per draft 14, but keep parsing it for a bit of backwards-compatibility - Remove binding method for
did:key, as it was never completely implemented, but add binding methodjwkfor JSON Web Keys. - Rework interface of
WalletServiceto make selecting the credential configuration by its ID more explicit - Support requesting issuance of credential using scope values
- Introudce
OAuth2Clientto extract creating authentication requests and token requests from OID4VCIWalletService - Refactor
SimpleAuthorizationServiceto extract actual authentication and authorization intoAuthorizationServiceStrategy
- Move some fields from
- Implement JWE encryption with AES-CBC-HMAC algorithms
- SIOPv2/OpenID4VP: Support requesting and receiving claims from different credentials, i.e. a combined presentation
- Require request options on every method in
OidcSiopVerifier - Move
credentialScheme,representation,requestedAttributesfromRequestOptionstoRequestOptionsCredentials - In
OidcSiopVerifiermoveresponseUrlfrom constructor parameter toRequestOptions - Add
IdTokenas result case toOidcSiopVerifier.AuthnResponseResult, when only anid_tokenis requested and received
- Require request options on every method in
- Disclosures for SD-JWT (in class
SelectiveDisclosureItem) now contain aJsonPrimitivefor the value, so that implementers can deserialize the value accordingly