@transmute/bbs-bls12381-signature-2020

Transmute implementation of https://w3id.org/security/suites/bls12381-2020

Usage no npm install needed!

<script type="module">
  import transmuteBbsBls12381Signature2020 from 'https://cdn.skypack.dev/@transmute/bbs-bls12381-signature-2020';
</script>

README

@transmute/bbs-bls12381-signature-2020

npm i @transmute/bbs-bls12381-signature-2020 --save

Usage

import {
  Bls12381G2KeyPair,
  BbsBlsSignature2020,
  BbsBlsSignatureProof2020,
} from "@transmute/bbs-bls12381-signature-2020";

import { documentLoader } from "path/somewhere";
import { verifiable } from "@transmute/vc.js";

const key = await Bls12381G2KeyPair.from({
  id: "did:example:123#key-0",
  type: "JsonWebKey2020",
  controller: "did:example:123",
  publicKeyJwk: {
    kty: "EC",
    crv: "BLS12381_G2",
    x:
      "ixPeWzjhGlmfoRTxKnUdDDpuiYXix9Yoy68Chb1r47J4-wxqPvFxVIgQN-8qQEgACterr23Ogo3XmcHYgcdnlPsfArPriZzrUv4jpstRt2Q6UmYoGqOWXyIBnFtCBad6",
  },
  privateKeyJwk: {
    kty: "EC",
    crv: "BLS12381_G2",
    x:
      "ixPeWzjhGlmfoRTxKnUdDDpuiYXix9Yoy68Chb1r47J4-wxqPvFxVIgQN-8qQEgACterr23Ogo3XmcHYgcdnlPsfArPriZzrUv4jpstRt2Q6UmYoGqOWXyIBnFtCBad6",
    d: "Jh-q1-B5mj7wMQQu44skVzPy0wWPTRtBNiXY8AAs0zc",
  },
});

const result = await verifiable.credential.create({
  credential: {
    "@context": [
      "https://www.w3.org/2018/credentials/v1",
      "https://w3id.org/security/suites/bls12381-2020/v1",
      {
        alsoKnownAs: "https://www.w3.org/ns/activitystreams#alsoKnownAs",
      },
    ],
    id: "http://example.edu/credentials/3732",
    type: ["VerifiableCredential"],
    issuer: {
      id:
        "did:key:z5TcCKfym9h8Vr6dmAgaebq4DBwxKM5Lm9pvt4E8JBqQz43HvtC3zGLrcyC3233fQz8h1T6w8kDzFepmAHA9cCYxTB2Gv3oSn5iazjj8wvYBweH8CQ5VnMoVnHS6Gqnchu5YBUnhRsUAfNymtG9CRfkC97TpbBQ6b1A2AfDvmC8tdYcLkDDA2Ehti5cY27PzG6DLGKF3P",
    },
    issuanceDate: "2010-01-01T19:23:24Z",
    credentialSubject: {
      alsoKnownAs: "did:example:ebfeb1f712ebc6f1c276e12ec21",
    },
  },
  format: ["vc"],
  documentLoader: documentLoader,
  suite: new BbsBlsSignature2020({
    key,
  }),
});

const result1 = await verifiable.credential.derive({
  credential: {
    "@context": [
      "https://www.w3.org/2018/credentials/v1",
      "https://w3id.org/security/suites/bls12381-2020/v1",
      {
        alsoKnownAs: "https://www.w3.org/ns/activitystreams#alsoKnownAs",
      },
    ],
    id: "http://example.edu/credentials/3732",
    type: ["VerifiableCredential"],
    issuer: {
      id:
        "did:key:z5TcCKfym9h8Vr6dmAgaebq4DBwxKM5Lm9pvt4E8JBqQz43HvtC3zGLrcyC3233fQz8h1T6w8kDzFepmAHA9cCYxTB2Gv3oSn5iazjj8wvYBweH8CQ5VnMoVnHS6Gqnchu5YBUnhRsUAfNymtG9CRfkC97TpbBQ6b1A2AfDvmC8tdYcLkDDA2Ehti5cY27PzG6DLGKF3P",
    },
    issuanceDate: "2010-01-01T19:23:24Z",
    credentialSubject: {
      alsoKnownAs: "did:example:ebfeb1f712ebc6f1c276e12ec21",
    },
    proof: {
      type: "BbsBlsSignature2020",
      created: "2010-01-01T19:23:24Z",
      verificationMethod:
        "did:key:z5TcCKfym9h8Vr6dmAgaebq4DBwxKM5Lm9pvt4E8JBqQz43HvtC3zGLrcyC3233fQz8h1T6w8kDzFepmAHA9cCYxTB2Gv3oSn5iazjj8wvYBweH8CQ5VnMoVnHS6Gqnchu5YBUnhRsUAfNymtG9CRfkC97TpbBQ6b1A2AfDvmC8tdYcLkDDA2Ehti5cY27PzG6DLGKF3P#zUC75GQp8DFusgffgEyvGiSoXL7UztujwGyjHXdJP9PcAz74dgGCrFSNyhKFPCsuxXeKLko5H19M2sL8RA45f7SMc2pKx3uvfn1KSB7nSh7GqX59kxWksVTSicghfFLGZBNK9ah",
      proofPurpose: "assertionMethod",
      proofValue:
        "iqPux4PDWBuSpRc3mqKTJJetr0zes3g9pDiQZbL8oeV/od+PLzeVCqGSZc657yu2T0AHSxEzuZcqOD8zZ2nAixphk7rSxyYkOzg5HpWsKxYP/89qtR30JG5YOYESilRb6CByt2Idi5Hj3R0uA5YsJw==",
    },
  },
  frame: {
    "@context": [
      "https://www.w3.org/2018/credentials/v1",
      "https://w3id.org/security/suites/bls12381-2020/v1",
    ],
    type: ["VerifiableCredential"],
    credentialSubject: {
      alsoKnownAs: { id: {} },
    },
  },
  format: ["vc"],
  documentLoader: documentLoader,
  suite: new BbsBlsSignatureProof2020(BbsBlsSignatureProof2020),
});

const result2 = await verifiable.credential.verify({
  credential: {
    "@context": [
      "https://www.w3.org/2018/credentials/v1",
      "https://w3id.org/security/suites/bls12381-2020/v1",
      {
        alsoKnownAs: "https://www.w3.org/ns/activitystreams#alsoKnownAs",
      },
    ],
    id: "http://example.edu/credentials/3732",
    type: "VerifiableCredential",
    credentialSubject: {
      id: "urn:bnid:_:c14n0",
      alsoKnownAs: "did:example:ebfeb1f712ebc6f1c276e12ec21",
    },
    issuanceDate: "2010-01-01T19:23:24Z",
    issuer:
      "did:key:z5TcCKfym9h8Vr6dmAgaebq4DBwxKM5Lm9pvt4E8JBqQz43HvtC3zGLrcyC3233fQz8h1T6w8kDzFepmAHA9cCYxTB2Gv3oSn5iazjj8wvYBweH8CQ5VnMoVnHS6Gqnchu5YBUnhRsUAfNymtG9CRfkC97TpbBQ6b1A2AfDvmC8tdYcLkDDA2Ehti5cY27PzG6DLGKF3P",
    proof: {
      type: "BbsBlsSignatureProof2020",
      nonce:
        "XZZvSvXvyFc6M4SzqiT1XF7sI2b9bqsQtIMS+uTg2aiYdbidB0bqQw+ohg/NiBQSytA=",
      proofValue:
        "AAkB/6fHcs17gvQ7qh5lMqosFkDO7G1LdcPd+b31fw1fRSQYY2PdKZwWRMd065Z3HL9AfLKMvYQ+m1way8xIJLMI80ddk+EvZujnUb/V+mdjYsL5H1xMhMO7Iyo7vJ1BKOTFY6o3ZXoDFp8f2VjXlKMY6eyAaGas2mZNsj+lGYJLpE3CT86lvHe47O8eN0rzNX8KtAAAAHSNpcl5mHy2o8Kn1mwHe1kf2i+C6mrjG1xkCWzv8IQFlaXf8TW9j3y8NxJPvoCdNIYAAAACHnUSRX9dZjcnsSu1S9PuljAM9Y/hl6lk5xFH4+YCNLEMBQjhHrWy2Mb4fjF4k6AjPZKTLkP0Ma4HmvUTTi/TtKgV6nsskkCz8eha5bJYt88hQgmdlMxwkfsTXaMg3ppJx0CYUmTX8rXAo+N5Uv3SpQAAAAJr3RPSdM8piRpxon6xn8rwHA6I7Ii7aZg5ghAt0se8Sl9TNmknAyNInV0tzkVwkYZwYLB5/kx5gf45aPkDKopm",
      verificationMethod:
        "did:key:z5TcCKfym9h8Vr6dmAgaebq4DBwxKM5Lm9pvt4E8JBqQz43HvtC3zGLrcyC3233fQz8h1T6w8kDzFepmAHA9cCYxTB2Gv3oSn5iazjj8wvYBweH8CQ5VnMoVnHS6Gqnchu5YBUnhRsUAfNymtG9CRfkC97TpbBQ6b1A2AfDvmC8tdYcLkDDA2Ehti5cY27PzG6DLGKF3P#zUC75GQp8DFusgffgEyvGiSoXL7UztujwGyjHXdJP9PcAz74dgGCrFSNyhKFPCsuxXeKLko5H19M2sL8RA45f7SMc2pKx3uvfn1KSB7nSh7GqX59kxWksVTSicghfFLGZBNK9ah",
      proofPurpose: "assertionMethod",
      created: "2010-01-01T19:23:24Z",
    },
  },
  format: ["vc"],
  documentLoader: (iri: string) => {
    if (iri.startsWith("did:example:345")) {
      return {
        documentUrl: iri,
        document: {
          "@context": [
            "https://www.w3.org/ns/did/v1",
            "https://w3id.org/security/suites/bls12381-2020/v1",
          ],
          id: "did:example:345",
          assertionMethod: [
            {
              id: "did:example:345#key-1",
              type: "Bls12381G2Key2020",
              controller: "did:example:345",
              publicKeyBase58:
                "24urEcrYHvx6eReCPRdvTLHUictArUTQpENSGwTRB1KosFNKLdN9cDVvbX5KMWnR2omGpSeJuT2q9uUGrasKWqht9YyMSd5aukprRGVFFNYrzxgCd137PwsdSXhbxxWoCmga",
            },
          ],
        },
      };
    }
    return documentLoader(iri);
  },
  suite: [new BbsBlsSignatureProof2020()],
});

About

This module is based on the original here.

It was modified to simplify JSON-LD contexts, and eliminate dependency inherentence.