remote-pi 0.1.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 +21 -0
- package/README.md +384 -0
- package/dist/config.d.ts +18 -0
- package/dist/config.js +51 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.js +1285 -0
- package/dist/index.js.map +1 -0
- package/dist/pairing/crypto.d.ts +8 -0
- package/dist/pairing/crypto.js +22 -0
- package/dist/pairing/crypto.js.map +1 -0
- package/dist/pairing/handshake.d.ts +28 -0
- package/dist/pairing/handshake.js +113 -0
- package/dist/pairing/handshake.js.map +1 -0
- package/dist/pairing/noise-sha256.d.ts +16 -0
- package/dist/pairing/noise-sha256.js +103 -0
- package/dist/pairing/noise-sha256.js.map +1 -0
- package/dist/pairing/qr.d.ts +41 -0
- package/dist/pairing/qr.js +96 -0
- package/dist/pairing/qr.js.map +1 -0
- package/dist/pairing/storage.d.ts +10 -0
- package/dist/pairing/storage.js +65 -0
- package/dist/pairing/storage.js.map +1 -0
- package/dist/protocol/codec.d.ts +7 -0
- package/dist/protocol/codec.js +46 -0
- package/dist/protocol/codec.js.map +1 -0
- package/dist/protocol/types.d.ts +119 -0
- package/dist/protocol/types.js +2 -0
- package/dist/protocol/types.js.map +1 -0
- package/dist/rooms.d.ts +9 -0
- package/dist/rooms.js +22 -0
- package/dist/rooms.js.map +1 -0
- package/dist/session/agent_bridge.d.ts +55 -0
- package/dist/session/agent_bridge.js +146 -0
- package/dist/session/agent_bridge.js.map +1 -0
- package/dist/session/broker.d.ts +37 -0
- package/dist/session/broker.js +206 -0
- package/dist/session/broker.js.map +1 -0
- package/dist/session/envelope.d.ts +24 -0
- package/dist/session/envelope.js +89 -0
- package/dist/session/envelope.js.map +1 -0
- package/dist/session/global_config.d.ts +14 -0
- package/dist/session/global_config.js +51 -0
- package/dist/session/global_config.js.map +1 -0
- package/dist/session/leader_election.d.ts +16 -0
- package/dist/session/leader_election.js +78 -0
- package/dist/session/leader_election.js.map +1 -0
- package/dist/session/local_config.d.ts +18 -0
- package/dist/session/local_config.js +47 -0
- package/dist/session/local_config.js.map +1 -0
- package/dist/session/peer.d.ts +80 -0
- package/dist/session/peer.js +268 -0
- package/dist/session/peer.js.map +1 -0
- package/dist/session/setup_wizard.d.ts +32 -0
- package/dist/session/setup_wizard.js +60 -0
- package/dist/session/setup_wizard.js.map +1 -0
- package/dist/session/tool_gate.d.ts +5 -0
- package/dist/session/tool_gate.js +11 -0
- package/dist/session/tool_gate.js.map +1 -0
- package/dist/session/tools.d.ts +16 -0
- package/dist/session/tools.js +123 -0
- package/dist/session/tools.js.map +1 -0
- package/dist/session/wizard.d.ts +13 -0
- package/dist/session/wizard.js +20 -0
- package/dist/session/wizard.js.map +1 -0
- package/dist/settings.d.ts +15 -0
- package/dist/settings.js +52 -0
- package/dist/settings.js.map +1 -0
- package/dist/transport/peer_channel.d.ts +37 -0
- package/dist/transport/peer_channel.js +85 -0
- package/dist/transport/peer_channel.js.map +1 -0
- package/dist/transport/relay_client.d.ts +81 -0
- package/dist/transport/relay_client.js +154 -0
- package/dist/transport/relay_client.js.map +1 -0
- package/dist/ui/footer.d.ts +32 -0
- package/dist/ui/footer.js +32 -0
- package/dist/ui/footer.js.map +1 -0
- package/package.json +77 -0
- package/skills/agent-network/SKILL.md +429 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface Ed25519Keypair {
|
|
2
|
+
publicKey: Uint8Array;
|
|
3
|
+
secretKey: Uint8Array;
|
|
4
|
+
}
|
|
5
|
+
/** Generates an Ed25519 keypair for relay challenge-response auth. */
|
|
6
|
+
export declare function generateEd25519Keypair(): Ed25519Keypair;
|
|
7
|
+
export declare function ed25519Sign(sk: Uint8Array, msg: Uint8Array): Uint8Array;
|
|
8
|
+
export declare function ed25519Verify(pk: Uint8Array, msg: Uint8Array, sig: Uint8Array): boolean;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
+
import * as ed from "@noble/ed25519";
|
|
3
|
+
// Configure @noble/ed25519 v3 to use Node.js built-in SHA-512
|
|
4
|
+
ed.hashes["sha512"] = (...msgs) => {
|
|
5
|
+
const h = createHash("sha512");
|
|
6
|
+
for (const m of msgs)
|
|
7
|
+
h.update(m);
|
|
8
|
+
return Uint8Array.from(h.digest());
|
|
9
|
+
};
|
|
10
|
+
/** Generates an Ed25519 keypair for relay challenge-response auth. */
|
|
11
|
+
export function generateEd25519Keypair() {
|
|
12
|
+
const secretKey = randomBytes(32);
|
|
13
|
+
const publicKey = ed.getPublicKey(secretKey);
|
|
14
|
+
return { secretKey, publicKey: Buffer.from(publicKey) };
|
|
15
|
+
}
|
|
16
|
+
export function ed25519Sign(sk, msg) {
|
|
17
|
+
return Buffer.from(ed.sign(msg, sk));
|
|
18
|
+
}
|
|
19
|
+
export function ed25519Verify(pk, msg, sig) {
|
|
20
|
+
return ed.verify(sig, msg, pk);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/pairing/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,8DAA8D;AAC7D,EAAE,CAAC,MAAkC,CAAC,QAAQ,CAAC,GAAG,CACjD,GAAG,IAAkB,EACrB,EAAE;IACF,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC;AAOF,sEAAsE;AACtE,MAAM,UAAU,sBAAsB;IACpC,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC7C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAc,EAAE,GAAe;IACzD,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,EAAc,EACd,GAAe,EACf,GAAe;IAEf,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type X25519Keypair } from "./crypto.js";
|
|
2
|
+
export interface SessionKeys {
|
|
3
|
+
/** Cipher state for sending (ChaCha20-Poly1305). First 32 bytes = key. */
|
|
4
|
+
tx: Uint8Array;
|
|
5
|
+
/** Cipher state for receiving (ChaCha20-Poly1305). First 32 bytes = key. */
|
|
6
|
+
rx: Uint8Array;
|
|
7
|
+
/** 6-emoji safety number derived from the handshake hash. */
|
|
8
|
+
safetyNumber: string;
|
|
9
|
+
/** Raw 32-byte SHA-256 handshake hash, usable for further derivation. */
|
|
10
|
+
handshakeHash: Buffer;
|
|
11
|
+
/**
|
|
12
|
+
* Curve25519 static public key received from the initiator (app).
|
|
13
|
+
* Extracted from state.rs before destroy() — use for peer identity validation.
|
|
14
|
+
*/
|
|
15
|
+
remoteStaticKey?: Uint8Array;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Runs Noise_XX_25519_ChaChaPoly_SHA256 as **responder** (the Mac side).
|
|
19
|
+
* Pattern: receive msg1 (→e), send msg2 (←e,ee,s,es), receive msg3 (→s,se)
|
|
20
|
+
* @param prologue Optional prologue bytes mixed into handshake hash (default: empty).
|
|
21
|
+
*/
|
|
22
|
+
export declare function runHandshakeResponder(localStatic: X25519Keypair, sendFn: (msg: Buffer) => Promise<void>, recvFn: () => Promise<Buffer>, prologue?: Uint8Array): Promise<SessionKeys>;
|
|
23
|
+
/**
|
|
24
|
+
* Runs Noise_XX_25519_ChaChaPoly_SHA256 as **initiator** (the mobile side).
|
|
25
|
+
* Exported for use in tests — production initiator is the app (Dart).
|
|
26
|
+
* @param prologue Optional prologue bytes mixed into handshake hash (default: empty).
|
|
27
|
+
*/
|
|
28
|
+
export declare function runHandshakeInitiator(localStatic: X25519Keypair, sendFn: (msg: Buffer) => Promise<void>, recvFn: () => Promise<Buffer>, prologue?: Uint8Array): Promise<SessionKeys>;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { deriveSafetyNumber } from "./crypto.js";
|
|
2
|
+
import { HASH_LEN_SHA256, HASH_OFFSET_SHA256, NoiseXX_SHA256, } from "./noise-sha256.js";
|
|
3
|
+
// Noise_XX_25519_ChaChaPoly_SHA256 — SHA-256 HASHLEN=32
|
|
4
|
+
// symmetricState layout: [ck(32), h(32), cipher_state(40)] = 104 bytes
|
|
5
|
+
// h (handshake hash) lives at bytes [32..64].
|
|
6
|
+
const HASH_OFFSET = HASH_OFFSET_SHA256; // 32
|
|
7
|
+
const HASH_LEN = HASH_LEN_SHA256; // 32
|
|
8
|
+
const MSG_BUF_SIZE = 4096;
|
|
9
|
+
function _logStep(label, ss) {
|
|
10
|
+
const h = Buffer.from(ss.subarray(32, 64)).toString("hex");
|
|
11
|
+
const ck = Buffer.from(ss.subarray(0, 32)).toString("hex");
|
|
12
|
+
const k = Buffer.from(ss.subarray(64, 96)).toString("hex");
|
|
13
|
+
const n = Buffer.from(ss.subarray(96, 104)).readBigUInt64LE(0).toString();
|
|
14
|
+
console.error(`== RT STEP ${label} ==`);
|
|
15
|
+
console.error(`h: ${h}`);
|
|
16
|
+
console.error(`ck: ${ck}`);
|
|
17
|
+
console.error(`k: ${k}`);
|
|
18
|
+
console.error(`n: ${n}`);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Runs Noise_XX_25519_ChaChaPoly_SHA256 as **responder** (the Mac side).
|
|
22
|
+
* Pattern: receive msg1 (→e), send msg2 (←e,ee,s,es), receive msg3 (→s,se)
|
|
23
|
+
* @param prologue Optional prologue bytes mixed into handshake hash (default: empty).
|
|
24
|
+
*/
|
|
25
|
+
export async function runHandshakeResponder(localStatic, sendFn, recvFn, prologue = Buffer.alloc(0)) {
|
|
26
|
+
const state = NoiseXX_SHA256.initialize("XX", false, prologue, localStatic);
|
|
27
|
+
// Payload buffers: allocate generously so non-empty payloads from the app
|
|
28
|
+
// don't cause RangeError. We don't use handshake payloads in the protocol,
|
|
29
|
+
// but the Dart side might include app-level data. 1 KiB is ample.
|
|
30
|
+
const PAYLOAD_BUF = 1024;
|
|
31
|
+
// msg1: -> e (receive from initiator)
|
|
32
|
+
const msg1 = await recvFn();
|
|
33
|
+
console.error(`[remote-pi] msg1 received: ${msg1.length} bytes (expected: 32)`);
|
|
34
|
+
NoiseXX_SHA256.readMessage(state, msg1, Buffer.alloc(PAYLOAD_BUF));
|
|
35
|
+
_logStep("after readMessage1", state.symmetricState);
|
|
36
|
+
// msg2: <- e, ee, s, es (send to initiator)
|
|
37
|
+
const msg2buf = Buffer.alloc(MSG_BUF_SIZE);
|
|
38
|
+
NoiseXX_SHA256.writeMessage(state, Buffer.alloc(0), msg2buf);
|
|
39
|
+
const msg2bytes = NoiseXX_SHA256.writeMessage.bytes;
|
|
40
|
+
await sendFn(msg2buf.subarray(0, msg2bytes));
|
|
41
|
+
console.error(`[remote-pi] msg2 sent: ${msg2bytes} bytes (expected: 96)`);
|
|
42
|
+
_logStep("after writeMessage2", state.symmetricState);
|
|
43
|
+
// msg3: -> s, se (receive → handshake complete)
|
|
44
|
+
const msg3 = await recvFn();
|
|
45
|
+
console.error(`[remote-pi] msg3 received: ${msg3.length} bytes (expected: 64)`);
|
|
46
|
+
// Noise XX msg3 must be ≥ 64 bytes: 48 (encrypted static key) + 16 (MAC of
|
|
47
|
+
// empty payload). An AssertionError otherwise. Clear diagnostic if too short.
|
|
48
|
+
if (msg3.length < 64) {
|
|
49
|
+
const hexDump = msg3.toString("hex");
|
|
50
|
+
// Decode what 45/48 bytes might indicate:
|
|
51
|
+
// 48 bytes → static key encrypted (32 + 16 MAC) but NO payload MAC
|
|
52
|
+
// <48 bytes → static key may be unencrypted (32 B) + partial tag, or wrong format
|
|
53
|
+
const hint = msg3.length === 48
|
|
54
|
+
? "static key encrypted OK but payload MAC (16 B) missing — call EncryptAndHash([]) after SE"
|
|
55
|
+
: msg3.length >= 32
|
|
56
|
+
? `${msg3.length - 32} extra bytes after 32 B key — key may be unencrypted (no AEAD) or wrong cipher`
|
|
57
|
+
: "message shorter than a 32-byte key — framing or encoding error";
|
|
58
|
+
NoiseXX_SHA256.destroy(state);
|
|
59
|
+
throw new Error(`handshake_failed: msg3 too short (${msg3.length} B, need ≥64 B)\n` +
|
|
60
|
+
` hint: ${hint}\n` +
|
|
61
|
+
` hex: ${hexDump}\n` +
|
|
62
|
+
` expected structure: [encrypt(s_pk)=48 B][encrypt([])=16 B]\n` +
|
|
63
|
+
` ensure Dart calls EncryptAndHash with empty payload after SE token`);
|
|
64
|
+
}
|
|
65
|
+
const result = NoiseXX_SHA256.readMessage(state, msg3, Buffer.alloc(PAYLOAD_BUF));
|
|
66
|
+
_logStep("after readMessage3", state.symmetricState);
|
|
67
|
+
const handshakeHash = Buffer.from(state.symmetricState.subarray(HASH_OFFSET, HASH_OFFSET + HASH_LEN));
|
|
68
|
+
// Capture initiator's static public key BEFORE destroy().
|
|
69
|
+
// state.rs is set during readMessage of msg3 (TOK_S token).
|
|
70
|
+
const remoteStaticKey = state.rs
|
|
71
|
+
? new Uint8Array(state.rs.subarray(0, 32))
|
|
72
|
+
: undefined;
|
|
73
|
+
NoiseXX_SHA256.destroy(state);
|
|
74
|
+
if (!result)
|
|
75
|
+
throw new Error("handshake_failed: split did not occur");
|
|
76
|
+
return {
|
|
77
|
+
tx: result.tx,
|
|
78
|
+
rx: result.rx,
|
|
79
|
+
safetyNumber: deriveSafetyNumber(handshakeHash),
|
|
80
|
+
handshakeHash,
|
|
81
|
+
remoteStaticKey,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Runs Noise_XX_25519_ChaChaPoly_SHA256 as **initiator** (the mobile side).
|
|
86
|
+
* Exported for use in tests — production initiator is the app (Dart).
|
|
87
|
+
* @param prologue Optional prologue bytes mixed into handshake hash (default: empty).
|
|
88
|
+
*/
|
|
89
|
+
export async function runHandshakeInitiator(localStatic, sendFn, recvFn, prologue = Buffer.alloc(0)) {
|
|
90
|
+
const state = NoiseXX_SHA256.initialize("XX", true, prologue, localStatic);
|
|
91
|
+
// msg1: -> e
|
|
92
|
+
const msg1buf = Buffer.alloc(MSG_BUF_SIZE);
|
|
93
|
+
NoiseXX_SHA256.writeMessage(state, Buffer.alloc(0), msg1buf);
|
|
94
|
+
await sendFn(msg1buf.subarray(0, NoiseXX_SHA256.writeMessage.bytes));
|
|
95
|
+
// msg2: <- e, ee, s, es
|
|
96
|
+
const msg2 = await recvFn();
|
|
97
|
+
NoiseXX_SHA256.readMessage(state, msg2, Buffer.alloc(0));
|
|
98
|
+
// msg3: -> s, se (handshake complete)
|
|
99
|
+
const msg3buf = Buffer.alloc(MSG_BUF_SIZE);
|
|
100
|
+
const result = NoiseXX_SHA256.writeMessage(state, Buffer.alloc(0), msg3buf);
|
|
101
|
+
await sendFn(msg3buf.subarray(0, NoiseXX_SHA256.writeMessage.bytes));
|
|
102
|
+
const handshakeHash = Buffer.from(state.symmetricState.subarray(HASH_OFFSET, HASH_OFFSET + HASH_LEN));
|
|
103
|
+
NoiseXX_SHA256.destroy(state);
|
|
104
|
+
if (!result)
|
|
105
|
+
throw new Error("handshake_failed: split did not occur");
|
|
106
|
+
return {
|
|
107
|
+
tx: result.tx,
|
|
108
|
+
rx: result.rx,
|
|
109
|
+
safetyNumber: deriveSafetyNumber(handshakeHash),
|
|
110
|
+
handshakeHash,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=handshake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../src/pairing/handshake.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import Noise from "noise-protocol";
|
|
2
|
+
import type { X25519Keypair } from "./crypto.js";
|
|
3
|
+
export declare const HASH_OFFSET_SHA256 = 32;
|
|
4
|
+
export declare const HASH_LEN_SHA256 = 32;
|
|
5
|
+
/**
|
|
6
|
+
* Test-only: makes the NEXT internal ephemeral `generateKeypair` call use
|
|
7
|
+
* the provided fixed keys instead of random ones. Consumes after one use.
|
|
8
|
+
* Required to reproduce official Noise test vectors.
|
|
9
|
+
*/
|
|
10
|
+
export declare function setNextEphemeralForTest(pk: Uint8Array, sk: Uint8Array): void;
|
|
11
|
+
export declare const NoiseXX_SHA256: typeof Noise;
|
|
12
|
+
/**
|
|
13
|
+
* Builds a noise-protocol keypair from a raw 32-byte X25519 private scalar.
|
|
14
|
+
* Computes the public key via X25519 base-point multiplication.
|
|
15
|
+
*/
|
|
16
|
+
export declare function keypairFromRawSk(rawSk: Uint8Array): X25519Keypair;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assembles Noise_XX_25519_ChaChaPoly_SHA256 using noise-protocol's
|
|
3
|
+
* createHandshake factory with a plugged-in SHA-256 hash module.
|
|
4
|
+
*
|
|
5
|
+
* The default noise-protocol uses BLAKE2b — incompatible with the Dart side
|
|
6
|
+
* which needs a zero-dependency SHA-256 path.
|
|
7
|
+
*/
|
|
8
|
+
import { createHash, createHmac } from "node:crypto";
|
|
9
|
+
import { createRequire } from "node:module";
|
|
10
|
+
import Noise from "noise-protocol";
|
|
11
|
+
// Resolve sodium-universal through noise-protocol's dependency tree.
|
|
12
|
+
// sodium-universal is not hoisted into pi-extension's own node_modules.
|
|
13
|
+
const _reqNoise = createRequire(import.meta.resolve("noise-protocol"));
|
|
14
|
+
// Internal noise-protocol factories (CJS modules, no TS types)
|
|
15
|
+
const _createDH = _reqNoise("noise-protocol/dh");
|
|
16
|
+
const _createCipher = _reqNoise("noise-protocol/cipher");
|
|
17
|
+
const _createCipherState = _reqNoise("noise-protocol/cipher-state");
|
|
18
|
+
const _createSymmetricState = _reqNoise("noise-protocol/symmetric-state");
|
|
19
|
+
const _sm = _reqNoise("sodium-universal/crypto_scalarmult");
|
|
20
|
+
// ── SHA-256 hash module ──────────────────────────────────────────────────────
|
|
21
|
+
// With SHA-256: symmetricState layout = [ck(32), h(32), cipher_state(40)]
|
|
22
|
+
// The handshake hash h is at bytes [32..64] in state.symmetricState.
|
|
23
|
+
export const HASH_OFFSET_SHA256 = 32;
|
|
24
|
+
export const HASH_LEN_SHA256 = 32;
|
|
25
|
+
const _tempHK = Buffer.alloc(32);
|
|
26
|
+
const _B = [Buffer.from([0x01]), Buffer.from([0x02]), Buffer.from([0x03])];
|
|
27
|
+
function _hash(out, data) {
|
|
28
|
+
const h = createHash("sha256");
|
|
29
|
+
for (const d of data)
|
|
30
|
+
h.update(d);
|
|
31
|
+
out.set(h.digest());
|
|
32
|
+
}
|
|
33
|
+
function _hmac(out, key, parts) {
|
|
34
|
+
const h = createHmac("sha256", key);
|
|
35
|
+
for (const p of parts)
|
|
36
|
+
h.update(p);
|
|
37
|
+
out.set(h.digest());
|
|
38
|
+
}
|
|
39
|
+
function _hkdf(out1, out2, out3, ck, ikm) {
|
|
40
|
+
_hmac(_tempHK, ck, [ikm]);
|
|
41
|
+
_hmac(out1, _tempHK, [_B[0]]);
|
|
42
|
+
_hmac(out2, _tempHK, [out1, _B[1]]);
|
|
43
|
+
if (out3 != null)
|
|
44
|
+
_hmac(out3, _tempHK, [out2, _B[2]]);
|
|
45
|
+
_tempHK.fill(0);
|
|
46
|
+
}
|
|
47
|
+
const _sha256Hash = {
|
|
48
|
+
HASHLEN: 32,
|
|
49
|
+
BLOCKLEN: 64,
|
|
50
|
+
ALG: "SHA256",
|
|
51
|
+
hash: _hash,
|
|
52
|
+
hkdf: _hkdf,
|
|
53
|
+
};
|
|
54
|
+
// ── DH wrapper with test key-injection hook ───────────────────────────────────
|
|
55
|
+
let _nextEph = null;
|
|
56
|
+
/**
|
|
57
|
+
* Test-only: makes the NEXT internal ephemeral `generateKeypair` call use
|
|
58
|
+
* the provided fixed keys instead of random ones. Consumes after one use.
|
|
59
|
+
* Required to reproduce official Noise test vectors.
|
|
60
|
+
*/
|
|
61
|
+
export function setNextEphemeralForTest(pk, sk) {
|
|
62
|
+
_nextEph = { pk: Buffer.from(pk), sk: Buffer.from(sk) };
|
|
63
|
+
}
|
|
64
|
+
const _baseDH = _createDH();
|
|
65
|
+
const _patchedDH = {
|
|
66
|
+
..._baseDH,
|
|
67
|
+
generateKeypair(pk, sk) {
|
|
68
|
+
if (_nextEph) {
|
|
69
|
+
pk.set(_nextEph.pk);
|
|
70
|
+
sk.set(_nextEph.sk);
|
|
71
|
+
_nextEph = null;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
_baseDH.generateKeypair(pk, sk);
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
// ── Assembles the full Noise_XX_25519_ChaChaPoly_SHA256 instance ─────────────
|
|
79
|
+
const _cipher = _createCipher();
|
|
80
|
+
const _cipherState = _createCipherState({ cipher: _cipher });
|
|
81
|
+
const _symmetricState = _createSymmetricState({
|
|
82
|
+
hash: _sha256Hash,
|
|
83
|
+
cipherState: _cipherState,
|
|
84
|
+
});
|
|
85
|
+
export const NoiseXX_SHA256 = Noise.createHandshake({
|
|
86
|
+
dh: _patchedDH,
|
|
87
|
+
hash: _sha256Hash,
|
|
88
|
+
cipher: _cipher,
|
|
89
|
+
cipherState: _cipherState,
|
|
90
|
+
symmetricState: _symmetricState,
|
|
91
|
+
});
|
|
92
|
+
// ── Key-building utility ─────────────────────────────────────────────────────
|
|
93
|
+
/**
|
|
94
|
+
* Builds a noise-protocol keypair from a raw 32-byte X25519 private scalar.
|
|
95
|
+
* Computes the public key via X25519 base-point multiplication.
|
|
96
|
+
*/
|
|
97
|
+
export function keypairFromRawSk(rawSk) {
|
|
98
|
+
const kp = NoiseXX_SHA256.keygen(); // sodium-allocated buffers of correct size
|
|
99
|
+
kp.secretKey.set(Buffer.from(rawSk));
|
|
100
|
+
_sm.crypto_scalarmult_base(kp.publicKey, kp.secretKey);
|
|
101
|
+
return kp;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=noise-sha256.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noise-sha256.js","sourceRoot":"","sources":["../../src/pairing/noise-sha256.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** Encapsulates the single active QR token. One instance per Pi process. */
|
|
2
|
+
export declare class QRSession {
|
|
3
|
+
private active;
|
|
4
|
+
/** Generates a fresh 16-byte random token encoded as base64url. */
|
|
5
|
+
generateToken(): string;
|
|
6
|
+
/**
|
|
7
|
+
* Issues a new active token, invalidating any previous one.
|
|
8
|
+
* Returns the token and its expiry timestamp.
|
|
9
|
+
*/
|
|
10
|
+
issueToken(): {
|
|
11
|
+
token: string;
|
|
12
|
+
expiresAt: number;
|
|
13
|
+
};
|
|
14
|
+
/** Validates and atomically consumes a token. */
|
|
15
|
+
consumeToken(token: string): "ok" | "expired" | "consumed" | "unknown";
|
|
16
|
+
clear(): void;
|
|
17
|
+
}
|
|
18
|
+
export declare const qrSession: QRSession;
|
|
19
|
+
export declare function buildQRUri(token: string, longtermEdPk: Uint8Array, // Ed25519 — only peer ID after E2E rollback
|
|
20
|
+
sessionName: string,
|
|
21
|
+
/**
|
|
22
|
+
* Pi room id (12 chars, base64url) derived from cwd. App routes pair_request
|
|
23
|
+
* to this room so the relay delivers it to the right Pi instance among N
|
|
24
|
+
* paralelos com mesmo epk. Adicionado no fix do plano 17 (sem `rm` o app
|
|
25
|
+
* cai em room=main e o relay drops com "dest not found").
|
|
26
|
+
*/
|
|
27
|
+
roomId?: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Renders the QR + URI in the Pi TUI's output pane via stderr. `ctx.ui.notify`
|
|
30
|
+
* collapses multi-line content into a single toast, so for ASCII art we need
|
|
31
|
+
* the raw stderr capture that the Pi TUI exposes as scrollable log. Post
|
|
32
|
+
* plano 14 the QR carries only `t/epk/n`, fits comfortably in the panel
|
|
33
|
+
* without needing a separate Terminal window.
|
|
34
|
+
*/
|
|
35
|
+
export declare function displayQR(uri: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Starts a rotating QR session: generates a new QR every 60s, printing it
|
|
38
|
+
* to stdout. Returns a `stop()` function that cancels the rotation and clears
|
|
39
|
+
* the active token.
|
|
40
|
+
*/
|
|
41
|
+
export declare function startQRRotation(longtermEdPk: Uint8Array, sessionName: string, roomId?: string): () => void;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import qrTerminal from "qrcode-terminal";
|
|
3
|
+
const TOKEN_TTL_MS = 60_000;
|
|
4
|
+
/** Encapsulates the single active QR token. One instance per Pi process. */
|
|
5
|
+
export class QRSession {
|
|
6
|
+
active = null;
|
|
7
|
+
/** Generates a fresh 16-byte random token encoded as base64url. */
|
|
8
|
+
generateToken() {
|
|
9
|
+
return randomBytes(16).toString("base64url");
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Issues a new active token, invalidating any previous one.
|
|
13
|
+
* Returns the token and its expiry timestamp.
|
|
14
|
+
*/
|
|
15
|
+
issueToken() {
|
|
16
|
+
const token = this.generateToken();
|
|
17
|
+
const expiresAt = Date.now() + TOKEN_TTL_MS;
|
|
18
|
+
this.active = { token, expiresAt, consumed: false };
|
|
19
|
+
return { token, expiresAt };
|
|
20
|
+
}
|
|
21
|
+
/** Validates and atomically consumes a token. */
|
|
22
|
+
consumeToken(token) {
|
|
23
|
+
if (!this.active || this.active.token !== token)
|
|
24
|
+
return "unknown";
|
|
25
|
+
if (this.active.consumed)
|
|
26
|
+
return "consumed";
|
|
27
|
+
if (Date.now() > this.active.expiresAt)
|
|
28
|
+
return "expired";
|
|
29
|
+
this.active.consumed = true;
|
|
30
|
+
return "ok";
|
|
31
|
+
}
|
|
32
|
+
clear() {
|
|
33
|
+
this.active = null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export const qrSession = new QRSession();
|
|
37
|
+
// ── URI + display ─────────────────────────────────────────────────────────────
|
|
38
|
+
export function buildQRUri(token, longtermEdPk, // Ed25519 — only peer ID after E2E rollback
|
|
39
|
+
sessionName,
|
|
40
|
+
/**
|
|
41
|
+
* Pi room id (12 chars, base64url) derived from cwd. App routes pair_request
|
|
42
|
+
* to this room so the relay delivers it to the right Pi instance among N
|
|
43
|
+
* paralelos com mesmo epk. Adicionado no fix do plano 17 (sem `rm` o app
|
|
44
|
+
* cai em room=main e o relay drops com "dest not found").
|
|
45
|
+
*/
|
|
46
|
+
roomId) {
|
|
47
|
+
// `r` (relay URL) removed in plano 14 — relay now comes from app config /
|
|
48
|
+
// pi-ext env|config|default chain. Keeps QR ~30-50 chars shorter.
|
|
49
|
+
const epkB64 = Buffer.from(longtermEdPk).toString("base64url");
|
|
50
|
+
const params = new URLSearchParams({
|
|
51
|
+
t: token,
|
|
52
|
+
epk: epkB64,
|
|
53
|
+
n: sessionName.slice(0, 80),
|
|
54
|
+
});
|
|
55
|
+
if (roomId)
|
|
56
|
+
params.set("rm", roomId);
|
|
57
|
+
return `remotepi://pair?${params.toString()}`;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Renders the QR + URI in the Pi TUI's output pane via stderr. `ctx.ui.notify`
|
|
61
|
+
* collapses multi-line content into a single toast, so for ASCII art we need
|
|
62
|
+
* the raw stderr capture that the Pi TUI exposes as scrollable log. Post
|
|
63
|
+
* plano 14 the QR carries only `t/epk/n`, fits comfortably in the panel
|
|
64
|
+
* without needing a separate Terminal window.
|
|
65
|
+
*/
|
|
66
|
+
export function displayQR(uri) {
|
|
67
|
+
qrTerminal.generate(uri, { small: true }, (qrcode) => {
|
|
68
|
+
process.stderr.write(`\n📱 Scan to pair:\n\n${qrcode}\n${uri}\n`);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Starts a rotating QR session: generates a new QR every 60s, printing it
|
|
73
|
+
* to stdout. Returns a `stop()` function that cancels the rotation and clears
|
|
74
|
+
* the active token.
|
|
75
|
+
*/
|
|
76
|
+
export function startQRRotation(longtermEdPk, sessionName, roomId) {
|
|
77
|
+
let timer = null;
|
|
78
|
+
let stopped = false;
|
|
79
|
+
const rotate = () => {
|
|
80
|
+
if (stopped)
|
|
81
|
+
return;
|
|
82
|
+
const { token, expiresAt } = qrSession.issueToken();
|
|
83
|
+
const uri = buildQRUri(token, longtermEdPk, sessionName, roomId);
|
|
84
|
+
displayQR(uri);
|
|
85
|
+
console.log(`⏱ Renews at ${new Date(expiresAt).toLocaleTimeString()} — waiting for scan…`);
|
|
86
|
+
timer = setTimeout(rotate, TOKEN_TTL_MS);
|
|
87
|
+
};
|
|
88
|
+
rotate();
|
|
89
|
+
return () => {
|
|
90
|
+
stopped = true;
|
|
91
|
+
if (timer !== null)
|
|
92
|
+
clearTimeout(timer);
|
|
93
|
+
qrSession.clear();
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=qr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr.js","sourceRoot":"","sources":["../../src/pairing/qr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Ed25519Keypair } from "./crypto.js";
|
|
2
|
+
export declare function getOrCreateEd25519Keypair(): Promise<Ed25519Keypair>;
|
|
3
|
+
export interface PeerRecord {
|
|
4
|
+
name: string;
|
|
5
|
+
remote_epk: string;
|
|
6
|
+
paired_at: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function listPeers(): Promise<PeerRecord[]>;
|
|
9
|
+
export declare function addPeer(record: PeerRecord): Promise<void>;
|
|
10
|
+
export declare function removePeer(remoteEpk: string): Promise<boolean>;
|