UNPKG

@didtools/key-webcrypto

Version:

This is a DID Provider which implements [EIP2844](https://eips.ethereum.org/EIPS/eip-2844) for `did:key:` using webcrypto with non-extractable keys. Currently P-256 is supported.

55 lines (54 loc) 2.04 kB
/** * # Webcrypto Key Did Provider * This is a DID Provider which implements [EIP2844](https://eips.ethereum.org/EIPS/eip-2844) for `did:key:` using webcrypto with non-extractable keys. * * ## Installation * * ``` * npm install --save @didtools/key-webcrypto * ``` * * ## Usage * * ```js * import { CryptoKeyProvider, generateP256KeyPair } from '@didtools/key-webcrypto' * import KeyResolver from 'key-did-resolver' * import { DID } from 'dids' * * const keyPair = generateP256KeyPair() * const provider = new WebcryptoProvider(keypair) * const did = new DID({ provider, resolver: KeyResolver.getResolver() }) * await did.authenticate() * * // log the DID * console.log(did.id) * * // create JWS * const { jws, linkedBlock } = await did.createDagJWS({ hello: 'world' }) * * // verify JWS * await did.verifyJWS(jws) * ``` * * @module @didtools/key-webcrypto */ import type { DIDMethodName, DIDProviderMethods, DIDProvider } from 'dids'; import type { RPCRequest, RPCResponse, SendRequestFunc } from 'rpc-utils'; /** * compress a public key with points x,y expressed as UintArrays * source: https://stackoverflow.com/questions/17171542/algorithm-for-elliptic-curve-point-compression * * @param {Uint8Array} x x point of public key * @param {Uint8Array} y y point of public key * @return {Uint8Array} compressed form of public key as Uint8Array */ export declare function ecPointCompress(x: Uint8Array, y: Uint8Array): Uint8Array; export declare function getPublicKey({ publicKey }: CryptoKeyPair): Promise<Uint8Array>; export declare function encodeDIDFromPub(publicKey: Uint8Array): string; export declare function generateP256KeyPair(): Promise<CryptoKeyPair>; export declare class WebcryptoProvider implements DIDProvider { _handle: SendRequestFunc<DIDProviderMethods>; constructor(keyPair: CryptoKeyPair); get isDidProvider(): boolean; send<Name extends DIDMethodName>(msg: RPCRequest<DIDProviderMethods, Name>): Promise<RPCResponse<DIDProviderMethods, Name> | null>; }