@credo-ts/core
Version:
<p align="center"> <br /> <img alt="Credo Logo" src="https://github.com/openwallet-foundation/credo-ts/blob/c7886cb8377ceb8ee4efe8d264211e561a75072d/images/credo-logo.png" height="250px" /> </p> <h1 align="center"><b>Credo - Core</b></h1
1 lines • 6.07 kB
Source Map (JSON)
{"version":3,"file":"keyDidDocument.mjs","names":[],"sources":["../../../../src/modules/dids/domain/keyDidDocument.ts"],"sourcesContent":["import { CredoError } from '../../../error'\nimport {\n Ed25519PublicJwk,\n getJwkHumanDescription,\n P256PublicJwk,\n P384PublicJwk,\n P521PublicJwk,\n Secp256k1PublicJwk,\n X25519PublicJwk,\n} from '../../kms'\nimport { PublicJwk } from '../../kms/jwk/PublicJwk'\nimport {\n SECURITY_ED25519_2018_CONTEXT_URL,\n SECURITY_JWS_CONTEXT_URL,\n SECURITY_X25519_CONTEXT_URL,\n} from '../../vc/constants'\nimport { DidDocumentBuilder } from './DidDocumentBuilder'\nimport { convertPublicKeyToX25519 } from './key-type/ed25519'\nimport { getEd25519VerificationKey2018, getJsonWebKey2020, getX25519KeyAgreementKey2019 } from './verificationMethod'\nimport type { VerificationMethod } from './verificationMethod/VerificationMethod'\n\nexport function getDidDocumentForPublicJwk(did: string, publicJwk: PublicJwk) {\n if (publicJwk.is(Ed25519PublicJwk)) {\n return getEd25519DidDoc(did, publicJwk as PublicJwk<Ed25519PublicJwk>)\n }\n if (publicJwk.is(X25519PublicJwk)) {\n return getX25519DidDoc(did, publicJwk as PublicJwk<X25519PublicJwk>)\n }\n if (\n publicJwk.is(P256PublicJwk) ||\n publicJwk.is(P384PublicJwk) ||\n publicJwk.is(P521PublicJwk) ||\n publicJwk.is(Secp256k1PublicJwk)\n ) {\n return getJsonWebKey2020DidDocument(did, publicJwk)\n }\n\n throw new CredoError(`Unsupported public key type for did document: ${getJwkHumanDescription(publicJwk.toJson())}`)\n}\n\nexport function getJsonWebKey2020DidDocument(did: string, publicJwk: PublicJwk) {\n const verificationMethod = getJsonWebKey2020({ did, publicJwk })\n\n const didDocumentBuilder = new DidDocumentBuilder(did)\n didDocumentBuilder.addContext(SECURITY_JWS_CONTEXT_URL).addVerificationMethod(verificationMethod)\n\n if (\n publicJwk.supportedSignatureAlgorithms.length === 0 &&\n publicJwk.supportedEncryptionKeyAgreementAlgorithms.length === 0\n ) {\n throw new CredoError('Key must support at least signing or encrypting')\n }\n\n if (publicJwk.supportedSignatureAlgorithms.length > 0) {\n didDocumentBuilder\n .addAuthentication(verificationMethod.id)\n .addAssertionMethod(verificationMethod.id)\n .addCapabilityDelegation(verificationMethod.id)\n .addCapabilityInvocation(verificationMethod.id)\n }\n\n if (publicJwk.supportedEncryptionKeyAgreementAlgorithms.length > 0) {\n didDocumentBuilder.addKeyAgreement(verificationMethod.id)\n }\n\n return didDocumentBuilder.build()\n}\n\nfunction getEd25519DidDoc(did: string, publicJwk: PublicJwk<Ed25519PublicJwk>) {\n const verificationMethod = getEd25519VerificationKey2018({\n id: `${did}#${publicJwk.fingerprint}`,\n publicJwk,\n controller: did,\n })\n\n const publicKeyX25519 = convertPublicKeyToX25519(publicJwk.publicKey.publicKey)\n\n const publicJwkX25519 = PublicJwk.fromPublicKey({\n kty: 'OKP',\n crv: 'X25519',\n publicKey: publicKeyX25519,\n })\n\n const x25519VerificationMethod = getX25519KeyAgreementKey2019({\n id: `${did}#${publicJwkX25519.fingerprint}`,\n publicJwk: publicJwkX25519,\n controller: did,\n })\n\n const didDocBuilder = getSignatureKeyBase({ did, publicJwk, verificationMethod })\n\n didDocBuilder\n .addContext(SECURITY_ED25519_2018_CONTEXT_URL)\n .addContext(SECURITY_X25519_CONTEXT_URL)\n .addKeyAgreement(x25519VerificationMethod)\n\n return didDocBuilder.build()\n}\n\nfunction getX25519DidDoc(did: string, publicJwk: PublicJwk<X25519PublicJwk>) {\n const verificationMethod = getX25519KeyAgreementKey2019({\n id: `${did}#${publicJwk.fingerprint}`,\n publicJwk,\n controller: did,\n })\n\n const document = new DidDocumentBuilder(did)\n .addKeyAgreement(verificationMethod)\n .addContext(SECURITY_X25519_CONTEXT_URL)\n .build()\n\n return document\n}\n\nfunction getSignatureKeyBase({\n did,\n publicJwk,\n verificationMethod,\n}: {\n did: string\n publicJwk: PublicJwk\n verificationMethod: VerificationMethod\n}) {\n const keyId = `${did}#${publicJwk.fingerprint}`\n\n return new DidDocumentBuilder(did)\n .addVerificationMethod(verificationMethod)\n .addAuthentication(keyId)\n .addAssertionMethod(keyId)\n .addCapabilityDelegation(keyId)\n .addCapabilityInvocation(keyId)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAqBA,SAAgB,2BAA2B,KAAa,WAAsB;CAC5E,IAAI,UAAU,GAAG,gBAAgB,GAC/B,OAAO,iBAAiB,KAAK,SAAwC;CAEvE,IAAI,UAAU,GAAG,eAAe,GAC9B,OAAO,gBAAgB,KAAK,SAAuC;CAErE,IACE,UAAU,GAAG,aAAa,KAC1B,UAAU,GAAG,aAAa,KAC1B,UAAU,GAAG,aAAa,KAC1B,UAAU,GAAG,kBAAkB,GAE/B,OAAO,6BAA6B,KAAK,SAAS;CAGpD,MAAM,IAAI,WAAW,iDAAiD,uBAAuB,UAAU,OAAO,CAAC,GAAG;AACpH;AAEA,SAAgB,6BAA6B,KAAa,WAAsB;CAC9E,MAAM,qBAAqB,kBAAkB;EAAE;EAAK;CAAU,CAAC;CAE/D,MAAM,qBAAqB,IAAI,mBAAmB,GAAG;CACrD,mBAAmB,WAAW,wBAAwB,CAAC,CAAC,sBAAsB,kBAAkB;CAEhG,IACE,UAAU,6BAA6B,WAAW,KAClD,UAAU,0CAA0C,WAAW,GAE/D,MAAM,IAAI,WAAW,iDAAiD;CAGxE,IAAI,UAAU,6BAA6B,SAAS,GAClD,mBACG,kBAAkB,mBAAmB,EAAE,CAAC,CACxC,mBAAmB,mBAAmB,EAAE,CAAC,CACzC,wBAAwB,mBAAmB,EAAE,CAAC,CAC9C,wBAAwB,mBAAmB,EAAE;CAGlD,IAAI,UAAU,0CAA0C,SAAS,GAC/D,mBAAmB,gBAAgB,mBAAmB,EAAE;CAG1D,OAAO,mBAAmB,MAAM;AAClC;AAEA,SAAS,iBAAiB,KAAa,WAAwC;CAC7E,MAAM,qBAAqB,8BAA8B;EACvD,IAAI,GAAG,IAAI,GAAG,UAAU;EACxB;EACA,YAAY;CACd,CAAC;CAED,MAAM,kBAAkB,yBAAyB,UAAU,UAAU,SAAS;CAE9E,MAAM,kBAAkB,UAAU,cAAc;EAC9C,KAAK;EACL,KAAK;EACL,WAAW;CACb,CAAC;CAED,MAAM,2BAA2B,6BAA6B;EAC5D,IAAI,GAAG,IAAI,GAAG,gBAAgB;EAC9B,WAAW;EACX,YAAY;CACd,CAAC;CAED,MAAM,gBAAgB,oBAAoB;EAAE;EAAK;EAAW;CAAmB,CAAC;CAEhF,cACG,WAAW,iCAAiC,CAAC,CAC7C,WAAW,2BAA2B,CAAC,CACvC,gBAAgB,wBAAwB;CAE3C,OAAO,cAAc,MAAM;AAC7B;AAEA,SAAS,gBAAgB,KAAa,WAAuC;CAC3E,MAAM,qBAAqB,6BAA6B;EACtD,IAAI,GAAG,IAAI,GAAG,UAAU;EACxB;EACA,YAAY;CACd,CAAC;CAOD,OALiB,IAAI,mBAAmB,GAAG,CAAC,CACzC,gBAAgB,kBAAkB,CAAC,CACnC,WAAW,2BAA2B,CAAC,CACvC,MAEW;AAChB;AAEA,SAAS,oBAAoB,EAC3B,KACA,WACA,sBAKC;CACD,MAAM,QAAQ,GAAG,IAAI,GAAG,UAAU;CAElC,OAAO,IAAI,mBAAmB,GAAG,CAAC,CAC/B,sBAAsB,kBAAkB,CAAC,CACzC,kBAAkB,KAAK,CAAC,CACxB,mBAAmB,KAAK,CAAC,CACzB,wBAAwB,KAAK,CAAC,CAC9B,wBAAwB,KAAK;AAClC"}