@sphereon/ssi-sdk-ext.did-provider-key
Version:
Sphereon SSI-SDK plugin for management of did:key identifiers.
1 lines • 9.54 kB
Source Map (JSON)
{"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"]}