Skip to content

Releases: a-sit-plus/vck

5.1.0

12 Nov 12:02
Compare
Choose a tag to compare
  • Drop ARIES protocol implementation, and the vck-aries artifact
  • Add credentialScheme and subjectPublicKey to internal CredentialToBeIssued
  • Refactor issueCredential of Issuer to directly get the credential-to-be-issued
  • Remove now useless interface IssuerCredentialDataProvider
  • Replace buildIssuerCredentialDataProviderOverride in CredentialIssuer with credentialProvider to extract user information into a credential
  • Remove dataProvider from IssuerAgents constructor, as it is not needed with the new issuing interface anyway
  • Replace relyingPartyUrl with clientIdScheme on OidcSiopVerifiers constructor, to clarify use of client_id in requests
  • Rename objects in OpenIdConstants.ProofType, OpenIdConstants.CliendIdScheme and OpenIdConstants.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 to DefaultVerifierJwsService 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) for WalletService, please migrate to buildScope(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 like VerifyPresentationResult.SuccessSdJwt
    • Rename disclosures to reconstructedJsonObject in several result classes like AuthnResponseResult.SuccessSdJwt
    • Correctly implement confirmation claim in VerifiableCredentialSdJwt, migrating from JsonWebKey to ConfirmationClaim
    • Change type of claimValue in SelectiveDisclosureItem from JsonPrimitive to JsonElement 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

5.0.1

16 Oct 19:54
Compare
Choose a tag to compare

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 a Document
  • Data classes for verification result of ISO structures now may contain more than one document

5.0.0

07 Oct 06:11
Compare
Choose a tag to compare

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
  • API changes
    • Disclosures for SD-JWT (in class SelectiveDisclosureItem) now contain a JsonPrimitive 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
  • 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 member transaction_data, removed member schema
    • Update AuthorizationDetails: Now sealed class with subclasses OpenIdCredential and CSCCredential
    • Extend AuthenticationRequestParameters
    • Extend TokenRequestParameters
    • Extend TokenResponseParameters
  • Update implementation of OpenID for Verifiable Credential Issuance to draft 14 from 2024-08-21
    • In TokenRequestParameters, change transactionCode to String, 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 to OAuth2AuthorizationServerMetadata 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 method jwk 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 OID4VCI WalletService
    • Refactor SimpleAuthorizationService to extract actual authentication and authorization into AuthorizationServiceStrategy
  • 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 from RequestOptions to RequestOptionsCredentials
    • In OidcSiopVerifier move responseUrl from constructor parameter to RequestOptions
    • Add IdToken as result case to OidcSiopVerifier.AuthnResponseResult, when only an id_token is requested and received

4.1.1: VC-K

04 Aug 08:57
519bb06
Compare
Choose a tag to compare
  • 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 and cborSerilaizer 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

23 Jul 20:10
Compare
Choose a tag to compare
  • 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.
  • Rename BaseInputEvaluator -> InputEvaluator
    • Change evaluateFieldQueryResults -> evaluateConstraintFieldMatches: Returns all matching fields now, not just the first match
  • 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 concrete CredentialScheme 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 with KmmResult<Issuer.IssuedCredential>
  • Add return types to function calls to SubjectCredentialStore
  • Change from list to single credential in parameter for Holder.storeCredentials(), changing name to storeCredential()
  • Refactor AuthenticationRequestParametersFrom used in OidcSiopWallet 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 a AuthorizationResponsePreparationState
    • Add finalizeAuthorizationResponseParameters(): Returns what createAuthenticationParams returned before, but also takes in AuthorizationResponsePreparationState and an optional non-default submission
    • Add finalizeAuthorizationResponse(): Returns what createAuthenticationResponse() did before
  • Change OidcSiopVerifier:
    • Add createAuthnRequestUrlWithRequestObjectByReference() to offer authentication requests by reference to the Wallet
  • Add AuthorizationResponsePreparationState: Holds data necessary for presentation building
  • Add AuthenticationRequestParser: Extracted presentation request parsing logic from OidcSiopWallet and put it here
  • Add AuthorizationRequestValidator: Extracted presentation request validation logic from OidcSiopWallet and put it here
  • Add PresentationFactory: Extracted presentation response building logic from OidcSiopWallet and put it here
    • Also added some code for presentation submission validation
  • Update implementation of OpenID 4 Verifiable Credential Issuance, draft 13
  • Replace createCredentialRequestJwt() and createCredentialRequestCwt() with createCredentialRequest() in WalletService for OID4VCI
  • Refactor createTokenRequestParameters() in WalletService for OID4VCI to account for authorization code or pre-auth code

3.8.0

21 Jun 09:13
Compare
Choose a tag to compare

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

20 Jun 07:48
Compare
Choose a tag to compare
  • Add OAuth2AuthorizationServerMetadata data class which implements RFC8414
  • Change usage of OidcUserInfo in interfaces to OidcUserInfoExtended, to also deserialize unknown properties
  • OID4VCI: WalletService: Replace parameters containing whole authentication parameters with single parameters holding code and state
  • Change several integer properties to durations, e.g. expirations (in seconds) for OIDC data classes
  • In SupportedCredentialFormat replace claims with isoClaims and sdJwtClaims to be able to handle both formats defined in OID4VCI Draft 13
  • Wrap exceptions during deserialization in KmmResult, i.e. changing all deserialize() methods in companion objects
  • OidcSiopWallet: Rename newInstance() to newDefaultInstance(), to align it with other factory methods
  • OidcSiopWallet: Rename retrieveAuthenticationRequestParameters() to parseAuthenticationRequestParameters(), changing result type to KmmResult<AuthenticationRequestParameters>
  • OidcSiopWallet: Support getting presentation definition remotely, with presentation_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 to Holder.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 to DIF.PresentationExchange 2.0.0
  • Refactor AuthenticationRequestParametersAuthenticationRequestParametersFrom 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 and x509_san_uri client ID schemes
  • Refactor OpenIdConstants to contain sealed classes, where appropriate

3.6.1

02 May 16:02
Compare
Choose a tag to compare
  • Update to KMP-Crypto 2.6.0

3.6.0

02 May 08:24
Compare
Choose a tag to compare
  • Self-Issued OpenID Provider v2:
    • OidcSiopWallet.AuthenticationResponseResult.Post: Replace property body: String with params: Map<String, String>, to be posted to the Relying Party. Clients may call extension function at.asitplus.wallet.lib.oidvci.formUrlEncode on params to get the encoded body for HTTP calls.
    • Move JsonWebKeySet to library at.asitplus.crypto:datatypes-jws
    • DefaultVerifierJwsService may load public keys for verifying JWS from a JWK Set URL in the header, see constructor argument jwkSetRetriever (cf. to OidcSiopWallet)
    • OidcSiopWallet and OidcSiopVerifier implement response mode direct_post.jwt, as per OpenID for Verifiable Presentations draft 20
    • OidcSiopVerifier: Add constructor parameter attestationJwt to create authentication requests as JWS with an Verifier Attestation JWT in header jwt (see OpenId4VP draft 20)
    • OidcSiopVerifier: Rename createAuthnRequestAsRequestObject() to createAuthnRequestAsSignedRequestObject(), also changing the return type
    • OidcSiopVerifier: Add option to set client_metadata_uri instead of embedding client metadata in authentication requests
    • OidcSiopVerifier: Refactor list of parameters for customizing authentication requests to single data class RequestOptions
    • OidcSiopWallet: Rename constructor parameter jwkSetRetriever to a more general remoteResourceRetriever, to use it for various parameters defined by reference
    • OidcSiopWallet: Replace constructor parameter verifierJwsService with requestObjectJwsVerifier 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 to CredentialIssuer
    • Implement RFC 7636 Proof Key for Code Exchange for OpenID for Verifiable Credential Issuance implementations, i.e. IssuerService/CredentialIssuer and WalletService
    • IssuerService/CredentialIssuer: Make public API functions suspending, also return KmmResult to transport exceptions
    • IssuerService/CredentialIssuer: Change parameter of credential() from authorizationHeader to accessToken, requiring the plain access token
    • IssuerService/CredentialIssuer: Extract responsibilities of an OAuth Authorizaiton Server into AuthorizationService
    • WalletService: Make public API functions suspending
    • WalletService: Implement proving possesion of private key with CBOR Web Tokens
    • WalletService: Move constructor parameters to requestOptions 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
  • Issuer: Change cryptoAlgorithms from Collection to Set

3.5.0

10 Apr 14:38
Compare
Choose a tag to compare
  • 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: Move credentialScheme from constructor to createAuthnRequest
  • OidcSiopWallet: Add constructor parameter to fetch JSON Web Key Sets