Interface SessionState

State of a Double Ratchet session between two parties. Needed for persisting sessions.

interface SessionState {
    ourCurrentNostrKey?: KeyPair;
    ourNextNostrKey: KeyPair;
    previousSendingChainMessageCount: number;
    receivingChainKey?: Uint8Array<ArrayBufferLike>;
    receivingChainMessageNumber: number;
    rootKey: Uint8Array;
    sendingChainKey?: Uint8Array<ArrayBufferLike>;
    sendingChainMessageNumber: number;
    skippedKeys: {
        [pubKey: string]: {
            headerKeys: Uint8Array<ArrayBufferLike>[];
            messageKeys: { [msgIndex: number]: Uint8Array<ArrayBufferLike> };
        };
    };
    theirCurrentNostrPublicKey?: string;
    theirNextNostrPublicKey: string;
}

Properties

ourCurrentNostrKey?: KeyPair

Our current Nostr keypair used for this session

ourNextNostrKey: KeyPair

Our next Nostr keypair, used when ratcheting forward. It is advertised in messages we send.

previousSendingChainMessageCount: number

Number of messages sent in previous sending chain

receivingChainKey?: Uint8Array<ArrayBufferLike>

Key for decrypting incoming messages in current chain

receivingChainMessageNumber: number

Number of messages received in current receiving chain

rootKey: Uint8Array

Root key used to derive new sending / receiving chain keys

sendingChainKey?: Uint8Array<ArrayBufferLike>

Key for encrypting outgoing messages in current chain

sendingChainMessageNumber: number

Number of messages sent in current sending chain

skippedKeys: {
    [pubKey: string]: {
        headerKeys: Uint8Array<ArrayBufferLike>[];
        messageKeys: { [msgIndex: number]: Uint8Array<ArrayBufferLike> };
    };
}

Cache of message & header keys for handling out-of-order messages

theirCurrentNostrPublicKey?: string

The other party's current Nostr public key

theirNextNostrPublicKey: string

The other party's next Nostr public key