import * as util from '../util'; import Scalar from './scalar'; import GroupElement from './group_element'; import { PrivateKey, PublicKey } from './key'; import ReEncryptionKey from './re_encryption_key'; import { Capsule, ReEncryptedCapsule } from './capsule'; import { HASHAlgorithm, AESAlgorithm } from './interfaces'; export { util, Capsule, GroupElement, PublicKey, PrivateKey, ReEncryptionKey }; export * from './interfaces'; export declare function symmetricKeyFromPoint(algo: AESAlgorithm, hashAlgo: HASHAlgorithm, obj: GroupElement): string; /** * Concat of hashes of GroupElement's */ export declare function hashToScalar(points: GroupElement[]): Scalar; export interface CapsuleWithSymmetricKey { capsule: Capsule; symmetricKey: string; } /** * \brief Making capsule out of given PublicKey and given crypto Context and also returning * symmetric key wrapped as a string object */ export declare function encapsulate(publicKey: PublicKey): CapsuleWithSymmetricKey; /** * \brief Decapsulate given capsule with private key, * NOTE: Provided private key, should be the original key from which Public Key capsule is created * @param capsule * @param privateKey * @return */ export declare function decapsulateOriginal(capsule: Capsule, privateKey: PrivateKey): string; /** * \brief Decapsulating given capsule with provided private key * @param capsule * @param privateKey * @return */ export declare function decapsulateReEncrypted(capsule: ReEncryptedCapsule, privateKey: PrivateKey): string; export declare function decapsulate(capsule: Capsule, privateKey: PrivateKey): string; /** * \brief Getting re-encryption capsule from given original capsule and re-encryption key * @param capsule * @param rk * @return */ export declare function reEncryptCapsule(capsule: Capsule, rk: ReEncryptionKey): ReEncryptedCapsule; export interface Lockbox { key: string; cipher: string; } export interface LockboxWithContent { lockbox: Lockbox; content: Buffer; } export interface IKeyPair { private_key: string; public_key: string; passphrase?: string; } export declare function generateKeyPair(): IKeyPair; export declare function deriveKeyPair(masterKey: string, index: number, context: string): IKeyPair; export declare function encrypt(publicKey: string, data: string): Lockbox; /** * @description Getting re-encryption key out of Private key (Alice) and public key (Bob) using random private key generation */ export declare function generateReEncryptionKey(fromPrivateKey: string, toPublicKey: string): string; export declare function reEncrypt(reEncryptionKey: string, data: Lockbox): Lockbox; export declare function decrypt(privateKey: string, data: Lockbox): string; export declare function lockboxEncrypt(publicKey: string, data: Buffer): LockboxWithContent; export declare function lockboxDecrypt(privateKey: string, lockbox: Lockbox, data: Buffer): Buffer;