{"version":3,"sources":["../src/index.ts","../src/SphereonKeyDidProvider.ts","../src/KeyDidResolver.ts"],"sourcesContent":["export { SphereonKeyDidProvider } from './SphereonKeyDidProvider'\nexport { getDidKeyResolver } from './KeyDidResolver'\n","import {\n  importProvidedOrGeneratedKey,\n  JWK_JCS_PUB_NAME,\n  JWK_JCS_PUB_PREFIX,\n  jwkJcsEncode,\n  JwkKeyUse,\n  TKeyType,\n  toJwk,\n  toRawCompressedHexPublicKey,\n} from '@sphereon/ssi-sdk-ext.key-utils'\nimport { IAgentContext, IIdentifier, IKey, IKeyManager, IService } from '@veramo/core'\nimport { AbstractIdentifierProvider } from '@veramo/did-manager'\nimport Debug from 'debug'\nimport Multibase from 'multibase'\nimport Multicodec from 'multicodec'\n// @ts-ignore\nimport * as u8a from 'uint8arrays'\nconst { fromString, toString } = u8a\n\nconst PROVIDER_NAME = 'Sphereon Key DID Provider'\n\nconst debug = Debug('did-provider-key')\n\ntype IContext = IAgentContext<IKeyManager>\n\nconst keyCodecs = {\n  RSA: 'rsa-pub',\n  Ed25519: 'ed25519-pub',\n  X25519: 'x25519-pub',\n  Secp256k1: 'secp256k1-pub',\n  Secp256r1: 'p256-pub',\n  Bls12381G1: 'bls12_381-g1-pub',\n  Bls12381G2: 'bls12_381-g2-pub',\n} as const\n\nexport class SphereonKeyDidProvider extends AbstractIdentifierProvider {\n  private readonly kms?: string\n\n  constructor(options: { defaultKms?: string }) {\n    super()\n    this.kms = options.defaultKms\n  }\n\n  async createIdentifier(\n    {\n      kms,\n      alias,\n      options,\n    }: {\n      kms?: string\n      alias?: string\n      options?: {\n        type?: TKeyType\n        codecName?: 'EBSI' | 'jwk_jcs-pub' | Multicodec.CodecName\n        key?: {\n          type?: Exclude<TKeyType, 'Secp384r1' | 'Secp521r1'>\n          privateKeyHex: string\n        }\n      }\n    },\n    context: IContext,\n  ): Promise<Omit<IIdentifier, 'provider'>> {\n    let codecName = (options?.codecName?.toUpperCase() === 'EBSI' ? (JWK_JCS_PUB_NAME as Multicodec.CodecName) : options?.codecName) as\n      | CodeNameType\n      | undefined\n    const keyType = (options?.type ?? options?.key?.type ?? (codecName === JWK_JCS_PUB_NAME ? 'Secp256r1' : 'Secp256k1')) as Exclude<\n      TKeyType,\n      'Secp384r1' | 'Secp521r1'\n    >\n    // console.log(`keytype: ${keyType}, codecName: ${codecName}`)\n\n    const key = await importProvidedOrGeneratedKey(\n      {\n        providerName: PROVIDER_NAME,\n        // @ts-ignore\n        kms: kms ?? this.kms,\n        alias: alias,\n        options: { ...options, type: keyType },\n      },\n      context,\n    )\n\n    let methodSpecificId: string | undefined\n\n    // did:key uses compressed pub keys\n    const compressedPublicKeyHex = toRawCompressedHexPublicKey(fromString(key.publicKeyHex, 'hex'), key.type)\n    if (codecName === JWK_JCS_PUB_NAME) {\n      const jwk = toJwk(key.publicKeyHex, keyType, { use: JwkKeyUse.Signature, key, noKidThumbprint: true })\n      // console.log(`FIXME JWK: ${JSON.stringify(toJwk(privateKeyHex, keyType, { use: JwkKeyUse.Signature, key, isPrivateKey: true }), null, 2)}`)\n      methodSpecificId = toString(\n        Multibase.encode('base58btc', Multicodec.addPrefix(fromString(JWK_JCS_PUB_PREFIX.valueOf().toString(16), 'hex'), jwkJcsEncode(jwk))),\n      )\n    } else if (codecName) {\n      methodSpecificId = toString(\n        Multibase.encode('base58btc', Multicodec.addPrefix(codecName as Multicodec.CodecName, fromString(compressedPublicKeyHex, 'hex'))),\n      )\n    } else {\n      codecName = keyCodecs[keyType]\n\n      if (codecName) {\n        // methodSpecificId  = bytesToMultibase({bytes: u8a.fromString(key.publicKeyHex, 'hex'), codecName})\n        methodSpecificId = toString(\n          Multibase.encode('base58btc', Multicodec.addPrefix(codecName as Multicodec.CodecName, fromString(compressedPublicKeyHex, 'hex'))),\n        ).toString()\n      }\n    }\n    if (!methodSpecificId) {\n      throw Error(`Key type ${keyType}, codec ${codecName} is not supported currently for did:key`)\n    }\n    const identifier: Omit<IIdentifier, 'provider'> = {\n      did: `did:key:${methodSpecificId}`,\n      controllerKeyId: key.kid,\n      keys: [key],\n      services: [],\n    }\n    debug('Created', identifier.did)\n    return identifier\n  }\n\n  async updateIdentifier(\n    args: { did: string; kms?: string | undefined; alias?: string | undefined; options?: any },\n    context: IAgentContext<IKeyManager>,\n  ): Promise<IIdentifier> {\n    throw new Error('KeyDIDProvider updateIdentifier not supported yet.')\n  }\n\n  async deleteIdentifier(identifier: IIdentifier, context: IContext): Promise<boolean> {\n    for (const { kid } of identifier.keys) {\n      await context.agent.keyManagerDelete({ kid })\n    }\n    return true\n  }\n\n  async addKey({ identifier, key, options }: { identifier: IIdentifier; key: IKey; options?: any }, context: IContext): Promise<any> {\n    throw Error('KeyDIDProvider addKey not supported')\n  }\n\n  async addService({ identifier, service, options }: { identifier: IIdentifier; service: IService; options?: any }, context: IContext): Promise<any> {\n    throw Error('KeyDIDProvider addService not supported')\n  }\n\n  async removeKey(args: { identifier: IIdentifier; kid: string; options?: any }, context: IContext): Promise<any> {\n    throw Error('KeyDIDProvider removeKey not supported')\n  }\n\n  async removeService(args: { identifier: IIdentifier; id: string; options?: any }, context: IContext): Promise<any> {\n    throw Error('KeyDIDProvider removeService not supported')\n  }\n}\n\ntype CodeNameType = Multicodec.CodecName | 'rsa-pub' | 'jwk_jcs-pub'\n","import { DIDResolutionOptions, DIDResolutionResult, DIDResolver, ParsedDID, Resolvable, Resolver } from 'did-resolver'\nimport { getResolver } from '@sphereon/ssi-sdk-ext.did-resolver-key'\n\nconst resolveDidKey: DIDResolver = async (\n  didUrl: string,\n  _parsed: ParsedDID,\n  _resolver: Resolvable,\n  options: DIDResolutionOptions,\n): Promise<DIDResolutionResult> => {\n  const resolver = new Resolver({ ...getResolver() })\n  return resolver.resolve(didUrl, options)\n}\n\nexport function getDidKeyResolver() {\n  return { key: resolveDidKey }\n}\n"],"mappings":"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","names":["fromString","toString","u8a","PROVIDER_NAME","debug","Debug","keyCodecs","RSA","Ed25519","X25519","Secp256k1","Secp256r1","Bls12381G1","Bls12381G2","SphereonKeyDidProvider","AbstractIdentifierProvider","kms","options","defaultKms","createIdentifier","alias","context","codecName","toUpperCase","JWK_JCS_PUB_NAME","keyType","type","key","importProvidedOrGeneratedKey","providerName","methodSpecificId","compressedPublicKeyHex","toRawCompressedHexPublicKey","publicKeyHex","jwk","toJwk","use","JwkKeyUse","Signature","noKidThumbprint","Multibase","encode","Multicodec","addPrefix","JWK_JCS_PUB_PREFIX","valueOf","jwkJcsEncode","Error","identifier","did","controllerKeyId","kid","keys","services","updateIdentifier","args","deleteIdentifier","agent","keyManagerDelete","addKey","addService","service","removeKey","removeService","import_ssi_sdk_ext","resolveDidKey","didUrl","_parsed","_resolver","options","resolver","Resolver","getResolver","resolve","getDidKeyResolver","key"]}