Comment on page
VC.js
vc.js is a Javascript library that implements W3C standards for verifiable data
The
vc.js
library can be installed with the following commandnpm i @transmute/vc.js --save
The spec for the Verifiable Credential Data model can be found here: https://www.w3.org/TR/vc-data-model/.
vc.js
supports issuing and verifying credentials. Code examples can be found in the following sections. The act of issuing a credential is creating a
proof
attribute that gets added to the credential as an attribute. The proof contains a signature from the provided key which can then later be verified.The following code snippet provides an example of how to issue a credential.
import {
JsonWebKey,
JsonWebSignature,
JsonWebKey2020,
} from "@transmute/json-web-signature";
import { documentLoader } from "path/somewhere";
import { verifiable } from "@transmute/vc.js";
const key = {
id: "did:key:z6MkokrsVo8DbGDsnMAjnoHhJotMbDZiHfvxM4j65d8prXUr#z6MkokrsVo8DbGDsnMAjnoHhJotMbDZiHfvxM4j65d8prXUr",
type: "JsonWebKey2020",
controller: "did:key:z6MkokrsVo8DbGDsnMAjnoHhJotMbDZiHfvxM4j65d8prXUr",
publicKeyJwk: {
kty: "OKP",
crv: "Ed25519",
x: "ijtvFnowiumYMcYVbaz6p64Oz6bXwe2V_9IlCgDR_38",
},
privateKeyJwk: {
kty: "OKP",
crv: "Ed25519",
x: "ijtvFnowiumYMcYVbaz6p64Oz6bXwe2V_9IlCgDR_38",
d: "ZrHpIW1JBb-sK2-wzKV0mQjbxpnxjUCu151QZ9_F_Vs",
},
};
const credential = {
"@context": [
"https://www.w3.org/2018/credentials/v1",
"https://w3id.org/security/suites/jws-2020/v1",
],
id: "http://example.edu/credentials/3732",
type: ["VerifiableCredential"],
issuer: {
id: "did:key:z6MkokrsVo8DbGDsnMAjnoHhJotMbDZiHfvxM4j65d8prXUr",
},
issuanceDate: "2010-01-01T19:23:24Z",
credentialSubject: {
id: "did:example:ebfeb1f712ebc6f1c276e12ec21",
},
};
const result = await verifiable.credential.create({
credential,
format: ["vc", "vc-jwt"],
documentLoader: documentLoader,
suite: new JsonWebSignature({
key: await JsonWebKey.from(key as JsonWebKey2020),
}),
});
A credential can be verified by checking the hash of the credential with the public key component of the private key used to sign the credential. The following snippet provides the code for how to do this.
import {
JsonWebKey,
JsonWebSignature,
JsonWebKey2020,
} from "@transmute/json-web-signature";
import { documentLoader } from "path/somewhere";
import { verifiable } from "@transmute/vc.js";
import { credential } from "path/somewhere";
const result = await verifiable.credential.verify({
credential,
format: ["vc", "vc-jwt"],
documentLoader: documentLoader,
suite: [new JsonWebSignature()],
});
A verifiable presentation is a way to exchange verifiable credentials from a holder to a verifier over an API.
More information with respect to verifiable presentations can be found with their exchange specs.
- 1.
- 2.
A verifiable presentation can be signed by the holder. The following is a code snippet for how to sign a verifiable presentations.
import {
JsonWebKey,
JsonWebSignature,
JsonWebKey2020,
} from "@transmute/json-web-signature";
import { documentLoader } from "path/somewhere";
import { key } from "path/somewhere";
import { verifiable } from "@transmute/vc.js";
const presentation = {
"@context": [
"https://www.w3.org/2018/credentials/v1",
"https://w3id.org/security/suites/jws-2020/v1",
],
type: ["VerifiablePresentation"],
holder: {
id: key.controller,
},
};
const result = await verifiable.presentation.create({
presentation,
format: ["vp", "vp-jwt"],
documentLoader: documentLoader,
challenge: "123", // this is supplied by the verifier / presentation recipient
suite: new JsonWebSignature({
key: await JsonWebKey.from(fixtures.key as JsonWebKey2020),
}),
});
The following code snippet provides how to
import {
JsonWebKey,
JsonWebSignature,
JsonWebKey2020,
} from "@transmute/json-web-signature";
import { documentLoader } from "path/somewhere";
import { verifiable } from "@transmute/vc.js";
import { presentation } from "path/somewhere";
const result = await verifiable.presentation.verify({
presentation,
format: ["vp", "vp-jwt"],
documentLoader: documentLoader,
challenge: "123", // this is supplied by the verifier / presentation recipient
suite: new JsonWebSignature(),
});
Last modified 1yr ago