import type { X25519KeyPair, MLKEMKeyPair, PQPreKeyBundle, PQIdentity, EncryptedMessage, SerializedPQSessionState } from "./types.js";
export interface PQSessionStore {
    getIdentityKeyPair(): Promise<X25519KeyPair | null>;
    setIdentityKeyPair(keyPair: X25519KeyPair): Promise<void>;
    getRegistrationId(): Promise<number | null>;
    setRegistrationId(id: number): Promise<void>;
    getSignedPreKey(keyId: number): Promise<X25519KeyPair | null>;
    setSignedPreKey(keyId: number, keyPair: X25519KeyPair): Promise<void>;
    getSignedPreKeySignature(keyId: number): Promise<Uint8Array | null>;
    setSignedPreKeySignature(keyId: number, sig: Uint8Array): Promise<void>;
    getOneTimePreKey(keyId: number): Promise<X25519KeyPair | null>;
    setOneTimePreKey(keyId: number, keyPair: X25519KeyPair): Promise<void>;
    removeOneTimePreKey(keyId: number): Promise<void>;
    getPQPreKey(keyId: number): Promise<MLKEMKeyPair | null>;
    setPQPreKey(keyId: number, keyPair: MLKEMKeyPair): Promise<void>;
    getPQPreKeySignature(keyId: number): Promise<Uint8Array | null>;
    setPQPreKeySignature(keyId: number, sig: Uint8Array): Promise<void>;
    getSession(peerAddress: string, peerDeviceId: number): Promise<SerializedPQSessionState | null>;
    setSession(peerAddress: string, peerDeviceId: number, state: SerializedPQSessionState): Promise<void>;
    removeSession(peerAddress: string, peerDeviceId: number): Promise<void>;
    getPeerIdentity(peerAddress: string): Promise<Uint8Array | null>;
    setPeerIdentity(peerAddress: string, identityKey: Uint8Array): Promise<void>;
}
export declare class PQSessionCipher {
    private store;
    private identity;
    private getFalcon512KeyPair;
    constructor(store: PQSessionStore, getFalcon512KeyPair?: () => Promise<{
        publicKey: Uint8Array;
        privateKey: Uint8Array;
    }>);
    ensureIdentity(): Promise<PQIdentity>;
    generatePreKeyBundle(signedPreKeyId: number, pqPreKeyId: number, oneTimePreKeyCount: number): Promise<import("./pqxdh.js").GeneratedPreKeyBundle>;
    processPreKeyBundle(peerAddress: string, peerDeviceId: number, bundle: PQPreKeyBundle): Promise<void>;
    processInitialMessage(peerAddress: string, peerDeviceId: number, ephemeralPublicKey: Uint8Array, mlkemCiphertext: Uint8Array, peerIdentityKey: Uint8Array, signedPreKeyId: number, oneTimePreKeyId: number | null, pqPreKeyId: number): Promise<void>;
    encryptMessage(peerAddress: string, plaintext: Uint8Array, peerDeviceId?: number): Promise<EncryptedMessage>;
    decryptMessage(peerAddress: string, messageBody: Uint8Array, peerDeviceId?: number): Promise<Uint8Array>;
    hasSession(peerAddress: string, peerDeviceId?: number): Promise<boolean>;
    private loadSession;
    private saveSession;
}
