https://github.com/path-check/cred-sdk.js
Verifiable QR SDK for PathCheck's URI DataModels
https://github.com/path-check/cred-sdk.js
Last synced: over 1 year ago
JSON representation
Verifiable QR SDK for PathCheck's URI DataModels
- Host: GitHub
- URL: https://github.com/path-check/cred-sdk.js
- Owner: Path-Check
- License: gpl-3.0
- Created: 2021-05-11T14:26:02.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2021-10-19T16:04:41.000Z (over 4 years ago)
- Last Synced: 2024-11-22T21:55:12.410Z (over 1 year ago)
- Language: JavaScript
- Size: 1.27 MB
- Stars: 2
- Watchers: 5
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Verifiable QR SDK for PathCheck's URI DataModels
JavaScript Implementation of [PaperCreds](https://github.com/Path-Check/paper-cred), a URI-based Verifiable QR Credentials.
# Install
```sh
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:
```sh
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:
```sh
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:
```sh
dig -t txt
```
Example:
```sh
dig -t txt keys.pathcheck.org
```
# Usage
With the keys:
```js
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
```js
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:
```js
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:
```js
const payloadArray = await unpackAndVerify(qrUri);
```
# Development
```sh
npm install
```
# Test
```sh
npm test
```