import type { X25519KeyPair, MLKEMKeyPair, PQPreKeyBundle, PQXDHResult } from "./types.js";
export interface PQXDHInitiateResult {
    result: PQXDHResult;
    initialMessage: {
        ephemeralPublicKey: Uint8Array;
        mlkemCiphertext: Uint8Array;
        identityKey: Uint8Array;
    };
}
export declare function pqxdhInitiate(ourIdentityKeyPair: X25519KeyPair, peerBundle: PQPreKeyBundle): PQXDHInitiateResult;
export declare function pqxdhReceive(ourIdentityKeyPair: X25519KeyPair, ourSignedPreKeyPair: X25519KeyPair, ourOneTimePreKeyPair: X25519KeyPair | null, ourPQPreKeyPair: MLKEMKeyPair, peerEphemeralPublicKey: Uint8Array, peerIdentityKey: Uint8Array, mlkemCiphertext: Uint8Array): PQXDHResult;
export interface GeneratedPreKeyBundle {
    identityKeyPair: X25519KeyPair;
    falcon512KeyPair: {
        publicKey: Uint8Array;
        privateKey: Uint8Array;
    };
    registrationId: number;
    signedPreKey: {
        keyId: number;
        keyPair: X25519KeyPair;
        signature: Uint8Array;
    };
    oneTimePreKeys: Array<{
        keyId: number;
        keyPair: X25519KeyPair;
    }>;
    pqPreKey: {
        keyId: number;
        keyPair: MLKEMKeyPair;
        signature: Uint8Array;
    };
}
export declare function generatePreKeyBundle(identityKeyPair: X25519KeyPair, falcon512KeyPair: {
    publicKey: Uint8Array;
    privateKey: Uint8Array;
}, signedPreKeyId: number, pqPreKeyId: number, oneTimePreKeyCount: number): GeneratedPreKeyBundle;
export declare function verifyPreKeyBundle(bundle: PQPreKeyBundle): boolean;
