@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
TypeScript
/**
* # 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>;
}