import { type X25519Keypair } from "./crypto.js"; export interface SessionKeys { /** Cipher state for sending (ChaCha20-Poly1305). First 32 bytes = key. */ tx: Uint8Array; /** Cipher state for receiving (ChaCha20-Poly1305). First 32 bytes = key. */ rx: Uint8Array; /** 6-emoji safety number derived from the handshake hash. */ safetyNumber: string; /** Raw 32-byte SHA-256 handshake hash, usable for further derivation. */ handshakeHash: Buffer; /** * Curve25519 static public key received from the initiator (app). * Extracted from state.rs before destroy() — use for peer identity validation. */ remoteStaticKey?: Uint8Array; } /** * Runs Noise_XX_25519_ChaChaPoly_SHA256 as **responder** (the Mac side). * Pattern: receive msg1 (→e), send msg2 (←e,ee,s,es), receive msg3 (→s,se) * @param prologue Optional prologue bytes mixed into handshake hash (default: empty). */ export declare function runHandshakeResponder(localStatic: X25519Keypair, sendFn: (msg: Buffer) => Promise, recvFn: () => Promise, prologue?: Uint8Array): Promise; /** * Runs Noise_XX_25519_ChaChaPoly_SHA256 as **initiator** (the mobile side). * Exported for use in tests — production initiator is the app (Dart). * @param prologue Optional prologue bytes mixed into handshake hash (default: empty). */ export declare function runHandshakeInitiator(localStatic: X25519Keypair, sendFn: (msg: Buffer) => Promise, recvFn: () => Promise, prologue?: Uint8Array): Promise;