Skip to main content

Feedback

Is this page helpful?

Version: 5.x

Signing Documents (Code)

CLI

Code

Overview

Creating a DID

Configuring DNS

Creating Raw Document

Wrapping Documents - CLI

Wrapping Documents - Code

Signing Documents - CLI

Signing Documents - Code

Revoking Documents

For the current step, you can either opt to use the CLI or Code.

After wrapping the documents and obtaining a merkle root, the documents are ready to be signed. Each documents will be signed individually, and the proof of the signature will be appended into the signed documents.

Installation

npm install @trustvc/trustvc

Usage

Signing a document

signOA takes a wrapped document, a wallet (public and private key pair) or an Ethers.js Signer.

The method will sign the merkle root from the wrapped document, append the signature to the document and return it. Currently, it supports the following sign algorithm:

  • Secp256k1VerificationKey2018

Example with Wallet

import { signOA } from '@trustvc/trustvc';

const wrappedDocument = {
version: "https://schema.openattestation.com/2.0/schema.json",
data: {
recipient: {
name: "2ddbe317-a9d1-4af7-9ff1-085036d83cc8:string:John Doe",
},
$template: {
name: "338403ee-cbfa-4fdd-9f8f-4535803ca1d2:string:main",
type: "172389bf-ef30-448f-9153-79475c4a0236:string:EMBEDDED_RENDERER",
url: "8aaf3835-f1d5-444d-9855-0ec230c271ec:string:https://tutorial-renderer.openattestation.com",
},
issuers: [
{
id: "592202e4-bf4b-4826-9639-a9a3fad38314:string:did:ethr:0xaCc51f664D647C9928196c4e33D46fd98FDaA91D",
name: "2fb102d4-00b2-4c42-87b9-ab545829a4ab:string:Demo Issuer",
revocation: {
type: "f86d77af-296a-46d1-8a5e-3af549d03773:string:NONE",
},
identityProof: {
type: "f8bf7139-6ca5-4678-b2c7-49aa81ac3ccc:string:DNS-DID",
location:
"a84e9b5b-a99f-4248-ac4d-087b66eec523:string:intermediate-sapphire-catfish.sandbox.openattestation.com",
key: "5bc9f48f-5f85-4a8f-a3c4-2e99ee94b509:string:did:ethr:0xaCc51f664D647C9928196c4e33D46fd98FDaA91D#controller",
},
},
],
},
signature: {
type: "SHA3MerkleProof",
targetHash: "d83534d672d96753ea3cb50ac63129782a1c345d98b1141f9fe5449f1c225601",
proof: [],
merkleRoot: "d83534d672d96753ea3cb50ac63129782a1c345d98b1141f9fe5449f1c225601",
},
};

const wallet = new Wallet("privateKey");

const signedDocument = await signOA(
wrappedDocument,
SUPPORTED_SIGNING_ALGORITHM.Secp256k1VerificationKey2018,
wallet
);
console.log(`Signed Document: ${JSON.stringify(signedDocument)}`);

// Signed Document:
{
"version": "https://schema.openattestation.com/2.0/schema.json",
"data": {
"recipient": { "name": "2ddbe317-a9d1-4af7-9ff1-085036d83cc8:string:John Doe" },
"$template": {
"name": "338403ee-cbfa-4fdd-9f8f-4535803ca1d2:string:main",
"type": "172389bf-ef30-448f-9153-79475c4a0236:string:EMBEDDED_RENDERER",
"url": "8aaf3835-f1d5-444d-9855-0ec230c271ec:string:https://tutorial-renderer.openattestation.com"
},
"issuers": [
{
"id": "592202e4-bf4b-4826-9639-a9a3fad38314:string:did:ethr:0xaCc51f664D647C9928196c4e33D46fd98FDaA91D",
"name": "2fb102d4-00b2-4c42-87b9-ab545829a4ab:string:Demo Issuer",
"revocation": { "type": "f86d77af-296a-46d1-8a5e-3af549d03773:string:NONE" },
"identityProof": {
"type": "f8bf7139-6ca5-4678-b2c7-49aa81ac3ccc:string:DNS-DID",
"location": "a84e9b5b-a99f-4248-ac4d-087b66eec523:string:intermediate-sapphire-catfish.sandbox.openattestation.com",
"key": "5bc9f48f-5f85-4a8f-a3c4-2e99ee94b509:string:did:ethr:0xaCc51f664D647C9928196c4e33D46fd98FDaA91D#controller"
}
}
]
},
"signature": {
"type": "SHA3MerkleProof",
"targetHash": "d83534d672d96753ea3cb50ac63129782a1c345d98b1141f9fe5449f1c225601",
"proof": [],
"merkleRoot": "d83534d672d96753ea3cb50ac63129782a1c345d98b1141f9fe5449f1c225601"
},
"proof": [
{
"type": "OpenAttestationSignature2018",
"created": "2023-11-22T08:39:54.738Z",
"proofPurpose": "assertionMethod",
"verificationMethod": "did:ethr:0xe0A71284EF59483795053266CB796B65E48B5124#controller",
"signature": "0xa4c791bb2d0e469b27268286ab64c5342840d37d321da6f6a760c276af34c2187c2eb2d9fd92a483dea82ab75c1c7d2b5e11dcdd48f22e0e5f4e593a560beae31b"
}
]
}

Verifying the documents

Head over to dev.tradetrust.io, drag and drop one of the signed documents. The document will be verified, then displayed like in the image below.

Successful verification

🎉 Congratulations, you have completed the getting started guide to create your own Verifiable Document!

Additional information: Revocation of Verifiable Documents

Revoking of Verifiable Documents