syn-link 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +75 -0
- package/README.md +80 -0
- package/dist/crypto.d.ts +140 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +326 -0
- package/dist/crypto.js.map +1 -0
- package/dist/index.d.ts +204 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +671 -0
- package/dist/index.js.map +1 -0
- package/dist/local.d.ts +44 -0
- package/dist/local.d.ts.map +1 -0
- package/dist/local.js +67 -0
- package/dist/local.js.map +1 -0
- package/dist/ratchet.d.ts +83 -0
- package/dist/ratchet.d.ts.map +1 -0
- package/dist/ratchet.js +233 -0
- package/dist/ratchet.js.map +1 -0
- package/dist/relay-client.d.ts +162 -0
- package/dist/relay-client.d.ts.map +1 -0
- package/dist/relay-client.js +209 -0
- package/dist/relay-client.js.map +1 -0
- package/dist/sse.d.ts +19 -0
- package/dist/sse.d.ts.map +1 -0
- package/dist/sse.js +139 -0
- package/dist/sse.js.map +1 -0
- package/dist/types.d.ts +118 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/ws.d.ts +18 -0
- package/dist/ws.d.ts.map +1 -0
- package/dist/ws.js +100 -0
- package/dist/ws.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/local.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { RawIncomingMessage } from "./types.js";
|
|
2
|
+
type LocalHandler = (message: RawIncomingMessage) => void;
|
|
3
|
+
/**
|
|
4
|
+
* LocalBus — Global singleton for in-process agent communication.
|
|
5
|
+
*
|
|
6
|
+
* When two SynLink agents run in the same Node.js process,
|
|
7
|
+
* LocalBus lets them send messages directly without touching the relay.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* // Agent A and Agent B in the same process
|
|
12
|
+
* const agentA = new SynLink({ username: "agent-a", ... });
|
|
13
|
+
* const agentB = new SynLink({ username: "agent-b", ... });
|
|
14
|
+
* await agentA.connect();
|
|
15
|
+
* await agentB.connect();
|
|
16
|
+
*
|
|
17
|
+
* // When A sends to B, LocalBus delivers instantly in-memory
|
|
18
|
+
* await agentA.send("@agent-b", "Hello!"); // No HTTP, no relay
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class LocalBus {
|
|
22
|
+
private static handlers;
|
|
23
|
+
/** Register an agent's message handler for local delivery. */
|
|
24
|
+
static register(agentId: string, handler: LocalHandler): void;
|
|
25
|
+
/** Unregister an agent (called on disconnect). */
|
|
26
|
+
static unregister(agentId: string): void;
|
|
27
|
+
/** Check if an agent is registered locally (same process). */
|
|
28
|
+
static isLocal(agentId: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Deliver a message directly to a local agent.
|
|
31
|
+
* The message is passed as-is — no encryption, no HTTP.
|
|
32
|
+
*
|
|
33
|
+
* @param encrypt - If true, the message should be encrypted before delivery.
|
|
34
|
+
* Default is false (plaintext for same-process delivery).
|
|
35
|
+
* Agents can choose to encrypt local messages for audit/compliance.
|
|
36
|
+
*/
|
|
37
|
+
static deliver(agentId: string, message: RawIncomingMessage, encrypt?: boolean): boolean;
|
|
38
|
+
/** Get the number of locally registered agents (useful for debugging). */
|
|
39
|
+
static get size(): number;
|
|
40
|
+
/** Clear all registrations (for testing). */
|
|
41
|
+
static clear(): void;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,KAAK,YAAY,GAAG,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAE1D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,QAAQ;IAEjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAE1D,8DAA8D;IAC9D,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAI7D,kDAAkD;IAClD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIxC,8DAA8D;IAC9D,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,UAAQ,GAAG,OAAO;IAatF,0EAA0E;IAC1E,MAAM,KAAK,IAAI,IAAI,MAAM,CAExB;IAED,6CAA6C;IAC7C,MAAM,CAAC,KAAK,IAAI,IAAI;CAGvB"}
|
package/dist/local.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// SYN Link SDK — Local In-Memory Transport
|
|
2
|
+
// Enables direct message delivery between agents in the same process.
|
|
3
|
+
// No network, no encryption overhead — just a function call.
|
|
4
|
+
/**
|
|
5
|
+
* LocalBus — Global singleton for in-process agent communication.
|
|
6
|
+
*
|
|
7
|
+
* When two SynLink agents run in the same Node.js process,
|
|
8
|
+
* LocalBus lets them send messages directly without touching the relay.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* // Agent A and Agent B in the same process
|
|
13
|
+
* const agentA = new SynLink({ username: "agent-a", ... });
|
|
14
|
+
* const agentB = new SynLink({ username: "agent-b", ... });
|
|
15
|
+
* await agentA.connect();
|
|
16
|
+
* await agentB.connect();
|
|
17
|
+
*
|
|
18
|
+
* // When A sends to B, LocalBus delivers instantly in-memory
|
|
19
|
+
* await agentA.send("@agent-b", "Hello!"); // No HTTP, no relay
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export class LocalBus {
|
|
23
|
+
// Global registry: agentId → message handler
|
|
24
|
+
static handlers = new Map();
|
|
25
|
+
/** Register an agent's message handler for local delivery. */
|
|
26
|
+
static register(agentId, handler) {
|
|
27
|
+
this.handlers.set(agentId, handler);
|
|
28
|
+
}
|
|
29
|
+
/** Unregister an agent (called on disconnect). */
|
|
30
|
+
static unregister(agentId) {
|
|
31
|
+
this.handlers.delete(agentId);
|
|
32
|
+
}
|
|
33
|
+
/** Check if an agent is registered locally (same process). */
|
|
34
|
+
static isLocal(agentId) {
|
|
35
|
+
return this.handlers.has(agentId);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Deliver a message directly to a local agent.
|
|
39
|
+
* The message is passed as-is — no encryption, no HTTP.
|
|
40
|
+
*
|
|
41
|
+
* @param encrypt - If true, the message should be encrypted before delivery.
|
|
42
|
+
* Default is false (plaintext for same-process delivery).
|
|
43
|
+
* Agents can choose to encrypt local messages for audit/compliance.
|
|
44
|
+
*/
|
|
45
|
+
static deliver(agentId, message, encrypt = false) {
|
|
46
|
+
const handler = this.handlers.get(agentId);
|
|
47
|
+
if (!handler)
|
|
48
|
+
return false;
|
|
49
|
+
try {
|
|
50
|
+
// Deliver async to avoid blocking the sender
|
|
51
|
+
queueMicrotask(() => handler(message));
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/** Get the number of locally registered agents (useful for debugging). */
|
|
59
|
+
static get size() {
|
|
60
|
+
return this.handlers.size;
|
|
61
|
+
}
|
|
62
|
+
/** Clear all registrations (for testing). */
|
|
63
|
+
static clear() {
|
|
64
|
+
this.handlers.clear();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,sEAAsE;AACtE,6DAA6D;AAM7D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,QAAQ;IACjB,6CAA6C;IACrC,MAAM,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE1D,8DAA8D;IAC9D,MAAM,CAAC,QAAQ,CAAC,OAAe,EAAE,OAAqB;QAClD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,kDAAkD;IAClD,MAAM,CAAC,UAAU,CAAC,OAAe;QAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,8DAA8D;IAC9D,MAAM,CAAC,OAAO,CAAC,OAAe;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,OAAe,EAAE,OAA2B,EAAE,OAAO,GAAG,KAAK;QACxE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAE3B,IAAI,CAAC;YACD,6CAA6C;YAC7C,cAAc,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,MAAM,KAAK,IAAI;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9B,CAAC;IAED,6CAA6C;IAC7C,MAAM,CAAC,KAAK;QACR,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export interface RatchetHeader {
|
|
2
|
+
/** Sender's current DH ratchet public key (base64) */
|
|
3
|
+
dh: string;
|
|
4
|
+
/** Previous chain length (number of messages sent under previous DH key) */
|
|
5
|
+
pn: number;
|
|
6
|
+
/** Message number in current chain */
|
|
7
|
+
n: number;
|
|
8
|
+
/** X3DH ephemeral key — only present in the very first message */
|
|
9
|
+
ephemeral_key?: string;
|
|
10
|
+
/** Which one-time pre-key was consumed — only present in the very first message */
|
|
11
|
+
one_time_pre_key_id?: number;
|
|
12
|
+
/** Initiator's identity key — only present in the very first message (for X3DH responder) */
|
|
13
|
+
identity_key?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface RatchetMessage {
|
|
16
|
+
header: RatchetHeader;
|
|
17
|
+
ciphertext: string;
|
|
18
|
+
nonce: string;
|
|
19
|
+
}
|
|
20
|
+
interface SkippedKeyEntry {
|
|
21
|
+
mk: string;
|
|
22
|
+
}
|
|
23
|
+
export interface RatchetSession {
|
|
24
|
+
/** Our current DH ratchet key pair */
|
|
25
|
+
DHs_public: string;
|
|
26
|
+
DHs_secret: string;
|
|
27
|
+
/** Their current DH ratchet public key */
|
|
28
|
+
DHr: string | null;
|
|
29
|
+
/** Root key (32 bytes, base64) */
|
|
30
|
+
RK: string;
|
|
31
|
+
/** Sending chain key */
|
|
32
|
+
CKs: string | null;
|
|
33
|
+
/** Receiving chain key */
|
|
34
|
+
CKr: string | null;
|
|
35
|
+
/** Send message counter */
|
|
36
|
+
Ns: number;
|
|
37
|
+
/** Receive message counter */
|
|
38
|
+
Nr: number;
|
|
39
|
+
/** Previous send chain length */
|
|
40
|
+
PN: number;
|
|
41
|
+
/** Skipped message keys: { "dhPublicKey:messageNumber" → { mk } } */
|
|
42
|
+
MKSKIPPED: Record<string, SkippedKeyEntry>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Initialize a ratchet session as the INITIATOR (Alice).
|
|
46
|
+
* Call this after X3DH — you have the shared secret and their signed pre-key.
|
|
47
|
+
*/
|
|
48
|
+
export declare function initInitiatorSession(sharedSecret: Uint8Array, theirSignedPreKey: string): Promise<RatchetSession>;
|
|
49
|
+
/**
|
|
50
|
+
* Initialize a ratchet session as the RESPONDER (Bob).
|
|
51
|
+
* Call this after receiving the initiator's first message.
|
|
52
|
+
* Bob's signed pre-key pair serves as his initial DH ratchet keys.
|
|
53
|
+
*/
|
|
54
|
+
export declare function initResponderSession(sharedSecret: Uint8Array, mySignedPreKeyPair: {
|
|
55
|
+
publicKey: string;
|
|
56
|
+
secretKey: string;
|
|
57
|
+
}): RatchetSession;
|
|
58
|
+
/**
|
|
59
|
+
* Encrypt a plaintext message using the Double Ratchet.
|
|
60
|
+
* Returns the ratchet header + ciphertext for transmission.
|
|
61
|
+
*/
|
|
62
|
+
export declare function ratchetEncrypt(session: RatchetSession, plaintext: string): Promise<RatchetMessage>;
|
|
63
|
+
/**
|
|
64
|
+
* Decrypt a message using the Double Ratchet.
|
|
65
|
+
* Handles DH ratchet steps and out-of-order messages.
|
|
66
|
+
*/
|
|
67
|
+
export declare function ratchetDecrypt(session: RatchetSession, msg: RatchetMessage): Promise<string>;
|
|
68
|
+
/**
|
|
69
|
+
* Save a ratchet session to disk.
|
|
70
|
+
* Path: dataDir/sessions/<chatId>/<peerId>.json
|
|
71
|
+
*/
|
|
72
|
+
export declare function saveSession(session: RatchetSession, dataDir: string, chatId: string, peerId: string): void;
|
|
73
|
+
/**
|
|
74
|
+
* Load a ratchet session from disk.
|
|
75
|
+
* Returns null if no session exists.
|
|
76
|
+
*/
|
|
77
|
+
export declare function loadSession(dataDir: string, chatId: string, peerId: string): RatchetSession | null;
|
|
78
|
+
/**
|
|
79
|
+
* Delete a ratchet session from disk (e.g. after re-negotiation).
|
|
80
|
+
*/
|
|
81
|
+
export declare function deleteSession(dataDir: string, chatId: string, peerId: string): void;
|
|
82
|
+
export {};
|
|
83
|
+
//# sourceMappingURL=ratchet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ratchet.d.ts","sourceRoot":"","sources":["../src/ratchet.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,aAAa;IAC1B,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,4EAA4E;IAC5E,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,CAAC,EAAE,MAAM,CAAC;IACV,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mFAAmF;IACnF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,6FAA6F;IAC7F,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,eAAe;IACrB,EAAE,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC3B,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,wBAAwB;IACxB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,0BAA0B;IAC1B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC9C;AA2CD;;;GAGG;AACH,wBAAsB,oBAAoB,CACtC,YAAY,EAAE,UAAU,EACxB,iBAAiB,EAAE,MAAM,GAC1B,OAAO,CAAC,cAAc,CAAC,CAqBzB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAChC,YAAY,EAAE,UAAU,EACxB,kBAAkB,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC7D,cAAc,CAahB;AAID;;;GAGG;AACH,wBAAsB,cAAc,CAChC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC,CAwBzB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAChC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,cAAc,GACpB,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAyED;;;GAGG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACf,IAAI,CAKN;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACf,cAAc,GAAG,IAAI,CAQvB;AAED;;GAEG;AACH,wBAAgB,aAAa,CACzB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACf,IAAI,CAKN"}
|
package/dist/ratchet.js
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
// SYN Link SDK — Double Ratchet (Protocol v1 §4.2)
|
|
2
|
+
// Implements the Signal Double Ratchet algorithm for forward secrecy.
|
|
3
|
+
// Zero external dependencies — uses tweetnacl (NaCl) + crypto.subtle (HKDF).
|
|
4
|
+
import nacl from "tweetnacl";
|
|
5
|
+
import naclUtil from "tweetnacl-util";
|
|
6
|
+
const { encodeBase64, decodeBase64, decodeUTF8, encodeUTF8 } = naclUtil;
|
|
7
|
+
import fs from "fs";
|
|
8
|
+
import path from "path";
|
|
9
|
+
import { hkdf, secretboxEncrypt, secretboxDecrypt, dh } from "./crypto.js";
|
|
10
|
+
// Maximum number of skipped message keys to store (DoS prevention)
|
|
11
|
+
const MAX_SKIP = 1000;
|
|
12
|
+
const RATCHET_KDF_INFO = new TextEncoder().encode("SYNLinkRatchet");
|
|
13
|
+
const CHAIN_KDF_INFO_MK = new Uint8Array([0x01]); // constant for message key derivation
|
|
14
|
+
const CHAIN_KDF_INFO_CK = new Uint8Array([0x02]); // constant for chain key derivation
|
|
15
|
+
// ─── KDF Helpers ────────────────────────────────────────────────────
|
|
16
|
+
/**
|
|
17
|
+
* HMAC-SHA256 for chain key derivation (synchronous via crypto.subtle workaround).
|
|
18
|
+
* We use this pattern to keep ratchet steps synchronous where possible.
|
|
19
|
+
*/
|
|
20
|
+
async function hmacSHA256(key, data) {
|
|
21
|
+
const cryptoKey = await crypto.subtle.importKey("raw", key, { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
|
|
22
|
+
return new Uint8Array(await crypto.subtle.sign("HMAC", cryptoKey, data));
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* KDF_RK: Root key ratchet step.
|
|
26
|
+
* Returns [new_root_key, chain_key] from root_key + DH output.
|
|
27
|
+
*/
|
|
28
|
+
async function kdfRK(rootKey, dhOutput) {
|
|
29
|
+
const derived = await hkdf(dhOutput, rootKey, RATCHET_KDF_INFO, 64);
|
|
30
|
+
return [derived.slice(0, 32), derived.slice(32, 64)];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* KDF_CK: Chain key ratchet step.
|
|
34
|
+
* Returns [new_chain_key, message_key] from chain_key.
|
|
35
|
+
*/
|
|
36
|
+
async function kdfCK(chainKey) {
|
|
37
|
+
const newCK = await hmacSHA256(chainKey, CHAIN_KDF_INFO_CK);
|
|
38
|
+
const mk = await hmacSHA256(chainKey, CHAIN_KDF_INFO_MK);
|
|
39
|
+
return [newCK, mk];
|
|
40
|
+
}
|
|
41
|
+
// ─── Session Initialization ─────────────────────────────────────────
|
|
42
|
+
/**
|
|
43
|
+
* Initialize a ratchet session as the INITIATOR (Alice).
|
|
44
|
+
* Call this after X3DH — you have the shared secret and their signed pre-key.
|
|
45
|
+
*/
|
|
46
|
+
export async function initInitiatorSession(sharedSecret, theirSignedPreKey) {
|
|
47
|
+
// Generate our first DH ratchet key pair
|
|
48
|
+
const dhPair = nacl.box.keyPair();
|
|
49
|
+
const theirPk = decodeBase64(theirSignedPreKey);
|
|
50
|
+
// First DH ratchet step: derive sending chain
|
|
51
|
+
const dhOutput = dh(dhPair.secretKey, theirPk);
|
|
52
|
+
const [RK, CKs] = await kdfRK(sharedSecret, dhOutput);
|
|
53
|
+
return {
|
|
54
|
+
DHs_public: encodeBase64(dhPair.publicKey),
|
|
55
|
+
DHs_secret: encodeBase64(dhPair.secretKey),
|
|
56
|
+
DHr: theirSignedPreKey,
|
|
57
|
+
RK: encodeBase64(RK),
|
|
58
|
+
CKs: encodeBase64(CKs),
|
|
59
|
+
CKr: null,
|
|
60
|
+
Ns: 0,
|
|
61
|
+
Nr: 0,
|
|
62
|
+
PN: 0,
|
|
63
|
+
MKSKIPPED: {},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Initialize a ratchet session as the RESPONDER (Bob).
|
|
68
|
+
* Call this after receiving the initiator's first message.
|
|
69
|
+
* Bob's signed pre-key pair serves as his initial DH ratchet keys.
|
|
70
|
+
*/
|
|
71
|
+
export function initResponderSession(sharedSecret, mySignedPreKeyPair) {
|
|
72
|
+
return {
|
|
73
|
+
DHs_public: mySignedPreKeyPair.publicKey,
|
|
74
|
+
DHs_secret: mySignedPreKeyPair.secretKey,
|
|
75
|
+
DHr: null,
|
|
76
|
+
RK: encodeBase64(sharedSecret),
|
|
77
|
+
CKs: null,
|
|
78
|
+
CKr: null,
|
|
79
|
+
Ns: 0,
|
|
80
|
+
Nr: 0,
|
|
81
|
+
PN: 0,
|
|
82
|
+
MKSKIPPED: {},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// ─── Encrypt / Decrypt ──────────────────────────────────────────────
|
|
86
|
+
/**
|
|
87
|
+
* Encrypt a plaintext message using the Double Ratchet.
|
|
88
|
+
* Returns the ratchet header + ciphertext for transmission.
|
|
89
|
+
*/
|
|
90
|
+
export async function ratchetEncrypt(session, plaintext) {
|
|
91
|
+
if (!session.CKs)
|
|
92
|
+
throw new Error("Cannot encrypt — sending chain not initialized");
|
|
93
|
+
const ckBytes = decodeBase64(session.CKs);
|
|
94
|
+
const [newCK, mk] = await kdfCK(ckBytes);
|
|
95
|
+
session.CKs = encodeBase64(newCK);
|
|
96
|
+
const header = {
|
|
97
|
+
dh: session.DHs_public,
|
|
98
|
+
pn: session.PN,
|
|
99
|
+
n: session.Ns,
|
|
100
|
+
};
|
|
101
|
+
session.Ns++;
|
|
102
|
+
const plaintextBytes = decodeUTF8(plaintext);
|
|
103
|
+
const { ciphertext, nonce } = secretboxEncrypt(plaintextBytes, mk);
|
|
104
|
+
return {
|
|
105
|
+
header,
|
|
106
|
+
ciphertext: encodeBase64(ciphertext),
|
|
107
|
+
nonce: encodeBase64(nonce),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Decrypt a message using the Double Ratchet.
|
|
112
|
+
* Handles DH ratchet steps and out-of-order messages.
|
|
113
|
+
*/
|
|
114
|
+
export async function ratchetDecrypt(session, msg) {
|
|
115
|
+
// 1. Try skipped message keys first
|
|
116
|
+
const skippedResult = trySkippedMessageKeys(session, msg);
|
|
117
|
+
if (skippedResult !== null)
|
|
118
|
+
return skippedResult;
|
|
119
|
+
// 2. If header has a new DH key, perform DH ratchet step
|
|
120
|
+
if (msg.header.dh !== session.DHr) {
|
|
121
|
+
await skipMessageKeys(session, msg.header.pn);
|
|
122
|
+
await dhRatchetStep(session, msg.header.dh);
|
|
123
|
+
}
|
|
124
|
+
// 3. Skip ahead in the receiving chain if needed
|
|
125
|
+
await skipMessageKeys(session, msg.header.n);
|
|
126
|
+
// 4. Derive the message key
|
|
127
|
+
if (!session.CKr)
|
|
128
|
+
throw new Error("Cannot decrypt — receiving chain not initialized");
|
|
129
|
+
const ckBytes = decodeBase64(session.CKr);
|
|
130
|
+
const [newCK, mk] = await kdfCK(ckBytes);
|
|
131
|
+
session.CKr = encodeBase64(newCK);
|
|
132
|
+
session.Nr++;
|
|
133
|
+
// 5. Decrypt
|
|
134
|
+
const ciphertext = decodeBase64(msg.ciphertext);
|
|
135
|
+
const nonce = decodeBase64(msg.nonce);
|
|
136
|
+
const plaintext = secretboxDecrypt(ciphertext, nonce, mk);
|
|
137
|
+
return encodeUTF8(plaintext);
|
|
138
|
+
}
|
|
139
|
+
// ─── Internal Ratchet Operations ────────────────────────────────────
|
|
140
|
+
/**
|
|
141
|
+
* Try to decrypt using a previously skipped message key.
|
|
142
|
+
*/
|
|
143
|
+
function trySkippedMessageKeys(session, msg) {
|
|
144
|
+
const key = `${msg.header.dh}:${msg.header.n}`;
|
|
145
|
+
const entry = session.MKSKIPPED[key];
|
|
146
|
+
if (!entry)
|
|
147
|
+
return null;
|
|
148
|
+
const mk = decodeBase64(entry.mk);
|
|
149
|
+
delete session.MKSKIPPED[key];
|
|
150
|
+
const ciphertext = decodeBase64(msg.ciphertext);
|
|
151
|
+
const nonce = decodeBase64(msg.nonce);
|
|
152
|
+
const plaintext = secretboxDecrypt(ciphertext, nonce, mk);
|
|
153
|
+
return encodeUTF8(plaintext);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Store skipped message keys up to the target message number.
|
|
157
|
+
*/
|
|
158
|
+
async function skipMessageKeys(session, until) {
|
|
159
|
+
if (!session.CKr)
|
|
160
|
+
return;
|
|
161
|
+
if (session.Nr + MAX_SKIP < until) {
|
|
162
|
+
throw new Error(`Too many skipped messages (${until - session.Nr}). Max: ${MAX_SKIP}`);
|
|
163
|
+
}
|
|
164
|
+
while (session.Nr < until) {
|
|
165
|
+
const ckBytes = decodeBase64(session.CKr);
|
|
166
|
+
const [newCK, mk] = await kdfCK(ckBytes);
|
|
167
|
+
session.CKr = encodeBase64(newCK);
|
|
168
|
+
const key = `${session.DHr}:${session.Nr}`;
|
|
169
|
+
session.MKSKIPPED[key] = { mk: encodeBase64(mk) };
|
|
170
|
+
session.Nr++;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Perform a DH ratchet step when receiving a new DH key from the peer.
|
|
175
|
+
*/
|
|
176
|
+
async function dhRatchetStep(session, newDHr) {
|
|
177
|
+
session.PN = session.Ns;
|
|
178
|
+
session.Ns = 0;
|
|
179
|
+
session.Nr = 0;
|
|
180
|
+
session.DHr = newDHr;
|
|
181
|
+
// Derive new receiving chain
|
|
182
|
+
const dhOut = dh(decodeBase64(session.DHs_secret), decodeBase64(newDHr));
|
|
183
|
+
const rkBytes = decodeBase64(session.RK);
|
|
184
|
+
const [newRK, CKr] = await kdfRK(rkBytes, dhOut);
|
|
185
|
+
session.RK = encodeBase64(newRK);
|
|
186
|
+
session.CKr = encodeBase64(CKr);
|
|
187
|
+
// Generate new DH key pair for the next sending chain
|
|
188
|
+
const newDHs = nacl.box.keyPair();
|
|
189
|
+
session.DHs_public = encodeBase64(newDHs.publicKey);
|
|
190
|
+
session.DHs_secret = encodeBase64(newDHs.secretKey);
|
|
191
|
+
// Derive new sending chain
|
|
192
|
+
const dhOut2 = dh(newDHs.secretKey, decodeBase64(newDHr));
|
|
193
|
+
const rkBytes2 = decodeBase64(session.RK);
|
|
194
|
+
const [newRK2, CKs] = await kdfRK(rkBytes2, dhOut2);
|
|
195
|
+
session.RK = encodeBase64(newRK2);
|
|
196
|
+
session.CKs = encodeBase64(CKs);
|
|
197
|
+
}
|
|
198
|
+
// ─── Session Persistence ────────────────────────────────────────────
|
|
199
|
+
/**
|
|
200
|
+
* Save a ratchet session to disk.
|
|
201
|
+
* Path: dataDir/sessions/<chatId>/<peerId>.json
|
|
202
|
+
*/
|
|
203
|
+
export function saveSession(session, dataDir, chatId, peerId) {
|
|
204
|
+
const dir = path.join(dataDir, "sessions", chatId);
|
|
205
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
206
|
+
const filePath = path.join(dir, `${peerId}.json`);
|
|
207
|
+
fs.writeFileSync(filePath, JSON.stringify(session, null, 2), { mode: 0o600 });
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Load a ratchet session from disk.
|
|
211
|
+
* Returns null if no session exists.
|
|
212
|
+
*/
|
|
213
|
+
export function loadSession(dataDir, chatId, peerId) {
|
|
214
|
+
const filePath = path.join(dataDir, "sessions", chatId, `${peerId}.json`);
|
|
215
|
+
if (!fs.existsSync(filePath))
|
|
216
|
+
return null;
|
|
217
|
+
try {
|
|
218
|
+
return JSON.parse(fs.readFileSync(filePath, "utf-8"));
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Delete a ratchet session from disk (e.g. after re-negotiation).
|
|
226
|
+
*/
|
|
227
|
+
export function deleteSession(dataDir, chatId, peerId) {
|
|
228
|
+
const filePath = path.join(dataDir, "sessions", chatId, `${peerId}.json`);
|
|
229
|
+
if (fs.existsSync(filePath)) {
|
|
230
|
+
fs.unlinkSync(filePath);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=ratchet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ratchet.js","sourceRoot":"","sources":["../src/ratchet.ts"],"names":[],"mappings":"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"}
|