@uxnan/shared 0.0.7-alpha.20260719 → 0.0.8-alpha.20260720
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/dist/src/constants.d.ts +23 -2
- package/dist/src/constants.js +23 -2
- package/dist/src/constants.js.map +1 -1
- package/dist/src/e2ee/envelope.d.ts +17 -1
- package/package.json +1 -1
package/dist/src/constants.d.ts
CHANGED
|
@@ -6,8 +6,29 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Source: architecture/02a-system-architecture.md §5.9.1.
|
|
8
8
|
*/
|
|
9
|
-
/**
|
|
10
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Secure transport protocol version negotiated in the handshake. Both sides
|
|
11
|
+
* reject a mismatch during `clientHello`/`serverHello`, so an incompatible pair
|
|
12
|
+
* fails fast and legibly instead of completing the handshake and then dropping
|
|
13
|
+
* every encrypted frame.
|
|
14
|
+
*
|
|
15
|
+
* **Bump this whenever the encrypted-frame format changes** (envelope shape,
|
|
16
|
+
* AAD layout, key derivation) — not just when the handshake JSON changes. The
|
|
17
|
+
* handshake is the only place the two sides can still talk, so it is the only
|
|
18
|
+
* place a version gap can be reported.
|
|
19
|
+
*
|
|
20
|
+
* - `1` — initial: AES-256-GCM over the envelope's ciphertext only.
|
|
21
|
+
* - `2` — `sessionId`/`seq`/direction bound as GCM AAD (`buildEnvelopeAad`).
|
|
22
|
+
*/
|
|
23
|
+
export declare const SECURE_PROTOCOL_VERSION = 2;
|
|
24
|
+
/**
|
|
25
|
+
* AAD direction bytes for {@link SECURE_PROTOCOL_VERSION} ≥ 2. The session key
|
|
26
|
+
* is shared by both directions, so the direction is bound into the AAD to stop
|
|
27
|
+
* a frame being reflected back at its own sender as apparently-inbound traffic.
|
|
28
|
+
* Mirrored in the mobile `ProtocolConstants`.
|
|
29
|
+
*/
|
|
30
|
+
export declare const ENVELOPE_DIRECTION_PHONE_TO_BRIDGE = 1;
|
|
31
|
+
export declare const ENVELOPE_DIRECTION_BRIDGE_TO_PHONE = 2;
|
|
11
32
|
/** Version stamped into the pairing QR payload. */
|
|
12
33
|
export declare const PAIRING_QR_VERSION = 2;
|
|
13
34
|
/** HKDF `info` tag used when deriving the session key. */
|
package/dist/src/constants.js
CHANGED
|
@@ -6,8 +6,29 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Source: architecture/02a-system-architecture.md §5.9.1.
|
|
8
8
|
*/
|
|
9
|
-
/**
|
|
10
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Secure transport protocol version negotiated in the handshake. Both sides
|
|
11
|
+
* reject a mismatch during `clientHello`/`serverHello`, so an incompatible pair
|
|
12
|
+
* fails fast and legibly instead of completing the handshake and then dropping
|
|
13
|
+
* every encrypted frame.
|
|
14
|
+
*
|
|
15
|
+
* **Bump this whenever the encrypted-frame format changes** (envelope shape,
|
|
16
|
+
* AAD layout, key derivation) — not just when the handshake JSON changes. The
|
|
17
|
+
* handshake is the only place the two sides can still talk, so it is the only
|
|
18
|
+
* place a version gap can be reported.
|
|
19
|
+
*
|
|
20
|
+
* - `1` — initial: AES-256-GCM over the envelope's ciphertext only.
|
|
21
|
+
* - `2` — `sessionId`/`seq`/direction bound as GCM AAD (`buildEnvelopeAad`).
|
|
22
|
+
*/
|
|
23
|
+
export const SECURE_PROTOCOL_VERSION = 2;
|
|
24
|
+
/**
|
|
25
|
+
* AAD direction bytes for {@link SECURE_PROTOCOL_VERSION} ≥ 2. The session key
|
|
26
|
+
* is shared by both directions, so the direction is bound into the AAD to stop
|
|
27
|
+
* a frame being reflected back at its own sender as apparently-inbound traffic.
|
|
28
|
+
* Mirrored in the mobile `ProtocolConstants`.
|
|
29
|
+
*/
|
|
30
|
+
export const ENVELOPE_DIRECTION_PHONE_TO_BRIDGE = 0x01;
|
|
31
|
+
export const ENVELOPE_DIRECTION_BRIDGE_TO_PHONE = 0x02;
|
|
11
32
|
/** Version stamped into the pairing QR payload. */
|
|
12
33
|
export const PAIRING_QR_VERSION = 2;
|
|
13
34
|
/** HKDF `info` tag used when deriving the session key. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,IAAI,CAAC;AACvD,MAAM,CAAC,MAAM,kCAAkC,GAAG,IAAI,CAAC;AAEvD,mDAAmD;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC,0DAA0D;AAC1D,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAE7C,0EAA0E;AAC1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAE1C,mEAAmE;AACnE,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAE9C,gEAAgE;AAChE,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD,uEAAuE;AACvE,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEhD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,yBAAyB,GAAG,UAAU,CAAC;AAEpD,8BAA8B;AAC9B,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AAExD,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAEtC,wCAAwC;AACxC,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC"}
|
|
@@ -5,8 +5,24 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export interface SecureEnvelope {
|
|
7
7
|
kind: 'encryptedEnvelope';
|
|
8
|
+
/**
|
|
9
|
+
* Session this envelope belongs to. Travels in the clear (the receiver needs
|
|
10
|
+
* it before it can look up a key) and is therefore bound as GCM AAD — see
|
|
11
|
+
* {@link seq}.
|
|
12
|
+
*/
|
|
8
13
|
sessionId: string;
|
|
9
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Monotonic sequence number (replay protection). Like `sessionId` it is
|
|
16
|
+
* visible on the wire, so from `SECURE_PROTOCOL_VERSION` 2 both are bound —
|
|
17
|
+
* together with a direction byte — as the AES-GCM **AAD**:
|
|
18
|
+
*
|
|
19
|
+
* AAD = utf8(sessionId) || 0x00 || u64_be(seq) || 0x00 || direction
|
|
20
|
+
*
|
|
21
|
+
* so tampering with either field fails the tag instead of silently passing an
|
|
22
|
+
* unauthenticated `seq <= lastApplied` check. Both implementations must build
|
|
23
|
+
* this byte-for-byte identically (`buildEnvelopeAad` on each side); see
|
|
24
|
+
* architecture/02a §5.9.1.
|
|
25
|
+
*/
|
|
10
26
|
seq: number;
|
|
11
27
|
/** Per-message random nonce (hex, 12 bytes). */
|
|
12
28
|
nonce: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uxnan/shared",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8-alpha.20260720",
|
|
4
4
|
"description": "Shared JSON-RPC and E2EE contracts for the Uxnan ecosystem (bridge, relay, mobile).",
|
|
5
5
|
"license": "MPL-2.0",
|
|
6
6
|
"author": "Luis Donaldo Gamas Vazquez",
|