declare module 'libp2p-crypto' { export type KeyTypes = 'ed25519' | 'rsa' | 'secp256k1' // @todo: Export the specific key types as well export interface PublicKey { verify(data: any, sig: any): Promise marshal(): Buffer readonly bytes: Buffer equal(key: PublicKey): boolean hash(): Promise } export interface PrivateKey { sign(data: any): Promise readonly public: PublicKey marshal(): Buffer readonly bytes: Buffer equal(key: PublicKey): boolean hash(): Promise id(): Promise } export interface Keypair { privateKey: PrivateKey publicKey: PublicKey } export interface Cipher { encrypt(data: Buffer): Promise decrypt(data: Buffer): Promise } export namespace aes { export function create(key: Buffer, iv: Buffer): Promise } export namespace hmac { export function create(hash: string, secret: Buffer): Promise<(data: Buffer) => Buffer> } export namespace keys { export function generateKeyPair(type: KeyTypes, bits: number): Promise export function generateKeyPairFromSeed(type: KeyTypes, seed: Uint32Array, bits: number): Promise export function generateEphemeralKeyPair(curve: 'P-256' | 'P-384' | 'P-521'): Promise<{ key: Buffer, genSharedKey: Function }> export function unmarshalPublicKey(buf: Buffer): Promise export function marshalPublicKey(key: Buffer, type: string): Buffer export function unmarshalPrivateKey(buf: Buffer): Promise export function marshalPrivateKey(key: Buffer, type: string): Buffer } export function randomBytes(len: number): Buffer export function pbkdf2(password: string | Buffer, salt: string | Buffer, iterations: number, keySize: number, hash: string): Buffer }