eu-digital-identity-wallet / eudi-app-ios-wallet-ui

EUDI Wallet Prototype
European Union Public License 1.2
32 stars 11 forks source link

EUDI iOS Wallet reference application

:heavy_exclamation_mark: Important! Before you proceed, please read the EUDI Wallet Reference Implementation project description


Table of contents

Overview

The EUDI Wallet Reference Implementation is built based on the Architecture Reference Framework and aims to showcase a robust and interoperable platform for digital identification, authentication, and electronic signatures based on common standards across the European Union. The EUDI Wallet Reference Implementation is based on a modular architecture composed of business-agnostic, reusable components that will evolve in incremental steps and can be re-used across multiple projects.

The EUDI Wallet Reference Implementation is the application that allows users to:

  1. To obtain, store, and, present PID and mDL.
  2. Verify presentations.
  3. Share data on proximity scenarios.
  4. Support remote QES and more use cases with the modules included.

The EUDIW project provides through this repository an iOS app. Please refer to the repositories listed in the following sections for more detailed information on how to get started, contribute, and engage with the EUDI Wallet Reference Implementation.

💡 Specifications Employed

The app consumes the SDK called EUDIW Wallet core Wallet kit and a list of available libraries to facilitate remote presentation, proximity, and issuing test/demo functionality following specification of the ARF including:

Relying Party functionality:

To support development and testing, one can access a test/demo service for remote presentation at:

To support proximity an Android Proximity Verifier is available as an app that can request PID and mDL with reader authentication available here

The issuer, verifier service, and verifier app authentication are based on the EUDIW development IACA

Important things to know

The main purpose of the reference implementation is to showcase the ecosystem and act as a technical example of how to integrate and use all of the available components.

If you're planning to use this application in production, we recommend reviewing the following steps:

How to contribute

We welcome contributions to this project. To ensure that the process is smooth for everyone involved, follow the guidelines found in CONTRIBUTING.md.

Demo videos

(NOTE: These videos are from the Android version)

Issuance

Issuance

Presentation

Presentation

Proximity

Proximity

How to use the application

Minimum device requirements

Prerequisites

To complete the flows described below you need to build and run the application with xcode. Alternatively, you can directly download the Android app onto your device.

App center download method (Android app)

In addition to building the app from the source, you can also use the Android app which you can download here

Run the app from the source (xcode build)

Clone this repo and make sure you have access to the dependencies below:

iso18013-data-model

iso18013-data-transfer

iso18013-security

wallet-storage.

wallet-kit

openid4vp-swift

presentation-exchange-swift

openid4vci-swift

You will also need to download the Android Verifier app. More information can be found here

App launch

  1. Launch the application
  2. You will be presented with a welcome screen where you will be asked to create a PIN for future logins.

Issuance flow (Scoped)

  1. Open the "Add document" screen or if it's the first time you open the app, you will be redirected there after you enter or set up your PIN.
  2. Pick "National ID".
  3. From the web view that appears select the "FormEU" option and tap submit.
  4. Fill in the form. Any data will do.
  5. You will be shown a success screen. Tap next.
  6. Your "National ID" is displayed. Tap "Continue".
  7. You are now on the "Dashboard" screen.

Issuance flow (Credential Offer)

  1. Open the "Add document" screen or if it's the first time you open the app, you will be redirected there after you enter or set up your PIN.
  2. Tap "SCAN QR".
  3. Scan The QR Code from the issuer's website EUDI Issuer
  4. Review the documents contained in the credential offer and tap "Issue".
  5. You will be shown a success screen. Tap "Continue".
  6. You are now on the "Dashboard" screen.

While on the "Dashboard" screen you can tap "Add doc" and issue a new document, e.g. "Driving License".

If you want to re-issue a document, you must delete it first by tapping on it in the "Dashboard" screen and tapping the delete icon in the "Document details" view.

Presentation (Online authentication/Same device) flow.

  1. Go to the browser application on your device and enter "https://verifier.eudiw.dev"
  2. Select scenario "PID Authentication"
  3. Expand the Person Identification Data (PID) card and select "attributes by" -> "Specific attributes" and "format" -> the format of your choice.
  4. Press next and then "Select Attributes"
  5. Pick the fields you want to share (e.g. "Family Name" and "Given Name")
  6. Review your presentation request and then click next.
  7. When asked to open the wallet app tap "Open".
  8. You will be returned to the app's "Request" screen. Tap "Share."
  9. Enter the PIN you added in the initial steps.
  10. On success tap "Continue".
  11. A browser will open showing that the Verifier has accepted your request.
  12. Return to the app. You are back on the "Dashboard" screen, and the flow is complete.

Proximity flow

  1. The user logs in successfully to the EUDI Wallet app and views the dashboard.
  2. The user clicks the 'SHOW QR' button to display the QR code.
  3. The Relying Party scans the presented QR code.
  4. EUDI Wallet User can view the requested data set from the relying party.
    1. The distinction between mandatory and optional data elements is depicted.
    2. The requestor (i.e. relying party) of the data is depicted.
    3. EUDI Wallet User may select additional optional attributes to be shared.
  5. EUDI Wallet User selects the option to share the attributes.
  6. EUDI Wallet authenticates to share data (quick PIN).
  7. User authorization is accepted - a corresponding message is displayed to the EUDI Wallet User.

How to build - Quick start guide

This document describes how you can build the application and deploy the issuing and verification services locally.

Application configuration

You can find instructions on how to configure the application here

Disclaimer

The released software is an initial development release version:

Package structure

logic-resources: All app resources reside here (images, etc.)

logic-core: Wallet core logic.

logic-analytics: Access to analytics providers. Capabilities for test monitoring analytics (i.e. crashes) can be added here (no functionality right now)

logic-business: App business logic.

logic-authentication: PinStorage and System Biometrics Logic.

logic-ui: Common UI components.

feature-common: Code that is common to all features.

feature-login: Login feature.

feature-dashboard: The application's main screen.

feature-startup: The initial screen of the app.

feature-presentation: Online authentication feature.

feature-issuance: Document issuance feature.

feature-proximity: Proximity scenarios feature.

logic-assembly: This module has access to all the above modules and assembles navigation and DI graphs.

graph TD;
  logic-business --> logic-authentication
  logic-core --> logic-authentication
  logic-analytics --> logic-authentication
  logic-resources --> logic-authentication

  feature-common --> logic-assembly
  feature-startup --> logic-assembly
  feature-login --> logic-assembly
  feature-dashboard --> logic-assembly
  feature-presentation --> logic-assembly
  feature-issuance --> logic-assembly
  feature-proximity --> logic-assembly

  logic-business --> logic-core
  logic-resources --> logic-core

  logic-business --> logic-analytics

  feature-common --> feature-issuance

  feature-common --> feature-proximity

  feature-common --> feature-presentation

  feature-common --> feature-dashboard

  feature-common --> feature-login

  logic-core --> feature-common
  logic-business --> feature-common
  logic-analytics --> feature-common
  logic-ui --> feature-common
  logic-api --> feature-common
  logic-authentication --> feature-common

  feature-common --> feature-startup

  logic-core --> logic-api
  logic-business --> logic-api
  logic-analytics --> logic-api

  logic-resources --> logic-business

  logic-business --> logic-ui
  logic-analytics --> logic-ui
  logic-resources --> logic-ui

  logic-core --> logic-ui

License

License details

Copyright (c) 2023 European Commission

Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence"); You may not use this work except in compliance with the Licence.

You may obtain a copy of the Licence at: https://joinup.ec.europa.eu/software/page/eupl

Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Licence for the specific language governing permissions and limitations under the Licence.