Releases: a-sit-plus/vck
Releases · a-sit-plus/vck
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
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
5.0.1
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
5.0.0
Release 5.0.0:
- 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)
- Refactorings:
- 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
- Remove
- API changes
- Disclosures for SD-JWT (in class
SelectiveDisclosureItem
) now contain aJsonPrimitive
for the value, so that implementers can deserialize the value accordingly
- Proper registration of serializers for ISO credentials (breaking change), see API in
LibraryInitializer
- Add
KeyStoreMaterial
to JVM target for convenience
- Disclosures for SD-JWT (in class
- Add classes for handling qualified electronic signatures in OpenID flows, acc. to the Cloud Signature Consortium
- Add
TransactionDataEntry
class - Add
DocumentDigestEntry
class - Add
DocumentDigestEntryCSC
class - Add
DocumentLocationsEntry
class - Add
Method
class - Update
InputDescriptors
: New membertransaction_data
, removed memberschema
- Update
AuthorizationDetails
: Now sealed class with subclassesOpenIdCredential
andCSCCredential
- Extend
AuthenticationRequestParameters
- Extend
TokenRequestParameters
- Extend
TokenResponseParameters
- Add
- Update implementation of OpenID for Verifiable Credential Issuance to draft 14 from 2024-08-21
- 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
- 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
- In
- 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
4.1.1: VC-K
- 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
jsonSerializer
->vckJsonSerializer
- Introduce
jsonSerializer
andcborSerilaizer
with deprecation annotation for easier migration in projects consuming VC-K
- rename kmp-crypto submodule to signum and update all references
- this changes the identifier in the version catalog!
- Update Dependencies
- Signum (formerly KMP Crypto): 3.6.0
- Jsonpath4K (formerly Jsonpath): 2.2.0
- Kotlinx-Serialization 1.8.0-SNAPSHOT from upstream
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
3.8.0
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
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
3.6.1
- Update to KMP-Crypto 2.6.0
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