{"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"}