///
import crypto from 'crypto';
import { KeyPair, PrivateKey, PublicKey } from '../models';
import { AsymmetricEncryptedData, AsymmetricEncryptedDataString, EciesCurveType, EciesOptions } from './asymmetricModels';
/** Use assymmetric encryption with multiple public keys - wrapping with each
* Returns an array of results with the last one including the final cipertext
* Encrypts using publicKeys in the order they appear in the array */
export declare function encryptWithPublicKeys(encryptCallback: (unencrypted: string, publicKey: PublicKey, options: EciesOptions) => Promise, unencrypted: string, publicKeys: PublicKey[], options?: EciesOptions): Promise;
/** Unwraps an object produced by encryptWithPublicKeys() - resulting in the original ecrypted string (or the remaining encrypted payload)
* each pass uses a private keys from privateKeys array - in the order appearing in the array - in same order of public keys provided to encryptWithPublicKeys() - they will be applied in the right (reverse) order
* If only some of the private keys are provided, if most be the last n keys (provided in same order as when encrypted) e.g. [key3, key4] where key1, key2 will be used later to finish decrypting the remaining payload
* Returns: decrypted - If all keys were provided. The result is the original string that was encrypted
* OR remaining - If only some of the private keys provided. Returns array of encrypted blobs that are remaining after unwrapping with the private keys provided */
export declare function decryptWithPrivateKeys(decryptCallback: (encryptedItem: AsymmetricEncryptedData, privateKey: PrivateKey, options: EciesOptions) => Promise, encrypted: string, privateKeys: PrivateKey[], options: EciesOptions): Promise<{
decrypted: string;
remaining: AsymmetricEncryptedData[];
}>;
/** generates a new ECDSA private/public keypair */
export declare function generateKeyPair(curveType: EciesCurveType, format?: crypto.ECDHKeyFormat): KeyPair;