Release 5.4.1:
- Fix encoding
dcql_query
in 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
RqesOpenId4VpHolder
andRqesOpenId4VpVerifier
invck-rqes
- OpenID4VP: Update implementation to draft 23, adding transaction data hashes to the response of the Wallet
- Rename
RequestOptions
toOpenIdRequestOptions
- Add
transactionData
toPresentationRequestParameters
- Update data classes in
- Implement Digital Credentials Query Language (DCQL) from OpenID for Verifiable Presentations:
- Add DCQL library in module
openid-data-classes
(modulevck
now depends on this module because of dcql queries) AuthenticationRequestParameters
: Add memberdcqlQuery
CredentialFormatEnum
: Add methodcoerceDeprecations
to coerce deprecatedVC_SD_JWT
toDC_SD_JWT
Holder
: Deprecate previous methods for creating presentations, add new methods for creating presentations supporting DCQL and presentation exchange- Add class
CredentialPresentation
- Add class
CredentialPresentationRequest
- Change
PresentationResponseParameters
to directly reveal the parameters necessary for creating a response - Add subclasses to
PresentationResponseParameters
for working with raw presentation results - Add subclass
VerifiableDCQLPresentationValidationResults
ofAuthnResponseResult
to preserve credential query identifiers AuthorizationResponsePreparationState
now holds general credential presentation requestOpenId4VpHolder
: Add presentation methods supporting both presentation mechanisms and deprecate previously existing presentation methodsOpenId4VpVerifier
: AddprepareAuthnRequest
andsubmitAuthnRequest
to allow customization of presentation request, add validation support for DCQL presentationsRequestOptions
: Add memberpresentationMechanism
to explicitly select DCQL or PresentationExchange
- Add DCQL library in module
- Error handling:
- Preserve more causes for errors
- In
AuthnRespnoseResult.Error
addcause
, which optionally holds the cause for the error - In
AuthnRespnoseResult.ValidationError
addcause
, which optionally holds the cause for the error
- Improve support for ISO mDocs:
- In
IssuerSignedItem
, tagInstant
values with CBOR tag0
, andLocalDate
with 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
mdocGeneratedNonce
for 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 calcluation of value digests for
IssuerSignedItems
Release 5.3.1:
- Add optional parameter
issuerUri
toClientIdScheme.PreRegistered
- Fix validation of KB-JWT for SD-JWT presentations
Release 5.3.0:
- Implement token-status-list-06, replacing implementation of Revocation List 2020:
Holder
:- Remove
setRevocationList
- Change
StoredCredential
revocation status to token status
- Remove
InMemoryIssuerCredentialStore
:- Change
revoke
semantics totoken status
semantics - Add token status bitsize
- Change iso credential identifier to make it deterministic
- Change
Issuer
:- Change
buildRevocationList
tobuildStatusList
- 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
verifyRevocationStatusListJwtIntegrity
andverifyRevocationStatusListCwtIntegrity
- Remove
CoseService
:- Add check without specifying signer (using cose signed public key or trust store)
VerifiableCredential
: ChangecredentialStatus
tostatus
and using new status mechanismVerifiableCredentialSdJwt
: ChangecredentialStatus
to 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:
CoseService
adds methodcreateSignedCoseWithDetachedPayload
to not serialize the payload in theCoseSigned
structure- Move
at.asitplus.wallet.lib.agent.Holder.PresentationResponseParameters
toat.asitplus.wallet.lib.agent.PresentationResponseParameters
- Move
at.asitplus.wallet.lib.agent.Holder.CreatePresentationResult
toat.asitplus.wallet.lib.agent.CreatePresentationResult
- In
Holder.createPresentation()
replace parameterschallenge
andaudience
withPresentationRequestParameters
, extending the possible inputs for calculating the verifiable presentation - In
Verifier
andVerifierAgent
add methodsverifyPresentationVcJwt()
,verifyPresentationSdJwt()
andverifyPresentationIsoMdoc()
to directly verify typed objects - For verification of credentials and presentations add
ValidationError
cases to sealed classes - In
OidcSiopVerifier
replacestateToNonceStore
andstateToResponseTypeStore
withstateToAuthnRequestStore
- OpenID4VP refactorings:
- Deprecate
OidcSiopVerifier
, useat.asitplus.wallet.lib.openid.OpenId4VpVerifier
instead - Move classes
ClientIdScheme
,RequestOptions
,AuthResponseResult
out ofOpenId4VpVerifier
- Change type of
RequestOptionsCredential.requestedAttributes
fromList
toSet
- Change type of
RequestOptionsCredential.requestedOptionalAttributes
fromList
toSet
- Deprecate
OidcSiopWallet
, useat.asitplus.wallet.lib.openid.OpenId4VpHolder
instead - Move
RequestObjectJwsVerifier
fromat.asitplus.wallet.lib.oidc
toat.asitplus.wallet.lib.openid
- Move
RemoteResourceRetrieverFunction
fromat.asitplus.wallet.lib.oidc
toat.asitplus.wallet.lib
- Move
AuthorizationResponsePreparationState
fromat.asitplus.wallet.lib.oidc.helpers
toat.asitplus.wallet.lib.openid
- Deprecate
- Update implementation of OpenID4VP to draft 23:
- Support credential format identifier
dc+sd-jwt
in addition tovc+sd-jwt
- Drop
client_id_scheme
and encode it as a prefix toclient_id
- Set
vp_formats_supported
in 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_uri
to allClientIdSchemes
forOpenId4VpVerifier
- Sub classes of
ClientIdScheme
are 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_nonce
andrequest_uri_method
for 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
status
information 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
, seeSdJwtCreator
andClaimToBeIssued
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/list
and 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
Initializer
object invck-openid
which needs to be called at the start of the project if artifact is used - New artifacts
rqes-data-classes
andvck-rqes
which 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-rqes
the newInitializer
object invck-rqes
which 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
InputDescriptor
toDifInputDescriptor
which now implements new interfaceInputDescriptor
- New class
QesInputDescriptor
implementsInputDescriptor
- Refactor sealed class
AuthorizationDetails
to interface- Refactor subclass
OpenIdCredential
to classOpenIdAuthorizationDetails
which implementsAuthrorizationDetails
- Refactor subclass
CSCCredential
to classCscAuthorizationDetails
which implementsAuthorizationDetails
- Refactor subclass
- New interface
RequestParameters
- Remove RQES components from
AuthenticationRequestParameters
- New class
CscAuthenticationRequestParameters
which now holds the RQES components - New class
SignatureRequestParameters
- Refactor
AuthenticationRequestParametersFrom
to generic sealed classRequestParametersFrom
- Refactor
AuthenticationRequestParser
to 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
,CoseSigned
are now typed to their payload, leading to changes inCoseService
andJwsService
to add overloads for typed payloads, as well as members in data classes containing e.g.JwsSigned<*>
- Add constructor parameter
identifier
toIssuerAgent
, to be used as theissuer
property in issued credentials - Remove function
verifyPresentationContainsAttributes()
fromVerifier
, andVerifierAgent
- Remove function
verifyVcJws(it: String): VerifyCredentialResult
fromVerifierAgent
, was only forwarding call toValidator
anyway - Remove secondary constructor from
OidcSiopVerifier
- Remove
keyMaterial
from interfaceVerifier
- Add option to request optional attributes in
OidcSiopVerifier.RequestOptionsCredential
- In subclasses of
SubjectCredentialStore.StoreEntry
replacescheme: ConstantIndex.CredentialScheme
withschemaUri: String
to 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_id
oraudience
before extracting key identifiers) - Add
customKeyId
toKeyMaterial
to not use the DID encoding as the identifier for keys - Do not expect the
audience
of 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
issuerState
toOAuth2Client.createAuthRequest
for OID4VCI flows - Add extension functions to
JwsService
to create JWTs for OAuth 2.0 Attestation-Based Client Authentication - New artefact
vck-openid-ktor
implements a ktor client for OpenID for Verifiable Credential Issuance and OpenID for Verifiable Presentations - Remove
scopePresentationDefinitionRetriever
fromOidcSiopWallet
to 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-aries
artifact - Add
credentialScheme
andsubjectPublicKey
to internalCredentialToBeIssued
- Refactor
issueCredential
ofIssuer
to directly get the credential-to-be-issued - Remove now useless interface
IssuerCredentialDataProvider
- Replace
buildIssuerCredentialDataProviderOverride
inCredentialIssuer
withcredentialProvider
to extract user information into a credential - Remove
dataProvider
fromIssuerAgent
s constructor, as it is not needed with the new issuing interface anyway - Replace
relyingPartyUrl
withclientIdScheme
onOidcSiopVerifier
s constructor, to clarify use ofclient_id
in requests - Rename objects in
OpenIdConstants.ProofType
,OpenIdConstants.CliendIdScheme
andOpenIdConstants.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
publicKeyLookup
function toDefaultVerifierJwsService
to provide valid keys for JWS objects out-of-band (e.g. when they're not included in the header of the JWS) - OID4VCI:
WalletService
supports building multiple authorization details to request a token for more than one credential- Remove
buildAuthorizationDetails(RequestOptions)
forWalletService
, please migrate tobuildScope(RequestOptions)
- Note that multiple
scope
values 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
SdJwtSigned
in several result classes likeVerifyPresentationResult.SuccessSdJwt
- Rename
disclosures
toreconstructedJsonObject
in several result classes likeAuthnResponseResult.SuccessSdJwt
- Correctly implement confirmation claim in
VerifiableCredentialSdJwt
, migrating fromJsonWebKey
toConfirmationClaim
- Change type of
claimValue
inSelectiveDisclosureItem
fromJsonPrimitive
toJsonElement
to be able to process nested disclosures - Implement deserialization of complex objects, including array claims
- Add option to issue nested disclosures, by using
ClaimToBeIssued
recursively, 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
DeviceResponse
instead 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
TransactionDataEntry
class - Add
DocumentDigestEntry
class - Add
DocumentDigestEntryCSC
class - Add
DocumentLocationsEntry
class - Add
Method
class - Update
InputDescriptors
- New member
transaction_data
- Removed member
schema
- New member
- Update
AuthorizationDetails
- Now sealed class with subclasses
OpenIdCredential
CSCCredential
- Now sealed class with subclasses
- Extend
AuthenticationRequestParameters
to be able to handle CSC/QES flows - Extend
TokenRequestParameters
to be able to handle CSC/QES flows - Extend
TokenResponseParameters
to be able to handle CSC/QES flows
- In
TokenRequestParameters
, changetransactionCode
toString
, 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
KeyStoreMaterial
to JVM target for convenience
- Update implementation of OpenID for Verifiable Credential Issuance to draft 14 from 2024-08-21
- Move some fields from
IssuerMetadata
toOAuth2AuthorizationServerMetadata
to match the semantics - Remove proof type
cwt
for 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 methodjwk
for JSON Web Keys. - Rework interface of
WalletService
to make selecting the credential configuration by its ID more explicit - Support requesting issuance of credential using scope values
- Introudce
OAuth2Client
to extract creating authentication requests and token requests from OID4VCIWalletService
- Refactor
SimpleAuthorizationService
to 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
,requestedAttributes
fromRequestOptions
toRequestOptionsCredentials
- In
OidcSiopVerifier
moveresponseUrl
from constructor parameter toRequestOptions
- Add
IdToken
as result case toOidcSiopVerifier.AuthnResponseResult
, when only anid_token
is requested and received
- Require request options on every method in
- Disclosures for SD-JWT (in class
SelectiveDisclosureItem
) now contain aJsonPrimitive
for the value, so that implementers can deserialize the value accordingly
Release 4.1.2:
- In
OidcSiopVerifier
add parameternonceService
to externalize creation and validation of nonces, e.g. for deployments in load-balanced environments - In
SimpleAuthorizationService
change type oftokenService
toNonceService
- Add constructor parameters to
SimpleAuthorizationService
to externalize storage of maps, e.g. for deployments in load-balanced environments - Add constructor parameter to
WalletService
to externalize storage of state-to-code map, e.g. for deployments in load-balanced environments - Update to latest Signum for KMP signer and verifier.
- Update dependencies:
- Kotlin 2.0.20
- Serialization 1.7.2 stable
- JsonPath4K 2.3.0
- Add Android targets
Release 4.1.1 (Bugfix Release):
- correctly configure and name JSON serializer:
jsonSerializer
->vckJsonSerializer
- revert to explicit serializer configuration
- Introduce
jsonSerializer
andcborSerilaizer
with deprecation annotation for easier migration in projects consuming VC-K
- rename kmp-crypto submodule to signum an update all references
- this changes the identifier in the version catalog!
Release 4.1.0:
- Rebrand
- Project name: KMM VC Library -> VC-K
- Artifact names:
vclib
->vck
vclib-aries
->vck-aries
vclib-openid
->vck-openid
- Rename serializers to avoid ambiguities and kotlin bugs
cborSerializer
->vckCborSerializer
- Update Dependencies
- Signum (formerly KMP Crypto): 3.6.0
- Jsonpath4K (formerly Jsonpath): 2.2.0
- Kotlinx-Serialization 1.8.0-SNAPSHOT from upstream
Release 4.0.0:
- Add
SubmissionRequirement.evaluate
: Evaluates, whether a given submission requirement is satisfied. - Add
PresentationSubmissionValidator
:- Add
isValidSubmission
: Evaluates, whether all submission requirements is satisfied, and fails on redundantly submitted credentials. - Add
findUnnecessaryInputDescriptorSubmissions
: Returns a list of redundantly submitted credentials.
- Add
- Rename
BaseInputEvaluator
->InputEvaluator
- Change
evaluateFieldQueryResults
->evaluateConstraintFieldMatches
: Returns all matching fields now, not just the first match
- Change
- Change
Holder.matchInputDescriptorsAgainstCredentialStore
: Returns all matching credentials now, not just the first match - Do not use or assume DID as key identifiers and subjects in credentials
- Replace list of attribute types in
Issuer.issueCredentials
with one concreteCredentialScheme
to be passed - Remove functionality related to "attachments" to verifable credentials in JWT format
- Replace list of credentials to be issued with a single credential that will be issued per call to implementations of
IssuerCredentialDataProvider
- Get rid of class
Issuer.IssuedCredentialResult
, replacing it withKmmResult<Issuer.IssuedCredential>
- Add return types to function calls to
SubjectCredentialStore
- Change from list to single credential in parameter for
Holder.storeCredentials()
, changing name tostoreCredential()
- Refactor
AuthenticationRequestParametersFrom
used inOidcSiopWallet
to be serializable - Add
AuthenticationResponseFactory
: Builds an authentication response from request and response parameters - Change
OidcSiopWallet
:- Add
startAuthorizationResponsePreparation()
: Gathers data necessary for presentation building and yields aAuthorizationResponsePreparationState
- Add
finalizeAuthorizationResponseParameters()
: Returns whatcreateAuthenticationParams
returned before, but also takes inAuthorizationResponsePreparationState
and an optional non-default submission - Add
finalizeAuthorizationResponse()
: Returns whatcreateAuthenticationResponse()
did before
- Add
- Change
OidcSiopVerifier
:- Add
createAuthnRequestUrlWithRequestObjectByReference()
to offer authentication requests by reference to the Wallet
- Add
- Add
AuthorizationResponsePreparationState
: Holds data necessary for presentation building - Add
AuthenticationRequestParser
: Extracted presentation request parsing logic fromOidcSiopWallet
and put it here - Add
AuthorizationRequestValidator
: Extracted presentation request validation logic fromOidcSiopWallet
and put it here - Add
PresentationFactory
: Extracted presentation response building logic fromOidcSiopWallet
and put it here- Also added some code for presentation submission validation
- Update implementation of OpenID 4 Verifiable Credential Issuance, draft 13
- Replace
createCredentialRequestJwt()
andcreateCredentialRequestCwt()
withcreateCredentialRequest()
inWalletService
for OID4VCI - Refactor
createTokenRequestParameters()
inWalletService
for OID4VCI to account for authorization code or pre-auth code
Release 3.8.0:
- Kotlin 2.0.0
- Gradle 8.8
- Bouncy Castle 1.78.1
- Kotest 5.9.1
- Ktor 2.3.11
- kotlinx.datetime 0.6.0
- kotlinx.coroutines 1.8.1
- KmmResult 1.6.0
- Serialization 1.7.1-SNAPSHOT
- Extract credential classes for Mobile Driving Licence according to ISO 18013-5 into separate library, see https://github.com/a-sit-plus/mobile-driving-licence-credential
- Implementers need to specify supported credential representations in
CredentialScheme
- Update
CredentialScheme
to split up properties for representations - Refactor methods in
LibraryInitializer
, deprecating the old ones, to accomodate additional parameters for serializing ISO credentials - Update SD-JWT implementation to include
sd_hash
- Update SIOPv2 implementation to increase interoperability
Release 3.7.1:
- SIOPv2: Support encrypting response objects, if requested by verifiers
- Refactor
VerifiableCredentialSdJwt
to implement draft 03 of SD-JWT for VC
Release 3.7.0:
- Add
OAuth2AuthorizationServerMetadata
data class which implements RFC8414 - Change usage of
OidcUserInfo
in interfaces toOidcUserInfoExtended
, to also deserialize unknown properties - OID4VCI:
WalletService
: Replace parameters containing whole authentication parameters with single parameters holdingcode
andstate
- Change several integer properties to durations, e.g. expirations (in seconds) for OIDC data classes
- In
SupportedCredentialFormat
replaceclaims
withisoClaims
andsdJwtClaims
to be able to handle both formats defined in OID4VCI Draft 13 - Wrap exceptions during deserialization in
KmmResult
, i.e. changing alldeserialize()
methods in companion objects OidcSiopWallet
: RenamenewInstance()
tonewDefaultInstance()
, to align it with other factory methodsOidcSiopWallet
: RenameretrieveAuthenticationRequestParameters()
toparseAuthenticationRequestParameters()
, changing result type toKmmResult<AuthenticationRequestParameters>
OidcSiopWallet
: Support getting presentation definition remotely, withpresentation_definition_uri
from OpenId4VP- Be more lenient when parsing several authentication request parameters
- Add
VerifiablePresentationFactory
: Used to have a separate place for creating verifiable presentations, HolderAgent got a little cramped - Change
OidcSiopVerifier.validateAuthnResponse
: Supports new presentation semantics, where the vp_token may be a array of verifiable presentations. - Change
OidcSiopWallet.createAuthnResponseParams
: Feed the newly required parameters toHolder.createPresentation
; Changed output semantics to potentially submit a list of verifiable presentations - Change
HolderAgent.createPresentation
: Changed function signature; Changed output semantics. - Add
BaseInputEvaluator
: Input evaluator according toDIF.PresentationExchange 2.0.0
- Refactor
AuthenticationRequestParameters
→AuthenticationRequestParametersFrom
to contain parsed parameters and their source - Update KMP-Crypto to 3.1.0, to support JWE and ECDH-ES
- SIOPv2: Implement
x509_san_dns
andx509_san_uri
client ID schemes - Refactor
OpenIdConstants
to contain sealed classes, where appropriate
Release 3.6.1:
- Update to KMP-Crypto 2.6.0
Release 3.6.0:
- Self-Issued OpenID Provider v2:
OidcSiopWallet.AuthenticationResponseResult.Post
: Replace propertybody: String
withparams: Map<String, String>
, to be posted to the Relying Party. Clients may call extension functionat.asitplus.wallet.lib.oidvci.formUrlEncode
onparams
to get the encodedbody
for HTTP calls.- Move
JsonWebKeySet
to libraryat.asitplus.crypto:datatypes-jws
DefaultVerifierJwsService
may load public keys for verifying JWS from a JWK Set URL in the header, see constructor argumentjwkSetRetriever
(cf. toOidcSiopWallet
)OidcSiopWallet
andOidcSiopVerifier
implement response modedirect_post.jwt
, as per OpenID for Verifiable Presentations draft 20OidcSiopVerifier
: Add constructor parameterattestationJwt
to create authentication requests as JWS with an Verifier Attestation JWT in headerjwt
(see OpenId4VP draft 20)OidcSiopVerifier
: RenamecreateAuthnRequestAsRequestObject()
tocreateAuthnRequestAsSignedRequestObject()
, also changing the return typeOidcSiopVerifier
: Add option to setclient_metadata_uri
instead of embedding client metadata in authentication requestsOidcSiopVerifier
: Refactor list of parameters for customizing authentication requests to single data classRequestOptions
OidcSiopWallet
: Rename constructor parameterjwkSetRetriever
to a more generalremoteResourceRetriever
, to use it for various parameters defined by referenceOidcSiopWallet
: Replace constructor parameterverifierJwsService
withrequestObjectJwsVerifier
to allow callers to verify JWS objects with a pre-registered key (as in the OpenId4VP client ID scheme "pre-registered")- Get rid of collections in serializable types and use sets instead
- OpenID for Verifiable Credential Issuance:
- Implement OpenID for Verifiable Credential Issuance draft 13, from 2024-02-08
- Rename
IssuerService
toCredentialIssuer
- Implement RFC 7636 Proof Key for Code Exchange for OpenID for Verifiable Credential Issuance implementations, i.e.
IssuerService
/CredentialIssuer
andWalletService
IssuerService
/CredentialIssuer
: Make public API functions suspending, also returnKmmResult
to transport exceptionsIssuerService
/CredentialIssuer
: Change parameter ofcredential()
fromauthorizationHeader
toaccessToken
, requiring the plain access tokenIssuerService
/CredentialIssuer
: Extract responsibilities of an OAuth Authorizaiton Server intoAuthorizationService
WalletService
: Make public API functions suspendingWalletService
: Implement proving possesion of private key with CBOR Web TokensWalletService
: Move constructor parameters torequestOptions
for every method call- Get rid of collections in serializable types and use sets instead
- Dependency updates
- Conventions 1.9.23+20240410
- Ktor 2.3.10
- Auto-publish version catalogs
- Conventions 1.9.23+20240410
Issuer
: ChangecryptoAlgorithms
fromCollection
toSet
Release 3.5.0:
- Kotlin 1.9.23
- Ktor 2.3.9
- Update to latest KMP Crypto 2.5.0
- Introduces correct mulitbase encoding
- EC Point Compression
- THIS IS A BREAKING CHANGE WRT. SERIALIZATION OF DID-ENCODED KEYS
- Given that all EC keys were previously uncompressed, different mutlicodec identifiers are now supported and the old encoding of uncompressed keys does not work anymore, as it was faulty.
- In addition, the encoding of the mutlibase prefix has changed, since varint-Encoding is now used correctly.
- Fix name shadowing of gradle plugins by renaming file
Plugin.kt
->VcLibConventions.kt
- Fix: Add missing iOS exports
- Add switch to disable composite build (useful for publishing)
- Get rid of arrays in serializable types and use collections instead
- Improve interoperability with verifiers and issuers from https://github.com/eu-digital-identity-wallet/
OidcSiopVerifier
: MovecredentialScheme
from constructor tocreateAuthnRequest
OidcSiopWallet
: Add constructor parameter to fetch JSON Web Key Sets
Release 3.4.0:
- Target Java 17
- Updated dependencies from conventions: Bouncycastle 1.77, Serialization 1.6.3-snapshot (fork), Napier 2.7.1, KMP Crypto 2.3.0
- Integrate
kmp-crypto
library - Change signature parsing and return types to
CryptoSignature
class - Change base public key class from
JsonWebKey
toCryptoPublicKey
- Change base algorithm class from
JwsAlgorithm
toCryptoAlgorithm
- Remove all ASN.1 parsing to use
kmp-crypto
functionality instead - Change type of X.509 certificates from
ByteArray
toX509Certificate
- Refactor
CryptoService.identifier
toCryptoService.jsonWebKey.identifier
- Refactor
CryptoService.toPublicKey()
toCrypto.publicKey
- Add member
coseKey
toCryptoService
- Support
ES384
,ES512
,RS256
,RS384
,RS512
,PS256
,PS384
andPS512
signatures inDefaultCryptoService
- Change
DefaultCryptoService
constructor signature: When handing over a private/public key pair, theCryptoAlgorithm
parameter is now mandatory - Change return type of methods in
JwsService
toKmmResult<T>
to transport exceptions from native implementations - Support static QR code use case for OIDC SIOPv2 flows in
OidcSiopVerifier
- Move constructor parameters
credentialRepresentation
,requestedAttributes
fromOidcSiopVerifier
into function calls
Release 3.3.0:
- Change non-typed attribute types (i.e. Strings) to typed credential schemes (i.e.
ConstantIndex.CredentialScheme
), this includes methodsgetCredentials
,createPresentation
in interfaceHolder
, and methodgetCredentials
in interfaceSubjectCredentialStore
- Add
scheme
toCredential
stored inIssuerCredentialStore
- Add
claimNames
toConstantIndex.CredentialScheme
to list names of potential attributes (or claims) of the credential - Add
claimNames
(a nullable list of requested claim names) to methodgetCredential
in interfaceIssuerCredentialDataProvider
, and to methodissueCredential
in interfaceIssuer
- Add functionality to request only specific claims to OID4VCI implementation
- Support issuing arbitrary data types in selective disclosure items (classes
ClaimToBeIssued
andSelectiveDisclosureItem
)
Release 3.2.0:
- Support representing credentials in all three representations: Plain JWT, SD-JWT and ISO MDOC
- Remove property
credentialFormat
from interfaceCredentialScheme
, also enumCredentialFormat
- Remove property
credentialDefinitionName
from interfaceCredentialScheme
, is now automatically converted fromvcType
- Add properties
isoNamespace
andisoDocType
to interfaceCredentialScheme
, to be used for representing custom credentials according to ISO 18013-5 - Remove function
storeValidatedCredentials
from interfaceHolder
and its implementationHolderAgent
- Remove class
Holder.ValidatedVerifiableCredentialJws
- Add member for
CredentialScheme
to various classes likeCredentialToBeIssued.Vc
, subclasses ofIssuedCredential
, subclasses ofStoreCredentialInput
and subclasses ofStoreEntry
- Add parameter for
CredentialScheme
to methods inSubjectCredentialStore
- Remove function
getClaims()
fromCredentialSubject
, logic moved toIssuerCredentialDataProvider
- Add parameter
representation
to methodgetCredentialWithType
in interfaceIssuerCredentialDataProvider
- Add function
storeGetNextIndex(String, String, Instant, Instant, Int)
to interfaceIssuerCredentialStore
- Remove function
issueCredentialWithTypes(String, CryptoPublicKey?, Collection<String>, CredentialRepresentation)
from interfaceIssuer
and its implementationIssuerAgent
- Add function
issueCredential(CryptoPublicKey, Collection<String>, CredentialRepresentation)
to interfaceIssuer
and its implementationIssuerAgent
- Remove function
getCredentialWithType(String, CryptoPublicKey?, Collection<String>, CredentialRepresentation
from interfaceIssuerCredentialDataProvider
- Add function
getCredential(CryptoPublicKey, CredentialScheme, CredentialRepresentation)
to interfaceIssuerCredentialDataProvider
- Refactor function
storeGetNextIndex()
inIssuerCredentialStore
to accomodate all types of credentials - Add constructor property
representation
toOidcSiopVerifier
to select the representation of credentials - Add constructor property
credentialRepresentation
toWalletService
(OpenId4VerifiableCredentialIssuance) to select the representation of credentials
Release 3.1.0:
- Support representing credentials in SD-JWT format
- Rename class
Issuer.IssuedCredential.Vc
toIssuer.IssuedCredential.VcJwt
- Several new classes for sealed classes like
Issuer.IssuedCredential
,Issuer.IssuedCredentialResult
,Holder.StoreCredentialInput
,Holder.StoredCredential
,Parser.ParseVcResult
,SubjectCredentialStore.StoreEntry
,Verifier.VerifyCredentialResult
- Require implementations of
CredentialSubject
to implementgetClaims()
to process claims when issuing a credential with selective disclosures
Release 3.0.1:
- Dependency Updates
- OKIO 3.5.0
- UUID 0.8.1
- Encodings 1.2.3
- JOSE+JWT 9.31
- JSON 20230618
Release 3.0.0:
- Creating, issuing, managing and verifying ISO/IEC 18013-5:2021 credentials
- Kotlin 1.9.10
- Generic structure for public keys
kotlinx.serialization
fork with CBOR enhancements for COSE support
Release 2.0.2:
vclib-openid
: Add response modes for query and fragment, i.e. Wallet may return the authentication response in query params or as fragment params on a SIOPv2 callvclib-openid
: Create fresh challenges for every SIOPv2 requestvclib-openid
: Option to setstate
and receive it back in the response
Release 2.0.1:
vclib-openid
: RemoveOidcSiopProtocol
, replace withOidcSiopVerifier
andOidcSiopWallet
, removeAuthenticationResponse
andAuthenticationRequest
holder classesvclib-openid
: Update implementation of OIDC SIOPv2 to v1.0.12 (2023-01-01), and of OID4VP to draft 18 (2023-04-21). Still missing requesting single claims, selective disclosure, among other parts
Release 2.0.0:
- Add
AtomicAttribute2023
as a sample for custom credentials - Remove deprecated methods for "attribute names" and
AtomicAttributeCredential
- Remove list of known atomic attribute names in
AttributeIndex.genericAttributes
- Remove
attributeNames
inHolder.createPresentation()
,Holder.getCredentials()
,SubjectCredentialStore.getCredentials()
- Replace
PresentProofProtocol.requestedAttributeNames
withrequestedAttributeTypes
- Remove
ConstantIndex.Generic
as the default credential scheme - Remove
goalCodeIssue
andgoalCodeRequestProof
fromCredentialScheme
Release 1.8.0:
- Remove
JwsContentType
, replace with strings fromJwsContentTypeConstants
- Add
JsonWebToken
to use as payload inJwsHeader
or others - Change type of
exp
andnbf
inJwsHeader
fromlong
toInstant
- Remove all references to "attribute names" in credential subjects, we'll only use types from now on, as in the W3C VC Data Model, e.g. deprecate the usage of methods referencing attribute names
- Rename
keyId
toidentifier
(calculated from the Json Web Key) inCryptoService
to decouple identifiers in VC from keyIds - Add
identifier
toHolder
,Verifier
,Issuer
, which is by default theidentifier
of theCryptoService
, i.e. typically thekeyId
- Move
extractPublicKeyFromX509Cert
from interfaceVerifierCryptoService
(with expected implementations) to expected objectCryptoUtils
- Migrate usages of
keyId
to a more general concept of keys ingetKey()
in classesJwsHeader
andJweHeader
Release 1.7.2:
- Refactor
LibraryInitializer.registerExtensionLibrary
, see Readme
Release 1.7.1:
- Remove references to
PupilIdCredential
, will be moved to separate library
Release 1.6.0:
- Store attachments with reference to VC (changes
SubjectCredentialStore
)
Release 1.5.0:
- Update dependencies: Kotlin 1.8.0,
KmmResult
1.4.0 - Remove "plain" instances of classes, not used on iOS
Release 1.4.0:
- Remove
photo
fromPupilIdCredential
- Remove
pupilId
fromPupilIdCredential
- Add
cardId
toPupilIdCredential
- Add
pictureHash
toPupilIdCredential
- Add
scaledPictureHash
toPupilIdCredential
- Transport attachments in
IssueCredential
protocol, which will contain photos (as binary blobs) - Update dependencies: Kotlin 1.7.21, Serialization 1.4.1, Kotest 5.5.4
Release 1.3.12:
- Update to
KmmResult
1.1
Release 1.3.11:
- Migrate public API to use
KmmResult
: Return afailure
with a custom Exception if something goes wrong, otherwise return asuccess
with a custom data class.
Release 1.3.10:
- Implement validating JWS with jsonWebKey and certificates from header
- Export
BitSet
to Kotlin/Native, i.e. do notinline
the class
Release 1.3.9:
- True multiplatform BitSet implementation