@de-otio/chaoskb-client 0.3.6 → 0.3.7

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 (125) hide show
  1. package/dist/cli/bootstrap.d.ts +11 -3
  2. package/dist/cli/bootstrap.d.ts.map +1 -1
  3. package/dist/cli/bootstrap.js +181 -126
  4. package/dist/cli/bootstrap.js.map +1 -1
  5. package/dist/cli/commands/config.d.ts +7 -4
  6. package/dist/cli/commands/config.d.ts.map +1 -1
  7. package/dist/cli/commands/config.js +161 -134
  8. package/dist/cli/commands/config.js.map +1 -1
  9. package/dist/cli/commands/devices.d.ts.map +1 -1
  10. package/dist/cli/commands/devices.js +58 -33
  11. package/dist/cli/commands/devices.js.map +1 -1
  12. package/dist/cli/commands/export.d.ts.map +1 -1
  13. package/dist/cli/commands/export.js +6 -9
  14. package/dist/cli/commands/export.js.map +1 -1
  15. package/dist/cli/commands/import.js +1 -1
  16. package/dist/cli/commands/import.js.map +1 -1
  17. package/dist/cli/commands/projects.d.ts.map +1 -1
  18. package/dist/cli/commands/projects.js +33 -10
  19. package/dist/cli/commands/projects.js.map +1 -1
  20. package/dist/cli/commands/rotate-key.d.ts +3 -3
  21. package/dist/cli/commands/rotate-key.d.ts.map +1 -1
  22. package/dist/cli/commands/rotate-key.js +88 -35
  23. package/dist/cli/commands/rotate-key.js.map +1 -1
  24. package/dist/cli/commands/setup-sync.d.ts.map +1 -1
  25. package/dist/cli/commands/setup-sync.js +22 -4
  26. package/dist/cli/commands/setup-sync.js.map +1 -1
  27. package/dist/cli/mcp-server.d.ts.map +1 -1
  28. package/dist/cli/mcp-server.js +90 -42
  29. package/dist/cli/mcp-server.js.map +1 -1
  30. package/dist/crypto/aad.d.ts +2 -5
  31. package/dist/crypto/aad.d.ts.map +1 -1
  32. package/dist/crypto/aad.js +2 -8
  33. package/dist/crypto/aad.js.map +1 -1
  34. package/dist/crypto/aead.d.ts +8 -16
  35. package/dist/crypto/aead.d.ts.map +1 -1
  36. package/dist/crypto/aead.js +10 -36
  37. package/dist/crypto/aead.js.map +1 -1
  38. package/dist/crypto/blob-id.d.ts +2 -3
  39. package/dist/crypto/blob-id.d.ts.map +1 -1
  40. package/dist/crypto/blob-id.js +2 -30
  41. package/dist/crypto/blob-id.js.map +1 -1
  42. package/dist/crypto/canonical-json.d.ts +5 -3
  43. package/dist/crypto/canonical-json.d.ts.map +1 -1
  44. package/dist/crypto/canonical-json.js +5 -85
  45. package/dist/crypto/canonical-json.js.map +1 -1
  46. package/dist/crypto/commitment.d.ts +3 -9
  47. package/dist/crypto/commitment.d.ts.map +1 -1
  48. package/dist/crypto/commitment.js +3 -27
  49. package/dist/crypto/commitment.js.map +1 -1
  50. package/dist/crypto/encryption-service.d.ts +3 -0
  51. package/dist/crypto/encryption-service.d.ts.map +1 -1
  52. package/dist/crypto/encryption-service.js +10 -6
  53. package/dist/crypto/encryption-service.js.map +1 -1
  54. package/dist/crypto/envelope-cbor.d.ts +4 -34
  55. package/dist/crypto/envelope-cbor.d.ts.map +1 -1
  56. package/dist/crypto/envelope-cbor.js +4 -121
  57. package/dist/crypto/envelope-cbor.js.map +1 -1
  58. package/dist/crypto/envelope.d.ts +1 -31
  59. package/dist/crypto/envelope.d.ts.map +1 -1
  60. package/dist/crypto/envelope.js +31 -137
  61. package/dist/crypto/envelope.js.map +1 -1
  62. package/dist/crypto/hkdf.d.ts +7 -11
  63. package/dist/crypto/hkdf.d.ts.map +1 -1
  64. package/dist/crypto/hkdf.js +9 -18
  65. package/dist/crypto/hkdf.js.map +1 -1
  66. package/dist/crypto/index.d.ts +9 -4
  67. package/dist/crypto/index.d.ts.map +1 -1
  68. package/dist/crypto/index.js +9 -4
  69. package/dist/crypto/index.js.map +1 -1
  70. package/dist/crypto/ssh-keys.d.ts +17 -10
  71. package/dist/crypto/ssh-keys.d.ts.map +1 -1
  72. package/dist/crypto/ssh-keys.js +28 -108
  73. package/dist/crypto/ssh-keys.js.map +1 -1
  74. package/dist/crypto/types.d.ts +18 -88
  75. package/dist/crypto/types.d.ts.map +1 -1
  76. package/dist/crypto/types.js +3 -0
  77. package/dist/crypto/types.js.map +1 -1
  78. package/dist/pipeline/content-pipeline.d.ts.map +1 -1
  79. package/dist/pipeline/content-pipeline.js +19 -3
  80. package/dist/pipeline/content-pipeline.js.map +1 -1
  81. package/dist/pipeline/extract.d.ts +8 -0
  82. package/dist/pipeline/extract.d.ts.map +1 -1
  83. package/dist/pipeline/extract.js +15 -4
  84. package/dist/pipeline/extract.js.map +1 -1
  85. package/dist/pipeline/fetch-browser.d.ts +29 -0
  86. package/dist/pipeline/fetch-browser.d.ts.map +1 -0
  87. package/dist/pipeline/fetch-browser.js +98 -0
  88. package/dist/pipeline/fetch-browser.js.map +1 -0
  89. package/package.json +4 -1
  90. package/dist/crypto/argon2.d.ts +0 -11
  91. package/dist/crypto/argon2.d.ts.map +0 -1
  92. package/dist/crypto/argon2.js +0 -33
  93. package/dist/crypto/argon2.js.map +0 -1
  94. package/dist/crypto/invite.d.ts +0 -31
  95. package/dist/crypto/invite.d.ts.map +0 -1
  96. package/dist/crypto/invite.js +0 -139
  97. package/dist/crypto/invite.js.map +0 -1
  98. package/dist/crypto/keyring.d.ts +0 -37
  99. package/dist/crypto/keyring.d.ts.map +0 -1
  100. package/dist/crypto/keyring.js +0 -219
  101. package/dist/crypto/keyring.js.map +0 -1
  102. package/dist/crypto/known-keys.d.ts +0 -34
  103. package/dist/crypto/known-keys.d.ts.map +0 -1
  104. package/dist/crypto/known-keys.js +0 -114
  105. package/dist/crypto/known-keys.js.map +0 -1
  106. package/dist/crypto/project-keys.d.ts +0 -26
  107. package/dist/crypto/project-keys.d.ts.map +0 -1
  108. package/dist/crypto/project-keys.js +0 -69
  109. package/dist/crypto/project-keys.js.map +0 -1
  110. package/dist/crypto/secure-buffer.d.ts +0 -31
  111. package/dist/crypto/secure-buffer.d.ts.map +0 -1
  112. package/dist/crypto/secure-buffer.js +0 -61
  113. package/dist/crypto/secure-buffer.js.map +0 -1
  114. package/dist/crypto/tiers/enhanced.d.ts +0 -25
  115. package/dist/crypto/tiers/enhanced.d.ts.map +0 -1
  116. package/dist/crypto/tiers/enhanced.js +0 -56
  117. package/dist/crypto/tiers/enhanced.js.map +0 -1
  118. package/dist/crypto/tiers/maximum.d.ts +0 -19
  119. package/dist/crypto/tiers/maximum.d.ts.map +0 -1
  120. package/dist/crypto/tiers/maximum.js +0 -25
  121. package/dist/crypto/tiers/maximum.js.map +0 -1
  122. package/dist/crypto/tiers/standard.d.ts +0 -27
  123. package/dist/crypto/tiers/standard.d.ts.map +0 -1
  124. package/dist/crypto/tiers/standard.js +0 -155
  125. package/dist/crypto/tiers/standard.js.map +0 -1
@@ -1,5 +1,11 @@
1
1
  export declare const CHAOSKB_DIR: string;
2
2
  export declare const FILE_KEY_PATH: string;
3
+ /** OS keychain service name for chaoskb-managed slots. */
4
+ export declare const KEYRING_SERVICE = "chaoskb";
5
+ /** Fallback Ed25519 identity slot names. These live alongside the
6
+ * personal master in the same service namespace. */
7
+ export declare const IDENTITY_SECRET_SLOT = "identity-secret";
8
+ export declare const IDENTITY_PUBLIC_SLOT = "identity-public";
3
9
  export interface BootstrapOptions {
4
10
  /** Override the base directory (default: ~/.chaoskb). For testing. */
5
11
  baseDir?: string;
@@ -7,9 +13,11 @@ export interface BootstrapOptions {
7
13
  /**
8
14
  * Auto-bootstrap ChaosKB on first launch.
9
15
  *
10
- * Creates ~/.chaoskb/, generates a master key, stores it in the OS keyring,
11
- * initializes the database, and writes config.json all with standard
12
- * security tier and no interactive prompts.
16
+ * Creates ~/.chaoskb/, generates a master key, wraps it with the user's
17
+ * SSH public key (via keyring's `StandardTier`), persists the wrapped
18
+ * blob in the OS keychain, initializes the database, and writes
19
+ * config.json — all with standard security tier and no interactive
20
+ * prompts.
13
21
  *
14
22
  * Idempotent: no-ops if config.json already exists.
15
23
  * Concurrency-safe: uses file-based locking to prevent races.
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../cli/bootstrap.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,QAAsC,CAAC;AAC/D,eAAO,MAAM,aAAa,QAAuC,CAAC;AAElE,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGzE;AA4XD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB7E"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../cli/bootstrap.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,WAAW,QAAsC,CAAC;AAC/D,eAAO,MAAM,aAAa,QAAuC,CAAC;AAElE,0DAA0D;AAC1D,eAAO,MAAM,eAAe,YAAY,CAAC;AACzC;qDACqD;AACrD,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AACtD,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsCD;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6IzE;AA8XD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB7E"}
@@ -1,18 +1,57 @@
1
1
  import * as fs from 'node:fs';
2
2
  import * as path from 'node:path';
3
3
  import * as os from 'node:os';
4
+ import { randomBytes } from 'node:crypto';
5
+ import { KeyRing, StandardTier, OsKeychainStorage, FileSystemStorage, OsKeychainUnavailable, parseSshPublicKey, } from '@de-otio/keyring';
6
+ import { SecureBuffer, asMasterKey } from '@de-otio/crypto-envelope';
4
7
  import { acquireBootstrapLock } from './bootstrap-lock.js';
5
8
  export const CHAOSKB_DIR = path.join(os.homedir(), '.chaoskb');
6
9
  export const FILE_KEY_PATH = path.join(CHAOSKB_DIR, 'master.key');
10
+ /** OS keychain service name for chaoskb-managed slots. */
11
+ export const KEYRING_SERVICE = 'chaoskb';
12
+ /** Fallback Ed25519 identity slot names. These live alongside the
13
+ * personal master in the same service namespace. */
14
+ export const IDENTITY_SECRET_SLOT = 'identity-secret';
15
+ export const IDENTITY_PUBLIC_SLOT = 'identity-public';
7
16
  function resolveDir(baseDir) {
8
17
  return baseDir ?? CHAOSKB_DIR;
9
18
  }
19
+ /**
20
+ * Build the chaoskb keyring storage. Prefers the OS keychain; falls back
21
+ * to a filesystem store when `CHAOSKB_KEY_STORAGE=file` is set or the OS
22
+ * keychain is unavailable (headless CI, unsupported platform).
23
+ *
24
+ * The filesystem fallback mirrors the previous `master.key` location but
25
+ * uses keyring's `FileSystemStorage` format — slot files under a 0700
26
+ * directory. Wire format is v1 per keyring.
27
+ */
28
+ async function buildStorage(baseDir) {
29
+ const wantFile = process.env.CHAOSKB_KEY_STORAGE === 'file';
30
+ if (wantFile) {
31
+ const fsDir = path.join(baseDir, 'keyring');
32
+ fs.mkdirSync(fsDir, { recursive: true, mode: 0o700 });
33
+ return {
34
+ storage: new FileSystemStorage({ root: fsDir }),
35
+ kind: 'file',
36
+ };
37
+ }
38
+ // OS keychain is checked lazily when the first put/get/delete is made.
39
+ return {
40
+ storage: new OsKeychainStorage({
41
+ service: KEYRING_SERVICE,
42
+ acceptedTiers: ['standard'],
43
+ }),
44
+ kind: 'os-keychain',
45
+ };
46
+ }
10
47
  /**
11
48
  * Auto-bootstrap ChaosKB on first launch.
12
49
  *
13
- * Creates ~/.chaoskb/, generates a master key, stores it in the OS keyring,
14
- * initializes the database, and writes config.json all with standard
15
- * security tier and no interactive prompts.
50
+ * Creates ~/.chaoskb/, generates a master key, wraps it with the user's
51
+ * SSH public key (via keyring's `StandardTier`), persists the wrapped
52
+ * blob in the OS keychain, initializes the database, and writes
53
+ * config.json — all with standard security tier and no interactive
54
+ * prompts.
16
55
  *
17
56
  * Idempotent: no-ops if config.json already exists.
18
57
  * Concurrency-safe: uses file-based locking to prevent races.
@@ -21,7 +60,6 @@ export async function bootstrap(options) {
21
60
  const chaoskbDir = resolveDir(options?.baseDir);
22
61
  const configPath = path.join(chaoskbDir, 'config.json');
23
62
  const modelsDir = path.join(chaoskbDir, 'models');
24
- const fileKeyPath = path.join(chaoskbDir, 'master.key');
25
63
  // Fast path: already configured
26
64
  if (fs.existsSync(configPath)) {
27
65
  return;
@@ -40,44 +78,78 @@ export async function bootstrap(options) {
40
78
  if (!fs.existsSync(modelsDir)) {
41
79
  fs.mkdirSync(modelsDir, { recursive: true, mode: 0o700 });
42
80
  }
43
- // 2. Generate master key
44
- const { EncryptionService } = await import('../crypto/encryption-service.js');
45
- const encryption = new EncryptionService();
46
- const masterKey = encryption.generateMasterKey();
47
- // 3. Store master key
81
+ // 2. Detect SSH key for zero-config sync and as the keyring tier input.
82
+ const sshResult = await detectSSHKey(chaoskbDir);
83
+ // 3. Generate a random 32-byte master key (plain Uint8Array — we hand
84
+ // it to keyring which owns its SecureBuffer lifecycle).
85
+ const masterBytes = new Uint8Array(randomBytes(32));
86
+ const masterSb = SecureBuffer.from(Buffer.from(masterBytes));
87
+ const master = asMasterKey(masterSb);
88
+ // Keep a copy for sync registration (pre-upload). Zeroed at the end.
89
+ const masterKeyCopy = Buffer.from(masterBytes);
90
+ masterBytes.fill(0);
91
+ // 4. Wrap the master with the SSH key and persist via keyring.
92
+ let keyringOk = false;
48
93
  try {
49
- await storeKeyInKeyring(masterKey);
94
+ if (sshResult.publicKey) {
95
+ const tier = StandardTier.fromSshKey(sshResult.publicKey);
96
+ const { storage } = await buildStorage(chaoskbDir);
97
+ const ring = new KeyRing({ tier, storage });
98
+ await ring.setup(master);
99
+ keyringOk = true;
100
+ if (process.platform === 'darwin') {
101
+ process.stderr.write('Storing encryption key in macOS Keychain.\n' +
102
+ 'You may see a system dialog asking to allow keychain access — this is expected.\n');
103
+ }
104
+ }
50
105
  }
51
106
  catch (keyringError) {
52
- // Keyring failedcheck for file-based fallback
53
- if (process.env.CHAOSKB_KEY_STORAGE === 'file') {
54
- process.stderr.write('\n⚠ OS keyring unavailable. Storing key in ' + fileKeyPath + ' (file-based).\n' +
107
+ // Master not yet disposed fall through to file fallback.
108
+ if (process.env.CHAOSKB_KEY_STORAGE === 'file' || keyringError instanceof OsKeychainUnavailable) {
109
+ process.stderr.write('\n⚠ OS keyring unavailable. Storing key in ' +
110
+ FILE_KEY_PATH +
111
+ ' (file-based).\n' +
55
112
  ' This is less secure than the OS keyring. The key file is readable by any process running as your user.\n\n');
56
- fs.writeFileSync(fileKeyPath, masterKey.buffer.toString('hex'), { mode: 0o600 });
113
+ fs.writeFileSync(path.join(chaoskbDir, 'master.key'), masterKeyCopy.toString('hex'), {
114
+ mode: 0o600,
115
+ });
116
+ keyringOk = true;
57
117
  }
58
118
  else {
59
- masterKey.dispose();
119
+ master.dispose();
120
+ masterKeyCopy.fill(0);
60
121
  throw new Error(`Failed to store master key in OS keyring: ${keyringError instanceof Error ? keyringError.message : String(keyringError)}\n\n` +
61
122
  ' To fix this, either:\n' +
62
123
  ' • Install/configure your OS keyring service (macOS Keychain, Linux Secret Service, Windows Credential Manager)\n' +
63
124
  ' • Set CHAOSKB_KEY_STORAGE=file to use file-based key storage (less secure)\n');
64
125
  }
65
126
  }
66
- // Copy master key bytes before disposing (needed for sync registration)
67
- const masterKeyBytes = Buffer.from(masterKey.buffer);
68
- masterKey.dispose();
69
- // 4. Initialize database
127
+ if (!keyringOk && !sshResult.publicKey) {
128
+ // No SSH key at all AND we didn't persist yet — fall back to file
129
+ // storage so the bootstrap can still complete.
130
+ if (process.env.CHAOSKB_KEY_STORAGE === 'file') {
131
+ fs.writeFileSync(path.join(chaoskbDir, 'master.key'), masterKeyCopy.toString('hex'), {
132
+ mode: 0o600,
133
+ });
134
+ }
135
+ else {
136
+ master.dispose();
137
+ masterKeyCopy.fill(0);
138
+ throw new Error('No SSH key found and CHAOSKB_KEY_STORAGE=file not set. ' +
139
+ 'Run `ssh-keygen` or set CHAOSKB_KEY_STORAGE=file to continue.');
140
+ }
141
+ }
142
+ master.dispose();
143
+ // 5. Initialize database
70
144
  const { DatabaseManager } = await import('../storage/database-manager.js');
71
145
  const dbManager = new DatabaseManager(chaoskbDir);
72
146
  const db = dbManager.getPersonalDb();
73
147
  db.close();
74
148
  dbManager.closeAll();
75
- // 5. Detect SSH key for zero-config sync
76
- const sshResult = await detectSSHKey();
77
149
  // 6. Register with sync server (non-blocking)
78
- const syncResult = await attemptSyncRegistration(sshResult, masterKeyBytes);
150
+ const syncResult = await attemptSyncRegistration(sshResult, masterKeyCopy, chaoskbDir);
79
151
  // Zero the copy
80
- masterKeyBytes.fill(0);
152
+ masterKeyCopy.fill(0);
81
153
  // 7. Write config
82
154
  const config = {
83
155
  securityTier: 'standard',
@@ -112,7 +184,7 @@ export async function bootstrap(options) {
112
184
  * Priority: ssh-agent (Ed25519 > RSA) → filesystem (id_ed25519 > id_rsa)
113
185
  * If no SSH key found, returns source: 'none'.
114
186
  */
115
- async function detectSSHKey() {
187
+ async function detectSSHKey(baseDir) {
116
188
  // Respect opt-out
117
189
  if (process.env.CHAOSKB_SYNC === 'off') {
118
190
  return { publicKey: null, fingerprint: null, keyPath: null, source: 'none' };
@@ -150,8 +222,7 @@ async function detectSSHKey() {
150
222
  if (fs.existsSync(pubKeyPath)) {
151
223
  try {
152
224
  const content = fs.readFileSync(pubKeyPath, 'utf-8').trim();
153
- const { parseSSHPublicKey } = await import('../crypto/ssh-keys.js');
154
- const parsed = parseSSHPublicKey(content);
225
+ const parsed = parseSshPublicKey(content);
155
226
  return {
156
227
  publicKey: content,
157
228
  fingerprint: parsed.fingerprint,
@@ -167,7 +238,7 @@ async function detectSSHKey() {
167
238
  }
168
239
  // No SSH key found — try generating a fallback key in keyring
169
240
  try {
170
- const fallback = await generateFallbackKey();
241
+ const fallback = await generateFallbackKey(baseDir);
171
242
  if (fallback)
172
243
  return fallback;
173
244
  }
@@ -179,19 +250,40 @@ async function detectSSHKey() {
179
250
  /**
180
251
  * Generate a fallback Ed25519 key pair and store it in the OS keyring.
181
252
  * Never written to disk. Returns null if keyring is unavailable.
253
+ *
254
+ * Uses keyring's `OsKeychainStorage` directly at dedicated slot names.
255
+ * Stored as a degenerate `WrappedKey` shape — the slot contract is a
256
+ * `WrappedKey`, so we wrap the raw identity bytes in the `envelope`
257
+ * field and use tier='standard' purely as a placeholder. This is a
258
+ * chaoskb-specific convention; the bytes are not AEAD-wrapped because
259
+ * the whole point is that there's no other key material to wrap them
260
+ * with on a new install.
182
261
  */
183
- async function generateFallbackKey() {
262
+ async function generateFallbackKey(_baseDir) {
184
263
  const sodium = (await import('sodium-native')).default;
185
- const { KeyringService } = await import('../crypto/keyring.js');
186
264
  const pk = Buffer.alloc(sodium.crypto_sign_PUBLICKEYBYTES);
187
265
  const sk = Buffer.alloc(sodium.crypto_sign_SECRETKEYBYTES);
188
266
  sodium.crypto_sign_keypair(pk, sk);
189
267
  try {
190
- // Store secret key in keyring only (never on disk)
191
- const keyring = new KeyringService();
192
- const { SecureBuffer } = await import('../crypto/secure-buffer.js');
193
- await keyring.store('chaoskb', 'identity-secret', SecureBuffer.from(sk));
194
- await keyring.store('chaoskb', 'identity-public', SecureBuffer.from(pk));
268
+ const storage = new OsKeychainStorage({
269
+ service: KEYRING_SERVICE,
270
+ acceptedTiers: ['standard'],
271
+ });
272
+ const now = new Date().toISOString();
273
+ const skWrapped = {
274
+ v: 1,
275
+ tier: 'standard',
276
+ envelope: new Uint8Array(sk),
277
+ ts: now,
278
+ };
279
+ const pkWrapped = {
280
+ v: 1,
281
+ tier: 'standard',
282
+ envelope: new Uint8Array(pk),
283
+ ts: now,
284
+ };
285
+ await storage.put(IDENTITY_SECRET_SLOT, skWrapped);
286
+ await storage.put(IDENTITY_PUBLIC_SLOT, pkWrapped);
195
287
  }
196
288
  catch {
197
289
  sk.fill(0);
@@ -200,10 +292,7 @@ async function generateFallbackKey() {
200
292
  // Build the SSH public key line
201
293
  const { createHash } = await import('node:crypto');
202
294
  const typeStr = Buffer.from('ssh-ed25519');
203
- const keyBlob = Buffer.concat([
204
- uint32BE(typeStr.length), typeStr,
205
- uint32BE(pk.length), pk,
206
- ]);
295
+ const keyBlob = Buffer.concat([uint32BE(typeStr.length), typeStr, uint32BE(pk.length), pk]);
207
296
  const base64Blob = keyBlob.toString('base64');
208
297
  const fingerprint = 'SHA256:' + createHash('sha256').update(keyBlob).digest('base64').replace(/=+$/, '');
209
298
  sk.fill(0);
@@ -226,7 +315,7 @@ const DEFAULT_SYNC_ENDPOINT = 'https://sync.chaoskb.com';
226
315
  * Non-blocking: if the server is unreachable, returns pending=true
227
316
  * and the next launch will retry.
228
317
  */
229
- async function attemptSyncRegistration(ssh, masterKeyBuffer) {
318
+ async function attemptSyncRegistration(ssh, masterKeyBuffer, baseDir) {
230
319
  if (process.env.CHAOSKB_SYNC === 'off' || !ssh.publicKey) {
231
320
  return { enabled: false, pending: false, endpoint: null };
232
321
  }
@@ -243,7 +332,7 @@ async function attemptSyncRegistration(ssh, masterKeyBuffer) {
243
332
  if (!challengeRes.ok) {
244
333
  return { enabled: false, pending: true, endpoint };
245
334
  }
246
- const { challenge } = await challengeRes.json();
335
+ const { challenge } = (await challengeRes.json());
247
336
  // Step 2: Sign the challenge using SSHSigner (handles OpenSSH key formats + ssh-agent)
248
337
  const { SSHSigner } = await import('../sync/ssh-signer.js');
249
338
  const signer = new SSHSigner(ssh.keyPath ?? undefined);
@@ -275,15 +364,15 @@ async function attemptSyncRegistration(ssh, masterKeyBuffer) {
275
364
  // Other server errors — mark as pending for retry
276
365
  return { enabled: false, pending: true, endpoint };
277
366
  }
278
- const regResult = await response.json();
279
- // Existing account — download and unwrap master key (new-device restore)
367
+ const regResult = (await response.json());
368
+ // Existing account — download and store the server's wrapped master.
280
369
  if (regResult.status === 'existing') {
281
- await restoreMasterKey(endpoint, ssh);
370
+ await restoreMasterKey(endpoint, ssh, baseDir);
282
371
  return { enabled: true, pending: false, endpoint };
283
372
  }
284
373
  // New account — wrap master key and upload
285
374
  if (masterKeyBuffer.length > 0) {
286
- await uploadWrappedMasterKey(endpoint, ssh, masterKeyBuffer);
375
+ await uploadWrappedMasterKey(endpoint, ssh, masterKeyBuffer, baseDir);
287
376
  }
288
377
  return { enabled: true, pending: false, endpoint };
289
378
  }
@@ -306,19 +395,20 @@ async function fetchWithTimeout(url, init) {
306
395
  }
307
396
  }
308
397
  /**
309
- * Wrap the master key with the SSH public key and upload to the sync server.
310
- * The wrapped blob is signed with the SSH private key for integrity verification.
398
+ * Wrap the master key with the SSH public key and upload to the sync
399
+ * server. Uses keyring's `StandardTier.wrap` so the wire format is v1.
311
400
  */
312
- async function uploadWrappedMasterKey(endpoint, ssh, masterKeyBuffer) {
401
+ async function uploadWrappedMasterKey(endpoint, ssh, masterKeyBuffer, _baseDir) {
313
402
  if (!ssh.publicKey)
314
403
  return;
315
- const { parseSSHPublicKey } = await import('../crypto/ssh-keys.js');
316
- const { wrapMasterKey } = await import('../crypto/tiers/standard.js');
317
- const { SecureBuffer } = await import('../crypto/secure-buffer.js');
318
- const keyInfo = parseSSHPublicKey(ssh.publicKey);
319
- const secureMasterKey = SecureBuffer.from(masterKeyBuffer);
404
+ const tier = StandardTier.fromSshKey(ssh.publicKey);
405
+ const masterSb = SecureBuffer.from(Buffer.from(masterKeyBuffer));
406
+ const master = asMasterKey(masterSb);
320
407
  try {
321
- const wrappedBlob = wrapMasterKey(secureMasterKey, keyInfo);
408
+ const wrapped = await tier.wrap(master);
409
+ // Wire format: raw `WrappedKey.envelope` bytes. The server stores
410
+ // them opaquely — only the client (which has the SSH private key) can
411
+ // unwrap them.
322
412
  const { createSyncHttpClientFromConfig } = await import('../sync/client-factory.js');
323
413
  const { DatabaseManager } = await import('../storage/database-manager.js');
324
414
  const db = new DatabaseManager().getPersonalDb();
@@ -326,20 +416,23 @@ async function uploadWrappedMasterKey(endpoint, ssh, masterKeyBuffer) {
326
416
  endpoint,
327
417
  sshKeyPath: ssh.keyPath ?? undefined,
328
418
  }, db.syncSequence);
329
- await client.put('/v1/wrapped-key', wrappedBlob);
419
+ await client.put('/v1/wrapped-key', wrapped.envelope);
330
420
  }
331
421
  finally {
332
- secureMasterKey.dispose();
422
+ master.dispose();
333
423
  }
334
424
  }
335
425
  /**
336
426
  * Restore the master key on a new device.
337
427
  *
338
- * Downloads the wrapped master key blob from the server,
339
- * verifies the signature, unwraps with the SSH private key,
340
- * and stores in the OS keyring.
428
+ * Downloads the wrapped master-key blob from the server and persists it
429
+ * verbatim into keyring storage at the `__personal` slot. We also attempt
430
+ * an `unlockWithSshKey` to verify the bytes are usable with the local SSH
431
+ * private key; the unwrapped master is immediately discarded — the
432
+ * keyring stays in its wrapped form on disk, to be unlocked on demand by
433
+ * `initializeDependencies`.
341
434
  */
342
- async function restoreMasterKey(endpoint, ssh) {
435
+ async function restoreMasterKey(endpoint, ssh, baseDir) {
343
436
  if (!ssh.publicKey)
344
437
  return;
345
438
  const { createSyncHttpClientFromConfig } = await import('../sync/client-factory.js');
@@ -353,63 +446,34 @@ async function restoreMasterKey(endpoint, ssh) {
353
446
  if (!response.ok) {
354
447
  throw new Error(`Failed to download wrapped key: ${response.status}`);
355
448
  }
356
- const wrappedBlob = new Uint8Array(await response.arrayBuffer());
357
- // Unwrap with SSH private key
358
- const { parseSSHPublicKey } = await import('../crypto/ssh-keys.js');
359
- const keyInfo = parseSSHPublicKey(ssh.publicKey);
360
- if (keyInfo.type === 'ed25519') {
361
- const { unwrapMasterKeyEd25519 } = await import('../crypto/tiers/standard.js');
362
- // Read the private key to get the secret key bytes for unwrapping
363
- // For Ed25519 unwrap, we need the raw secret key — ssh-agent can sign
364
- // but can't expose the raw key for crypto_box_seal_open.
365
- // Fall back to key file for unwrapping.
366
- if (ssh.keyPath) {
367
- const keyData = fs.readFileSync(ssh.keyPath, 'utf-8');
368
- const { createPrivateKey } = await import('node:crypto');
369
- const keyObj = createPrivateKey({ key: keyData, format: 'pem' });
370
- const exported = keyObj.export({ type: 'pkcs8', format: 'der' });
371
- // Ed25519 PKCS8 DER: last 32 bytes are the private key, preceded by 2-byte wrapper
372
- // The actual key bytes are at offset 16 (after DER headers), 32 bytes of seed + 32 bytes of public
373
- const derBuf = Buffer.from(exported);
374
- // Extract the 32-byte seed from the PKCS8 structure
375
- // PKCS8 for Ed25519: 30 2e 02 01 00 30 05 06 03 2b 65 70 04 22 04 20 [32 bytes seed]
376
- const seedOffset = derBuf.indexOf(Buffer.from([0x04, 0x20]), 12);
377
- if (seedOffset === -1) {
378
- throw new Error('Could not extract Ed25519 seed from private key');
379
- }
380
- const seed = derBuf.subarray(seedOffset + 2, seedOffset + 34);
381
- // Generate the full 64-byte secret key from the seed
382
- const sodium = (await import('sodium-native')).default;
383
- const fullSk = Buffer.alloc(sodium.crypto_sign_SECRETKEYBYTES);
384
- const fullPk = Buffer.alloc(sodium.crypto_sign_PUBLICKEYBYTES);
385
- sodium.crypto_sign_seed_keypair(fullPk, fullSk, seed);
386
- const masterKey = unwrapMasterKeyEd25519(wrappedBlob, fullSk, fullPk);
387
- // Store in keyring
388
- await storeKeyInKeyring(masterKey);
389
- masterKey.dispose();
390
- // Zero sensitive buffers
391
- fullSk.fill(0);
392
- seed.fill(0);
393
- }
394
- else {
395
- // Key is in agent only — can't extract raw key for crypto_box_seal_open
396
- // This is a known limitation: agent-only keys can sign but can't unwrap sealed boxes
397
- throw new Error('Cannot restore master key: SSH key is in agent only (no key file).\n' +
398
- 'crypto_box_seal_open requires the raw private key. Ensure the key file is available at ~/.ssh/id_ed25519');
449
+ const wrappedEnvelopeBytes = new Uint8Array(await response.arrayBuffer());
450
+ // Persist to keyring storage as a v1 WrappedKey.
451
+ const wrapped = {
452
+ v: 1,
453
+ tier: 'standard',
454
+ envelope: wrappedEnvelopeBytes,
455
+ sshFingerprint: ssh.fingerprint ?? undefined,
456
+ ts: new Date().toISOString(),
457
+ };
458
+ const { storage } = await buildStorage(baseDir);
459
+ await storage.put('__personal', wrapped);
460
+ // Verify it's unwrappable with the local SSH key (non-fatal: if the key
461
+ // file is missing, the unlock below will just skip and the unwrap will
462
+ // happen lazily on first MCP tool use).
463
+ if (ssh.keyPath) {
464
+ try {
465
+ const pem = fs.readFileSync(ssh.keyPath, 'utf-8');
466
+ const tier = StandardTier.fromSshKey(ssh.publicKey);
467
+ const ring = new KeyRing({ tier, storage });
468
+ await ring.unlockWithSshKey(pem);
469
+ await ring.lock();
399
470
  }
400
- }
401
- else {
402
- // RSA unwrap
403
- const { unwrapMasterKeyRSA } = await import('../crypto/tiers/standard.js');
404
- const { createPrivateKey } = await import('node:crypto');
405
- if (!ssh.keyPath) {
406
- throw new Error('Cannot restore master key: no RSA key file path');
471
+ catch (err) {
472
+ // Verification failed — surface a diagnostic but leave the blob
473
+ // in place. Unlock failure now is unusual but not catastrophic;
474
+ // the MCP server will retry on tool-call time.
475
+ process.stderr.write(`Warning: downloaded wrapped key failed verify-unlock: ${err instanceof Error ? err.message : String(err)}\n`);
407
476
  }
408
- const keyData = fs.readFileSync(ssh.keyPath, 'utf-8');
409
- const rsaPrivKey = createPrivateKey({ key: keyData, format: 'pem' });
410
- const masterKey = unwrapMasterKeyRSA(wrappedBlob, rsaPrivKey);
411
- await storeKeyInKeyring(masterKey);
412
- masterKey.dispose();
413
477
  }
414
478
  process.stderr.write('Master key restored from sync server. Your knowledge base will sync shortly.\n');
415
479
  }
@@ -422,10 +486,11 @@ export async function retrySyncRegistration(configPath) {
422
486
  const configData = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
423
487
  if (!configData.syncPending)
424
488
  return;
425
- const sshResult = await detectSSHKey();
489
+ const baseDir = path.dirname(configPath);
490
+ const sshResult = await detectSSHKey(baseDir);
426
491
  if (!sshResult.publicKey)
427
492
  return;
428
- const syncResult = await attemptSyncRegistration(sshResult, Buffer.alloc(0));
493
+ const syncResult = await attemptSyncRegistration(sshResult, Buffer.alloc(0), baseDir);
429
494
  if (syncResult.enabled || !syncResult.pending) {
430
495
  // Either succeeded or permanently failed — clear pending
431
496
  configData.syncEnabled = syncResult.enabled;
@@ -441,14 +506,4 @@ export async function retrySyncRegistration(configPath) {
441
506
  // Retry failed silently — will try again next launch
442
507
  }
443
508
  }
444
- async function storeKeyInKeyring(masterKey) {
445
- // macOS: warn about potential keychain access dialog
446
- if (process.platform === 'darwin') {
447
- process.stderr.write('Storing encryption key in macOS Keychain.\n' +
448
- 'You may see a system dialog asking to allow keychain access — this is expected.\n');
449
- }
450
- const { KeyringService } = await import('../crypto/keyring.js');
451
- const keyring = new KeyringService();
452
- await keyring.store('chaoskb', 'master-key', masterKey);
453
- }
454
509
  //# sourceMappingURL=bootstrap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../cli/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../cli/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,16 @@
1
+ import { type WrappedKey } from '@de-otio/keyring';
1
2
  /**
2
3
  * Upgrade security tier.
3
4
  *
4
- * Standard → Maximum: re-wrap master key under Argon2id-derived key from passphrase.
5
- * Enhanced Maximum: same as above, with note that mnemonic is invalidated.
5
+ * Standard → Maximum: unlock master via the current Standard tier,
6
+ * then re-wrap under a passphrase-derived KEK via keyring's `MaximumTier`.
6
7
  *
7
- * Note: The Enhanced tier (BIP39 mnemonic) is deprecated. New upgrades only
8
- * support "maximum". Existing Enhanced-tier users can still upgrade to Maximum.
8
+ * Note: The Enhanced tier (BIP39 mnemonic) is deprecated. New upgrades
9
+ * only support "maximum".
9
10
  */
10
11
  export declare function upgradeTierCommand(tier: string, options?: {
11
12
  dryRun?: boolean;
12
13
  }): Promise<void>;
14
+ /** Parse the serialised form back into a WrappedKey. */
15
+ export declare function parseWrappedKey(json: string): WrappedKey;
13
16
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../cli/commands/config.ts"],"names":[],"mappings":"AAqBA;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsEpG"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../cli/commands/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAgD1B;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CA6Df;AAoID,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CA8CxD"}