Skip to content

Latest commit

 

History

History
1164 lines (909 loc) · 67.3 KB

File metadata and controls

1164 lines (909 loc) · 67.3 KB

v0.23.1

Background Reissuance and DPoP Propagation

  • Added backgroundOnly parameter to reissueDocument method. When set to true, reissuance only proceeds if stored authorization data is available; otherwise it throws an error. This enables automatic credential refresh without user interaction.
  • DPoP key ID is now propagated through the issuance flow and persisted in document metadata, enabling DPoP-protected refresh and reissuance flows.
let reissued = try await wallet.reissueDocument(
    documentId: existingDocument.id,
    backgroundOnly: true,                  // only reissue if stored auth exists
    credentialOptions: credentialOptions,   // optional, defaults to original
    keyOptions: keyOptions,                 // optional, defaults to original
)


// Background reissuance - only succeeds if stored authorization exists
let reissued = try await wallet.reissueDocument(
    documentId: existingDocument.id,
    backgroundOnly: true,
)

KB-JWT Fix for Decentralized Identifier Scheme

  • Fixed issue where KB-JWT aud claim used a stripped DID instead of the full client_id for the decentralized_identifier scheme. The session transcript and KB-JWT now correctly include the resolved client identifier. Fixes #308.

Dependency Updates

  • eudi-lib-sdjwt-swift updated to 0.14.1
  • eudi-lib-ios-siop-openid4vp-swift updated to 0.30.1
  • eudi-lib-ios-iso18013-data-transfer updated to 0.11.2
  • eudi-lib-ios-statium-swift updated to 0.4.0

v0.23.0

Document Reissuance

  • Added reissueDocument(documentId:credentialOptions:keyOptions:promptMessage:) method to EudiWallet for reissuing an existing document using previously stored issuance metadata and authorization data.
    • Retrieves the document's metadata from storage and resolves the appropriate OpenID4VCI service via the credential issuer identifier.
    • If persisted authorization data is available, it is forwarded to the service to avoid re-authentication.
    • Falls back to the original issuance metadata for credentialOptions and keyOptions when not explicitly provided.
let reissued = try await wallet.reissueDocument(
    documentId: existingDocument.id,
    credentialOptions: credentialOptions,  // optional, defaults to original
    keyOptions: keyOptions,                // optional, defaults to original
)

v0.22.0

SD-JWT Nested Disclosure fixes

  • StorageManager.recreateSdJwtClaims now recursively resolves nested _sd digest arrays in SD-JWT claims. Previously, only top-level disclosures were resolved; nested objects inside arrays (e.g., address[0]) retained raw _sd hashes instead of the actual claim values.
  • SD-JWT presentations via OpenID4VP now selectively disclose only the claims requested in the DCQL query

StorageManager.docModels

  • docModels is a @Published property holding an array of concrete DocClaimsModel objects representing all issued documents currently loaded in the wallet.

v0.21.1

  • Update eudi-lib-ios-openid4vci-swift dependency to version 0.30.0
  • Fix for issue #296

v0.21.0

ZKP (Zero-Knowledge Proof) Support

  • Supports zero-knowledge proof generation by using a provided ZkSystemRepository
  • Extracts ZKP specs from DCQL request.
  • Tracks ZKP document IDs through presentation flow. Skip deleting credentials used as ZKP documents

Improvements

  • Add optional zkSystemRepository: ZkSystemRepository? parameter to EudiWallet initializer. When provided, it is used during the presentation flow to enable zero-knowledge proof operations.
  • Add waitForDisconnect method to PresentationSession to prevent the session from being disposed while the remote device is still connected. This method should be called after sendResponse. In BLE presentations, it awaits until the remote verifier disconnects; in OpenID4VP presentations, it returns immediately.
  • BLE peripheral manager now uses CBPeripheralManagerOptionShowPowerAlertKey to automatically prompt the user to enable Bluetooth if it is turned off when starting a BLE presentation.
  • getIssuerMetadata, issueDocuments, getDefaultCredentialOptions, requestDeferredIssuance, and resumePendingIssuance now fall back to resolving the VCI service by issuer URL when the name-based lookup fails, improving service discovery for dynamically registered issuers. Also, offer resolution was modified to register credential issuer url directly instead of host name.

Breaking Changes

  • EudiWalletConfiguration.trustedReaderCertificates renamed and retyped: The property trustedReaderCertificates: [Data]? has been replaced by trustedReaderRootCertificates: [x5chain]?. A x5chain is usually a root SecCertificate but may include intermediate certificates.

Dependency Update

  • Updated "eudi-lib-ios-iso18013-data-transfer" and "eudi-lib-ios-wallet-storage" package dependencies to version 0.10.0

Refactorings

  • Refactored document handling in OpenId4VP and related services to use Document.ID for improved type safety and clarity
  • Introduce zkpDocumentIds property on PresentationService and concrete services (BlePresentationService, FaultPresentationService, OpenId4VpService)
    • generateCborVpToken now returns ZKP document IDs; OpenId4VpService aggregates them
    • PresentationSession.updateKeyBatchInfoAndDeleteCredentialIfNeeded now accepts Document.IDs and an optional zkpDocumentIds list

v0.20.5

  • Fixed bug in #291 when more than one identical attestation is successfully presented to the verifier. Previously, only a single entry per "type" appears in the Transactions tab. For example, the screenshots show 2 mDL and 3 PID attestations, all successfully presented, but only 1 of each is listed in the Transactions.

  • Fallback to sha-256 hashing algorithm if sd-alg does not exist by @dtsiflit in #293

v0.20.4

Fixed bug when more than one identical attestation is successfully presented to the verifier. Previously, only a single entry per "type" appears in the Transactions tab. For example, the screenshots show 2 mDL and 3 PID attestations, all successfully presented, but only 1 of each is listed in the Transactions.

v0.20.3

  • Enhance OpenID4VCI service registration with fallback to the first available configuration by @phisakel in #288

When the issuer doesn't match any pre-configured service, fall back to the first available service's configuration (inheriting client auth, attestation config, etc.) with the issuer URL overridden. This mirrors the Android wallet behavior where the fallback manager strategy carries over to unknown issuers.

v0.20.2

  • Wallet storage document deletion bug fix

v0.20.1

Breaking change

authFlowRedirectionURI parameter added to resolveOfferUrlDocTypes method of EudiWallet

public func resolveOfferUrlDocTypes(offerUri: String, authFlowRedirectionURI: URL?) 

v0.20.0

Dependency Update

  • Updated eudi-lib-sdjwt-swift to version 0.13.0
  • Updated eudi-lib-ios-openid4vci-swift to version 0.20.0
  • Updated eudi-lib-openid4vp-swift to version 0.20.0
  • Updated eudi-lib-statium-swift to version 0.3.0

Breaking Changes

  • Swift Version Requirement: Updated minimum Swift version to 6.2

    • Updated Package.swift swift-tools-version from 6.0 to 6.2
  • EudiWallet Initialization Refactoring: Introduced EudiWalletConfiguration struct for consolidated wallet configuration

    • New struct: EudiWalletConfiguration consolidates all wallet-level configuration parameters:

      • serviceName: String - The service name for the keychain (default: "eudiw")
      • accessGroup: String? - The access group for keychain sharing
      • userAuthenticationRequired: Bool - Whether user authentication is required (default: false)
      • trustedReaderCertificates: [Data]? - Trusted reader certificates
      • deviceAuthMethod: DeviceAuthMethod - Device authentication method (default: .deviceSignature)
      • uiCulture: String? - UI culture for localization
      • logFileName: String? - Log file name for logging
    • Updated initializer: EudiWallet now takes eudiWalletConfig: EudiWalletConfiguration parameter instead of individual configuration parameters

    let config = EudiWalletConfiguration(
        serviceName: "my_wallet_app",
        userAuthenticationRequired: true,
        trustedReaderCertificates: certs
    )
    let wallet = try! EudiWallet(eudiWalletConfig: config)
  • Document Issuance API Changes:

    • Removed single document issuance method signature that accepted individual parameters
    • Use issueDocuments(issuerName:docTypeIdentifiers:credentialOptions:keyOptions:promptMessage:) instead for issuing one or more documents
    let docs = try await wallet.issueDocuments(
        issuerName: "eudi_pid_issuer",
        docTypeIdentifiers: [.msoMdoc(docType: EuPidModel.euPidDocType)],
        credentialOptions: credentialOptions,
        keyOptions: keyOptions
    )
    let pidDoc = docs.first!
  • OpenId4VciConfiguration Changes:

    • Removed cacheIssuerMetadata: Bool parameter (issuer metadata is now always cached)

New Features

  • Multiple Document Issuance: Added issueDocuments method for issuing multiple documents in a single operation

    • Method signature: issueDocuments(issuerName:docTypeIdentifiers:credentialOptions:keyOptions:promptMessage:) async throws -> [WalletStorage.Document]
    • Efficiently issues multiple documents from the same issuer by creating a single credential offer
    • Supports mixed document types (mso_mdoc and sd-jwt-vc)
    let documents = try await wallet.issueDocuments(
        issuerName: "eudi_pid_issuer",
      docTypeIdentifiers: [
         .identifier("eu.europa.ec.eudi.pid_mdoc"),
         .identifier("eu.europa.ec.eudi.pid_vc_sd_jwt")
      ],
        credentialOptions: credentialOptions,
        keyOptions: keyOptions
    )

Bug fixes

  • Fixed keys attestation (WUA)

v0.19.4

  • Dependency Updates:

    • Updated eudi-lib-sdjwt-swift to version 0.12.1
    • Updated eudi-lib-ios-statium-swift to version 0.3.1
  • Document Status Service Enhancements:

    • Added clockSkew parameter to DocumentStatusService initializer (default: 60 seconds) to handle time differences when validating status list tokens
    • Updated status verification to use clockSkew parameter for improved reliability
  • Client Attestation Refactoring:

    • Refactored PoP (Proof-of-Possession) constructor method in OpenId4VciConfiguration
    • Renamed makeDPoPConstructor to makePoPConstructor and added a PopUsage parameter. Use attestation key options instead of DPoP-specific key options for the .clientAttestation case.

v0.19.3

  • Fixed device authentication for OpenID4VP. Session transcript calculation was fixed.

v0.19.2

  • Removed SIOPv2 support.
  • Fixed OpenID4VP bug for direct post response mode.
  • DCQL query handling improvements (supports claim_sets and credentials_sets).

v0.19.1

  • SD-JWT data model: Include index in path for array child elements

v.0.19.0

  • Client Attestation Support: Added support for Wallet Instance Attestation and Wallet Unit Attestation

    • New struct: KeyAttestationConfig for configuring client attestation

      • Property walletAttestationsProvider: WalletAttestationsProvider - Provider for wallet and key attestations
      • Property popKeyOptions: KeyOptions? - Optional key options for PoP key generation
      • Property popKeyDuration: TimeInterval? - Optional duration for PoP JWT validity (default: 300 seconds)
    • New protocol: WalletAttestationsProvider with two required methods:

      • func getWalletAttestation(key: any JWK) async throws -> String - Obtain wallet instance attestation JWT for a given public key
      • func getKeysAttestation(keys: [any JWK], nonce: String?) async throws -> String - Obtain unit attestation JWT for multiple keys
  • OpenId4VciConfiguration changes:

    • Removed client: Client parameter
    • Added clientId: String? parameter (defaults to "wallet-dev")
    • Added keyAttestationsConfig: KeyAttestationConfig? parameter for client attestation configuration
let config = OpenId4VciConfiguration(
  credentialIssuerURL: "https://issuer.example.com",
  clientId: "my-wallet-client",
  keyAttestationsConfig: KeyAttestationConfig(
    walletAttestationsProvider: MyAttestationProvider(),
    popKeyDuration: 300
  )
)

v0.18.5

  • VP Handover and SessionTranscript by @craigaps
  • eudi-lib-sdjwt-swift dependency updated to version 0.10.1

v0.18.4

Breaking Changes to Public API

  • Client Attestation Support: Added support for OAuth 2.0 Attestation-Based Client Authentication

    • New struct: KeyAttestationConfig for configuring client attestation

      • Property walletAttestationsProvider: WalletAttestationsProvider - Provider for wallet and key attestations
      • Property popKeyOptions: KeyOptions? - Optional key options for PoP key generation
      • Property popKeyDuration: TimeInterval? - Optional duration for PoP JWT validity (default: 300 seconds)
    • New protocol: WalletAttestationsProvider with two required methods:

      • func getWalletAttestation(key: any JWK) async throws -> String - Obtain wallet attestation JWT for a given public key
      • func getKeysAttestation(keys: [any JWK], nonce: String?) async throws -> String - Obtain key attestation JWT for multiple keys with optional nonce
  • OpenId4VciConfiguration changes:

    • Removed client: Client parameter
    • Added clientId: String? parameter (defaults to "wallet-dev")
    • Added keyAttestationsConfig: KeyAttestationConfig? parameter for client attestation configuration
let config = OpenId4VciConfiguration(
  credentialIssuerURL: "https://issuer.example.com",
  clientId: "my-wallet-client",
  keyAttestationsConfig: KeyAttestationConfig(
    walletAttestationsProvider: MyAttestationProvider(),
    popKeyDuration: 300
  )
)

Dependency Updates

  • Updated eudi-lib-ios-openid4vci-swift to version 0.18.0
  • Updated eudi-lib-sdjwt-swift to version 0.10.0

Internal Changes

  • Enhanced DPoP constructor to support RSA keys in addition to EC keys
  • Improved key management for client attestation with deterministic key ID generation

v0.18.3

  • Update eudi-lib-ios-siop-openid4vp-swift to version 0.18.0

v0.18.2

  • Adds redirectUri as part of supported clientIdSchemes
  • Adds support for .directPost.

v0.18.1

  • update eudi-lib-ios-openid4vci-swift dependency to version 0.16.2
  • update siop-openid4vp dependency to version 0.17.7

v0.18.0

Breaking Changes to Public API

  • Multi-issuer support: All OpenID4VCI methods now require an issuerName parameter to support multiple issuer configurations:

    • issueDocument(issuerName:docTypeIdentifier:credentialOptions:keyOptions:promptMessage:) - Added issuerName parameter
    • getDefaultCredentialOptions(issuerName:docTypeIdentifier:) - Added issuerName parameter
    • requestDeferredIssuance(issuerName:deferredDoc:credentialOptions:keyOptions:) - Added issuerName parameter
    • resumePendingIssuance(issuerName:pendingDoc:webUrl:credentialOptions:keyOptions:) - Added issuerName parameter
    • getIssuerMetadata(issuerName:) - Added issuerName parameter
  • Initializer changes:

    • Replaced openID4VciIssuerUrl and openID4VciConfig parameters with openID4VciConfigurations: [String: OpenId4VciConfiguration]?
    • Enables configuration of multiple OpenID4VCI issuers with different settings
  • Offer URL resolution:

    • issueDocumentsByOfferUrl(offerUri:docTypes:txCodeValue:promptMessage:configuration:) - Added optional configuration parameter
  • OpenId4VCI Service registration: New func registerOpenId4VciServices(_ configurations: [String: OpenId4VciConfiguration]) method for dynamic issuer service registration

  • Refactoring: Major refactoring of OpenID4VCI service architecture for improved modularity

    • VCI Methods refactoring: Moved credential issuance logic from EudiWallet into OpenId4VciService for better separation of concerns (commit: bfec6e5)
    • Code organization: Better separation between wallet-level operations and service-level OpenID4VCI protocol handling
    • Improved maintainability: Consolidated related functionality and reduced code duplication across components
    • Improved thread safety: OpenID4VCI service is now an actor

v0.17.0

  • do not fail SdJwt presentation when query is empty

v0.16.9

  • fix credential identifier issue

v0.16.8

  • Add claims property to OfferedDocModel struct

v0.16.7

  • update eudi-lib-ios-openid4vci-swift to version 0.16.1
  • enhance sd-jwt parsing to support Jws Json format

v0.16.6

  • Do not send expired documents with BLE or OpenID4VP
  • Fix BLE sharing issue

v0.16.4

  • Fix to show all mandatory elements of sd-jwt document during sharing
  • The wallet can be configured with OpenID4VCI options including DPoP (Demonstrating Proof-of-Possession) support and key options for DPoP key generation:
// Configure OpenID4VCI with DPoP support
let openID4VciConfig = OpenId4VCIConfiguration(
    useDpopIfSupported: true,  // Enable DPoP if supported by issuer (default: true)
    dpopKeyOptions: KeyOptions(
        secureAreaName: "SecureEnclave", curve: .P256, accessControl: .requireUserPresence
    )
)
  • Breaking change: Batch size and credential policy are passed with a CredentialOptions parameter:
    • issueDocument(docTypeIdentifier:credentialOptions:keyOptions:promptMessage:)
    • getDefaultCredentialOptions(_:)
    • requestDeferredIssuance(deferredDoc:credentialOptions:keyOptions:)
    • resumePendingIssuance(pendingDoc:webUrl:credentialOptions:keyOptions:)
    • beginIssueDocument(id:credentialOptions:keyOptions:bDeferred:)

v0.16.3

  • Update eudi-lib-ios-siop-openid4vp-swift dependency to 0.17.6

v0.16.2

  • Feature: Added DPoP configuration support
    • Added useDpopIfSupported property to OpenId4VCIConfiguration to enable/disable DPoP usage (default: true)
    • Conditionally use DPoP constructor based on the useDpopIfSupported configuration setting
    • DPoP is now only used when both supported by the issuer and enabled in the configuration

v0.16.1

  • Fix deferred issuance bug

v0.16.0

  • Breaking change: Updated OpenID4VCI to version 0.16.0 with support for OpenID4VCI v1.0 specification
    • Updated eudi-lib-ios-openid4vci-swift from version 0.7.6 to 0.16.0
    • Implemented changes for OpenID4VCI v1.0 specification compatibility:
      • Updated deferred credential issuance handling to support new API with separate transactionId and interval parameters
      • Enhanced credential metadata access through new ConfigurationCredentialMetadata structure
      • Added support for new issuanceStillPending case in deferred credential flows
      • Improved error handling and logging for deferred credential scenarios
  • Updated eudi-lib-sdjwt-swift from version 0.8.0 to 0.9.1

v0.15.0

  • Update dependency versions
    • Updated eudi-lib-ios-iso18013-data-transfer from version 0.8.0 to 0.8.1
    • Updated eudi-lib-ios-siop-openid4vp-swift from version 0.17.3 to 0.17.5
  • Enhanced CBOR document validation
    • Perform CBOR document validation logic in EudiWallet, validateIssuedDocuments method:
      • CBOR element digest values are compared against the digest values provided in the issuer-signed Mobile Security Object (MSO) section of the document to ensure integrity and authenticity.
      • MSO Signature is validated.
      • MSO Validity info dates are validated.
      • Doc type in MSO is the same as the doc type of the issued document.

v0.14.9

  • feat: introduce OpenID4VP configuration and refactor related classes
    • Added new OpenId4VpConfiguration model with support for different client identifier schemes
    • Introduced ClientIdScheme enum supporting preregistered clients, X.509 certificate validation (SAN DNS and hash), and redirect URI validation
    • Breaking change: Refactored EudiWallet initialization and property to use a OpenId4VpConfiguration parameter instead of separate verifierApiUri and verifierLegalName parameters, for example: wallet.openID4VpConfig = OpenId4VpConfiguration(clientIdSchemes: [.x509SanDns])
    • Added convenience initializer for PreregisteredClient from SiopOpenID4VP library
    • Updated related services to work with the new configuration structure

v0.14.7

  • Fix: Throw error if one of the requested doc types is not present and credentialSets is nil

v0.14.6

  • Error reason provided when OpenID4VP response is rejected

v0.14.5

  • Fix CBOR log document claim decoding logic

v0.14.4

  • Fix transaction logs decoding

v0.14.3

  • Update eudi-lib-ios-siop-openid4vp-swift dependency to version 0.17.2

v0.14.2

  • Update eudi-lib-ios-siop-openid4vp-swift to 0.17.0 and enhance certificate verification

v0.14.1

  • Fixes bug for sd-jwt documents array values not transfered with online presentation e.g. nationalities for PID

v0.14.0

  • Updated OpenID4VP library to version v0.16.0 and adjusted wallet kit accordingly.

v0.13.5

  • Update eudi-lib-ios-openid4vci-swift to 0.15.4
  • Added property var credentialPocily: CredentialPolicy to DocClaimsDecodable
  • fix for removing port from URL (issue #215)

v0.13.4

  • Update the eudi-lib-ios-siop-openid4vp-swift dependency to version 0.15.1 (JARM fix)

v0.13.3

  • Updated eudi-lib-ios-siop-openid4vp-swift library to version v0.15.0

  • Updated eudi-lib-ios-openid4vci-swift library to version v0.15.2

  • Breaking change: Removed EudiWallet propertyverifierRedirectUri

v0.13.2

Error Handling Improvements:

  • Improved WalletError structure: Refactored WalletError from enum to struct with property to support localization: public let localizationKey: String?.
  • Enhanced error logging: Added logger.error statements before all throw statements across the wallet codebase to improve debugging capabilities.

v0.13.1

  • Fix for presentations based on DCQL query

v0.13.0

  • Fixed failure to issue documents with credential offer when the authorization server defined in the offer uses DPoP.
  • Fixed credential offer issuance to use batch size passed to issueDocumentsByOfferUrl.

v0.12.9

  • Updated eudi-lib-sdjwt-swift library to version v0.7.2
  • Updated dPoP constructor logic and added RS256 algorithm

v0.12.8

Changes:

  • DocClaimsDecodable has a new property var credentialsUsageCounts: CredentialsUsageCounts? This property provides information about the number of remaining presentations available for a document, based on its credential policy. It is useful for documents issued with a one-time use policy, where it returns the number of remaining presentations available. For documents with a rotate-use policy, it returns nil as there's no usage limit.
  • Deprecated getCredentialsUsageCount method in EudiWallet. Use the new credentialsUsageCounts property instead.

Performance Improvements:

  • Configurable metadata caching: Added cacheIssuerMetadata: Bool parameter to OpenId4VCIConfiguration (defaults to true). This flag controls whether issuer metadata should be cached in memory during the session.

Bug Fixes:

  • DocClaimsDecodable models are backed by classes instead of structs to ensure proper reference semantics. This allows the credentialsUsageCounts property to be updated correctly without requiring a full reload of the document claims.
  • Fixed issue with getting issuer metadata from wrong server when a url offer is used with different server than the default one.

v0.12.7

DPoP updates

  • Library eudi-lib-ios-openid4vci-swift has been updated to version 0.15.1
  • DPoP constructor is always passed.

Performance Improvements:

  • Issuer metadata caching: Added caching to OpenId4VCIService.getIssuerMetadata to improve performance by storing successful issuer metadata results in memory and avoiding redundant network requests during the same session. The cache is automatically cleared after changing issuerUrl.

Bug fixes:

  • When the getCredentialsUsageCount method is called, if the remaining count is 0, the validUntil property of the credential is now correctly set to nil.

Breaking Changes:

The getDefaultKeyOptions and issueDocument method signatures have been updated to accept a single DocTypeIdentifier parameter instead of separate docType, scope, and identifier parameters for improved type safety and API consistency. The getDefaultKeyOptions method queries the issuer to retrieve the recommended key configuration for a specific document type identifier. The returned KeyOptions can be used when issuing documents with issueDocument.

Before:

let keyOptions = try await wallet.getDefaultKeyOptions(docType, scope: scope, identifier: identifier)
let document = try await wallet.issueDocument(docType: docType, scope: scope, identifier: identifier, keyOptions: keyOptions)

After:

let keyOptions = try await wallet.getDefaultKeyOptions(.msoMdoc("org.iso.18013.5.1.mDL"))
let document = try await wallet.issueDocument(.msoMdoc("org.iso.18013.5.1.mDL"), keyOptions: keyOptions)
// or
let keyOptions = try await wallet.getDefaultKeyOptions(.sdJwt(vct: "urn:eudi:pid:1"))
let document = try await wallet.issueDocument(.sdJwt(vct: "urn:eudi:pid:1"), keyOptions: keyOptions)
// or
let keyOptions = try await wallet.getDefaultKeyOptions(.configurationIdentifier("eu.europa.ec.eudi.cor_mdoc"))
let document = try await wallet.issueDocument(.configurationIdentifier("eu.europa.ec.eudi.cor_mdoc"), keyOptions: keyOptions)

v0.12.6

Networking abstraction and protocol improvements

  • EudiWallet initialization parameter change: The urlSession parameter has been replaced with networking parameter
    • Old: urlSession: URLSession? = nil
    • New: networking: (any NetworkingProtocol)? = nil
    • This allows for custom networking implementations while maintaining URLSession compatibility

New NetworkingProtocol

  • Added NetworkingProtocol that abstracts network operations
    • Provides data(from url: URL) and data(for request: URLRequest) methods
    • URLSession conforms to NetworkingProtocol by default for backward compatibility

Internal networking improvements

  • Split networking into separate VCI and VP clients:
    • networkingVci: OpenID4VCINetworking - For OpenID4VCI operations
    • networkingVp: OpenID4VPNetworking - For OpenID4VP operations
  • Both networking clients wrap the provided NetworkingProtocol implementation

SecureArea Protocol Improvements

  • Added property static var supportedEcCurves: [CoseEcCurve]

Bug Fixes

  • Fix for issue #187
  • Fix for issue #190
  • Fix for issue #195
  • Fix for issue: Attestation with 0 instances still triggers share flow
  • Fix for issue: Expiration date shown despite no available attestations
  • Fix for issue: When there is no matching attestation for BLE transfer, the QR code is still displayed.

v0.12.5

-- Fixed redirect_uri clientId scheme handling

v0.12.4

EudiWallet property addition

  • Added verifierRedirectUri: String? property to EudiWallet.
    • This property stores the OpenID4VP verifier redirect URI, used for redirectUri clients in OpenID4VP flows.

Fix to delete one-time credentials for presented documents only

  • Updated the logic to ensure that only one-time credentials for documents that have been presented are deleted.

Fix to issueDocumentsByOfferUrl crash

  • When multiple documents were issued many times the 'Fatal error: Unexpectedly found nil while unwrapping an Optional value' occurred.

v0.12.3

  • Use exact versions for dependencies

v0.12.2

Modified issueDocumentsByOfferUrl method

   /// Issue documents by offer URI.
   /// - Parameters:
   ///   - offerUri: url with offer
   ///   - docTypes: offered doc models available to be issued. Contains key options (secure are name and other options)
   ///   - txCodeValue: Transaction code given to user (if available)
   ///   - promptMessage: prompt message for biometric authentication (optional)
   /// - Returns: Array of issued and stored documents
   public func issueDocumentsByOfferUrl(offerUri: String, docTypes: [OfferedDocModel], txCodeValue: String? = nil, promptMessage: String? = nil) async throws -> [WalletStorage.Document] {

Example usage:

// When resolving an offer, key options are now included
let offer = try await wallet.resolveOfferUrlDocTypes(uriOffer: offerUrl)
for docModel in offer.docModels {
  // use recommended key options or modify them
   let docTypes = offer.docModels.map { $0.copy(keyOptions: KeyOptions(credentialPolicy: .oneTimeUse, batchSize: 2))
   // Issue with optimal settings
   let newDocs = try await wallet.issueDocumentsByOfferUrl(offerUri: offerUrl, docTypes: docTypes, txCodeValue: txCode)
}

OfferedDocModel struct enhancements

Added properties:

  • identifier: String? - Issuer configuration identifier for the credential
  • keyOptions: KeyOptions - Default key options (batch size and credential policy) recommended by the issuer

Updated computed property:

  • docTypeOrVctOrScope renamed to docTypeOrVctOrScope - Now returns docType, vct, or scope in priority order

v0.12.1

EudiWallet added method: public func getCredentialsUsageCount(id: String) async throws -> CredentialsUsageCounts?

Gets a document's remaining credentials, available for presentation count This method retrieves usage count information for a specific document based on its credential policy. For documents issued with a one-time use policy, it returns the number of remaining presentations available. For documents with a rotate-use policy, it returns nil as there's no usage limit.

if let usageCounts = try await wallet.getCredentialsUsageCount(id: documentId) {
    print("Remaining presentations: \(usageCounts.remaining) out of \(usageCounts.total)")
} else {
    print("Document has unlimited presentations (rotate-use policy)")
}

EudiWallet added method: public func getDefaultKeyOptions(_ docType: String?, scope: String?, identifier: String?) async throws -> KeyOptions

Get default key options (batch-size and credential policy) for a document type from the issuer. This method queries the issuer to retrieve the recommended key configuration for a specific document type, scope, or identifier. The returned KeyOptions can be used when issuing documents.

let keyOptions = try await wallet.getDefaultKeyOptions(docType, scope: scope, identifier: identifier)
let document = try await wallet.issueDocument(docType: docType, scope: scope, identifier: identifier, keyOptions: keyOptions)

OfferedDocModel removed method: getRemainingCredentialsCount

v0.12.0

Batch issuance support

To issue multiple credentials for a document, specify the keyOptions parameter in the issueDocument method. This allows to set the credentialPolicy and batchSize options.

Example usage:

try await wallet.issueDocument(docType: nil, scope: nil, identifier: identifier, keyOptions: KeyOptions(credentialPolicy: .oneTimeUse, batchSize: 10))

Additional method

/// Get the remaining presentations count for a document.
/// Returns: Remaining presentations count (if one-time use policy was used to issue the document, otherwise nil)
public func getRemainingCredentialsCount(id: String) async throws -> Int?

SecureArea Protocol: Batch-Oriented API Changes

The SecureArea protocol was refactored to support batch-oriented key management and cryptographic operations. This change introduces methods for handling multiple keys at once. This affects implementors of the SecureArea protocol.

1. Batch Operations Added

  • Key Creation:

    • createKeyBatch(id: String, keyOptions: KeyOptions?) async throws -> [CoseKey]
      • Creates a batch of keys and returns their public keys.
  • Key Deletion:

    • deleteKeyBatch(id: String, startIndex: Int, batchSize: Int) async throws
      • Deletes a batch of keys starting from a specific index.
    • deleteKeyInfo(id: String) async throws
      • Deletes key metadata for a given batch.
  • Signature and Key Agreement:

    • signature(id: String, index: Int, algorithm: SigningAlgorithm, dataToSign: Data, unlockData: Data?) async throws -> Data
      • Computes a signature using a specific key in the batch.
    • keyAgreement(id: String, index: Int, publicKey: CoseKey, unlockData: Data?) async throws -> SharedSecret
      • Performs key agreement with a specific key in the batch.
  • Key Info:

    • getKeyBatchInfo(id: String) async throws -> KeyBatchInfo
      • Returns information about a batch of keys.
  • Default Algorithm:

    • defaultSigningAlgorithm(ecCurve: CoseEcCurve) -> SigningAlgorithm
      • Returns the default signing algorithm for a given curve.

2. Single-Key Methods Removed

  • Single-key methods createKey, deleteKey, and getKeyInfo were removed.

v0.11.3

  • Display "Unidentified Relying Party" when reader authentication is disabled.
  • Fix transactions log for verifications with DCQL queries

v0.11.2

  • Update eudi-lib-ios-siop-openid4vp-swift package dependency to version 0.11.0
  • DCQL query language support

v0.11.1

  • Package updates

v0.11.0

  • Bug fixes

v0.10.9

v0.10.8

  • Modified BLE data transfer initialisation to ensure BLE powered on before advertising UUID service and presenting QR code

v0.10.7

Document Status Checks

  • Integration with eudi-lib-ios-statium-swift library for document status checks (Token Status List Specification draft 10)
  • Added public func getDocumentStatus(for statusIdentifier: StatusIdentifier) async throws -> CredentialStatus method to EudiWallet class.
for m in wallet.storage.docModels {
	guard let st = m.statusIdentifier else { continue }
	let status = try? await wallet.getDocumentStatus(for: st)
	// mark document according to its status as active or revoked, etc...
}


## v0.10.6
### OpenID4VCI - Draft 15
- Updated OpenID4VCI library to version [0.13.0](https://github.com/eu-digital-identity-wallet/eudi-lib-ios-openid4vci-swift/releases/tag/v0.13.0)
- Issuing functions updated to work with OpenID4VCI - Draft 15

### Transaction logging
- To log the transaction data, provide an implementation of the `TransactionLogger` protocol:
```swift
public actor DbTransactionLogger: TransactionLogger {
	public func log(transaction: TransactionLog) async throws {
		// Implement your logging logic here
	}
}
  • Set the transactionLogger property of the EudiWallet instance to a TransactionLogger implementation instance:
wallet.transactionLogger = DbTransactionLogger()
  • To display presented documents for a transaction, use the parseTransactionLog function of the EudiWallet instance:
let presentationData = await wallet.parseTransactionLog(transaction)

v0.10.5

  • Updated OpenID4VP library to version v0.9.0
  • Updated OpenID4VCI library to version 0.12.3

v0.10.4

  • Support transaction data for OpenID4VP
  • Fix issue #162
  • Fix issue #163

v0.10.3

  • Removed vct from docClaims collection.

v0.10.2

  • Simplified OpenID4VCI configuration
wallet = try! EudiWallet(serviceName: Self.serviceName, trustedReaderCertificates: certs,
  openID4VciConfig: OpenId4VCIConfiguration(useDPoP: true), logFileName: "temp.txt", secureAreas: [mySecureArea])

v0.10.1

  • OpenID4VP Draft 23 support

v0.10.0

  • Fix nil DocClaim issue for request-items

v0.9.9

  • DocPresentInfo struct members public
  • DocClaim: added property path: [String] to store the path of the claim in the document

v0.9.8

  • sdJwt nested elements presentation
  • DocElementsViewModel replaced with enum DocElements

v0.9.6

  • OfferedIssuanceModel: Change the issuerName property to represent a friendly name instead of a URL and add a new issuerLogoUrl property

v0.9.5

  • Updated eudi-lib-ios-openid4vci-swift library to version v0.12.0
  • openID4VciConfig now accepts a DPoPConstructorType.
  • Updated eudi-lib-ios-siop-openid4vp-swift library to version v0.7.0

Breaking changes

  • ElementViewModel: removed elementIdentifier and displayName properties and added elementPath and displayNames properties:
/// path to locate the element
public let elementPath: [String]
// display names of the component paths
public let displayNames: [String?]

v0.9.4

  • Added properties to DocClaimsDecodable protocol: validFrom, validUntil

v0.9.3

  • Fixed bug for OpenID4VP presentation for more than 2 documents

v0.9.2

  • Fixed bugs for OpenID4VP presentation
  • Added properties to DocClaimsDecodable protocol: issuerDisplay,credentialIssuerIdentifier, configurationIdentifier

v0.9.1

  • EudiWallet: added uiCulture string property for UI localization. It must be a 2-letter language code (optional)
  • EudiWallet: added getIssuerMetadata() function to retrieve selected issuer's metadata
  • EudiWallet: Issue document using either doc-type, scope or configuration identifier: func issueDocument(docType: String?, scope: String?, identifier: String?, promptMessage: String? = nil)
  • WalletStorage.Document: added displayName property with localized string value
  • ElementViewModel: added displayName property with localized string value
  • DocMetadata: stores all localized metadata in display property
  • DocClaimMetadata: stores all localized metadata in display property
  • Fix bug with VP presentation

v0.9.0

Supports issuing and display of documents with sd-jwt-vc format

  • DocClaimDecodable protocol is supported for both mso-mdoc (cbor) and sd-jwt-vc formats

Supports saving and retrieving issuer metadata to be used for display

  • DocClaim struct has docDataValue property to store the typed value (enum with associated values) of the claim and stringValue property to store the string value of the claim
  • DocClaim struct has displayName, isOptional and valueType properties provided by the issuer

Updated eudi-lib-ios-openid4vci-swift to version 0.10.0

  • Feature/dpop nonce

Breaking changes

  • StorageManager property mdocModels renamed to docModels
  • MdocDecodable protocol renamed to DocClaimDecodable
  • NameValue struct renamed to DocClaim
  • NameImage struct removed

v0.8.2

  • Update for OpenID4VCI Draft14 (eudi-lib-ios-openid4vci-swift updated to tag 0.9.0)
  • Use @MainActor for issuing methods due to authentication UI

v0.8.1

Breaking changes

  • SecureArea protocol static factory method added: nonisolated public static func create(storage: any SecureKeyStorage) -> Self
  • Removed SecureArea protocol initializer: init(storage: any SecureKeyStorage) (use the static factory method instead)
  • Removed property storage from SecureArea protocol

v0.8.0

Secure area refactoring

EudiWallet changes:

  • init added secureAreas: [SecureArea] optional parameter (default is ["SecureEnclave", "Software"])
  • issueDocument: added keyOptions optional parameter to specify the secure area name and other key options for the key creation
  • issueDocumentsByOfferUrl: added docTypeKeyOptions optional parameter to specify the secure area name and other key options for each doc type

v0.7.8

  • RequestItems conforms to Equatable protocol

v0.7.7

Breaking changes

  • RequestItems is now a dictionary with a key of type String (doc-type) and a value of type [String: [RequestItem]] (namespace to request items)
  • RequestItem is a struct with the following properties: elementIdentifier, intentToRetain and isOptional
public typealias RequestItems = [String: [String: [RequestItem]]]
  • ElementViewModel: public var isMandatory: Bool is removed
  • ElementViewModel: public var isOptional: Bool is added (opposite of isMandatory)

v0.7.4

  • Update Package.resolved and Package.swift with new versions for openid4vci, openid4vp

v0.7.3

  • Bug fix

v0.7.2

  • Removed @MainActor annotation from class definitions

v0.7.1

  • Swift 6 migration

v0.7.0

  • Updated OpenID4VCI to version 0.6.0

v0.6.9

v0.6.8

  • Updated OpenID4VCI to version 0.5.0
  • Updated OpenID4VP to version 0.4.0

v0.6.7

Added methods:

  • public func loadDocument(id:status:) async throws -> WalletStorage.Document?
  • public func deleteDocument(id:status:) async throws

Documentation

  • Updated README.md with new methods and explanations
  • Added documentation using Swift-DocC (deployed here)

v0.6.5

Fixes for dynamic issuance:

  • Support dynamic issuance in scoped mode
  • Remove pending document after finalizing resumePendingIssuance

v0.6.4

  • New wallet methods:

public func loadAllDocuments() async throws -> [WalletStorage.Document]?

public func deleteAllDocuments() async throws

public func resumePendingIssuance(pendingDoc: WalletStorage.Document, webUrl: URL?) async throws -> WalletStorage.Document

  • Dynamic issuance handling: After calling issueDocumentsByOfferUrl the wallet application need to check if the issuance is pending:

if let urlString = newDocs.first?.authorizePresentationUrl {

// perform openid4vp presentation using the urlString

// on success call resumePendingIssuance using the url provided by the server

v0.6.3

  • Fixed issuing error when wallet userAuthenticationRequired property is true

v0.6.2

Fix

Logging mechanism

  • EudiWallet supports logging and retrieval of log contents

    ` // If not-nil, logging to the specified log file name will be configured public var logFileName: String? { didSet { try? initializeLogging() } }

    // Helper method to return a file URL from a file name. public static func getLogFileURL(_ fileName: String) throws -> URL?

    // Reset a log file stored in the caches directory e.g. wallet.serviceName = "wallet_dev"

v0.5.8

  • Update eudi-lib-ios-openid4vci-swift to version 0.4.2 public func resetLogFile(_ fileName: String) throws openID4VciConfig: OpenId4VCIConfig?` to pass OpenID4VCI issuer parameters
  • Removed EudiWallet properties var openID4VciClientId and var openID4VciRedirectUri // Get the contents of a log file stored in the caches directory public func getLogFileContents(_ fileName: String) throws -> String `

v0.6.1- loadDocuments takes an optional status parameter of type WalletStorage.DocumentStatus (default is issued)

  • Set WalletStorage.Document displayName property when saving a document- deleteDocuments takes an optional status parameter of type WalletStorage.DocumentStatus (default is issued) iable @Published public private(set) var deferredDocuments: [WalletStorage.Document] = [] (documents that are not yet issued)

v0.6.0

  • Update eudi-lib-ios-openid4vci-swift to version 0.4.3h the issued document. pdated.

v0.5.9) async throws -> WalletStorage.Document`

  • EudiWallet new property public var serviceName: String

Use a different serviceName than the default one if you want to store documents in a different location.4vci-swift/releases/tag/v0.4.1) e.g. wallet.serviceName = "wallet_dev" dded property public var accessGroup: String? (used for sharing keychain items between apps with the same access group)

v0.5.8

  • Update eudi-lib-ios-openid4vci-swift to version 0.4.2
  • New EudiWallet property public var openID4VciConfig: OpenId4VCIConfig? to pass OpenID4VCI issuer parameters0.3.2
  • Removed EudiWallet properties var openID4VciClientId and var openID4VciRedirectUri

v0.5.5

eudi-lib-ios-openid4vci-swift to version 0.3.1

v0.5.7

StorageManager changes## v0.5.4

  • loadDocuments takes an optional status parameter of type WalletStorage.DocumentStatus (default is issued)m URLSession variable
  • deleteDocuments takes an optional status parameter of type WalletStorage.DocumentStatus (default is issued) EudiWallet class. This variable can be used to set a custom URLSession for network requests. Allows for custom configuration of the URLSession, such as setting a custom timeout interval or Self-Signed certificates.
  • new variable @Published public private(set) var deferredDocuments: [WalletStorage.Document] = [] (documents that are not yet issued)

Deferred issuance

  • Request a deferred issuance based on a stored deferred document. On success, the deferred document is updated with the issued document. The caller does not need to reload documents, storage manager deferredDocuments and docModels properties are updated.
  • New function to request deferred issuance: @discardableResult public func requestDeferredIssuance(deferredDoc: WalletStorage.Document) async throws -> WalletStorage.Document## v0.5.2

Other changesrt Pre-Authorized Code Flow

  • Removed otherModels, docTypes, documentIds properties
  • Updated eudi-lib-ios-openid4vci-swift to version 0.4.1The flow is supported by existing methods:
  • Rename OfferedIssueModel to OfferedIssuanceModel
  • EudiWallet: added property public var accessGroup: String? (used for sharing keychain items between apps with the same access group)he following method is called: public func resolveOfferUrlDocTypes(uriOffer: String) async throws -> OfferedIssueModel

(Breaking change, the return value type is OfferedIssueModel instead of [OfferedDocModel])

v0.5.6

  • Update eudi-lib-ios-siop-openid4vp to version 0.3.22 - If OfferedIssueModel.isTxCodeRequired is true, the call to `` must include the transaction code (parameter txCodeValue).

v0.5.5

  • Update eudi-lib-ios-openid4vci-swift to version 0.3.1

v0.5.4### Update eudi-lib-ios-openid4vci-swift dependency to version 0.1.5

Custom URLSession variable

  • Added public var urlSession: URLSession variable to EudiWallet class. This variable can be used to set a custom URLSession for network requests. Allows for custom configuration of the URLSession, such as setting a custom timeout interval or Self-Signed certificates.- Update eudi-lib-ios-openid4vci-swift dependency to version 0.1.5 OS16 offer url parsing issue

v0.5.3

  • Library updates## v0.5.0

v0.5.2

Support Pre-Authorized Code Flow## v0.4.9

d4VP fixes and updates The flow is supported by existing methods:

  • Update eudi-lib-ios-siop-openid4vp to version 0.1.1 1 - An issue offer url is scanned. The following method is called: public func resolveOfferUrlDocTypes(uriOffer: String) async throws -> OfferedIssueModelnid4vp certificate chain verification (PresentationSession's readerCertIssuerValid and readerCertIssuer properties)

(Breaking change, the return value type is OfferedIssueModel instead of [OfferedDocModel])y to PresentationSession

2 - If OfferedIssueModel.isTxCodeRequired is true, the call to `` must include the transaction code (parameter txCodeValue).

  • Note: for the clientId value the EudiWallet/openID4VciClientId is used.fierLegalName: String?` (used for Openid4VP preregistered clients)

v0.5.1

Update eudi-lib-ios-openid4vci-swift dependency to version 0.1.50

  • Update eudi-lib-ios-openid4vci-swift dependency to version 0.1.5## v0.4.6
  • Fixes iOS16 offer url parsing issuee openid4vci to version 0.1.2

v0.5.0##v0.4.5

  • EuPidModel updated with new PID docTypee eudi-lib-ios-openid4vci-swift to version 0.0.9

v0.4.9## v0.4.4

Openid4VP fixes and updatesking change - docModels contains not-nil items (SwiftUI breaks with nil items)

  • Update eudi-lib-ios-siop-openid4vp to version 0.1.1
  • Fix openid4vp certificate chain verification (PresentationSession's readerCertIssuerValid and readerCertIssuer properties)
  • Add readerLegalName property to PresentationSession

v0.4.8- PresentationSession / func sendResponse: itemsToSend dictionary is keyed by docId (and not docType)

  • Update eudi-lib-ios-siop-openid4vp to version 0.1.0
  • Added wallet configuration parameter public var verifierLegalName: String? (used for Openid4VP preregistered clients) data

v0.4.7

###Update eudi-lib-ios-siop-openid4vp to version 0.1.0

v0.4.6

Update openid4vci to version 0.1.2

##v0.4.5

Update eudi-lib-ios-openid4vci-swift to version 0.0.9

v0.4.4## v0.3.9

Breaking change - docModels contains not-nil items (SwiftUI breaks with nil items)I: Allow partial issuing when some documents fail to issue

@Published public var docModels: [any MdocDecodable] = []

v0.3.8

v0.4.3I: Fixed issuing with https://dev.issuer.eudiw.dev

Openid4vp, BLE: Support sending multiple documents with same doc-type

  • DocElementsViewModel: added public var docId: String## v0.3.7
  • PresentationSession / func sendResponse: itemsToSend dictionary is keyed by docId (and not docType) functions: ffer metadata are cached

v0.4.2

Refactoring for issuing documents with IssuerSigned cbor datafunc resolveOfferUrlDocTypes(uriOffer: String) async throws -> [OfferedDocModel] `

Breaking change: Document data is saved as encoded IssuerSigned cbor

v0.4.1

OpenID4VCI: fix for filtering resolved identifierseKeyOptions: [String: KeyOptions]? = nil, promptMessage: String? = nil, claimSet: ClaimSet? = nil) async throws -> [WalletStorage.Document] ` Support mdoc Authentication for OpenId4Vp #46

v0.4.0 `// PresentationSession

OpenID4VCI fix use the following code to convert to QR code image:

v0.3.9

OpenID4VCI: Allow partial issuing when some documents fail to issuengagement.getQrCodeImage(qrCode: d)`

v0.3.8

OpenID4VCI: Fixed issuing with https://dev.issuer.eudiw.devUpdated eudi-lib-ios-siop-openid4vp-swift to v0.0.74

v0.3.7

Added functions:

/// Resolve OpenID4VCI offer URL document types. Resolved offer metadata are cached

public func resolveOfferUrlDocTypes(uriOffer: String) async throws -> [OfferedDocModel]

/// Issue documents by offer URI. createdAt),

public func issueDocumentsByOfferUrl(offerUri: String, docTypes: [OfferedDocModel], docTypeKeyOptions: [String: KeyOptions]? = nil, promptMessage: String? = nil, claimSet: ClaimSet? = nil) async throws -> [WalletStorage.Document] ## v0.3.3 VP draft 13 support

Breaking change:

// PresentationSession## v0.3.2 @Published public var deviceEngagement: String?l updates for security checks use the following code to convert to QR code image:

v0.3.1

let qrImage = DeviceEngagement.getQrCodeImage(qrCode: d) presentation definition parsing

v0.3.6## v0.3.0

Updated eudi-lib-ios-siop-openid4vp-swift to v0.0.74 eudi-lib-ios-siop-openid4vp-swift to 0.0.72 Updated eudi-lib-ios-openid4vci-swift to v0.0.7

v0.2.9

v0.3.5DOC authentication MAC validation error for mDL document type

Updated eudi-lib-ios-siop-openid4vp-swift to v0.0.73 Updated eudi-lib-ios-openid4vci-swift to v0.0.6## v0.1.7 elete documents func

v0.3.4

  • Refactor MdocDecodable (DocType, DocumentIdentifier, createdAt),### MdocDataModel18013 DisplayStrings is recursive (cbor elements can be dictionaries)

v0.3.3ren: [NameValue]` property (tree-like structure)

  • OpenID4VP draft 13 supportage]' property

v0.3.2

  • Internal updates for security checks

v0.3.1- PresentationSession: add `readerCertIssuerValid`` (is verifier certificate trusted)

  • Updated presentation definition parsingtationSession: change readerCertIssuer`` (has verifier certificate common name) () -> [String: Any]`

v0.3.0

  • Updated eudi-lib-ios-siop-openid4vp-swift to 0.0.72 et (#86) via @phisakel

v0.2.9ital-identity-wallet/eudi-lib-ios-wallet-kit/pull/74)) via @phisakel

  • Fixed mDOC authentication MAC validation error for mDL document type- Update documentation links in README.md (#82) via @phisakel ocumentation in README.md (#81) via @phisakel

v0.1.7

  • Added delete documents func
  • Storage manager functions are now async throws.com/phisakel)

MdocDataModel18013com/phisakel)

  • extractDisplayStrings is recursive (cbor elements can be dictionaries)
  • NameValue: added var children: [NameValue] property (tree-like structure)akel](https://github.com/phisakel)
  • MdocDecodable: added 'var displayImages: [NameImage]' property

v0.1.6allet-kit/pull/68)) via @phisakel

  • Add isMandatory property to DocElementsViewModel structure via @phisakel
  • PresentationSession methods do not run on main actor) via @phisakel
  • PresentationSession: add `readerCertIssuerValid`` (is verifier certificate trusted)com/phisakel)
  • PresentationSession: change `readerCertIssuer`` (has verifier certificate common name)
  • MdocDecodable: add extension method: public func toJson() -> [String: Any]

Pull requests

  • Update eudi-lib-ios-openid4vci-swift to version 0.4.2 and add new properties to EudiWallet (#86) via @phisakel
  • Refactor to support Deferred document issuing (#74) via @phisakel56)) via @phisakel
  • Update documentation links in README.md (#82) via @phisakelb.com/phisakel)
  • Docs: update documentation in README.md (#81) via @phisakel
  • VP version 0.3.2, docs with Swift-DocC Plugin (#80) via @phisakelgithub.com/phisakel)
  • Update PGP Key link (#79) via @mgiakkou
  • Update eudi-lib-ios-openid4vci-swift to version 0.3.1 (#78) via @phisakelom/phisakel)
  • Allow Self-Signed SSL for OpenId4VCI and OpenId4VP (#76) via @phisakel/github.com/phisakel)
  • [fix] pre-auth fixes in libs (#75) via @dtsiflitl/44)) via @phisakel
  • Support Pre-Authorized Code Flow - Wallet-kit (iOS) (#72) via @phisakelttps://github.com/phisakel)
  • Fix swift.yml (#71) via @phisakelbashov)
  • Credential offer URL parsing issue for iOS16 (#69) via @phisakelservosNCIN)
  • Update eudi-lib-ios-iso18013-data-model and eudi-lib-ios-iso18013-data-transfer dependencies (#68) via @phisakel
  • Update eudi-lib-ios-siop-openid4vp-swift to version 0.1.1, fix verifier display name, valid status (#67) via @phisakel
  • Update eudi-lib-ios-siop-openid4vp-swift to version 0.1.0 (#64) via @phisakel
  • Update eudi-lib-ios-siop-openid4vp-swift to version 0.1.0 (#64) via @phisakel
  • Update openid4vci library to version 0.1.2 (#62) via @phisakeli-lib-ios-wallet-kit/pull/34)) via @phisakel
  • Update eudi-lib-ios-openid4vci-swift to version 0.0.9 (#61) via @phisakel
  • Issuing - Support for credential offer (#45) via @phisakelkel)
  • OpenID4VCI draft13 support (#31) via @phisakel)
  • Simplify Storage Manager API (#59) via @phisakel
  • Openid4vp and BLE should support sending response with multiple documents of the same doc-type (iOS) (#56) via @phisakel@phisakel](https://github.com/phisakel)
  • Refactor to support IssuerSigned CBOR structure [iOS] (#53) via @phisakel
  • Changelog.md update (#51) via @phisakel
  • Vci offer fix for filtering resolved identifiers (#50) via @phisakel
  • Support mdoc Authentication for OpenId4Vp (#46) via @phisakel
  • OpenID4VCI: Allow partial issuing when some documents fail to issue (#48) via @phisakel
  • Issuing - Support for credential offer (#45) via @phisakel.com/phisakel)
  • Support OpenID4VCI credential offer (resolution of credential offer, issuing of specific doc types) (#44) via @phisakelithub.com/phisakel)
  • Chore: Update dependencies for udi-lib-ios-iso18013-data-transfer to … (#43) via @phisakel
  • Return the QR code to the device engagement in string representation (#42) via @akarabashov](https://github.com/phisakel)
  • Centralization of sec workflows (#21) via @christosservosNCIN
  • [fix] sdjwt case fix (#36) via @dtsiflit
  • Update openid4vci library to v0.0.7 (#39) via @phisakel
  • Update OpenID4VP to v0.0.74 (#37) via @phisakel
  • Update dependencies to latest versions (#35) via @phisakelsakel](https://github.com/phisakel)
  • Update dependencies and refactor StorageManager to support multiple documents with same docType (#34) via @phisakel
  • Update changelog.md (#32) via @phisakel
  • Update dependencies and changelog (#30) via @phisakel/phisakel)
  • Updates due to security helpers changes (#29) via @phisakelithub.com/phisakel)
  • Updated Presentation Definition Parsing (#28) via @phisakelithub.com/phisakel)
  • Update eudi-lib-ios-siop-openid4vp-swift to version 0.0.72 (#27) via @phisakel
  • Check if iaca variable is nil, refactor to use multiple device private keys (#23) via @phisakel
  • Update README.md (#25) via @vkanellopoulos- Update SECURITY.md (#22) via @vkanellopoulos- Use subjectDistinguishedName for openID4vp verifier, update packages (#20) via @phisakel- Fix for verifier name (#19) via @phisakel- Reader auth for openid4vp, readme overview (#18) via @phisakel
  • SendResponse takes an onSuccess callback function (#17) via @phisakel
  • Add BlueECC dependency and update eudi-lib-ios-siop-openid4vp version (#16) via @phisakel
  • OpenID4VciRedirectUri public property in wallet kit (#15) via @phisakel
  • Changes for Secure Enclave use (#14) via @phisakel
  • Fixes after updating OpenID4VCI library (#13) via @phisakel
  • Issue documents using OpenID4VCI protocol (#12) via @phisakel
  • Bug fixes for storage manager (#11) via @phisakel
  • Method to begin presentation using any custom PresentationService (#10) via @phisakel
  • Update README and SECURITY.md files (#9) via @phisakel
  • Added delete documents func to wallet kit (#8) via @phisakel
  • Make storage manager methods async throws (#7) via @phisakel
  • Update Package.resolved and add isMandatory property to DocElementsViewModel structure (#6) via @phisakel
  • Develop: limit main actor usage, reader cert variables (#5) via @phisakel
  • Update License and Copyright (#4) via @phisakel
  • Develop (#3) via @phisakel