Home

Awesome

<!--suppress HtmlDeprecatedAttribute --> <h1 align="center"> <br> <a href="https://www.sphereon.com"><img src="https://sphereon.com/content/themes/sphereon/assets/img/logo.svg" alt="Sphereon" width="400"></a> <br>Mobile Wallet (iOS/Android) <br> </h1>
<h3>Warning: The wallet is currently in a beta stage and still incomplete</h3> Certain functionality might not be available yet <br/> <br/> <div> <a href='https://apps.apple.com/us/app/sphereon-wallet/id1661096796'><img alt='Download on the App Store' src='./docs/img/stores/appstore.svg' width='250px;'/></a> <br/> <a href='https://play.google.com/store/apps/details?id=com.sphereon.ssi.wallet&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' src='./docs/img/stores/play-store.png' width='250px'/></a></div>

Table of content:

Sphereon Wallet

The Sphereon Wallet is a new breed of open standards, open-source, privacy-preserving applications, that gives you full and sole control over your own information. It enables you to manage your own data.

Introduction

Your data is stored nowhere else but on your phone. Nobody else will have access unless you decide to share it with them. Only you decide if you want to share your data with someone else.

The Sphereon Wallet is build around W3C Decentralized Identifiers and can receive W3C Verifiable Credentials from Issuers and present them to Verifiers.

The wallet is build using our Apache2 open-source licensed SSI-SDK and its key/DID extensions, which you can use to create Issuer and Verifier agents as well as mobile and web wallets.

Intro

Technologies supported

The wallet supports or soon (*) will the following features:

Onboarding

Since the Wallet is a so-called Self Sovereign Identity Wallet, no information you provide during the onboarding will be shared with any external. That includes the developer (Sphereon) of the Wallet. You will always be asked when receiving or sharing data with external systems. The user details you provide during the onboarding are used for personalization, supporting multiple profiles and future features of the Wallet. There is no e-mail validation or external system involved.

The onboarding process

  1. Launch the Sphereon Wallet
  2. Once you start the Sphereon Wallet the first time you will be greeted by the Welcome screen:
<img src="./docs/img/onboarding/1_welcome.jpg" width=33% height=33%>
  1. Click the button at the bottom and read the Welcome texts.
  2. After clicking the button at the bottom on the 3rd screen you will go to the Terms and Conditions screen:
<img src="./docs/img/onboarding/2_tc.jpg" width=33% height=33%>
  1. Make sure to enable boxes at the bottom, otherwise you will not be able to use the wallet
  2. After clicking Accept you will go to the Personal Details screen:
<img src="./docs/img/onboarding/3_personal_data.jpg" width=33% height=33%>
  1. Fill out your personal details to personalize the wallet. No information will be shared! Click on Next:
<img src="./docs/img/onboarding/4_pincode_enter.jpg" width=33% height=33%>
  1. Enter a pincode which you need to remember (right now there is no way to recover your pincode!). After you entered 6 digits you will go to the verify pincode screen:
<img src="./docs/img/onboarding/5_pincode_verify.jpg" width=33% height=33%>
  1. After having entered the pincode a 2nd time for verification, you will go to the Personal Details overview screen:
<img src="./docs/img/onboarding/6_personal_data_overview.jpg" width=33% height=33%>
  1. Review the details and go back to previous screens if you have made an error. If everything is okay click on the " Finalize and go to my wallet" button.
  2. The wallet is being setup and a loading screen appears:
<img src="./docs/img/onboarding/7_setup_loading.jpg" width=33% height=33%>
  1. You will now enter the general Verifiable Credential Overview screen:
<img src="./docs/img/onboarding/8_vc_overview.jpg" width=33% height=33%>
  1. Congratulations. You have successfully onboarded, and you have created a first self-asserted Verifiable Credential using the Wallet.

Receiving Credentials from an Issuer

You can receive Verifiable Credential from so called issuers. The wallet has support for multiple open standards to get these Credentials. Currently on the OpenID for Verifiable Credential Issuance standard is enabled.

OpenID for Verifiable Credential Issuance (OID4VCI) process

The current wallet only supports the new OID4VCI specification for receipt of credentials. To get a credential issued to the wallet, using OpenID for Verifiable Credential Issuance (OpenID4VCI) the following steps can be followed. The below issuer systems were part of the JFF/W3C-EDU plugfest 2 to show interop for OpenID4VCI. Please note that the Verifiable Credentials issued by the below list are just for demo/testing purposes.

  1. Launch the wallet
  2. Navigate to the QR reader at the bottom left.
  3. Scan one of the QR codes of the following issuers:

These 4 links are Sphereon demo issuers, branded differently

Other issuers:

  1. The first time you encounter an Issuer or Verifier system a Contact needs to be created. The Wallet will pre-fill a suggest name:
<img src="./docs/img/issuance/2_add_contact.jpg" width=33% height=33%>
  1. Please note that you have to press the Accept button and make sure the checkbox is enabled

  2. Depending on whether the issuer supports issuing multiple credentials or not, you will have to make a selection. Note that the current wallet can only accept one credential at a time!

<img src="./docs/img/issuance/3_select_creddential_type.jpg" width=33% height=33%>
  1. Depending on whether the issuer is requiring a Pincode you will have to enter a pincode. Note this is not the pincode of your wallet!:
<img src="./docs/img/issuance/4_enter_pin.jpg" width=33% height=33%>
  1. You now will go to the Credential Offer screen, which is showing you the offered Credential:
<img src="./docs/img/issuance/5_credential_offer.jpg" width=33% height=33%>
  1. Review the Credential Offer and decide to either accept or decline the credential.
  2. If you accept the offer you will go to the Verifiable Credenital Overview screen and you will see the following message:
<img src="./docs/img/issuance/6_credential_accepted.jpg" width=33% height=33%>

Sharing Credentials with a Verifier

You can share Verifiable Credentials with so called Verifiers or Relying Parties. The wallet has support for multiple open standards to share these Credentials. Currently on the OpenID for Verifiable Presentations standard is enabled.

OpenID for Verifiable Presentations (OID4VP) process

The current wallet supports the new OID4VP specification for sharing credentials. To share a credential from the wallet with the Verifier, using OpenID for Verifiable Presentations (OID4VP) the following steps can be followed. Please note that the Verifiable Credentials shared with the below list should only be used for demo/testing purposes.

  1. Launch the wallet

  2. Navigate to the QR reader at the bottom left.

  3. Scan one of the QR codes of the following verifiers:

    • Sphereon (needs the branded Sphereon credential from the Sphereon issuer)
    • Dutch Blockchain Coalition (Use the login button/screen. It needs the branded DBC credential from the Dutch Blockchain Coalition issuer)
    • Future Mobility Data Marketplace (Use the login button top-right. It needs the branded FMDM credential from the Future Mobility Alliance issuer)
    • Auth0 (change the uri: "uri": "<CREDENTIAL_TYPE>" to "uri": "SphereonWalletIdentityCredential")
    <br> <img src="./docs/img/share/1_qr_reader.jpg" width=33% height=33%>
  4. The first time you encounter an Issuer or Verifier system a Contact needs to be created. The Wallet will pre-fill a suggest name:

<img src="./docs/img/share/2_add_contact.jpg" width=33% height=33%>
  1. Please note that you have to press the Accept button and make sure the checkbox is enabled

  2. You will now go to the overview screen from where you will have to select the required Verifiable Credentials from your wallet. An error will be displayed if the Verifier is asking information not present in your wallet

<img src="./docs/img/share/3_required_credentials.jpg" width=33% height=33%>
  1. You need to click on the list items in the screen showing "Select a credential". The texts in these list items come from the Verifier and should provide you with hints on why the information is needed.
  2. After you click on a single list-item for a specific input requirement, you will go to the overview screen of available Verifiable Credentials that can satisfy this requirement:
<img src="./docs/img/share/4_available_credentials.jpg" width=33% height=33%>
  1. On the available credentials screen you can directly touch/select the Credential using the image or checkbox. Or you can click on the text next to it, to actually view the details of the Credential:
<img src="./docs/img/share/5_select_credential.jpg" width=33% height=33%>
  1. No matter what step you followed, you will now see 1 credential selected (the current wallet only supports 1 credential per input requirement, but does support multiple input requirements from a Verifier)
<img src="./docs/img/share/6_requirements_met.jpg" width=33% height=33%>
  1. The share button should now be enabled and you should see a green checkmark next to the input requirement. Click on Share:
<img src="./docs/img/share/7_credentials_shared.jpg" width=33% height=33%>
  1. The credential has now been successfully shared with the Verifier. Typically the Verifier system will show you some message or change it's screen

License

Please note that this wallet is licensed as GPLv3, meaning restrictions apply. Sphereon does offer commercial licenses without these restrictions. The wallet is mainly build around our SSI-SDK which is more liberal licensed. We chose this approach to protect the IP and designs of the wallet a bit more.

Developers

Utility scripts

There are several other utility scripts that help with development.

Requirements

SSI Wallet uses Expo SDK v48 and React-Native v0.71.

Node

Use a nvm (Node Version Manager) or directly install a LTS version of NodeJS. The version of NodeJS should be 18.x.x which is required for RN 0.71 to work. The app is not guaranteed to work with higher Node versions and it will certainly not work with lower Node versions.

Use <code>nvm list available</code> to list the available versions of Node.

Then install and make it the default. Please ensure you have proper permissions. On Windows this can mean running the command prompt or powershell as administrator!

Example:

nvm install 20
nvm use 20

You can use the following command to check the node version.

nvm current

<b>NOTE</b>: After installation be sure to close the terminal window. If installed from your IDE, be sure to close the IDE and start it (do not restart, as it might not pick up the latest environment variables)

Yarn

We use Yarn as package manager. Install it with the following command:

npm install --global yarn

<b>NOTE</b>: After installation be sure to close the terminal window. If installed from your IDE, be sure to close the IDE and start it (do not restart, as it might not pick up the latest environment variables)

Starting the SSI-Wallet

The SSI-Wallet can be started by running one of the following commands.

Android

expo android:start

For Android you need to make sure that your wallet is connect using a USB cable and that developer options are enabled. If you do not connect the phone using USB it will start the Android emulator instead

By default, it uses port 8081.

iOS

You will have to use Xcode directly for now. We will work on getting the below command working.

expo ios:start  // Please note this command currently doesn't work

Run the below commands on the command line to update all dependencies.

yarn install
cd ios
pod install

In XCode select the Product -> Run option from the menu. (If you want to create a archive for instance for TestFlight, you can choose Product -> Archive). It will take some time for the app to start. In some circumstances you might not get directly to the app. If that is the case lookup whether the Sphereon Wallet application can be found in you apps. If so start it from there. You should see the bundler starting.