A library for issuing and verifying verifiable credentials. Based on Veramo.
- The Norwegian Central Bank
CDBC - Central Bank Digital Currency - with verifiable credentials (VC) used for authentication and KYC. The authentication is done with IDporten and the VC is issued by a dummy Digdir agent (represented by the central bank). The VC is sent to the user's wallet often called the Holder. The user presents the VC to their bank to have their wallet authenticated for use with the CDBC. The source code for the CDBC will be released in Q2 2023.
- The Norwegian Business Registry (BR)
Uses Symfoni for Organizational Digital Identity ("ODI"). BR issues a Chairman of the board VC. Authentication is done with BankID. The user's wallet can then be used to sign documents on behalf of the company.
- Bachelor thesis with NAV (Norwegian Labour and Welfare Administration) - Norwegian University of Science and Technology
TODO Add link to thesis, github, video and digi
Can be used by issuer, verifier and holder.
TODO Convert to focusing on VC Issuer.
On Goerli
const issuer = await VCIssuer.init({
dbName: "test",
walletSecret: "test test test test test test test test test test test junk",
chains: [
{
default: true,
chainId: 5,
provider: {
url: "https://eth-goerli.g.alchemy.com/v2/YOUR_ALCHEMY_APP_KEY"
},
},
],
});
const vc = await issuer.createVC({
credentialSubject: {
identityNumber: "123456789",
},
});
const vp = await issuer.createVP({
verifiableCredential: [vc],
});
On Goerli
const verifier = await VCVerifier.init({
dbName: "test",
walletSecret: "test test test test test test test test test test test junk",
chains: [
{
default: true,
chainId: 5,
provider: {
url: "https://eth-goerli.g.alchemy.com/v2/YOUR_ALCHEMY_APP_KEY"
},
},
],
});
const verifiedVC = await verifier.verifyVC({
credential: vc.proof.jwt, // or just vc
});
const verifiedVP = await verifier.verifyVP({
presentation: vp,
policies: {
audience: false,
},
});
On a network without standard DIDRegistry
const verifier = await VCVerifier.init({
dbName: "test",
walletSecret: "test test test test test test test test test test test junk",
chains: [
{
default: true,
chainId: 5,
didRegistry: "0x5FbDB2315678afecb367f032d93F642f64180aa3", // Address to the DID Registry
provider: new ethers.providers.JsonRpcProvider("http://localhost:8545"), // can also just put provider: { url: "http://localhost:8545",}
},
],
});
....
- Clone repo
- pnpm install
- copy .env.example to .env
- pnpm test