0.0.7 • Published 4 years ago
@pathcheck/cred-sdk v0.0.7
Verifiable QR SDK for PathCheck's URI DataModels
JavaScript Implementation of PaperCreds, a URI-based Verifiable QR Credentials.
Install
npm install @pathcheck/cred-sdk --saveSetting 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.pemIt 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.pemResulting 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.orgUsage
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 installTest
npm test