0.0.7 • Published 3 years ago

@pathcheck/cred-sdk v0.0.7

Weekly downloads
-
License
GPL-3.0-only
Repository
github
Last release
3 years ago

Verifiable QR SDK for PathCheck's URI DataModels

JavaScript Implementation of PaperCreds, a URI-based Verifiable QR Credentials.

Install

npm install @pathcheck/cred-sdk --save

Setting up the Keys and Key ID Resolver via DNS

Create a Private/Public Elliptic Curve Key Pair

Private Key:

openssl ecparam -name secp256k1 -genkey -out private.pem

It will generate something like:

-----BEGIN EC PARAMETERS-----
BgUrgQQACg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIPWKbSezZMY1gCpvN42yaVv76Lo47FvSsVZpQl0a5lWRoAcGBSuBBAAK
oUQDQgAE6DeIun4EgMBLUmbtjQw7DilMJ82YIvOR2jz/IK0R/F7/zXY1z+gqvFXf
DcJqR5clbAYlO9lHmvb4lsPLZHjugQ==
-----END EC PRIVATE KEY-----

Public Key:

openssl ec -in private.pem -pubout -out public.pem

Resulting in:

-----BEGIN PUBLIC KEY-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE6DeIun4EgMBLUmbtjQw7DilMJ82YIvOR
2jz/IK0R/F7/zXY1z+gqvFXfDcJqR5clbAYlO9lHmvb4lsPLZHjugQ==
-----END PUBLIC KEY-----

Publish the Public Key in the DNS

Separate the Base64 component of the public key and replace the new line with \\n:

MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE6DeIun4EgMBLUmbtjQw7DilMJ82YIvOR\\n2jz/IK0R/F7/zXY1z+gqvFXfDcJqR5clbAYlO9lHmvb4lsPLZHjugQ==

Insert a new DNS TXT Record with the base64 Segment.

You can test the DNS Lookup with:

dig -t txt <YOUR DOMAIN>

Example:

dig -t txt keys.pathcheck.org

Usage

With the keys:

const PRIVATE_KEY = `
-----BEGIN EC PARAMETERS-----
BgUrgQQACg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIPWKbSezZMY1gCpvN42yaVv76Lo47FvSsVZpQl0a5lWRoAcGBSuBBAAK
oUQDQgAE6DeIun4EgMBLUmbtjQw7DilMJ82YIvOR2jz/IK0R/F7/zXY1z+gqvFXf
DcJqR5clbAYlO9lHmvb4lsPLZHjugQ==
-----END EC PRIVATE KEY-----
`;

const PUB_KEY_ID = "KEYS.PATHCHECK.ORG"

And a Payload

const BADGE_PAYLOAD = ["20210511", "MODERNA", "COVID19", "012L20A", "28", "", "C28161", "RA", "500", "JANE DOE", "19820321"];

Call the signAndPack to create the URI for the QR Code:

const qrUri = await signAndPack("BADGE", "2", PRIVATE_KEY, PUB_KEY_ID, BADGE_PAYLOAD);

And call the unpack and verify to convert the URI into the payload:

const payloadArray = await unpackAndVerify(qrUri);

Development

npm install

Test

npm test