Package Exports
- @transmute/did-key-secp256k1
- @transmute/did-key-secp256k1/dist/did-key-secp256k1.esm.js
- @transmute/did-key-secp256k1/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@transmute/did-key-secp256k1) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
did-key-secp256k1
npm i @transmute/did-key-secp256k1@latest --saveUsage
Generate
import crypto from 'crypto';
import * as secp256k1 from '@transmute/did-key-secp256k1';
const { didDocument, keys } = await secp256k1.generate(
{
secureRandom: () => {
return crypto.randomBytes(32);
},
},
{ accept: 'application/did+json' }
);Export
import { Secp256k1KeyPair } from '@transmute/did-key-secp256k1';
const k = await Secp256k1KeyPair.generate({
secureRandom: () => {
return Buffer.from(
'9085d2bef69286a6cbb51623c8fa258629945cd55ca705cc4e66700396894e0c',
'hex'
);
},
});
const exportedKeyPair = await k.export({
type: 'JsonWebKey2020',
privateKey: true,
});Resolve
import * as secp256k1 from '@transmute/did-key-secp256k1';
const {
didDocument,
} = await secp256k1.resolve(
'did🔑z6LScNhBGJJHGPgx9AMCHjxFew9qfbAZhsi1KyJYcfdcFQ9k',
{ accept: 'application/did+json' }
);JsonWebSignature2020
This suite was created after https://www.w3.org/2018/credentials/v1 so it must be added to the credential context.
import { ld as vcjs } from '@transmute/vc.js';
import { Secp256k1KeyPair } from '@transmute/did-key-secp256k1';
import { JsonWebSignature, JsonWebKey } from '@transmute/json-web-signature';
const k = await Secp256k1KeyPair.generate({
secureRandom: () => {
return Buffer.from(
'4e61bc1918ea6a47ae3307331be7798196a1a8e7cfe4b6e8f7c9a5f36017d929',
'hex'
);
},
});
const suite = new JsonWebSignature({
key: await JsonWebKey.from(
await k.export({
type: 'JsonWebSignature2020',
privateKey: true,
})
),
date: '2020-03-10T04:24:12Z',
});
const vc = await vcjs.issue({
credential: {
'@context': [
'https://www.w3.org/2018/credentials/v1',
// 🧙♂️ This extension context is required.
'https://w3id.org/security/suites/jws-2020/v1',
],
id: 'http://example.gov/credentials/3732',
type: ['VerifiableCredential'],
issuer: {
id: k.controller,
},
issuanceDate: '2020-03-10T04:24:12.164Z',
credentialSubject: {
id: 'did:example:ebfeb1f712ebc6f1c276e12ec21',
},
},
suite,
documentLoader,
});JOSE
ECDSA
import { Secp256k1KeyPair } from '@transmute/did-key-secp256k1';
import { JWS } from '@transmute/jose-ld';
const k = await Secp256k1KeyPair.generate({
secureRandom: () => {
return Buffer.from(
'4e61bc1918ea6a47ae3307331be7798196a1a8e7cfe4b6e8f7c9a5f36017d929',
'hex'
);
},
});
const JWA_ALG = 'ES256K';
const signer = JWS.createSigner(k.signer('Ecdsa'), JWA_ALG);
const verifier = JWS.createVerifier(k.verifier('Ecdsa'), JWA_ALG);
const message = Uint8Array.from(Buffer.from('hello'));
const signature = await signer.sign({ data: message });
const verified = await verifier.verify({
signature,
});ECDH-ES+A256KW
import { Secp256k1KeyPair } from '@transmute/did-key-secp256k1';
import { JWE } from '@transmute/jose-ld';
const k = await Secp256k1KeyPair.generate({
secureRandom: () => {
return Buffer.from(
'9085d2bef69286a6cbb51623c8fa258629945cd55ca705cc4e66700396894e0c',
'hex'
);
},
});
const cipher = new JWE.Cipher(Secp256k1KeyPair);
const document = { key1: 'value1', key2: 'value2' };
const recipients = [
{
header: {
kid: k.id,
alg: 'ECDH-ES+A256KW',
},
},
];
const jwe = await cipher.encryptObject({
obj: document,
recipients,
publicKeyResolver: async (id: string) => {
if (id === k.id) {
return k.export({ type: 'JsonWebKey2020' });
}
throw new Error(
'publicKeyResolver does not suppport IRI ' + JSON.stringify(id)
);
},
});
const plaintext = await cipher.decrypt({ jwe, keyAgreementKey: k });
console.log(JSON.parse(Buffer.from(plaintext).toString('utf-8')));