dgc 0.0.7

A parser and validator for the EU Digital Green Certificate (dgc) a.k.a. greenpass
Documentation
use std::convert::TryInto;

use serde_json::json;

fn main() {
    // The repo https://github.com/section42/hcert-trustlist-mirror contains a sync of the trustlist of various
    // participating countries.
    // You can easily load keys from the files provided there into a trustlist

    // Every file/API per country has a different format, but this library implements a convenience utility that can create
    // a trustlist directly from the IT format (see https://github.com/section42/hcert-trustlist-mirror/blob/main/trustlist_it.json)

    let data = json!({
        "25QCxBrBJvA=": {
            "serialNumber": "3d1f6391763b08f1",
            "subject": "C=HR, O=AKD d.o.o., CN=Croatia DGC DS 001",
            "issuer": "C=HR, O=AKD d.o.o., CN=Croatia DGC CSCA",
            "notBefore": "2021-05-20T13:17:46.000Z",
            "notAfter": "2023-05-20T13:17:45.000Z",
            "signatureAlgorithm": "ECDSA",
            "fingerprint": "678a9b63d73aa4e82ce35b455fbe8363feee98c4",
            "publicKeyAlgorithm": {
                "hash": {
                    "name": "SHA-256"
                },
                "name": "ECDSA",
                "namedCurve": "P-256"
            },
            "publicKeyPem": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEt5hwD0cJUB5TeQIAaE7nLjeef0vV5mamR30kjErGOcReGe37dDrmFAeOqILajQTiBXzcnPaMxWUd9SK9ZRexzQ=="
        },
        "NAyCKly+hCg=": {
            "serialNumber": "01",
            "subject": "C=DK, O=The Danish Health Data Authority, OU=The Danish Health Data Authority, CN=PROD_DSC_DGC_DK_01, E=kontakt@sundhedsdata.dk",
            "issuer": "C=DK, O=The Danish Health Data Authority, OU=The Danish Health Data Authority, CN=PROD_CSCA_DGC_DK_01, E=kontakt@sundhedsdata.dk",
            "notBefore": "2021-05-19T09:47:25.000Z",
            "notAfter": "2023-05-20T09:47:25.000Z",
            "signatureAlgorithm": "ECDSA",
            "fingerprint": "a6bbf6b1a1aca900a7c0b99e6e831272dff23e9e",
            "publicKeyAlgorithm": {
                "hash": {
                    "name": "SHA-256"
                },
                "name": "ECDSA",
                "namedCurve": "P-256"
            },
            "publicKeyPem": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBmdgY/VORsecXxY/0xNNOzoJNRaVnMMmHs5jiXrGvaDOy1jzDUOyvR++Jxgf0+YuGyp5/UAY0QIh75b+JQnlHA=="
        } // ... more data here
    });

    let trustlist: dgc::TrustList = data
        .try_into()
        .expect("Failed to create trustlist from JSON data");

    println!("{:?}", trustlist);

    // More infos on where to find the varius trustlists can be found in this GitHub conversation:
    // https://github.com/eu-digital-green-certificates/dgc-participating-countries/issues/10
}