It seems like every nation is dealing with the plague a little differently. In June, the EU instated a COVID Green Pass which comes in the form of a paper or digital QR code. It was designed to grease the wheels of travel throughout Europe and allow access to nursing homes. As of early August, the Green Pass is now required of those 12 and older in Italy to gain access to bars and restaurants, museums, theaters, etc. — anywhere people gather in sizeable groups. The Green Pass shows that you’ve either been vaccinated, have had COVID and recovered, or you have tested negative, and there are different half-lives for each condition: nine months for vaccinated, six for recovered, and just forty-eight hours for a negative test.
[Luca Dentella] has built a Green Pass validator using a Raspberry Pi and a Raspi camera. Actual validation must be done through the official app, so this project is merely for educational purposes. Here’s how it works: the user data including their status and the date/time of pass issuance are encoded into a JSON file, then into CBOR, then it is digitally signed for authenticity. After that, the information is zipped up into a base-45 string, which gets represented as a QR code on your phone. Fortunately, [Luca] found the Minister of Health’s GitHub, which does the hard work of re-inflating the JSON object.
[Luca]’s Pi camera reads in the QR and does complete validation using two apps — a camera client written in Python that finds QRs and sends them to the validation server, written in Node.js. The validation server does formal verification including verifying the signature and the business rules (e.g. has it been more than 48 hours since Karen tested negative?) Fail any of these and the red LED lights up; pass them all and you get the green light. Demo video is after the break.
Are you Canadian? Then check this out, eh?