/** * Maximum number of message keys we will derive-and-cache to support out-of-order delivery. * * This mirrors the Rust implementation and is intentionally higher than the 1:1 ratchet MAX_SKIP. */ export declare const SENDER_KEY_MAX_SKIP = 10000; /** Bound the amount of cached skipped message keys to limit memory/CPU DoS. */ export declare const SENDER_KEY_MAX_STORED_SKIPPED_KEYS = 2000; export interface SenderKeyDistribution { groupId: string; keyId: number; /** Hex-encoded 32-byte chain key */ chainKey: string; iteration: number; /** UNIX seconds */ createdAt: number; /** Per-sender outer pubkey used to publish group messages */ senderEventPubkey?: string; } export interface SenderKeyStateSerialized { keyId: number; /** Hex-encoded 32-byte chain key */ chainKey: string; iteration: number; /** messageNumber -> hex-encoded 32-byte key */ skippedMessageKeys?: Record; } /** * Signal-style "sender key" state (symmetric chain) for efficient one-to-many group messages. * * A sender distributes a fresh SenderKeyDistribution to each group member over a 1:1 Double Ratchet * session (forward-secure), then publishes group messages once using OneToManyChannel. */ export declare class SenderKeyState { readonly keyId: number; private chainKey; private iteration; private skippedMessageKeys; constructor(keyId: number, chainKey: Uint8Array, iteration: number); chainKeyBytes(): Uint8Array; iterationNumber(): number; skippedLen(): number; encryptToBytes(plaintext: string): { messageNumber: number; ciphertext: Uint8Array; }; encrypt(plaintext: string): { messageNumber: number; ciphertext: string; }; decryptFromBytes(messageNumber: number, ciphertextBytes: Uint8Array): string; decrypt(messageNumber: number, ciphertext: string): string; toJSON(): SenderKeyStateSerialized; static fromJSON(data: SenderKeyStateSerialized): SenderKeyState; static fromDistribution(dist: SenderKeyDistribution): SenderKeyState; private pruneSkipped; } //# sourceMappingURL=SenderKey.d.ts.map