Web app for adding EU Digital COVID Certificates to your wallet apps

Overview

CovidPass

This web app offers the ability to add your EU Digital Covid Vaccination Certificates as a pass into your favorite wallet apps on iOS/watchOS or Android/wearOS. CovidPass accomplishes this without sending your data to a server and instead only uses a hashed representation for the signing step.

Getting started

If you want to add your vaccination certificate into your wallet with CovidPass, there are two main options.

  • Use the CovidPass web app hosted by us
  • Use your own Apple Developer Certificate to generate a pass

Note that the latter option requires you to have an Apple Developer Account and is a more complicated process.

Quick start

Using our service

Running it yourself

Note that the following options do not have support for actually converting your certificates as they lack the API connection for the signing step. You can read about how you can use your own Apple Developer Certificate in the chapter below.

Debug the web app

yarn install
yarn dev

Run the Docker container

docker build . -t covidpass
docker run -t -i -p 3000:3000 covidpass

Deploy on your own server

We have a separate repository containing a docker-compose file which you can use for your own deployment of CovidPass.

FAQ

I do not want to trust a third party with my vaccination data, what makes this a secure option?

Processing of your data happens entirely in your browser and only a hashed representation is sent to the server for the signing step.

How do I make sure that nobody can access my vaccination pass from the lock screen (iOS)?

Navigate to the "TouchID & Code" or "FaceID & Code" or just "Code" section in the Settings and switch the toggle to off for Wallet in the section "Allow access from the lock screen". Also see this official guide from Apple.

Why don't the official apps offer this feature?

The official apps like Corona-Warn-App have decided against this feature due to security concerns. For example, this was discussed here or here.

Why is my certificate not recognized?

We are in an early development stage and actively working on improving support for all EU countries. Feel free to create an issue describing the problem you faced.

Using your own Apple Developer Certificate

Get your certificate

  • Sign into your Apple Developer Account

  • Go to Certificates, Identifiers and Profiles

  • Register a new Pass Type Identifier under the Identifiers tab

  • Create a new Pass Type ID Certificate under the Certificates tab

  • Select your previously created Pass Type Identifier in the process

  • Move your new certificate to the My Certificates tab in the keychain

  • Export your certificate as a .p12 file

  • Install node.js and download the passkit-keys script

  • Create a keys folder and put the .p12 file inside

  • Run ./passkit-keys

  • You may have to type in the passphrase you defined during the export step

  • Base64 encode the contents of the newly generated .pem file inside the keys folder

Run the API locally

A description of how you can use your certificate locally with the API will be provided in the readme of the CovidPass API. To connect the web app to your local server, you have to set the API_BASE_URL environment variable accordingly.

Explanation of the process

The whole process of generating the pass file happens locally in your browser. For the signing step, only a hashed representation of your data is sent to the server.

First, the following steps happen locally in your browser:

  • Recognizing and extracting the QR code data from your selected certificate
  • Decoding your personal and health-related data from the QR code payload
  • Assembling an incomplete pass file out of your data
  • Generating a file containing hashes of the data stored in the pass file
  • Sending only the file containing the hashes to the server

Second, the following steps happen on the server:

  • Receiving and checking the hashes which were generated locally
  • Signing the file containing the hashes
  • Sending the signature back

Finally, the following steps happen locally in your browser:

  • Assembling the signed pass file out of the incomplete file generated locally and the signature
  • Saving the file on your device

Privacy policy of our service

You can find the full privacy policy of our service here.

Credits

The idea for this web app originated from the solution of an Austrian web developer, which only works for Austrian certificates at the moment.

Contribute

Any contribution to this project is welcome. Feel free to leave your suggestions, issues or pull requests. We are also looking for people to translate this web app for all EU countries.

Comments
  • Possibility to make QR larger in size?

    Possibility to make QR larger in size?

    Using iPhone 11, the QR seems to be rather small. The Estonian government has came up with a website https://kontroll.digilugu.ee/ to test the validity of the passes. The website can not scan my wallet code as it's too small on my phone... Is there a possibility to make the QR larger?

    enhancement 
    opened by gregory-villmann 19
  • Provide more options for the design

    Provide more options for the design

    Please provide more colour options, for example like the green on the webpage and more pastel colours.

    Also should be an option to extract the name of the person in latin as for example now my pass contain my original name which is in Cyrillic and cannot be read in most of the EU countries :)

    enhancement 
    opened by vebaev 15
  • Not working with third dose health pass

    Not working with third dose health pass

    Hello,

    It seems that it does not work with a 3rd dose health pass. I have the message : Invalid QR code (for French health pass, Safari on iOS 15).

    Thanks.

    bug priority:high 
    opened by Jo-Panic 10
  • Certificate not shown on ios lock screen

    Certificate not shown on ios lock screen

    Some boarding and other passes shown if I open wallet from lock screen, but unfortunately I had to unlock my phone and open wallet app to see my vaccination certificate.

    Could you, please, add an option to show certificate without unlocking?

    not reproducible 
    opened by olfway 9
  • Accept other formats than pdf, direct access to camera and gallery

    Accept other formats than pdf, direct access to camera and gallery

    I don't have a certificate myself but I testet your solution with an demo code and it works like a charme.

    But I think it is a bit complicated to have to convert the image of the qr-code into pdf before you can use it.

    I've looked a bit into the code, but I'm not really an expert with js, but it looks like the pdf is rendered and then processed as image, so i think it should be possible to use images in the first place.

    And so the select element should be changed to allowing all 3 options (gallery, camera, files-app) too.

    This would be a good improvement and simplify the use of covidpass.

    enhancement good first issue priority:highest 
    opened by ezadoo 9
  • Reference to iOS 15.4 feature to store EU DCCs in Wallet (and Health)?

    Reference to iOS 15.4 feature to store EU DCCs in Wallet (and Health)?

    I think it would make sense to include a hint that a vaccination certificate can also be stored in the Apple Wallet without using this tool by scanning the QR code with the native iOS camera and adding it to Health & Wallet. Do you plan to include this?

    enhancement 
    opened by Ein-Tim 8
  • Colors from Human Interface Guidelines

    Colors from Human Interface Guidelines

    Took the colors from the Human Interface Guidelines for iOS

    The colors below are for the Light theme, we can also find the average color between the Light and Dark version so it suits every wallet more pleasantly but I'll open a PR with that if you like the idea.

    This implies that new localized keys must be added

    public static COLORS = {
      white:     'rgb(255, 255, 255)',
      black:     'rgb(0,   0,   0)',
      darGrey:   'rgb(44,  44,  46)',
      lightGrey: 'rgb(142, 142, 147)',
    
      red:       'rgb(255, 59,  48)',
      orange:    'rgb(255, 149, 0)',
      yellow:    'rgb(255, 204, 0)',
      green:     'rgb(52,  199, 89)',
      mint:      'rgb(0,   199, 190)',
      teal:      'rgb(48,  176, 199)',
      cyan:      'rgb(50,  173, 230)',
      blue:      'rgb(0,   122, 255)',
      indigo:    'rgb(88,  86,  214)',
      purple:    'rgb(175, 82,  222)',
      pink:      'rgb(255, 45,  85)',
      brown:     'rgb(162, 132, 94)',
    }
    
    enhancement 
    opened by everdrone 8
  • undefined is not an object (evaluating 't.decodedData[-260].v[0]')

    undefined is not an object (evaluating 't.decodedData[-260].v[0]')

    The following error message is displayed in a red rectangle on the bottom of the page when I click Add to Wallet. undefined is not an object (evaluating 't.decodedData[-260].v[0]')

    I have the same error when using the camera and also when scanning the PDF.

    It was working for vaccination QR codes (tested a couple of days ago). It failed for the negative PCR-test result QR code (tested today, 08.07.21).

    All QR codes I tested were officially generated by the authorities in Romania. Tested on: https://covidpass.marvinsextro.de/

    opened by valids 8
  • "Dimensions could not be found." error

    Hello @marvinsxtr when I tried the Greek localisation on my iOS phone running 14.7.0 and selecting GRAY colour for the exported Wallet item, I noticed an error "Dimensions could not be found". I am not sure if this was AFTER just the QR scan from camera OR the generation of the Wallet item, as it's on the bottom and I accidentally saw the error

    Here is the visual output:

    IMG_0168

    Where would this come from, any idea? Could it be due to the colour scheme or the localisation? Thank you.

    not reproducible 
    opened by mackonsti 7
  • Invalid Medical Product

    Invalid Medical Product

    Adding a certificate with the vaccine type: Biontech - Comirnaty, fails to create the pass with message "Invalid Medical Product" . The Astrazeneca vaccine works perfectly.

    Screenshot 2021-07-23 at 15 34 09

    opened by Grendas 7
  • [localisation] Added RO locale

    [localisation] Added RO locale

    Added RO locale May require changes in the future since romanian is missing some grammar parts that are required in as variables, I'll personally handle if neccesary all adaptation and changes to this localisation

    opened by KoNickss 6
  • Website discontinued

    Website discontinued

    Website is not available anymore but it’s still needed for people that have received the green pass after the covid-19 (functionality not available on iOS 15.4) pathology.

    wontfix 
    opened by Agosh13 3
  • Impossible to create card (null is not an object)

    Impossible to create card (null is not an object)

    I just discover the application and on my mac or iOS I can't create my card. On iOS safari I have the error null is not an object (evaluating 'a.t[0]')

    bug not reproducible 
    opened by The33Coder 0
  • Vaccination certifcates from Taiwan

    Vaccination certifcates from Taiwan

    Thanks for your great tool!

    Taiwan's EU Covid Certificates (https://www.cdc.gov.tw/En/Bulletin/Detail/uGl-4LQWPzLxrRbqxRaEsQ?typeid=158) list "Taiwan, Province of China" as country of vaccination. However, for all practical purposes Taiwan is not a Province of China. Also China is not issuing EU Covid Certifcates at the moment, so this would maybe cause some confusion somewhere.

    IMG_5F9BAAE5DC36-1

    For reference, the RKI CovPass app lists "Taiwan" as country of vaccination, the Corona Warn App lists "TW", both seem to be adequate solutions. The original PDF issued by Taiwan's Centers for Disease Control, Ministry of Health and Welfare lists "Republic of China (Taiwan) 中華民國" (bilingually) for country of vaccination.

    I tried to be more helpful by seeing if I can open a PR right away, but I noticed the app is using the EU data repository directly, so not sure what a good solution would be. Again note though that the CovPass and Corona Warn App list things correctly, so I do wonder what they are using as a data source.

    enhancement priority:high 
    opened by tbreier 1
  • QR code detection in PDFs sometimes fails

    QR code detection in PDFs sometimes fails

    Hi,

    the PDF upload of the EU COVID certificate (export from CWA) is only working if I rotate the PDF, so that the QR code is on the top right corner. It did not work with the default layout.

    Error message being shown: Could not find QR Code in provided file.

    iPhone X iOS: 15.2 Latest Safari w/ default settings CWA: 2.15.1 (2)

    enhancement 
    opened by fhibler 1
Releases(v0.5.3)
Solid.js library adding signaling to built-in non-primitives

This package provides signaled versions of Javascript's built-in objects. Thanks to it, all theirs properties will be automatically tracked while using standard API.

Maciej Kwaśniak 40 Dec 29, 2022
NestJS module for adding translations to the application, with a pipe for translating validation errors

nestjs-translates NestJS module for adding translations to the application, with a pipe for translating validation errors Installation npm i --save ne

ILshat Khamitov 6 Jul 26, 2022
A personal home page for quick access to all your personal apps/sites

Fenrus Fenrus personal home page/dasbhoard. It allows you to have a custom home page/new tab page with quick access to your personal apps. For support

John Andrews 196 Dec 31, 2022
A Pauli Test simulation app made with Web Component and RxJS

There was a discussion quite a while ago in Teknologi Umum about brain throughput or something. Basically it was about how long does your brain can maintain its performance. It was brought up because there was a discussion about typing speed and how someone can get high Words per Minute at the start but starts to slow down the longer they go.

elianiva 5 Jun 8, 2022
A user script for the web that allows you to view and edit files in the Godot Web Editor

Godot-Web-File-Manager This is a user script for the web that allows you to view and edit files in the Godot Web Editor. You can even use this to enab

Roujel Williams 4 Jan 31, 2022
A Sequelize web builder interface. To make your own sequelize schema

A Sequelize web builder interface. To make your own sequelize schema

Ulysse 5 Mar 9, 2022
AryaBota: An app to teach Python coding via gradual programming and visual output

AryaBota UI Development Note: Before you begin, make sure you have the back-end Flask app up and running. Visit aryabota-services to learn more about

null 5 Dec 18, 2021
This is a Todo app build with JS, HTML/CSS , Webpack

todo-list Todo List app Additional description about the project and its features. Built With HTML5 CSS3 Webpack JavaScript Live Demo Live Demo Link G

houssam hichami 6 May 22, 2022
NatsirtMC is a lightweight app allowing you to connect to any Minecraft server without having Minecraft open

NatsirtMC the only way to grind without grinding NatsirtMC is a lightweight app allowing you to connect to any Minecraft server without having Minecra

tristan 3 Dec 26, 2022
FriendAdvisor is a mobile app with a focus on allowing friends and family to coordinate and receive text notifications about upcoming group events.

FriendAdvisor is a mobile app with a focus on allowing friends and family to coordinate and receive text notifications about upcoming group events.

Brad Johnson 4 Sep 29, 2022
Math Magician is a single Page App that allows users to perform simple math calculations

Math Magician is a single Page App that allows users to perform simple math calculations

levy_ukwishaka 11 Apr 9, 2022
Bookmarklet to remove sticky elements and restore scrolling to web pages!

Bookmarklet to remove sticky elements and restore scrolling to web pages!

Tim Martin 648 Dec 29, 2022
Insider Unlocked is an ongoing web application

Insider Unlocked is an ongoing web application we have been co-developing for the past few months which aggregates stock trading data of US senators and presents it in a digestible manner for the average retail investor

null 3 Feb 13, 2022
A simple server application that allows you to perform Wake-on-LAN remotely with a web interface

WoL Helper A simple server application that allows you to perform Wake-on-LAN remotely with a web interface. Usage Install: npm install -g wol-helper

Hongbo 5 Jul 27, 2022
Estrela - a JavaScript library for building reactive web components inspired by lit

Estrela ⭐ Full Reactive Web Components Estrela is a JavaScript library for building reactive web components inspired by lit. Just like Lit, Estrela is

null 50 Oct 31, 2022
A PHP Laravel web application that uses most of Laravel technologies to build that gym system

A PHP Laravel web application that uses most of Laravel technologies to build that gym system.The System is based on rules. Admin, City Manager, Gym Manager. All Crud operations running using data tables.

Ashraf Eldawody 9 Dec 29, 2022
This web application retrieves real live data from the SpaceX API

This web application retrieves real live data from the SpaceX API. It provides commercial and scientific space travel services, by allowing users to book rockets and join selected space missions.

Sahar Abdel Samad 12 Aug 9, 2022
SPOILER ALERT! A happy little bit of javascript to hide spoilers on your site.

SPOILER ALERT! Don't spoil it! Hide copy and images with a bit of SVG blur. Taste on mouseover. Eat on click. Do you publish spoilers? Do you wish you

Joshua Hull 473 Sep 27, 2022
Free, open-source crypto trading bot, automated bitcoin / cryptocurrency trading software, algorithmic trading bots. Visually design your crypto trading bot, leveraging an integrated charting system, data-mining, backtesting, paper trading, and multi-server crypto bot deployments.

Free, open-source crypto trading bot, automated bitcoin / cryptocurrency trading software, algorithmic trading bots. Visually design your crypto trading bot, leveraging an integrated charting system, data-mining, backtesting, paper trading, and multi-server crypto bot deployments.

Superalgos 3.1k Jan 1, 2023