import { KeyPairType, SignedPublicPreKeyType, PreKeyType } from './types'; export declare enum ChainType { SENDING = 1, RECEIVING = 2 } export declare enum BaseKeyType { OURS = 1, THEIRS = 2 } export interface SessionType { indexInfo: IndexInfo; registrationId?: number; currentRatchet: Ratchet; pendingPreKey?: PendingPreKey; oldRatchetList: OldRatchetInfo[]; chains: { [ephKeyString: string]: Chain; }; } export interface IndexInfo { closed: number; remoteIdentityKey: T; baseKey?: T; baseKeyType?: BaseKeyType; } export interface Ratchet { rootKey: T; ephemeralKeyPair?: KeyPairType; lastRemoteEphemeralKey: T; previousCounter: number; added?: number; } export interface OldRatchetInfo { ephemeralKey: T; added: number; } export interface Chain { chainType: ChainType; chainKey: { key?: T; counter: number; }; messageKeys: { [key: number]: T; }; } export interface PendingPreKey { baseKey: T; preKeyId?: number; signedKeyId: number; } export declare enum EncryptionResultMessageType { WhisperMessage = 1, PreKeyWhisperMessage = 3 } export interface EncryptionResult { type: EncryptionResultMessageType; body: ArrayBuffer; registrationId: number; } export interface DeviceType { identityKey: T; signedPreKey: SignedPublicPreKeyType; preKey?: PreKeyType; registrationId?: number; } export interface RecordType { archiveCurrentState: () => void; deleteAllSessions: () => void; getOpenSession: () => SessionType | undefined; getSessionByBaseKey: (baseKey: ArrayBuffer) => SessionType | undefined; getSessionByRemoteEphemeralKey: (remoteEphemeralKey: ArrayBuffer) => SessionType | undefined; getSessions: () => SessionType[]; haveOpenSession: () => boolean; promoteState: (session: SessionType) => void; serialize: () => string; updateSessionState: (session: SessionType) => void; }