import type { bytes, bytes32 } from '../@types/basic';
import type { CipherState, MessageBuffer, SymmetricState } from '../@types/handshake';
import type { ICryptoInterface } from '../crypto';
import { Nonce } from '../nonce';
import { KeyPair } from '../@types/keypair';
import { NoiseSession } from '../@types/handshake';
export declare abstract class AbstractHandshake {
    crypto: ICryptoInterface;
    constructor(crypto: ICryptoInterface);
    abstract initSession(initiator: boolean, prologue: bytes32, s: KeyPair, remotePublicKey: bytes | null): NoiseSession;
    encryptWithAd(cs: CipherState, ad: Uint8Array, plaintext: Uint8Array): bytes;
    decryptWithAd(cs: CipherState, ad: Uint8Array, ciphertext: Uint8Array, dst?: Uint8Array): {
        plaintext: bytes;
        valid: boolean;
    };
    protected hasKey(cs: CipherState): boolean;
    protected createEmptyKey(): bytes32;
    protected isEmptyKey(k: bytes32): boolean;
    protected encrypt(k: bytes32, n: Nonce, ad: Uint8Array, plaintext: Uint8Array): bytes;
    protected encryptAndHash(ss: SymmetricState, plaintext: bytes): bytes;
    protected decrypt(k: bytes32, n: Nonce, ad: bytes, ciphertext: bytes, dst?: Uint8Array): {
        plaintext: bytes;
        valid: boolean;
    };
    protected decryptAndHash(ss: SymmetricState, ciphertext: bytes): {
        plaintext: bytes;
        valid: boolean;
    };
    protected dh(privateKey: bytes32, publicKey: bytes32): bytes32;
    protected mixHash(ss: SymmetricState, data: bytes): void;
    protected getHash(a: Uint8Array, b: Uint8Array): bytes32;
    protected mixKey(ss: SymmetricState, ikm: bytes32): void;
    protected initializeKey(k: bytes32): CipherState;
    protected initializeSymmetric(protocolName: string): SymmetricState;
    protected hashProtocolName(protocolName: Uint8Array): bytes32;
    split(ss: SymmetricState): {
        cs1: CipherState;
        cs2: CipherState;
    };
    protected writeMessageRegular(cs: CipherState, payload: bytes): MessageBuffer;
    protected readMessageRegular(cs: CipherState, message: MessageBuffer): {
        plaintext: bytes;
        valid: boolean;
    };
}
