@bitboxswiss/bitbox-api 0.1.0 → 0.2.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.
Files changed (175) hide show
  1. package/CONTRIBUTING.md +4 -2
  2. package/README.md +69 -9
  3. package/dist/index.d.ts +337 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +451 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/internal/cardano/methods.d.ts +7 -0
  8. package/dist/internal/cardano/methods.d.ts.map +1 -0
  9. package/dist/internal/cardano/methods.js +199 -0
  10. package/dist/internal/cardano/methods.js.map +1 -0
  11. package/dist/internal/cardano/query.d.ts +4 -0
  12. package/dist/internal/cardano/query.d.ts.map +1 -0
  13. package/dist/internal/cardano/query.js +20 -0
  14. package/dist/internal/cardano/query.js.map +1 -0
  15. package/dist/internal/connect-simulator.d.ts +2 -0
  16. package/dist/internal/connect-simulator.d.ts.map +1 -0
  17. package/dist/internal/connect-simulator.js +25 -0
  18. package/dist/internal/connect-simulator.js.map +1 -0
  19. package/dist/internal/connect.d.ts +2 -0
  20. package/dist/internal/connect.d.ts.map +1 -0
  21. package/dist/internal/connect.js +54 -0
  22. package/dist/internal/connect.js.map +1 -0
  23. package/dist/internal/constants.d.ts +2 -0
  24. package/dist/internal/constants.d.ts.map +1 -0
  25. package/dist/internal/constants.js +16 -0
  26. package/dist/internal/constants.js.map +1 -0
  27. package/dist/internal/device.d.ts +5 -0
  28. package/dist/internal/device.d.ts.map +1 -0
  29. package/dist/internal/device.js +40 -0
  30. package/dist/internal/device.js.map +1 -0
  31. package/dist/internal/errors.d.ts +2 -0
  32. package/dist/internal/errors.d.ts.map +1 -0
  33. package/dist/internal/errors.js +220 -0
  34. package/dist/internal/errors.js.map +1 -0
  35. package/dist/internal/eth/antiklepto.d.ts +5 -0
  36. package/dist/internal/eth/antiklepto.d.ts.map +1 -0
  37. package/dist/internal/eth/antiklepto.js +59 -0
  38. package/dist/internal/eth/antiklepto.js.map +1 -0
  39. package/dist/internal/eth/eip712.d.ts +25 -0
  40. package/dist/internal/eth/eip712.d.ts.map +1 -0
  41. package/dist/internal/eth/eip712.js +303 -0
  42. package/dist/internal/eth/eip712.js.map +1 -0
  43. package/dist/internal/eth/methods.d.ts +10 -0
  44. package/dist/internal/eth/methods.d.ts.map +1 -0
  45. package/dist/internal/eth/methods.js +245 -0
  46. package/dist/internal/eth/methods.js.map +1 -0
  47. package/dist/internal/eth/query.d.ts +4 -0
  48. package/dist/internal/eth/query.d.ts.map +1 -0
  49. package/dist/internal/eth/query.js +20 -0
  50. package/dist/internal/eth/query.js.map +1 -0
  51. package/dist/internal/eth/streaming.d.ts +4 -0
  52. package/dist/internal/eth/streaming.d.ts.map +1 -0
  53. package/dist/internal/eth/streaming.js +22 -0
  54. package/dist/internal/eth/streaming.js.map +1 -0
  55. package/dist/internal/eth/version.d.ts +2 -0
  56. package/dist/internal/eth/version.d.ts.map +1 -0
  57. package/dist/internal/eth/version.js +3 -0
  58. package/dist/internal/eth/version.js.map +1 -0
  59. package/dist/internal/hww.d.ts +2 -0
  60. package/dist/internal/hww.d.ts.map +1 -0
  61. package/dist/internal/hww.js +240 -0
  62. package/dist/internal/hww.js.map +1 -0
  63. package/dist/internal/keypath.d.ts +4 -0
  64. package/dist/internal/keypath.d.ts.map +1 -0
  65. package/dist/internal/keypath.js +47 -0
  66. package/dist/internal/keypath.js.map +1 -0
  67. package/dist/internal/message-queue.d.ts +2 -0
  68. package/dist/internal/message-queue.d.ts.map +1 -0
  69. package/dist/internal/message-queue.js +29 -0
  70. package/dist/internal/message-queue.js.map +1 -0
  71. package/dist/internal/noise-config.d.ts +2 -0
  72. package/dist/internal/noise-config.d.ts.map +1 -0
  73. package/dist/internal/noise-config.js +160 -0
  74. package/dist/internal/noise-config.js.map +1 -0
  75. package/dist/internal/noise.d.ts +2 -0
  76. package/dist/internal/noise.d.ts.map +1 -0
  77. package/dist/internal/noise.js +270 -0
  78. package/dist/internal/noise.js.map +1 -0
  79. package/dist/internal/pairing.d.ts +2 -0
  80. package/dist/internal/pairing.d.ts.map +1 -0
  81. package/dist/internal/pairing.js +130 -0
  82. package/dist/internal/pairing.js.map +1 -0
  83. package/dist/internal/proto-query.d.ts +5 -0
  84. package/dist/internal/proto-query.d.ts.map +1 -0
  85. package/dist/internal/proto-query.js +28 -0
  86. package/dist/internal/proto-query.js.map +1 -0
  87. package/dist/internal/read-write.d.ts +2 -0
  88. package/dist/internal/read-write.d.ts.map +1 -0
  89. package/dist/internal/read-write.js +40 -0
  90. package/dist/internal/read-write.js.map +1 -0
  91. package/dist/internal/restore.d.ts +3 -0
  92. package/dist/internal/restore.d.ts.map +1 -0
  93. package/dist/internal/restore.js +27 -0
  94. package/dist/internal/restore.js.map +1 -0
  95. package/dist/internal/transport-bridge.d.ts +2 -0
  96. package/dist/internal/transport-bridge.d.ts.map +1 -0
  97. package/dist/internal/transport-bridge.js +97 -0
  98. package/dist/internal/transport-bridge.js.map +1 -0
  99. package/dist/internal/transport-simulator.d.ts +2 -0
  100. package/dist/internal/transport-simulator.d.ts.map +1 -0
  101. package/dist/internal/transport-simulator.js +83 -0
  102. package/dist/internal/transport-simulator.js.map +1 -0
  103. package/dist/internal/transport-webhid.d.ts +2 -0
  104. package/dist/internal/transport-webhid.d.ts.map +1 -0
  105. package/dist/internal/transport-webhid.js +69 -0
  106. package/dist/internal/transport-webhid.js.map +1 -0
  107. package/dist/internal/u2f-framing.d.ts +2 -0
  108. package/dist/internal/u2f-framing.d.ts.map +1 -0
  109. package/dist/internal/u2f-framing.js +155 -0
  110. package/dist/internal/u2f-framing.js.map +1 -0
  111. package/dist/internal/utils.d.ts +2 -0
  112. package/dist/internal/utils.d.ts.map +1 -0
  113. package/dist/internal/utils.js +90 -0
  114. package/dist/internal/utils.js.map +1 -0
  115. package/dist/internal/version.d.ts +8 -0
  116. package/dist/internal/version.d.ts.map +1 -0
  117. package/dist/internal/version.js +9 -0
  118. package/dist/internal/version.js.map +1 -0
  119. package/dist/proto/gen/antiklepto_pb.d.ts +49 -0
  120. package/dist/proto/gen/antiklepto_pb.d.ts.map +1 -0
  121. package/dist/proto/gen/antiklepto_pb.js +22 -0
  122. package/dist/proto/gen/antiklepto_pb.js.map +1 -0
  123. package/dist/proto/gen/backup_commands_pb.d.ts +124 -0
  124. package/dist/proto/gen/backup_commands_pb.d.ts.map +1 -0
  125. package/dist/proto/gen/backup_commands_pb.js +42 -0
  126. package/dist/proto/gen/backup_commands_pb.js.map +1 -0
  127. package/dist/proto/gen/backup_pb.d.ts +150 -0
  128. package/dist/proto/gen/backup_pb.d.ts.map +1 -0
  129. package/dist/proto/gen/backup_pb.js +46 -0
  130. package/dist/proto/gen/backup_pb.js.map +1 -0
  131. package/dist/proto/gen/bitbox02_system_pb.d.ts +207 -0
  132. package/dist/proto/gen/bitbox02_system_pb.d.ts.map +1 -0
  133. package/dist/proto/gen/bitbox02_system_pb.js +80 -0
  134. package/dist/proto/gen/bitbox02_system_pb.js.map +1 -0
  135. package/dist/proto/gen/bluetooth_pb.d.ts +135 -0
  136. package/dist/proto/gen/bluetooth_pb.d.ts.map +1 -0
  137. package/dist/proto/gen/bluetooth_pb.js +42 -0
  138. package/dist/proto/gen/bluetooth_pb.js.map +1 -0
  139. package/dist/proto/gen/btc_pb.d.ts +1166 -0
  140. package/dist/proto/gen/btc_pb.d.ts.map +1 -0
  141. package/dist/proto/gen/btc_pb.js +442 -0
  142. package/dist/proto/gen/btc_pb.js.map +1 -0
  143. package/dist/proto/gen/cardano_pb.d.ts +504 -0
  144. package/dist/proto/gen/cardano_pb.d.ts.map +1 -0
  145. package/dist/proto/gen/cardano_pb.js +142 -0
  146. package/dist/proto/gen/cardano_pb.js.map +1 -0
  147. package/dist/proto/gen/common_pb.d.ts +129 -0
  148. package/dist/proto/gen/common_pb.d.ts.map +1 -0
  149. package/dist/proto/gen/common_pb.js +42 -0
  150. package/dist/proto/gen/common_pb.js.map +1 -0
  151. package/dist/proto/gen/eth_pb.d.ts +662 -0
  152. package/dist/proto/gen/eth_pb.d.ts.map +1 -0
  153. package/dist/proto/gen/eth_pb.js +221 -0
  154. package/dist/proto/gen/eth_pb.js.map +1 -0
  155. package/dist/proto/gen/hww_pb.d.ts +349 -0
  156. package/dist/proto/gen/hww_pb.d.ts.map +1 -0
  157. package/dist/proto/gen/hww_pb.js +38 -0
  158. package/dist/proto/gen/hww_pb.js.map +1 -0
  159. package/dist/proto/gen/keystore_pb.d.ts +108 -0
  160. package/dist/proto/gen/keystore_pb.d.ts.map +1 -0
  161. package/dist/proto/gen/keystore_pb.js +33 -0
  162. package/dist/proto/gen/keystore_pb.js.map +1 -0
  163. package/dist/proto/gen/mnemonic_pb.d.ts +48 -0
  164. package/dist/proto/gen/mnemonic_pb.d.ts.map +1 -0
  165. package/dist/proto/gen/mnemonic_pb.js +22 -0
  166. package/dist/proto/gen/mnemonic_pb.js.map +1 -0
  167. package/dist/proto/gen/perform_attestation_pb.d.ts +57 -0
  168. package/dist/proto/gen/perform_attestation_pb.d.ts.map +1 -0
  169. package/dist/proto/gen/perform_attestation_pb.js +17 -0
  170. package/dist/proto/gen/perform_attestation_pb.js.map +1 -0
  171. package/dist/proto/gen/system_pb.d.ts +38 -0
  172. package/dist/proto/gen/system_pb.d.ts.map +1 -0
  173. package/dist/proto/gen/system_pb.js +30 -0
  174. package/dist/proto/gen/system_pb.js.map +1 -0
  175. package/package.json +2 -1
@@ -0,0 +1,97 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { BRIDGE_BASE_URL, BRIDGE_WS_BASE_URL } from './constants.js';
3
+ import { MessageQueue } from './message-queue.js';
4
+ import { TransportError, makeCloseGuard } from './read-write.js';
5
+ import { sleep } from './utils.js';
6
+ const DISCOVERY_ATTEMPTS = 10;
7
+ const DISCOVERY_SLEEP_MS = 100;
8
+ // Values of WebSocket.readyState. Mirror the DOM constants so tests don't
9
+ // need to depend on `globalThis.WebSocket`.
10
+ /** @internal */
11
+ export const WS_OPEN = 1;
12
+ function defaultDeps() {
13
+ const f = globalThis.fetch;
14
+ const WS = globalThis.WebSocket;
15
+ if (f === undefined || WS === undefined) {
16
+ throw new TransportError('bridge', 'fetch or WebSocket is not available');
17
+ }
18
+ // Bind to globalThis: in browsers, `fetch` must be invoked with the realm's
19
+ // global as the receiver. Calling it as a method on a captured object (e.g.
20
+ // `deps.fetch(url)`) triggers `TypeError: Illegal invocation` before any
21
+ // network request is sent.
22
+ return { fetch: f.bind(globalThis), WebSocket: WS };
23
+ }
24
+ async function discoverDevicePath(deps) {
25
+ for (let i = 0; i < DISCOVERY_ATTEMPTS; i += 1) {
26
+ let resp;
27
+ try {
28
+ resp = await deps.fetch(`${BRIDGE_BASE_URL}/devices`);
29
+ }
30
+ catch {
31
+ throw new TransportError('bridge', 'BitBoxBridge not found.');
32
+ }
33
+ if (resp.status === 403) {
34
+ throw new TransportError('bridge', 'Origin not whitelisted.');
35
+ }
36
+ if (!resp.ok) {
37
+ throw new TransportError('bridge', 'Unexpected bridge connection error.');
38
+ }
39
+ const body = (await resp.json());
40
+ const devices = body.devices ?? [];
41
+ if (devices.length === 1) {
42
+ return devices[0].path;
43
+ }
44
+ await sleep(DISCOVERY_SLEEP_MS);
45
+ }
46
+ throw new TransportError('bridge', 'Expected exactly one BitBox02. If one is connected, it might already have an open connection another app. If so, please close the other app first.');
47
+ }
48
+ /**
49
+ * Open a BitBox02 via the BitBoxBridge service. Discovery polls
50
+ * `http://127.0.0.1:8178/api/v1/devices` for exactly one device, then opens
51
+ * a WebSocket at `ws://127.0.0.1:8178/api/v1/socket/{path}`. The Rust
52
+ * reference uses `localhost` for the HTTP probe; we deviate to `127.0.0.1`
53
+ * because the bridge only binds the IPv4 loopback, and `localhost` resolves
54
+ * to `::1` first on systems where /etc/hosts maps both, breaking the fetch.
55
+ * @internal
56
+ */
57
+ export async function openBridge(onCloseCb, deps = defaultDeps()) {
58
+ const devicePath = await discoverDevicePath(deps);
59
+ const socket = new deps.WebSocket(BRIDGE_WS_BASE_URL + devicePath);
60
+ socket.binaryType = 'arraybuffer';
61
+ const queue = new MessageQueue();
62
+ const guard = makeCloseGuard(onCloseCb);
63
+ let opened = false;
64
+ socket.onmessage = (ev) => {
65
+ queue.push(new Uint8Array(ev.data));
66
+ };
67
+ await new Promise((resolve, reject) => {
68
+ socket.onopen = () => {
69
+ opened = true;
70
+ resolve();
71
+ };
72
+ socket.onclose = () => {
73
+ guard();
74
+ if (!opened) {
75
+ reject(new TransportError('bridge', 'bridge socket closed before opening'));
76
+ }
77
+ };
78
+ socket.onerror = () => {
79
+ reject(new TransportError('bridge', 'Your BitBox02 is busy.'));
80
+ };
81
+ });
82
+ return {
83
+ write(bytes) {
84
+ if (socket.readyState !== WS_OPEN) {
85
+ throw new TransportError('write', 'bridge socket is not open');
86
+ }
87
+ socket.send(bytes);
88
+ },
89
+ read() {
90
+ return queue.next();
91
+ },
92
+ close() {
93
+ socket.close();
94
+ },
95
+ };
96
+ }
97
+ //# sourceMappingURL=transport-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-bridge.js","sourceRoot":"","sources":["../../src/internal/transport-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transport-simulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-simulator.d.ts","sourceRoot":"","sources":["../../src/internal/transport-simulator.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import * as net from 'node:net';
3
+ import { SIMULATOR_DEFAULT_ENDPOINT } from './constants.js';
4
+ import { MessageQueue } from './message-queue.js';
5
+ import { TransportError, makeCloseGuard } from './read-write.js';
6
+ import { sleep } from './utils.js';
7
+ // Rust's try_connect (simulator.rs:35-43) uses 200 * 10ms = 2s; Node + cold
8
+ // sim starts occasionally exceed that, so give ourselves a 5s window.
9
+ const CONNECT_ATTEMPTS = 500;
10
+ const CONNECT_ATTEMPT_SLEEP_MS = 10;
11
+ function attemptConnect(host, port) {
12
+ return new Promise((resolve, reject) => {
13
+ const s = net.createConnection({ host, port });
14
+ const onError = (err) => {
15
+ s.removeListener('connect', onConnect);
16
+ s.destroy();
17
+ reject(err);
18
+ };
19
+ const onConnect = () => {
20
+ s.removeListener('error', onError);
21
+ resolve(s);
22
+ };
23
+ s.once('error', onError);
24
+ s.once('connect', onConnect);
25
+ });
26
+ }
27
+ /**
28
+ * Open a TCP connection to a BitBox02 simulator. Mirrors
29
+ * `bitbox-api-rs/src/simulator.rs` `try_connect` with a ~2s retry window.
30
+ *
31
+ * The simulator speaks raw U2F HID framing over TCP (64-byte reads on the
32
+ * Rust side). Wrap the returned transport in `U2fHidCommunication`.
33
+ * @internal
34
+ */
35
+ export async function openSimulator(endpoint = SIMULATOR_DEFAULT_ENDPOINT, onCloseCb) {
36
+ const colon = endpoint.lastIndexOf(':');
37
+ if (colon < 0) {
38
+ throw new TransportError('simulator', `invalid endpoint ${endpoint}`);
39
+ }
40
+ const host = endpoint.slice(0, colon);
41
+ const port = Number(endpoint.slice(colon + 1));
42
+ if (!Number.isFinite(port)) {
43
+ throw new TransportError('simulator', `invalid endpoint port in ${endpoint}`);
44
+ }
45
+ let socket = null;
46
+ for (let i = 0; i < CONNECT_ATTEMPTS; i += 1) {
47
+ try {
48
+ socket = await attemptConnect(host, port);
49
+ break;
50
+ }
51
+ catch {
52
+ await sleep(CONNECT_ATTEMPT_SLEEP_MS);
53
+ }
54
+ }
55
+ if (socket === null) {
56
+ throw new TransportError('simulator', `could not connect to ${endpoint}`);
57
+ }
58
+ const s = socket;
59
+ const queue = new MessageQueue();
60
+ const guard = makeCloseGuard(onCloseCb);
61
+ s.on('data', (chunk) => {
62
+ queue.push(new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength));
63
+ });
64
+ s.on('close', () => { guard(); });
65
+ s.on('end', () => { guard(); });
66
+ s.on('error', () => { guard(); });
67
+ return {
68
+ write(bytes) {
69
+ s.write(Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength));
70
+ },
71
+ read() {
72
+ return queue.next();
73
+ },
74
+ close() {
75
+ // RST close (instead of graceful FIN). Avoids leaving the simulator's
76
+ // listening port in TIME_WAIT, which blocks the next test file from
77
+ // rebinding 127.0.0.1:15423 back-to-back.
78
+ s.resetAndDestroy();
79
+ guard();
80
+ },
81
+ };
82
+ }
83
+ //# sourceMappingURL=transport-simulator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-simulator.js","sourceRoot":"","sources":["../../src/internal/transport-simulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transport-webhid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-webhid.d.ts","sourceRoot":"","sources":["../../src/internal/transport-webhid.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { BITBOX02_PRODUCT_PREFIX, PRODUCT_ID, VENDOR_ID } from './constants.js';
3
+ import { MessageQueue } from './message-queue.js';
4
+ import { TransportError, makeCloseGuard } from './read-write.js';
5
+ function hidFrom(nav) {
6
+ const h = nav?.hid;
7
+ if (h === undefined) {
8
+ throw new TransportError('webhid', 'WebHID is not available in this environment');
9
+ }
10
+ return h;
11
+ }
12
+ /** @internal */
13
+ export async function openWebHID(onCloseCb, hid = hidFrom(globalThis.navigator)) {
14
+ const filters = [{ vendorId: VENDOR_ID, productId: PRODUCT_ID }];
15
+ let device;
16
+ try {
17
+ let devices = await hid.getDevices({ filters });
18
+ if (devices.length === 0) {
19
+ devices = await hid.requestDevice({ filters });
20
+ }
21
+ device = devices[0];
22
+ }
23
+ catch {
24
+ throw new TransportError('webhid-cancel', 'no BitBox02 selected');
25
+ }
26
+ if (device === undefined || !device.productName.includes(BITBOX02_PRODUCT_PREFIX)) {
27
+ throw new TransportError('webhid-cancel', 'no BitBox02 selected');
28
+ }
29
+ try {
30
+ await device.open();
31
+ }
32
+ catch (err) {
33
+ const reason = err instanceof Error && err.message ? `: ${err.message}` : '';
34
+ throw new TransportError('webhid', `failed to open HID device${reason}`);
35
+ }
36
+ const queue = new MessageQueue();
37
+ const guard = makeCloseGuard(onCloseCb);
38
+ const onInputReport = (e) => {
39
+ queue.push(new Uint8Array(e.data.buffer, e.data.byteOffset, e.data.byteLength));
40
+ };
41
+ device.addEventListener('inputreport', onInputReport);
42
+ // The WebHID API delivers device-specific disconnect events at the HID
43
+ // level, not the device level, so this listener fires for every matching
44
+ // VID/PID device. Matches `webhid.js`.
45
+ const onDisconnect = (e) => {
46
+ if (e.device === device) {
47
+ guard();
48
+ }
49
+ };
50
+ hid.addEventListener('disconnect', onDisconnect);
51
+ return {
52
+ write(bytes) {
53
+ if (!device.opened) {
54
+ throw new TransportError('write', 'HID device is closed');
55
+ }
56
+ void device.sendReport(0, bytes);
57
+ },
58
+ read() {
59
+ return queue.next();
60
+ },
61
+ close() {
62
+ device.removeEventListener('inputreport', onInputReport);
63
+ hid.removeEventListener('disconnect', onDisconnect);
64
+ void device.close();
65
+ guard();
66
+ },
67
+ };
68
+ }
69
+ //# sourceMappingURL=transport-webhid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-webhid.js","sourceRoot":"","sources":["../../src/internal/transport-webhid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=u2f-framing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"u2f-framing.d.ts","sourceRoot":"","sources":["../../src/internal/u2f-framing.ts"],"names":[],"mappings":""}
@@ -0,0 +1,155 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { TransportError } from './read-write.js';
3
+ /** @internal */
4
+ export const HEADER_INIT_LEN = 7;
5
+ /** @internal */
6
+ export const HEADER_CONT_LEN = 5;
7
+ /** @internal */
8
+ export const PACKET_SIZE = 64;
9
+ /** @internal */
10
+ export const MAX_LEN = 129 * PACKET_SIZE;
11
+ const MAX_PAYLOAD = PACKET_SIZE - HEADER_INIT_LEN + 128 * (PACKET_SIZE - HEADER_CONT_LEN);
12
+ const MAX_WS_PAYLOAD = MAX_LEN - HEADER_INIT_LEN;
13
+ /**
14
+ * Total buffer length an encoded message occupies, counting the padding that
15
+ * fills each 64-byte HID packet. Mirrors
16
+ * `bitbox-api-rs/src/u2fframing.rs:163-170`.
17
+ * @internal
18
+ */
19
+ export function getEncodedLen(len) {
20
+ if (len < PACKET_SIZE - HEADER_INIT_LEN) {
21
+ return PACKET_SIZE;
22
+ }
23
+ const remainder = len - (PACKET_SIZE - HEADER_INIT_LEN);
24
+ return PACKET_SIZE + PACKET_SIZE * Math.ceil(remainder / (PACKET_SIZE - HEADER_CONT_LEN));
25
+ }
26
+ function viewOf(buf) {
27
+ return new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
28
+ }
29
+ /** @internal */
30
+ export function parseHeader(buf) {
31
+ if (buf.length < HEADER_INIT_LEN) {
32
+ throw new TransportError('u2f-decode', 'buffer too short for header');
33
+ }
34
+ const v = viewOf(buf);
35
+ return {
36
+ cid: v.getUint32(0, false),
37
+ cmd: v.getUint8(4),
38
+ len: v.getUint16(5, false),
39
+ };
40
+ }
41
+ /**
42
+ * Returns the CID used for every frame. Hardcoded to match
43
+ * `bitbox-api-rs/src/u2fframing.rs:68-70` so the existing test vectors apply
44
+ * byte-for-byte.
45
+ * @internal
46
+ */
47
+ export function generateCid() {
48
+ return 0xff00ff00;
49
+ }
50
+ /**
51
+ * U2F HID framing: splits a payload across 64-byte packets with one initial
52
+ * header and sequenced continuation headers. Mirrors Rust `U2fHid`.
53
+ * @internal
54
+ */
55
+ export class U2fHid {
56
+ cid;
57
+ cmd;
58
+ constructor(cmd, cid = generateCid()) {
59
+ this.cmd = cmd;
60
+ this.cid = cid;
61
+ }
62
+ encode(message) {
63
+ if (message.length > MAX_PAYLOAD) {
64
+ throw new TransportError('u2f-decode', 'message exceeds U2F HID max payload');
65
+ }
66
+ const encLen = getEncodedLen(message.length);
67
+ const buf = new Uint8Array(encLen);
68
+ const v = viewOf(buf);
69
+ v.setUint32(0, this.cid, false);
70
+ buf[4] = this.cmd;
71
+ v.setUint16(5, message.length, false);
72
+ const firstPayload = Math.min(PACKET_SIZE - HEADER_INIT_LEN, message.length);
73
+ buf.set(message.subarray(0, firstPayload), HEADER_INIT_LEN);
74
+ let msgOffset = firstPayload;
75
+ let pktOffset = PACKET_SIZE;
76
+ let seq = 0;
77
+ while (msgOffset < message.length) {
78
+ if (seq > 127) {
79
+ throw new TransportError('u2f-decode', 'too many U2F continuation frames');
80
+ }
81
+ v.setUint32(pktOffset, this.cid, false);
82
+ buf[pktOffset + 4] = seq;
83
+ const chunkLen = Math.min(PACKET_SIZE - HEADER_CONT_LEN, message.length - msgOffset);
84
+ buf.set(message.subarray(msgOffset, msgOffset + chunkLen), pktOffset + HEADER_CONT_LEN);
85
+ msgOffset += chunkLen;
86
+ pktOffset += PACKET_SIZE;
87
+ seq += 1;
88
+ }
89
+ return buf;
90
+ }
91
+ decode(buf) {
92
+ const { cid, cmd, len } = parseHeader(buf);
93
+ if (cid !== this.cid) {
94
+ throw new TransportError('u2f-decode', 'wrong CID');
95
+ }
96
+ if (cmd !== this.cmd) {
97
+ throw new TransportError('u2f-decode', 'wrong CMD');
98
+ }
99
+ if (buf.length < getEncodedLen(len)) {
100
+ return null;
101
+ }
102
+ const res = new Uint8Array(len);
103
+ const firstLen = Math.min(PACKET_SIZE - HEADER_INIT_LEN, len);
104
+ res.set(buf.subarray(HEADER_INIT_LEN, HEADER_INIT_LEN + firstLen), 0);
105
+ let resOffset = firstLen;
106
+ let pktOffset = PACKET_SIZE;
107
+ while (resOffset < len) {
108
+ const chunkLen = Math.min(PACKET_SIZE - HEADER_CONT_LEN, len - resOffset);
109
+ res.set(buf.subarray(pktOffset + HEADER_CONT_LEN, pktOffset + HEADER_CONT_LEN + chunkLen), resOffset);
110
+ resOffset += chunkLen;
111
+ pktOffset += PACKET_SIZE;
112
+ }
113
+ return res;
114
+ }
115
+ }
116
+ /**
117
+ * U2F WebSocket framing: single header + payload in one frame. The bridge
118
+ * uses this over the WebSocket instead of HID packet segmentation.
119
+ * Mirrors Rust `U2fWs`.
120
+ * @internal
121
+ */
122
+ export class U2fWs {
123
+ cid;
124
+ cmd;
125
+ constructor(cmd, cid = generateCid()) {
126
+ this.cmd = cmd;
127
+ this.cid = cid;
128
+ }
129
+ encode(message) {
130
+ if (message.length > MAX_WS_PAYLOAD) {
131
+ throw new TransportError('u2f-decode', 'message exceeds U2F WS max payload');
132
+ }
133
+ const buf = new Uint8Array(HEADER_INIT_LEN + message.length);
134
+ const v = viewOf(buf);
135
+ v.setUint32(0, this.cid, false);
136
+ buf[4] = this.cmd;
137
+ v.setUint16(5, message.length, false);
138
+ buf.set(message, HEADER_INIT_LEN);
139
+ return buf;
140
+ }
141
+ decode(buf) {
142
+ const { cid, cmd, len } = parseHeader(buf);
143
+ if (cid !== this.cid) {
144
+ throw new TransportError('u2f-decode', 'wrong CID');
145
+ }
146
+ if (cmd !== this.cmd) {
147
+ throw new TransportError('u2f-decode', 'wrong CMD');
148
+ }
149
+ if (buf.length < HEADER_INIT_LEN + len) {
150
+ throw new TransportError('u2f-decode', 'invalid length');
151
+ }
152
+ return buf.slice(HEADER_INIT_LEN, HEADER_INIT_LEN + len);
153
+ }
154
+ }
155
+ //# sourceMappingURL=u2f-framing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"u2f-framing.js","sourceRoot":"","sources":["../../src/internal/u2f-framing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { concatBytes, hexToBytes, utf8ToBytes } from '@noble/hashes/utils';
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/internal/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,90 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { invalidTypeError } from './errors.js';
3
+ export { concatBytes, hexToBytes, utf8ToBytes } from '@noble/hashes/utils';
4
+ /** @internal */
5
+ export const UINT32_MAX = 0xffffffff;
6
+ /** @internal */
7
+ export const UINT64_MAX = (1n << 64n) - 1n;
8
+ /** @internal */
9
+ export function sleep(ms) {
10
+ return new Promise((resolve) => { setTimeout(resolve, ms); });
11
+ }
12
+ /** @internal */
13
+ export function bytesToBigIntBE(bytes) {
14
+ let n = 0n;
15
+ for (const b of bytes) {
16
+ n = (n << 8n) | BigInt(b);
17
+ }
18
+ return n;
19
+ }
20
+ /**
21
+ * Big-endian minimal-bytes encoding of a non-negative integer. `0n` returns
22
+ * an empty byte array.
23
+ * @internal
24
+ */
25
+ export function bigUintToBytesBE(n) {
26
+ if (n < 0n) {
27
+ throw new RangeError('bigUintToBytesBE: expected non-negative bigint');
28
+ }
29
+ if (n === 0n) {
30
+ return new Uint8Array(0);
31
+ }
32
+ const bytes = [];
33
+ let v = n;
34
+ while (v > 0n) {
35
+ bytes.unshift(Number(v & 0xffn));
36
+ v >>= 8n;
37
+ }
38
+ return new Uint8Array(bytes);
39
+ }
40
+ /**
41
+ * Two's-complement signed minimal-bytes encoding. `0n` returns `[0x00]`.
42
+ * @internal
43
+ */
44
+ export function bigIntToSignedBytesBE(n) {
45
+ if (n === 0n) {
46
+ return new Uint8Array([0]);
47
+ }
48
+ if (n > 0n) {
49
+ const bytes = [];
50
+ let v = n;
51
+ while (v > 0n) {
52
+ bytes.unshift(Number(v & 0xffn));
53
+ v >>= 8n;
54
+ }
55
+ if ((bytes[0] & 0x80) !== 0) {
56
+ bytes.unshift(0);
57
+ }
58
+ return new Uint8Array(bytes);
59
+ }
60
+ let v = n;
61
+ const bytes = [];
62
+ while (v !== -1n || bytes.length === 0 || (bytes[0] & 0x80) === 0) {
63
+ bytes.unshift(Number(v & 0xffn));
64
+ v >>= 8n;
65
+ }
66
+ return new Uint8Array(bytes);
67
+ }
68
+ /** @internal */
69
+ export function stripLeadingZeroes(input) {
70
+ let i = 0;
71
+ while (i < input.length && input[i] === 0) {
72
+ i += 1;
73
+ }
74
+ return input.subarray(i);
75
+ }
76
+ /** @internal */
77
+ export function validateUint32(value, detail) {
78
+ if (!Number.isInteger(value) || value < 0 || value > UINT32_MAX) {
79
+ throw invalidTypeError(detail);
80
+ }
81
+ return value;
82
+ }
83
+ /** @internal */
84
+ export function validateUint64(value, detail) {
85
+ if (typeof value !== 'bigint' || value < 0n || value > UINT64_MAX) {
86
+ throw invalidTypeError(detail);
87
+ }
88
+ return value;
89
+ }
90
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/internal/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type Info } from './hww.js';
2
+ export interface SemverTriple {
3
+ major: number;
4
+ minor: number;
5
+ patch: number;
6
+ }
7
+ export declare function requireVersion(info: Info, target: SemverTriple): void;
8
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/internal/version.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC;AAG3D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAIrE"}
@@ -0,0 +1,9 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { atLeast, parseSemver } from './hww.js';
3
+ import { versionError } from './errors.js';
4
+ export function requireVersion(info, target) {
5
+ if (!atLeast(parseSemver(info.version), target)) {
6
+ throw versionError(`>=${target.major}.${target.minor}.${target.patch}`);
7
+ }
8
+ }
9
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/internal/version.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAa,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ3C,MAAM,UAAU,cAAc,CAAC,IAAU,EAAE,MAAoB;IAC7D,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;QAChD,MAAM,YAAY,CAAC,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
2
+ import type { Message } from "@bufbuild/protobuf";
3
+ /**
4
+ * Describes the file antiklepto.proto.
5
+ */
6
+ export declare const file_antiklepto: GenFile;
7
+ /**
8
+ * @generated from message shiftcrypto.bitbox02.AntiKleptoHostNonceCommitment
9
+ */
10
+ export type AntiKleptoHostNonceCommitment = Message<"shiftcrypto.bitbox02.AntiKleptoHostNonceCommitment"> & {
11
+ /**
12
+ * @generated from field: bytes commitment = 1;
13
+ */
14
+ commitment: Uint8Array;
15
+ };
16
+ /**
17
+ * Describes the message shiftcrypto.bitbox02.AntiKleptoHostNonceCommitment.
18
+ * Use `create(AntiKleptoHostNonceCommitmentSchema)` to create a new message.
19
+ */
20
+ export declare const AntiKleptoHostNonceCommitmentSchema: GenMessage<AntiKleptoHostNonceCommitment>;
21
+ /**
22
+ * @generated from message shiftcrypto.bitbox02.AntiKleptoSignerCommitment
23
+ */
24
+ export type AntiKleptoSignerCommitment = Message<"shiftcrypto.bitbox02.AntiKleptoSignerCommitment"> & {
25
+ /**
26
+ * @generated from field: bytes commitment = 1;
27
+ */
28
+ commitment: Uint8Array;
29
+ };
30
+ /**
31
+ * Describes the message shiftcrypto.bitbox02.AntiKleptoSignerCommitment.
32
+ * Use `create(AntiKleptoSignerCommitmentSchema)` to create a new message.
33
+ */
34
+ export declare const AntiKleptoSignerCommitmentSchema: GenMessage<AntiKleptoSignerCommitment>;
35
+ /**
36
+ * @generated from message shiftcrypto.bitbox02.AntiKleptoSignatureRequest
37
+ */
38
+ export type AntiKleptoSignatureRequest = Message<"shiftcrypto.bitbox02.AntiKleptoSignatureRequest"> & {
39
+ /**
40
+ * @generated from field: bytes host_nonce = 1;
41
+ */
42
+ hostNonce: Uint8Array;
43
+ };
44
+ /**
45
+ * Describes the message shiftcrypto.bitbox02.AntiKleptoSignatureRequest.
46
+ * Use `create(AntiKleptoSignatureRequestSchema)` to create a new message.
47
+ */
48
+ export declare const AntiKleptoSignatureRequestSchema: GenMessage<AntiKleptoSignatureRequest>;
49
+ //# sourceMappingURL=antiklepto_pb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antiklepto_pb.d.ts","sourceRoot":"","sources":["../../../src/proto/gen/antiklepto_pb.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,OAC4P,CAAC;AAE3R;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG,OAAO,CAAC,oDAAoD,CAAC,GAAG;IAC1G;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mCAAmC,EAAE,UAAU,CAAC,6BAA6B,CACzD,CAAC;AAElC;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAAC,iDAAiD,CAAC,GAAG;IACpG;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gCAAgC,EAAE,UAAU,CAAC,0BAA0B,CACnD,CAAC;AAElC;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAAC,iDAAiD,CAAC,GAAG;IACpG;;OAEG;IACH,SAAS,EAAE,UAAU,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gCAAgC,EAAE,UAAU,CAAC,0BAA0B,CACnD,CAAC"}