import { SubtleCrypto } from 'webcrypto-core';
import { CryptoAlgorithm } from '../keyStore/IKeyStore';
import PrivateKey from '../keys/PrivateKey';
/**
 * Interface for the Subtle Crypto
 */
export interface ISubtleCrypto {
    /**
     * Returns the @class SubtleCrypto implementation for the nodes environment
     */
    getSubtleCrypto(): SubtleCrypto;
}
/**
 * Interface for the Subtle Crypto extensions
 */
export default interface ISubtleCryptoExtension extends SubtleCrypto {
    /**
     * Generate a pairwise key
     * @param algorithm for the key
     * @param seedReference Reference to the seed
     * @param personaId Id for the persona
     * @param peerId Id for the peer
     * @param extractable True if key is exportable
     * @param keyops Key operations
     */
    generatePairwiseKey(algorithm: EcKeyGenParams | RsaHashedKeyGenParams, seedReference: string, personaId: string, peerId: string, extractable: boolean, keyops: string[]): Promise<PrivateKey>;
    /**
     * Sign with a key referenced in the key store.
     * The referenced key must be a jwk key.
     * @param algorithm used for signature
     * @param keyReference points to key in the key store
     * @param data to sign
     */
    signByKeyStore(algorithm: CryptoAlgorithm, keyReference: string, data: BufferSource): PromiseLike<ArrayBuffer>;
    /**
    * Verify with JWK.
    * @param algorithm used for verification
    * @param jwk Json web key used to verify
    * @param signature to verify
    * @param payload which was signed
    */
    verifyByJwk(algorithm: CryptoAlgorithm, jwk: JsonWebKey, signature: BufferSource, payload: BufferSource): Promise<boolean>;
    /**
     * Decrypt with a key referenced in the key store.
     * The referenced key must be a jwk key.
     * @param algorithm used for encryption
     * @param keyReference points to key in the key store
     * @param cipher to decrypt
     */
    decryptByKeyStore(algorithm: CryptoAlgorithm, keyReference: string, cipher: BufferSource): PromiseLike<ArrayBuffer>;
    /**
    * Decrypt with JWK.
    * @param algorithm used for decryption
    * @param jwk Json web key to decrypt
    * @param cipher to decrypt
    */
    decryptByJwk(algorithm: CryptoAlgorithm, jwk: JsonWebKey, cipher: BufferSource): Promise<ArrayBuffer>;
    /**
    * Encrypt with a jwk key referenced in the key store
    * @param algorithm used for encryption
    * @param keyReference points to key in the key store
    * @param data to sign
    */
    encryptByJwk(algorithm: CryptoAlgorithm, key: JsonWebKey, data: BufferSource): Promise<ArrayBuffer>;
}
