A library to facilitate the creation of Decentralized Identifiers DIDs v1, specifically did:web
, for the signing of Verifiable Credentials v1.1.
To install the package, use:
npm install @trustvc/w3c-issuer
- Create private key pairs for specific Signature Suites used for signing Verifiable Credentials (e.g., BBS).
- Generate DID private key pairs and DID documents.
generateKeyPair
function helps to generate a signature Key Pair.
import { generateKeyPair, VerificationType } from '@trustvc/w3c-issuer';
/**
* Parameters:
* - options (GenerateKeyPairOptions)
* - options.type (VerificationType): Key Pair algo type for Signature
* - options.seedBase58? (string): 32 byte base58 encoded seed (e.g. FVj12jBiBUqYFaEUkTuwAD73p9Hx5NzCJBge74nTguQN) (optional)
* - options.privateKeyBase58? (string): private key value (optional)
* - options.publicKeyBase58? (string): public key value (optional)
*
* Returns:
* - A Promise that resolves to:
* - generatedKeyPair.type (VerificationType): Key Pair algo.
* - generatedKeyPair.seedBase58 (string): 32 byte base58 encoded seed
* - generatedKeyPair.privateKeyBase58 (string): Derieve private key from seed
* - generatedKeyPair.publicKeyBase58 (string): Detrieve public key from seed
*/
const options = {
type: VerificationType.Bls12381G2Key2020,
seedBase58: undefined
}
const generatedKeyPair = await generateKeyPair(options);
console.log('generatedKeyPair: ', generatedKeyPair)
generatedKeyPair Result
generatedKeyPair: {
type: 'Bls12381G2Key2020',
seedBase58: '<seedBase58>',
privateKeyBase58: '<privateKeyBase58',
publicKeyBase58: 'oRfEeWFresvhRtXCkihZbxyoi2JER7gHTJ5psXhHsdCoU1MttRMi3Yp9b9fpjmKh7bMgfWKLESiK2YovRd8KGzJsGuamoAXfqDDVhckxuc9nmsJ84skCSTijKeU4pfAcxeJ'
}
issueDID
function helps to generate did:web
DID Document, together with the DID Private Key Pair.
(wellKnownDid)
did:web
DID Document needs to be hosted.
Read here for more instructions.
(didKeyPairs) DID Private Key Pair needs to be kept securely. Required for signing Verifiable Credential.
Read here for more signing instructions.
import { VerificationType, issueDID } from '@trustvc/w3c-issuer';
/**
* Parameters:
* - options (IssuedDIDOption)
* - options.domain (string): URL where the DID Document will be located
* - options.type (VerificationType): Key Pair algo.
* - options.seedBase58? (string): 32 byte base58 encoded seed (optional)
* - options.privateKeyBase58? (string): Derieved private key from seed (optional)
* - options.publicKeyBase58? (string): Detrieved public key from seed (optional)
*
* Returns:
* - A Promise that resolves to:
* - issuedDID.wellKnownDid (DidWellKnownDocument): DID Document generated for the specified domain
* - issuedDID.didKeyPairs (PrivateKeyPair): DID Key Pair containing key id and controller
*/
const options = {
domain: 'https://example.com/.well-known/did.json',
type: VerificationType.Bls12381G2Key2020,
seedBase58: '<seedBase58>',
privateKeyBase58: '<privateKeyBase58>',
publicKeyBase58: 'oRfEeWFresvhRtXCkihZbxyoi2JER7gHTJ5psXhHsdCoU1MttRMi3Yp9b9fpjmKh7bMgfWKLESiK2YovRd8KGzJsGuamoAXfqDDVhckxuc9nmsJ84skCSTijKeU4pfAcxeJ'
}
const issuedDID = await issueDID(options);
const { wellKnownDid, didKeyPairs } = issuedDID;
console.log("wellKnownDid:", wellKnownDid)
console.log("didKeyPairs:", didKeyPairs)
issueDID Result
wellKnownDid: {
id: 'did:web:example.com',
verificationMethod: [
{
type: 'Bls12381G2Key2020',
id: 'did:web:example.com#keys-1',
controller: 'did:web:example.com',
publicKeyBase58: 'oRfEeWFresvhRtXCkihZbxyoi2JER7gHTJ5psXhHsdCoU1MttRMi3Yp9b9fpjmKh7bMgfWKLESiK2YovRd8KGzJsGuamoAXfqDDVhckxuc9nmsJ84skCSTijKeU4pfAcxeJ'
}
],
'@context': [
'https://www.w3.org/ns/did/v1',
'https://w3id.org/security/suites/bls12381-2020/v1'
],
authentication: [ 'did:web:example.com#keys-1' ],
assertionMethod: [ 'did:web:example.com#keys-1' ],
capabilityInvocation: [ 'did:web:example.com#keys-1' ],
capabilityDelegation: [ 'did:web:example.com#keys-1' ]
}
didKeyPairs: {
id: 'did:web:example.com#keys-1',
type: 'Bls12381G2Key2020',
controller: 'did:web:example.com',
seedBase58: '<seedBase58>',
privateKeyBase58: '<privateKeyBase58>',
publicKeyBase58: 'oRfEeWFresvhRtXCkihZbxyoi2JER7gHTJ5psXhHsdCoU1MttRMi3Yp9b9fpjmKh7bMgfWKLESiK2YovRd8KGzJsGuamoAXfqDDVhckxuc9nmsJ84skCSTijKeU4pfAcxeJ'
}