forkoff 1.0.8 → 1.0.10

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 (78) hide show
  1. package/E2EE-COMPLETE.md +290 -0
  2. package/README.md +11 -0
  3. package/dist/__tests__/crypto/e2e-integration.test.d.ts +17 -0
  4. package/dist/__tests__/crypto/e2e-integration.test.d.ts.map +1 -0
  5. package/dist/__tests__/crypto/e2e-integration.test.js +338 -0
  6. package/dist/__tests__/crypto/e2e-integration.test.js.map +1 -0
  7. package/dist/__tests__/crypto/e2eeManager.test.d.ts +2 -0
  8. package/dist/__tests__/crypto/e2eeManager.test.d.ts.map +1 -0
  9. package/dist/__tests__/crypto/e2eeManager.test.js +242 -0
  10. package/dist/__tests__/crypto/e2eeManager.test.js.map +1 -0
  11. package/dist/__tests__/crypto/encryption.test.d.ts +2 -0
  12. package/dist/__tests__/crypto/encryption.test.d.ts.map +1 -0
  13. package/dist/__tests__/crypto/encryption.test.js +116 -0
  14. package/dist/__tests__/crypto/encryption.test.js.map +1 -0
  15. package/dist/__tests__/crypto/keyExchange.test.d.ts +2 -0
  16. package/dist/__tests__/crypto/keyExchange.test.d.ts.map +1 -0
  17. package/dist/__tests__/crypto/keyExchange.test.js +84 -0
  18. package/dist/__tests__/crypto/keyExchange.test.js.map +1 -0
  19. package/dist/__tests__/crypto/keyGeneration.test.d.ts +2 -0
  20. package/dist/__tests__/crypto/keyGeneration.test.d.ts.map +1 -0
  21. package/dist/__tests__/crypto/keyGeneration.test.js +61 -0
  22. package/dist/__tests__/crypto/keyGeneration.test.js.map +1 -0
  23. package/dist/__tests__/crypto/keyStorage.test.d.ts +2 -0
  24. package/dist/__tests__/crypto/keyStorage.test.d.ts.map +1 -0
  25. package/dist/__tests__/crypto/keyStorage.test.js +133 -0
  26. package/dist/__tests__/crypto/keyStorage.test.js.map +1 -0
  27. package/dist/__tests__/crypto/websocketIntegration.test.d.ts +2 -0
  28. package/dist/__tests__/crypto/websocketIntegration.test.d.ts.map +1 -0
  29. package/dist/__tests__/crypto/websocketIntegration.test.js +259 -0
  30. package/dist/__tests__/crypto/websocketIntegration.test.js.map +1 -0
  31. package/dist/__tests__/tools/claude-process.test.d.ts +8 -0
  32. package/dist/__tests__/tools/claude-process.test.d.ts.map +1 -0
  33. package/dist/__tests__/tools/claude-process.test.js +224 -0
  34. package/dist/__tests__/tools/claude-process.test.js.map +1 -0
  35. package/dist/crypto/e2eeManager.d.ts +82 -0
  36. package/dist/crypto/e2eeManager.d.ts.map +1 -0
  37. package/dist/crypto/e2eeManager.js +270 -0
  38. package/dist/crypto/e2eeManager.js.map +1 -0
  39. package/dist/crypto/encryption.d.ts +19 -0
  40. package/dist/crypto/encryption.d.ts.map +1 -0
  41. package/dist/crypto/encryption.js +111 -0
  42. package/dist/crypto/encryption.js.map +1 -0
  43. package/dist/crypto/keyExchange.d.ts +24 -0
  44. package/dist/crypto/keyExchange.d.ts.map +1 -0
  45. package/dist/crypto/keyExchange.js +119 -0
  46. package/dist/crypto/keyExchange.js.map +1 -0
  47. package/dist/crypto/keyGeneration.d.ts +18 -0
  48. package/dist/crypto/keyGeneration.d.ts.map +1 -0
  49. package/dist/crypto/keyGeneration.js +99 -0
  50. package/dist/crypto/keyGeneration.js.map +1 -0
  51. package/dist/crypto/keyStorage.d.ts +39 -0
  52. package/dist/crypto/keyStorage.d.ts.map +1 -0
  53. package/dist/crypto/keyStorage.js +117 -0
  54. package/dist/crypto/keyStorage.js.map +1 -0
  55. package/dist/crypto/sessionPersistence.d.ts +33 -0
  56. package/dist/crypto/sessionPersistence.d.ts.map +1 -0
  57. package/dist/crypto/sessionPersistence.js +173 -0
  58. package/dist/crypto/sessionPersistence.js.map +1 -0
  59. package/dist/crypto/types.d.ts +35 -0
  60. package/dist/crypto/types.d.ts.map +1 -0
  61. package/dist/crypto/types.js +8 -0
  62. package/dist/crypto/types.js.map +1 -0
  63. package/dist/crypto/websocketE2EE.d.ts +47 -0
  64. package/dist/crypto/websocketE2EE.d.ts.map +1 -0
  65. package/dist/crypto/websocketE2EE.js +144 -0
  66. package/dist/crypto/websocketE2EE.js.map +1 -0
  67. package/dist/index.js +103 -2
  68. package/dist/index.js.map +1 -1
  69. package/dist/tools/claude-process.d.ts +19 -3
  70. package/dist/tools/claude-process.d.ts.map +1 -1
  71. package/dist/tools/claude-process.js +107 -164
  72. package/dist/tools/claude-process.js.map +1 -1
  73. package/dist/websocket.d.ts +33 -1
  74. package/dist/websocket.d.ts.map +1 -1
  75. package/dist/websocket.js +30 -1
  76. package/dist/websocket.js.map +1 -1
  77. package/jest.config.js +15 -0
  78. package/package.json +9 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e-integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/crypto/e2e-integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=e2eeManager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2eeManager.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/crypto/e2eeManager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const e2eeManager_1 = require("../../crypto/e2eeManager");
40
+ const keyStorage = __importStar(require("../../crypto/keyStorage"));
41
+ const keyGeneration = __importStar(require("../../crypto/keyGeneration"));
42
+ // Mock keytar to avoid actual OS keychain operations
43
+ jest.mock('keytar');
44
+ // Mock axios for API calls
45
+ jest.mock('axios');
46
+ const axios_1 = __importDefault(require("axios"));
47
+ const mockAxios = axios_1.default;
48
+ describe('CLI E2EE Manager', () => {
49
+ let manager;
50
+ const deviceId = 'device-123';
51
+ const apiUrl = 'https://api.forkoff.app/api';
52
+ // Mock axios instance
53
+ const mockAxiosInstance = {
54
+ put: jest.fn(),
55
+ get: jest.fn(),
56
+ };
57
+ beforeEach(async () => {
58
+ jest.clearAllMocks();
59
+ keyStorage.clearSessionKeys();
60
+ // Mock axios.create to return our mock instance
61
+ mockAxios.create = jest.fn().mockReturnValue(mockAxiosInstance);
62
+ // Mock successful API responses
63
+ mockAxiosInstance.put.mockResolvedValue({ data: { success: true, keyVersion: 1 } });
64
+ mockAxiosInstance.get.mockResolvedValue({
65
+ data: {
66
+ publicKey: 'AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=',
67
+ keyVersion: 1,
68
+ },
69
+ });
70
+ });
71
+ describe('Initialization', () => {
72
+ it('generates new keys if none stored', async () => {
73
+ jest.spyOn(keyStorage, 'getPrivateKey').mockResolvedValue(null);
74
+ const storeKeySpy = jest
75
+ .spyOn(keyStorage, 'storePrivateKey')
76
+ .mockResolvedValue();
77
+ manager = new e2eeManager_1.E2EEManager(deviceId, apiUrl, 'mock-token');
78
+ await manager.initialize();
79
+ expect(storeKeySpy).toHaveBeenCalled();
80
+ expect(manager.isInitialized()).toBe(true);
81
+ });
82
+ it('initializes with stored keys if they exist', async () => {
83
+ const existingPrivateKey = 'AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=';
84
+ jest
85
+ .spyOn(keyStorage, 'getPrivateKey')
86
+ .mockResolvedValue(existingPrivateKey);
87
+ const generateSpy = jest.spyOn(keyGeneration, 'generateKeyPair');
88
+ manager = new e2eeManager_1.E2EEManager(deviceId, apiUrl, 'mock-token');
89
+ await manager.initialize();
90
+ // Should NOT generate new keys
91
+ expect(generateSpy).not.toHaveBeenCalled();
92
+ expect(manager.isInitialized()).toBe(true);
93
+ });
94
+ it('uploads public key to backend on initialization', async () => {
95
+ jest.spyOn(keyStorage, 'getPrivateKey').mockResolvedValue(null);
96
+ jest.spyOn(keyStorage, 'storePrivateKey').mockResolvedValue();
97
+ manager = new e2eeManager_1.E2EEManager(deviceId, apiUrl, 'mock-token');
98
+ await manager.initialize();
99
+ expect(mockAxiosInstance.put).toHaveBeenCalledWith(`${apiUrl}/devices/${deviceId}/public-key`, expect.objectContaining({ publicKey: expect.any(String) }));
100
+ });
101
+ });
102
+ describe('Key Exchange', () => {
103
+ beforeEach(async () => {
104
+ jest.spyOn(keyStorage, 'getPrivateKey').mockResolvedValue(null);
105
+ jest.spyOn(keyStorage, 'storePrivateKey').mockResolvedValue();
106
+ manager = new e2eeManager_1.E2EEManager(deviceId, apiUrl, 'mock-token');
107
+ await manager.initialize();
108
+ });
109
+ it('initiates key exchange with target device', async () => {
110
+ const targetDeviceId = 'device-456';
111
+ const initPayload = await manager.initiateKeyExchange(targetDeviceId);
112
+ expect(initPayload).toHaveProperty('senderDeviceId', deviceId);
113
+ expect(initPayload).toHaveProperty('ephemeralPublicKey');
114
+ expect(typeof initPayload.ephemeralPublicKey).toBe('string');
115
+ });
116
+ it('handles incoming key exchange init', async () => {
117
+ const senderDeviceId = 'device-456';
118
+ const ephemeralPublicKey = 'AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI=';
119
+ const ackPayload = await manager.handleKeyExchangeInit(senderDeviceId, ephemeralPublicKey);
120
+ expect(ackPayload).toHaveProperty('recipientDeviceId', deviceId);
121
+ expect(ackPayload).toHaveProperty('ephemeralPublicKey');
122
+ expect(manager.hasSessionKey(senderDeviceId)).toBe(true);
123
+ });
124
+ it('handles incoming key exchange ack', async () => {
125
+ const targetDeviceId = 'device-456';
126
+ // First initiate
127
+ await manager.initiateKeyExchange(targetDeviceId);
128
+ // Then handle ack
129
+ const ephemeralPublicKey = 'AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI=';
130
+ await manager.handleKeyExchangeAck(targetDeviceId, ephemeralPublicKey);
131
+ expect(manager.hasSessionKey(targetDeviceId)).toBe(true);
132
+ });
133
+ });
134
+ describe('Message Encryption', () => {
135
+ beforeEach(async () => {
136
+ jest.spyOn(keyStorage, 'getPrivateKey').mockResolvedValue(null);
137
+ jest.spyOn(keyStorage, 'storePrivateKey').mockResolvedValue();
138
+ manager = new e2eeManager_1.E2EEManager(deviceId, apiUrl, 'mock-token');
139
+ await manager.initialize();
140
+ // Set up session
141
+ const targetDeviceId = 'device-456';
142
+ await manager.initiateKeyExchange(targetDeviceId);
143
+ const ephemeralPublicKey = 'AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI=';
144
+ await manager.handleKeyExchangeAck(targetDeviceId, ephemeralPublicKey);
145
+ });
146
+ it('encrypts outgoing messages', () => {
147
+ const targetDeviceId = 'device-456';
148
+ const plaintext = 'Hello, World!';
149
+ const sessionId = 'session-abc';
150
+ const encryptedMessage = manager.encryptMessage(plaintext, targetDeviceId, sessionId);
151
+ expect(encryptedMessage).toHaveProperty('senderDeviceId', deviceId);
152
+ expect(encryptedMessage).toHaveProperty('recipientDeviceId', targetDeviceId);
153
+ expect(encryptedMessage).toHaveProperty('sessionId', sessionId);
154
+ expect(encryptedMessage).toHaveProperty('payload');
155
+ expect(encryptedMessage.payload).toHaveProperty('ciphertext');
156
+ expect(encryptedMessage.payload).toHaveProperty('nonce');
157
+ expect(encryptedMessage.payload).toHaveProperty('authTag');
158
+ expect(encryptedMessage).toHaveProperty('messageCounter');
159
+ expect(encryptedMessage).toHaveProperty('timestamp');
160
+ });
161
+ it('increments message counter on send', () => {
162
+ const targetDeviceId = 'device-456';
163
+ const sessionId = 'session-abc';
164
+ const msg1 = manager.encryptMessage('Message 1', targetDeviceId, sessionId);
165
+ const msg2 = manager.encryptMessage('Message 2', targetDeviceId, sessionId);
166
+ expect(msg2.messageCounter).toBe(msg1.messageCounter + 1);
167
+ });
168
+ });
169
+ describe('Message Decryption', () => {
170
+ beforeEach(async () => {
171
+ jest.spyOn(keyStorage, 'getPrivateKey').mockResolvedValue(null);
172
+ jest.spyOn(keyStorage, 'storePrivateKey').mockResolvedValue();
173
+ manager = new e2eeManager_1.E2EEManager(deviceId, apiUrl, 'mock-token');
174
+ await manager.initialize();
175
+ // Set up session (as recipient)
176
+ const senderDeviceId = 'device-456';
177
+ const ephemeralPublicKey = 'AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI=';
178
+ await manager.handleKeyExchangeInit(senderDeviceId, ephemeralPublicKey);
179
+ });
180
+ it('decrypts incoming messages', () => {
181
+ const senderDeviceId = 'device-456';
182
+ const plaintext = 'Secret message';
183
+ const sessionId = 'session-abc';
184
+ // Get the session key
185
+ const sessionKeys = keyStorage.getSessionKey(senderDeviceId);
186
+ if (!sessionKeys) {
187
+ throw new Error('Session key not found');
188
+ }
189
+ // Manually create an encrypted message (simulating what the sender would send)
190
+ const { encrypt } = require('../../crypto/encryption');
191
+ const encryptedPayload = encrypt(plaintext, sessionKeys.encryptionKey);
192
+ const encryptedMessage = {
193
+ senderDeviceId,
194
+ recipientDeviceId: deviceId,
195
+ sessionId,
196
+ payload: encryptedPayload,
197
+ messageCounter: 1, // First message from sender
198
+ timestamp: new Date().toISOString(),
199
+ };
200
+ // Decrypt (simulating receiving from sender)
201
+ const decrypted = manager.decryptMessage(encryptedMessage, senderDeviceId);
202
+ expect(decrypted).toBe(plaintext);
203
+ });
204
+ it('rejects messages with invalid counter (replay protection)', () => {
205
+ const senderDeviceId = 'device-456';
206
+ const sessionId = 'session-abc';
207
+ const msg1 = manager.encryptMessage('Message 1', senderDeviceId, sessionId);
208
+ const msg2 = manager.encryptMessage('Message 2', senderDeviceId, sessionId);
209
+ // Decrypt msg2 first
210
+ manager.decryptMessage(msg2, senderDeviceId);
211
+ // Try to decrypt msg1 (older counter) - should fail
212
+ expect(() => manager.decryptMessage(msg1, senderDeviceId)).toThrow(/counter/i);
213
+ });
214
+ });
215
+ describe('Session Management', () => {
216
+ beforeEach(async () => {
217
+ jest.spyOn(keyStorage, 'getPrivateKey').mockResolvedValue(null);
218
+ jest.spyOn(keyStorage, 'storePrivateKey').mockResolvedValue();
219
+ manager = new e2eeManager_1.E2EEManager(deviceId, apiUrl, 'mock-token');
220
+ await manager.initialize();
221
+ });
222
+ it('tracks active sessions by device ID', async () => {
223
+ const device1 = 'device-456';
224
+ const device2 = 'device-789';
225
+ await manager.initiateKeyExchange(device1);
226
+ await manager.initiateKeyExchange(device2);
227
+ const ephemeralKey1 = 'AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI=';
228
+ const ephemeralKey2 = 'AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM=';
229
+ await manager.handleKeyExchangeAck(device1, ephemeralKey1);
230
+ await manager.handleKeyExchangeAck(device2, ephemeralKey2);
231
+ expect(manager.hasSessionKey(device1)).toBe(true);
232
+ expect(manager.hasSessionKey(device2)).toBe(true);
233
+ });
234
+ it('cleans up session keys on disconnect', () => {
235
+ const targetDeviceId = 'device-456';
236
+ keyStorage.storeSessionKey(targetDeviceId, new Uint8Array(32), 'session-abc');
237
+ manager.cleanup();
238
+ expect(keyStorage.getSessionKey(targetDeviceId)).toBeNull();
239
+ });
240
+ });
241
+ });
242
+ //# sourceMappingURL=e2eeManager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2eeManager.test.js","sourceRoot":"","sources":["../../../src/__tests__/crypto/e2eeManager.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=encryption.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/crypto/encryption.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const encryption_1 = require("../../crypto/encryption");
4
+ describe('CLI Encryption/Decryption', () => {
5
+ const testKey = new Uint8Array(32).fill(1); // 32-byte AES-256 key
6
+ describe('Basic Encryption', () => {
7
+ it('encrypts plaintext to EncryptedPayload', () => {
8
+ const plaintext = 'Hello, World!';
9
+ const encrypted = (0, encryption_1.encrypt)(plaintext, testKey);
10
+ expect(encrypted).toHaveProperty('ciphertext');
11
+ expect(encrypted).toHaveProperty('nonce');
12
+ expect(encrypted).toHaveProperty('authTag');
13
+ expect(typeof encrypted.ciphertext).toBe('string');
14
+ expect(typeof encrypted.nonce).toBe('string');
15
+ expect(typeof encrypted.authTag).toBe('string');
16
+ });
17
+ it('nonce is 12 bytes', () => {
18
+ const plaintext = 'Test message';
19
+ const encrypted = (0, encryption_1.encrypt)(plaintext, testKey);
20
+ const nonceBytes = Buffer.from(encrypted.nonce, 'base64');
21
+ expect(nonceBytes.length).toBe(12);
22
+ });
23
+ it('authTag is 16 bytes', () => {
24
+ const plaintext = 'Test message';
25
+ const encrypted = (0, encryption_1.encrypt)(plaintext, testKey);
26
+ const authTagBytes = Buffer.from(encrypted.authTag, 'base64');
27
+ expect(authTagBytes.length).toBe(16);
28
+ });
29
+ it('encrypted ciphertext is different from plaintext', () => {
30
+ const plaintext = 'Secret message';
31
+ const encrypted = (0, encryption_1.encrypt)(plaintext, testKey);
32
+ const ciphertext = Buffer.from(encrypted.ciphertext, 'base64').toString('utf8');
33
+ expect(ciphertext).not.toBe(plaintext);
34
+ });
35
+ it('same plaintext produces different ciphertext (random nonce)', () => {
36
+ const plaintext = 'Same message';
37
+ const encrypted1 = (0, encryption_1.encrypt)(plaintext, testKey);
38
+ const encrypted2 = (0, encryption_1.encrypt)(plaintext, testKey);
39
+ // Nonces should be different (random)
40
+ expect(encrypted1.nonce).not.toBe(encrypted2.nonce);
41
+ // Ciphertexts should be different (due to different nonces)
42
+ expect(encrypted1.ciphertext).not.toBe(encrypted2.ciphertext);
43
+ });
44
+ });
45
+ describe('Decryption', () => {
46
+ it('decrypts EncryptedPayload back to original plaintext', () => {
47
+ const plaintext = 'Hello, World!';
48
+ const encrypted = (0, encryption_1.encrypt)(plaintext, testKey);
49
+ const decrypted = (0, encryption_1.decrypt)(encrypted, testKey);
50
+ expect(decrypted).toBe(plaintext);
51
+ });
52
+ it('encrypt-decrypt round trip preserves message content', () => {
53
+ const messages = [
54
+ 'Simple message',
55
+ 'Message with numbers 12345',
56
+ 'Special chars: !@#$%^&*()',
57
+ '',
58
+ ];
59
+ messages.forEach((message) => {
60
+ const encrypted = (0, encryption_1.encrypt)(message, testKey);
61
+ const decrypted = (0, encryption_1.decrypt)(encrypted, testKey);
62
+ expect(decrypted).toBe(message);
63
+ });
64
+ });
65
+ it('encrypt-decrypt round trip preserves unicode/emoji', () => {
66
+ const plaintext = 'Hello 世界 🌍🚀✨';
67
+ const encrypted = (0, encryption_1.encrypt)(plaintext, testKey);
68
+ const decrypted = (0, encryption_1.decrypt)(encrypted, testKey);
69
+ expect(decrypted).toBe(plaintext);
70
+ });
71
+ it('encrypt-decrypt round trip preserves large messages (10KB)', () => {
72
+ const plaintext = 'A'.repeat(10 * 1024); // 10KB of 'A'
73
+ const encrypted = (0, encryption_1.encrypt)(plaintext, testKey);
74
+ const decrypted = (0, encryption_1.decrypt)(encrypted, testKey);
75
+ expect(decrypted).toBe(plaintext);
76
+ expect(decrypted.length).toBe(10 * 1024);
77
+ });
78
+ });
79
+ describe('Security Properties', () => {
80
+ it('decryption with wrong key fails', () => {
81
+ const plaintext = 'Secret message';
82
+ const correctKey = new Uint8Array(32).fill(1);
83
+ const wrongKey = new Uint8Array(32).fill(2);
84
+ const encrypted = (0, encryption_1.encrypt)(plaintext, correctKey);
85
+ expect(() => (0, encryption_1.decrypt)(encrypted, wrongKey)).toThrow();
86
+ });
87
+ it('decryption with tampered ciphertext fails', () => {
88
+ const plaintext = 'Secret message';
89
+ const encrypted = (0, encryption_1.encrypt)(plaintext, testKey);
90
+ // Tamper with ciphertext
91
+ const tamperedCiphertext = Buffer.from(encrypted.ciphertext, 'base64');
92
+ tamperedCiphertext[0] ^= 0xFF; // Flip bits
93
+ encrypted.ciphertext = tamperedCiphertext.toString('base64');
94
+ expect(() => (0, encryption_1.decrypt)(encrypted, testKey)).toThrow();
95
+ });
96
+ it('decryption with tampered nonce fails', () => {
97
+ const plaintext = 'Secret message';
98
+ const encrypted = (0, encryption_1.encrypt)(plaintext, testKey);
99
+ // Tamper with nonce
100
+ const tamperedNonce = Buffer.from(encrypted.nonce, 'base64');
101
+ tamperedNonce[0] ^= 0xFF;
102
+ encrypted.nonce = tamperedNonce.toString('base64');
103
+ expect(() => (0, encryption_1.decrypt)(encrypted, testKey)).toThrow();
104
+ });
105
+ it('decryption with tampered authTag fails', () => {
106
+ const plaintext = 'Secret message';
107
+ const encrypted = (0, encryption_1.encrypt)(plaintext, testKey);
108
+ // Tamper with authTag
109
+ const tamperedAuthTag = Buffer.from(encrypted.authTag, 'base64');
110
+ tamperedAuthTag[0] ^= 0xFF;
111
+ encrypted.authTag = tamperedAuthTag.toString('base64');
112
+ expect(() => (0, encryption_1.decrypt)(encrypted, testKey)).toThrow();
113
+ });
114
+ });
115
+ });
116
+ //# sourceMappingURL=encryption.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.test.js","sourceRoot":"","sources":["../../../src/__tests__/crypto/encryption.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keyExchange.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyExchange.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/crypto/keyExchange.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const keyExchange_1 = require("../../crypto/keyExchange");
4
+ const keyGeneration_1 = require("../../crypto/keyGeneration");
5
+ describe('CLI Key Exchange', () => {
6
+ describe('computeSharedSecret', () => {
7
+ it('computes shared secret from X25519 key exchange', () => {
8
+ const aliceKeyPair = (0, keyGeneration_1.generateKeyPair)();
9
+ const bobKeyPair = (0, keyGeneration_1.generateKeyPair)();
10
+ const sharedSecret = (0, keyExchange_1.computeSharedSecret)(aliceKeyPair.privateKey, bobKeyPair.publicKey);
11
+ expect(sharedSecret).toBeInstanceOf(Uint8Array);
12
+ expect(sharedSecret.length).toBe(32); // X25519 produces 32-byte shared secret
13
+ });
14
+ it('shared secret is same on both sides (Alice and Bob)', () => {
15
+ const aliceKeyPair = (0, keyGeneration_1.generateKeyPair)();
16
+ const bobKeyPair = (0, keyGeneration_1.generateKeyPair)();
17
+ // Alice computes shared secret using her private key and Bob's public key
18
+ const aliceSharedSecret = (0, keyExchange_1.computeSharedSecret)(aliceKeyPair.privateKey, bobKeyPair.publicKey);
19
+ // Bob computes shared secret using his private key and Alice's public key
20
+ const bobSharedSecret = (0, keyExchange_1.computeSharedSecret)(bobKeyPair.privateKey, aliceKeyPair.publicKey);
21
+ // Both should arrive at the same shared secret
22
+ expect(aliceSharedSecret).toEqual(bobSharedSecret);
23
+ });
24
+ it('different key pairs produce different shared secrets', () => {
25
+ const alice1KeyPair = (0, keyGeneration_1.generateKeyPair)();
26
+ const alice2KeyPair = (0, keyGeneration_1.generateKeyPair)();
27
+ const bobKeyPair = (0, keyGeneration_1.generateKeyPair)();
28
+ const sharedSecret1 = (0, keyExchange_1.computeSharedSecret)(alice1KeyPair.privateKey, bobKeyPair.publicKey);
29
+ const sharedSecret2 = (0, keyExchange_1.computeSharedSecret)(alice2KeyPair.privateKey, bobKeyPair.publicKey);
30
+ expect(sharedSecret1).not.toEqual(sharedSecret2);
31
+ });
32
+ });
33
+ describe('deriveSessionKey', () => {
34
+ it('derives session encryption key from shared secret', () => {
35
+ const sharedSecret = new Uint8Array(32).fill(1);
36
+ const sessionKey = (0, keyExchange_1.deriveSessionKey)(sharedSecret);
37
+ expect(sessionKey).toBeInstanceOf(Uint8Array);
38
+ expect(sessionKey.length).toBe(32); // AES-256 requires 32 bytes
39
+ });
40
+ it('derived key is 32 bytes (AES-256)', () => {
41
+ const aliceKeyPair = (0, keyGeneration_1.generateKeyPair)();
42
+ const bobKeyPair = (0, keyGeneration_1.generateKeyPair)();
43
+ const sharedSecret = (0, keyExchange_1.computeSharedSecret)(aliceKeyPair.privateKey, bobKeyPair.publicKey);
44
+ const sessionKey = (0, keyExchange_1.deriveSessionKey)(sharedSecret);
45
+ expect(sessionKey.length).toBe(32);
46
+ });
47
+ it('same shared secret produces same session key (deterministic)', () => {
48
+ const sharedSecret = new Uint8Array(32).fill(1);
49
+ const sessionKey1 = (0, keyExchange_1.deriveSessionKey)(sharedSecret);
50
+ const sessionKey2 = (0, keyExchange_1.deriveSessionKey)(sharedSecret);
51
+ expect(sessionKey1).toEqual(sessionKey2);
52
+ });
53
+ it('different shared secrets produce different session keys', () => {
54
+ const sharedSecret1 = new Uint8Array(32).fill(1);
55
+ const sharedSecret2 = new Uint8Array(32).fill(2);
56
+ const sessionKey1 = (0, keyExchange_1.deriveSessionKey)(sharedSecret1);
57
+ const sessionKey2 = (0, keyExchange_1.deriveSessionKey)(sharedSecret2);
58
+ expect(sessionKey1).not.toEqual(sessionKey2);
59
+ });
60
+ });
61
+ describe('performKeyExchange (end-to-end)', () => {
62
+ it('completes full key exchange flow', () => {
63
+ const aliceKeyPair = (0, keyGeneration_1.generateKeyPair)();
64
+ const bobKeyPair = (0, keyGeneration_1.generateKeyPair)();
65
+ // Alice initiates key exchange
66
+ const aliceSessionKey = (0, keyExchange_1.performKeyExchange)(aliceKeyPair.privateKey, bobKeyPair.publicKey);
67
+ // Bob responds to key exchange
68
+ const bobSessionKey = (0, keyExchange_1.performKeyExchange)(bobKeyPair.privateKey, aliceKeyPair.publicKey);
69
+ // Both should derive the same session key
70
+ expect(aliceSessionKey).toEqual(bobSessionKey);
71
+ expect(aliceSessionKey.length).toBe(32);
72
+ });
73
+ it('session keys are suitable for AES-256-GCM encryption', () => {
74
+ const aliceKeyPair = (0, keyGeneration_1.generateKeyPair)();
75
+ const bobKeyPair = (0, keyGeneration_1.generateKeyPair)();
76
+ const sessionKey = (0, keyExchange_1.performKeyExchange)(aliceKeyPair.privateKey, bobKeyPair.publicKey);
77
+ // Verify it's a valid Uint8Array with correct length
78
+ expect(sessionKey).toBeInstanceOf(Uint8Array);
79
+ expect(sessionKey.length).toBe(32);
80
+ expect(sessionKey.byteLength).toBe(32);
81
+ });
82
+ });
83
+ });
84
+ //# sourceMappingURL=keyExchange.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyExchange.test.js","sourceRoot":"","sources":["../../../src/__tests__/crypto/keyExchange.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keyGeneration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyGeneration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/crypto/keyGeneration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const keyGeneration_1 = require("../../crypto/keyGeneration");
4
+ describe('CLI Key Generation', () => {
5
+ describe('generateKeyPair', () => {
6
+ it('generates X25519 key pair with 32-byte public key', () => {
7
+ const keyPair = (0, keyGeneration_1.generateKeyPair)();
8
+ const publicKeyBytes = Buffer.from(keyPair.publicKey, 'base64');
9
+ expect(publicKeyBytes.length).toBe(32);
10
+ });
11
+ it('generates X25519 key pair with 32-byte private key', () => {
12
+ const keyPair = (0, keyGeneration_1.generateKeyPair)();
13
+ const privateKeyBytes = Buffer.from(keyPair.privateKey, 'base64');
14
+ expect(privateKeyBytes.length).toBe(32);
15
+ });
16
+ it('generated keys are Base64-encoded strings', () => {
17
+ const keyPair = (0, keyGeneration_1.generateKeyPair)();
18
+ // Should be valid Base64 strings
19
+ expect(typeof keyPair.publicKey).toBe('string');
20
+ expect(typeof keyPair.privateKey).toBe('string');
21
+ // Should decode without error
22
+ expect(() => Buffer.from(keyPair.publicKey, 'base64')).not.toThrow();
23
+ expect(() => Buffer.from(keyPair.privateKey, 'base64')).not.toThrow();
24
+ // Re-encoding should match original
25
+ expect(Buffer.from(keyPair.publicKey, 'base64').toString('base64')).toBe(keyPair.publicKey);
26
+ expect(Buffer.from(keyPair.privateKey, 'base64').toString('base64')).toBe(keyPair.privateKey);
27
+ });
28
+ it('public and private keys are different', () => {
29
+ const keyPair = (0, keyGeneration_1.generateKeyPair)();
30
+ expect(keyPair.publicKey).not.toBe(keyPair.privateKey);
31
+ });
32
+ it('generates unique key pairs on each call', () => {
33
+ const keyPair1 = (0, keyGeneration_1.generateKeyPair)();
34
+ const keyPair2 = (0, keyGeneration_1.generateKeyPair)();
35
+ expect(keyPair1.publicKey).not.toBe(keyPair2.publicKey);
36
+ expect(keyPair1.privateKey).not.toBe(keyPair2.privateKey);
37
+ });
38
+ });
39
+ describe('generateKeyPairFromSeed', () => {
40
+ it('key pair generation is deterministic when given seed', () => {
41
+ const seed = Buffer.alloc(32, 1); // All bytes set to 1
42
+ const keyPair1 = (0, keyGeneration_1.generateKeyPairFromSeed)(seed);
43
+ const keyPair2 = (0, keyGeneration_1.generateKeyPairFromSeed)(seed);
44
+ expect(keyPair1.publicKey).toBe(keyPair2.publicKey);
45
+ expect(keyPair1.privateKey).toBe(keyPair2.privateKey);
46
+ });
47
+ it('different seeds produce different keys', () => {
48
+ const seed1 = Buffer.alloc(32, 1);
49
+ const seed2 = Buffer.alloc(32, 2);
50
+ const keyPair1 = (0, keyGeneration_1.generateKeyPairFromSeed)(seed1);
51
+ const keyPair2 = (0, keyGeneration_1.generateKeyPairFromSeed)(seed2);
52
+ expect(keyPair1.publicKey).not.toBe(keyPair2.publicKey);
53
+ expect(keyPair1.privateKey).not.toBe(keyPair2.privateKey);
54
+ });
55
+ it('seed must be 32 bytes', () => {
56
+ const shortSeed = Buffer.alloc(16);
57
+ expect(() => (0, keyGeneration_1.generateKeyPairFromSeed)(shortSeed)).toThrow();
58
+ });
59
+ });
60
+ });
61
+ //# sourceMappingURL=keyGeneration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyGeneration.test.js","sourceRoot":"","sources":["../../../src/__tests__/crypto/keyGeneration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keyStorage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyStorage.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/crypto/keyStorage.test.ts"],"names":[],"mappings":""}