This package offers simple API calls to Decode, Encode and Verify Vaccine Passes. APIs are subject to changes as improvements are made.
Go get the module to import it into your project
go get -u github.com/reznik99/go-dcc
Below is some examples of how you can use this package, without explicit error handling for simplicity's sake
To generate a Vaccine Pass using data from data.json
import (
"github.com/reznik99/go-dcc"
)
func main() {
// Base64 of first 8 bytes in Signer Certificate
kid := "dy8HnMQYOrE="
// Generate or load Signer Key
privKey, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
// Generate/Sign Vaccine Pass and save as QR code
dcc.GenerateQR(privKey, kid, "/path/to/data.json", "/path/to/new-pass.png")
// Generate/Sign Vaccine Pass Raw string "HC1:..."
dcc.Generate(privKey, kid, "/path/to/data.json")
}
To validate/verify a Vaccine Pass
import (
"github.com/reznik99/go-dcc"
)
func main() {
// Parse Raw Vaccine Pass
_, rawMsg, _ := dcc.Parse("/path/to/mypass.txt")
// Parse QR Code Vaccine Pass
_, rawMsg, _ := dcc.ParseQR("/path/to/mypass.png")
// Verify Vaccine Pass signature. note: currently slow! This will fetch the PEM Signer Certificates and KIDs
valid, _ := dcc.Verify(rawMsg)
fmt.Printf("Vaccine Pass Valid: %t\n", valid)
}
To decode/read a Vaccine Pass
import (
"fmt"
"github.com/reznik99/go-dcc"
"github.com/ethereum/go-ethereum/common/hexutil"
)
func main() {
// Parse Raw Vaccine Pass
payload, _, _ := dcc.Parse("/path/to/mypass.txt")
// Parse QR Code Vaccine Pass
payload, _, _ := dcc.ParseQR("/path/to/mypass.png")
// Print contents to STDOUT
prettyDCC, _ := json.MarshalIndent(payload, "", " ")
fmt.Printf("Headers: %v\n", rawMsg.Headers)
fmt.Printf("Payload: %s\n", prettyDCC)
fmt.Printf("Signature: %s\n", hexutil.Encode(rawMsg.Signature))
}
Example JSON data file
{
"name": "JOHN",
"surname": "DOE",
"dob": "1996-06-06",
"issuerCountry": "NZ",
"issuer": "Ministry of Health, NZ",
"vaccinationDate": "2021-10-21",
"doses": 2
}
For more examples, please refer to the Documentation
See the open issues for a full list of proposed features (and known issues).
Distributed under the MIT License. See LICENSE
for more information.
Francesco Gorini - [email protected] - https://francescogorini.com
Project Link: https://github.com/reznik99/go-dcc/