llm-relay 0.44.0 → 0.45.1

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 (58) hide show
  1. package/README.md +1 -0
  2. package/dist/authEnv.d.ts +20 -12
  3. package/dist/authEnv.js +76 -36
  4. package/dist/authEnv.js.map +1 -1
  5. package/dist/candidates.d.ts +2 -0
  6. package/dist/candidates.js +2 -1
  7. package/dist/candidates.js.map +1 -1
  8. package/dist/circuit-breaker.d.ts +2 -0
  9. package/dist/circuit-breaker.js +17 -0
  10. package/dist/circuit-breaker.js.map +1 -1
  11. package/dist/cli.d.ts +14 -0
  12. package/dist/cli.js +193 -5
  13. package/dist/cli.js.map +1 -1
  14. package/dist/config.d.ts +4 -3
  15. package/dist/config.js +87 -7
  16. package/dist/config.js.map +1 -1
  17. package/dist/cooldown-clear.d.ts +2 -0
  18. package/dist/cooldown-clear.js +20 -4
  19. package/dist/cooldown-clear.js.map +1 -1
  20. package/dist/credential-fleet.d.ts +5 -4
  21. package/dist/credential-fleet.js +9 -9
  22. package/dist/credential-fleet.js.map +1 -1
  23. package/dist/dotenv.d.ts +2 -0
  24. package/dist/dotenv.js +9 -0
  25. package/dist/dotenv.js.map +1 -1
  26. package/dist/key-checker.d.ts +1 -0
  27. package/dist/key-checker.js +3 -2
  28. package/dist/key-checker.js.map +1 -1
  29. package/dist/key-import.d.ts +7 -0
  30. package/dist/key-import.js +52 -0
  31. package/dist/key-import.js.map +1 -1
  32. package/dist/keys-cli.d.ts +48 -0
  33. package/dist/keys-cli.js +693 -0
  34. package/dist/keys-cli.js.map +1 -0
  35. package/dist/keystore.d.ts +130 -0
  36. package/dist/keystore.js +1195 -0
  37. package/dist/keystore.js.map +1 -0
  38. package/dist/os-keyring.d.ts +88 -0
  39. package/dist/os-keyring.js +476 -0
  40. package/dist/os-keyring.js.map +1 -0
  41. package/dist/registry.d.ts +2 -1
  42. package/dist/registry.js +1 -0
  43. package/dist/registry.js.map +1 -1
  44. package/dist/resolved-attempt.d.ts +2 -1
  45. package/dist/resolved-attempt.js +3 -2
  46. package/dist/resolved-attempt.js.map +1 -1
  47. package/dist/routes/admin.js +8 -1
  48. package/dist/routes/admin.js.map +1 -1
  49. package/dist/secret-file-acl.d.ts +47 -12
  50. package/dist/secret-file-acl.js +151 -16
  51. package/dist/secret-file-acl.js.map +1 -1
  52. package/dist/server.d.ts +1 -0
  53. package/dist/server.js +2 -1
  54. package/dist/server.js.map +1 -1
  55. package/dist/target-facts.d.ts +5 -0
  56. package/dist/target-facts.js +10 -3
  57. package/dist/target-facts.js.map +1 -1
  58. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.js","sourceRoot":"","sources":["../src/keystore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ export type KekWrapMode = "dpapi" | "keychain" | "libsecret" | "passphrase";
2
+ export type OsKekWrapMode = Exclude<KekWrapMode, "passphrase">;
3
+ export interface ScryptKdfDescriptor {
4
+ n: 16384;
5
+ r: 8;
6
+ p: 1;
7
+ salt: string;
8
+ }
9
+ /** Shape persisted as the keystore's `kek` block. */
10
+ export interface KekDescriptor {
11
+ wrap: KekWrapMode;
12
+ /** Present only for DPAPI. */
13
+ blob?: string;
14
+ /** Present only for passphrase mode. */
15
+ kdf?: ScryptKdfDescriptor;
16
+ }
17
+ export interface KeyringSpawnSyncOptions {
18
+ windowsHide: true;
19
+ stdio: "pipe";
20
+ encoding: "buffer";
21
+ input?: Buffer;
22
+ }
23
+ export interface KeyringSpawnSyncResult {
24
+ status: number | null;
25
+ stdout?: Buffer | Uint8Array | string | null;
26
+ stderr?: Buffer | Uint8Array | string | null;
27
+ error?: Error | undefined;
28
+ }
29
+ /** Captured-stdio synchronous spawn seam; no child error object may escape its caller. */
30
+ export type KeyringSpawnSync = (command: string, args: string[], options: KeyringSpawnSyncOptions) => KeyringSpawnSyncResult;
31
+ export type KeyringCommandExists = (command: string, env: NodeJS.ProcessEnv) => boolean;
32
+ export type KeyringRandomBytes = (size: number) => Buffer;
33
+ export interface KeyringOptions {
34
+ mode?: KekWrapMode;
35
+ platform?: NodeJS.Platform;
36
+ env?: NodeJS.ProcessEnv;
37
+ /** Caller-owned; this module never mutates or zeroizes it. */
38
+ passphrase?: string | Buffer;
39
+ spawnSync?: KeyringSpawnSync;
40
+ commandExists?: KeyringCommandExists;
41
+ randomBytes?: KeyringRandomBytes;
42
+ /** Non-secret stable identifier for one keystore's OS-held item. */
43
+ keyId?: string;
44
+ }
45
+ export interface WrapKekOptions extends Omit<KeyringOptions, "mode" | "passphrase"> {
46
+ mode?: OsKekWrapMode;
47
+ }
48
+ export declare class KeyringUnavailableError extends Error {
49
+ constructor();
50
+ }
51
+ export declare class KeyringPassphraseRequiredError extends Error {
52
+ constructor();
53
+ }
54
+ /** Resolve Windows PowerShell 5.1 without consulting PATH. */
55
+ export declare function windowsPowerShellPath(env?: NodeJS.ProcessEnv): string;
56
+ /** Pure argv builders. Secret material is deliberately not accepted as an argument. */
57
+ export declare function dpapiWrapArgv(): string[];
58
+ export declare function dpapiUnwrapArgv(): string[];
59
+ export declare function keychainStoreArgv(): string[];
60
+ export declare function keychainLoadArgv(keyId?: string): string[];
61
+ export declare function libsecretStoreArgv(keyId?: string): string[];
62
+ export declare function libsecretLoadArgv(keyId?: string): string[];
63
+ /** PATH lookup used only to select Linux libsecret versus passphrase mode; it never spawns. */
64
+ export declare function commandExistsOnPath(command: string, env?: NodeJS.ProcessEnv): boolean;
65
+ /**
66
+ * Wrap/store an existing random KEK in an OS facility.
67
+ *
68
+ * Passphrase mode is intentionally absent: its exact v1 format has only KDF parameters and no
69
+ * encrypted blob, so `createPassphraseKek` derives the KEK instead of pretending to wrap one.
70
+ */
71
+ export declare function wrapKek(kek: Buffer, options?: WrapKekOptions): KekDescriptor;
72
+ /** Derive one 256-bit KEK without changing caller-owned passphrase bytes. */
73
+ export declare function derivePassphraseKek(passphrase: string | Buffer, kdf: ScryptKdfDescriptor): Buffer;
74
+ export declare function createPassphraseKek(passphrase: string | Buffer, options?: {
75
+ randomBytes?: KeyringRandomBytes;
76
+ }): {
77
+ kek: Buffer;
78
+ descriptor: KekDescriptor;
79
+ };
80
+ /** Create a KEK using the selected platform custody mechanism. */
81
+ export declare function createKek(options?: KeyringOptions): {
82
+ kek: Buffer;
83
+ descriptor: KekDescriptor;
84
+ };
85
+ /** Lazily recover a KEK. The returned Buffer is owned by the caller. */
86
+ export declare function unwrapKek(descriptor: KekDescriptor, options?: KeyringOptions): Buffer;
87
+ /** Constant-time helper for tests and callers that verify a passphrase-derived round trip. */
88
+ export declare function sameKek(left: Buffer, right: Buffer): boolean;
@@ -0,0 +1,476 @@
1
+ import { randomBytes as nodeRandomBytes, scryptSync, timingSafeEqual } from "node:crypto";
2
+ import { spawnSync as nodeSpawnSync } from "node:child_process";
3
+ import { accessSync, constants as fsConstants } from "node:fs";
4
+ import { delimiter, join, win32 } from "node:path";
5
+ import { windowsSystem32Executable } from "./secret-file-acl.js";
6
+ const KEK_BYTES = 32;
7
+ const SCRYPT_SALT_BYTES = 32;
8
+ const SCRYPT_MAXMEM = 64 * 1024 * 1024;
9
+ const KEYCHAIN_ACCOUNT = "llm-relay";
10
+ const KEYCHAIN_SERVICE = "llm-relay-keystore-kek";
11
+ const LIBSECRET_LABEL = "llm-relay KEK";
12
+ const KEYRING_ID_PATTERN = /^[A-Za-z0-9_.:-]{1,96}$/;
13
+ const BASE64_ALPHABET = Buffer.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", "ascii");
14
+ const BASE64_REVERSE = new Int16Array(256).fill(-1);
15
+ for (let index = 0; index < BASE64_ALPHABET.length; index += 1) {
16
+ BASE64_REVERSE[BASE64_ALPHABET[index]] = index;
17
+ }
18
+ const DPAPI_WRAP_SCRIPT = [
19
+ "Add-Type -AssemblyName System.Security;",
20
+ "$stdin=[Console]::OpenStandardInput();",
21
+ "$memory=New-Object System.IO.MemoryStream;",
22
+ "$stdin.CopyTo($memory);",
23
+ "$plain=$memory.ToArray();",
24
+ "$wrapped=[Security.Cryptography.ProtectedData]::Protect($plain,$null,[Security.Cryptography.DataProtectionScope]::CurrentUser);",
25
+ "$stdout=[Console]::OpenStandardOutput();",
26
+ "$stdout.Write($wrapped,0,$wrapped.Length);",
27
+ "$stdout.Flush();",
28
+ ].join("");
29
+ const DPAPI_UNWRAP_SCRIPT = [
30
+ "Add-Type -AssemblyName System.Security;",
31
+ "$stdin=[Console]::OpenStandardInput();",
32
+ "$memory=New-Object System.IO.MemoryStream;",
33
+ "$stdin.CopyTo($memory);",
34
+ "$wrapped=$memory.ToArray();",
35
+ "$plain=[Security.Cryptography.ProtectedData]::Unprotect($wrapped,$null,[Security.Cryptography.DataProtectionScope]::CurrentUser);",
36
+ "$stdout=[Console]::OpenStandardOutput();",
37
+ "$stdout.Write($plain,0,$plain.Length);",
38
+ "$stdout.Flush();",
39
+ ].join("");
40
+ export class KeyringUnavailableError extends Error {
41
+ constructor() {
42
+ super("No supported OS keyring or passphrase is available");
43
+ this.name = "KeyringUnavailableError";
44
+ }
45
+ }
46
+ export class KeyringPassphraseRequiredError extends Error {
47
+ constructor() {
48
+ super("Passphrase mode requires a non-empty passphrase");
49
+ this.name = "KeyringPassphraseRequiredError";
50
+ }
51
+ }
52
+ /** Resolve Windows PowerShell 5.1 without consulting PATH. */
53
+ export function windowsPowerShellPath(env = process.env) {
54
+ const systemRoot = env.SystemRoot?.trim() || env.SYSTEMROOT?.trim() || "";
55
+ return windowsSystem32Executable(win32.join("WindowsPowerShell", "v1.0", "powershell.exe"), systemRoot);
56
+ }
57
+ function keyringId(keyId) {
58
+ const value = keyId ?? KEYCHAIN_ACCOUNT;
59
+ if (!KEYRING_ID_PATTERN.test(value))
60
+ throw new Error("invalid keyring identifier");
61
+ return value;
62
+ }
63
+ function keyringPurpose(keyId) {
64
+ return keyId === undefined ? "keystore-kek" : `keystore-kek:${keyringId(keyId)}`;
65
+ }
66
+ /** Pure argv builders. Secret material is deliberately not accepted as an argument. */
67
+ export function dpapiWrapArgv() {
68
+ return ["-NoProfile", "-NonInteractive", "-Command", DPAPI_WRAP_SCRIPT];
69
+ }
70
+ export function dpapiUnwrapArgv() {
71
+ return ["-NoProfile", "-NonInteractive", "-Command", DPAPI_UNWRAP_SCRIPT];
72
+ }
73
+ export function keychainStoreArgv() {
74
+ return ["-i"];
75
+ }
76
+ export function keychainLoadArgv(keyId) {
77
+ return [
78
+ "find-generic-password",
79
+ "-a",
80
+ keyringId(keyId),
81
+ "-s",
82
+ KEYCHAIN_SERVICE,
83
+ "-w",
84
+ ];
85
+ }
86
+ export function libsecretStoreArgv(keyId) {
87
+ return [
88
+ "store",
89
+ `--label=${LIBSECRET_LABEL}`,
90
+ "application",
91
+ "llm-relay",
92
+ "purpose",
93
+ keyringPurpose(keyId),
94
+ ];
95
+ }
96
+ export function libsecretLoadArgv(keyId) {
97
+ return ["lookup", "application", "llm-relay", "purpose", keyringPurpose(keyId)];
98
+ }
99
+ /** PATH lookup used only to select Linux libsecret versus passphrase mode; it never spawns. */
100
+ export function commandExistsOnPath(command, env = process.env) {
101
+ const path = env.PATH;
102
+ if (!path)
103
+ return false;
104
+ for (const directory of path.split(delimiter)) {
105
+ if (!directory)
106
+ continue;
107
+ try {
108
+ accessSync(join(directory, command), fsConstants.X_OK);
109
+ return true;
110
+ }
111
+ catch {
112
+ // Keep searching. Absence is the branch signal, not an exceptional condition.
113
+ }
114
+ }
115
+ return false;
116
+ }
117
+ const spawnCaptured = (command, args, options) => {
118
+ // Unit tests must inject a captured-stdio seam. Never let an omitted double reach a real
119
+ // OS credential store (most critically, a macOS Keychain write).
120
+ if (process.env.VITEST !== undefined)
121
+ throw new KeyringUnavailableError();
122
+ return nodeSpawnSync(command, args, options);
123
+ };
124
+ function keyringFailure(operation, classification) {
125
+ return new Error(`keyring ${operation} failed: ${classification}`);
126
+ }
127
+ function capturedOutput(value) {
128
+ // A real spawnSync Buffer becomes caller-owned so its KEK bytes can be zeroized directly.
129
+ if (Buffer.isBuffer(value))
130
+ return value;
131
+ if (value instanceof Uint8Array)
132
+ return Buffer.from(value);
133
+ if (typeof value === "string")
134
+ return Buffer.from(value, "utf8");
135
+ return Buffer.alloc(0);
136
+ }
137
+ function wipeCaptured(value) {
138
+ if (Buffer.isBuffer(value) || value instanceof Uint8Array)
139
+ value.fill(0);
140
+ }
141
+ function runCaptured(operation, command, args, input, spawn) {
142
+ const baseOptions = {
143
+ windowsHide: true,
144
+ stdio: "pipe",
145
+ encoding: "buffer",
146
+ };
147
+ const options = input === undefined
148
+ ? baseOptions
149
+ : { ...baseOptions, input };
150
+ let result;
151
+ try {
152
+ result = spawn(command, args, options);
153
+ }
154
+ catch (error) {
155
+ if (error instanceof KeyringUnavailableError)
156
+ throw new KeyringUnavailableError();
157
+ // Never retain a child error as cause: child messages commonly contain argv and stdio.
158
+ throw keyringFailure(operation, "launch");
159
+ }
160
+ let childError;
161
+ let status;
162
+ let stdout;
163
+ let stderr;
164
+ try {
165
+ childError = result.error;
166
+ status = result.status;
167
+ stdout = result.stdout;
168
+ stderr = result.stderr;
169
+ }
170
+ catch {
171
+ throw keyringFailure(operation, "launch");
172
+ }
173
+ if (childError !== undefined || status !== 0) {
174
+ wipeCaptured(stdout);
175
+ wipeCaptured(stderr);
176
+ throw keyringFailure(operation, childError !== undefined ? "launch" : "exit");
177
+ }
178
+ try {
179
+ const output = capturedOutput(stdout);
180
+ if (!Buffer.isBuffer(stdout))
181
+ wipeCaptured(stdout);
182
+ wipeCaptured(stderr);
183
+ return output;
184
+ }
185
+ catch {
186
+ wipeCaptured(stdout);
187
+ wipeCaptured(stderr);
188
+ throw keyringFailure(operation, "output");
189
+ }
190
+ }
191
+ function isNonEmptyPassphrase(passphrase) {
192
+ return typeof passphrase === "string" ? passphrase.length > 0 : Buffer.isBuffer(passphrase) && passphrase.length > 0;
193
+ }
194
+ function encodeBase64Bytes(value) {
195
+ const output = Buffer.alloc(Math.ceil(value.length / 3) * 4);
196
+ let source = 0;
197
+ let target = 0;
198
+ while (source < value.length) {
199
+ const remaining = value.length - source;
200
+ const first = value[source++];
201
+ const second = remaining > 1 ? value[source++] : 0;
202
+ const third = remaining > 2 ? value[source++] : 0;
203
+ output[target++] = BASE64_ALPHABET[first >>> 2];
204
+ output[target++] = BASE64_ALPHABET[((first & 0x03) << 4) | (second >>> 4)];
205
+ output[target++] = remaining > 1
206
+ ? BASE64_ALPHABET[((second & 0x0f) << 2) | (third >>> 6)]
207
+ : 0x3d;
208
+ output[target++] = remaining > 2 ? BASE64_ALPHABET[third & 0x3f] : 0x3d;
209
+ }
210
+ return output;
211
+ }
212
+ function encodeSecretForLineInput(kek) {
213
+ // secret-tool reads until EOF; no newline is included in the stored secret.
214
+ return encodeBase64Bytes(kek);
215
+ }
216
+ function encodeKeychainStoreInput(kek, keyId) {
217
+ const prefix = Buffer.from(`add-generic-password -a ${keyringId(keyId)} -s ${KEYCHAIN_SERVICE} -U -w `, "ascii");
218
+ const encoded = encodeBase64Bytes(kek);
219
+ try {
220
+ return Buffer.concat([prefix, encoded, Buffer.from("\n", "ascii")]);
221
+ }
222
+ finally {
223
+ encoded.fill(0);
224
+ }
225
+ }
226
+ function decodeCanonicalBase64(value) {
227
+ if (value.length === 0 || !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(value)) {
228
+ return undefined;
229
+ }
230
+ const decoded = Buffer.from(value, "base64");
231
+ return decoded.toString("base64") === value ? decoded : undefined;
232
+ }
233
+ function decodeLineSecret(output, operation) {
234
+ let end = output.length;
235
+ if (end > 0 && output[end - 1] === 0x0a)
236
+ end -= 1;
237
+ if (end > 0 && output[end - 1] === 0x0d)
238
+ end -= 1;
239
+ const serialized = output.subarray(0, end);
240
+ if (serialized.length === 0 || serialized.length % 4 !== 0) {
241
+ throw keyringFailure(operation, "output");
242
+ }
243
+ const padding = serialized.at(-1) === 0x3d ? (serialized.at(-2) === 0x3d ? 2 : 1) : 0;
244
+ const decoded = Buffer.alloc((serialized.length / 4) * 3 - padding);
245
+ let target = 0;
246
+ for (let source = 0; source < serialized.length; source += 4) {
247
+ const last = source + 4 === serialized.length;
248
+ const a = BASE64_REVERSE[serialized[source]] ?? -1;
249
+ const b = BASE64_REVERSE[serialized[source + 1]] ?? -1;
250
+ const cByte = serialized[source + 2];
251
+ const dByte = serialized[source + 3];
252
+ const c = cByte === 0x3d && last ? 0 : (BASE64_REVERSE[cByte] ?? -1);
253
+ const d = dByte === 0x3d && last ? 0 : (BASE64_REVERSE[dByte] ?? -1);
254
+ const validPadding = (!last && cByte !== 0x3d && dByte !== 0x3d)
255
+ || (last && padding === 0 && cByte !== 0x3d && dByte !== 0x3d)
256
+ || (last && padding === 1 && cByte !== 0x3d && dByte === 0x3d && (c & 0x03) === 0)
257
+ || (last && padding === 2 && cByte === 0x3d && dByte === 0x3d && (b & 0x0f) === 0);
258
+ if (a < 0 || b < 0 || c < 0 || d < 0 || !validPadding) {
259
+ decoded.fill(0);
260
+ throw keyringFailure(operation, "output");
261
+ }
262
+ if (target < decoded.length)
263
+ decoded[target++] = (a << 2) | (b >>> 4);
264
+ if (target < decoded.length)
265
+ decoded[target++] = ((b & 0x0f) << 4) | (c >>> 2);
266
+ if (target < decoded.length)
267
+ decoded[target++] = ((c & 0x03) << 6) | d;
268
+ }
269
+ if (decoded.length !== KEK_BYTES) {
270
+ decoded.fill(0);
271
+ throw keyringFailure(operation, "output");
272
+ }
273
+ return decoded;
274
+ }
275
+ function validateKek(kek) {
276
+ if (!Buffer.isBuffer(kek) || kek.length !== KEK_BYTES) {
277
+ throw keyringFailure("wrap", "input");
278
+ }
279
+ }
280
+ function selectMode(options) {
281
+ if (options.mode !== undefined)
282
+ return options.mode;
283
+ const platform = options.platform ?? process.platform;
284
+ if (platform === "win32")
285
+ return "dpapi";
286
+ if (platform === "darwin")
287
+ return "keychain";
288
+ if (platform === "linux") {
289
+ const env = options.env ?? process.env;
290
+ const commandExists = options.commandExists ?? commandExistsOnPath;
291
+ if (commandExists("secret-tool", env))
292
+ return "libsecret";
293
+ if (isNonEmptyPassphrase(options.passphrase))
294
+ return "passphrase";
295
+ }
296
+ throw new KeyringUnavailableError();
297
+ }
298
+ /**
299
+ * Wrap/store an existing random KEK in an OS facility.
300
+ *
301
+ * Passphrase mode is intentionally absent: its exact v1 format has only KDF parameters and no
302
+ * encrypted blob, so `createPassphraseKek` derives the KEK instead of pretending to wrap one.
303
+ */
304
+ export function wrapKek(kek, options = {}) {
305
+ validateKek(kek);
306
+ const mode = options.mode ?? selectMode(options);
307
+ const spawn = options.spawnSync ?? spawnCaptured;
308
+ if (mode === "dpapi") {
309
+ const output = runCaptured("wrap", windowsPowerShellPath(options.env), dpapiWrapArgv(), kek, spawn);
310
+ if (output.length === 0) {
311
+ output.fill(0);
312
+ throw keyringFailure("wrap", "output");
313
+ }
314
+ return { wrap: "dpapi", blob: output.toString("base64") };
315
+ }
316
+ if (mode === "keychain") {
317
+ // SecurityTool's direct add form requires `-w <password>` in the child argv. Interactive mode
318
+ // parses the same bounded command from stdin, keeping the base64 KEK out of the process table.
319
+ const input = encodeKeychainStoreInput(kek, options.keyId);
320
+ try {
321
+ const output = runCaptured("wrap", "security", keychainStoreArgv(), input, spawn);
322
+ output.fill(0);
323
+ }
324
+ finally {
325
+ input.fill(0);
326
+ }
327
+ return { wrap: "keychain" };
328
+ }
329
+ const input = encodeSecretForLineInput(kek);
330
+ try {
331
+ const output = runCaptured("wrap", "secret-tool", libsecretStoreArgv(options.keyId), input, spawn);
332
+ output.fill(0);
333
+ }
334
+ finally {
335
+ input.fill(0);
336
+ }
337
+ return { wrap: "libsecret" };
338
+ }
339
+ function validKdf(kdf) {
340
+ return kdf?.n === 16384
341
+ && kdf.r === 8
342
+ && kdf.p === 1
343
+ && decodeCanonicalBase64(kdf.salt)?.length === SCRYPT_SALT_BYTES;
344
+ }
345
+ /** Derive one 256-bit KEK without changing caller-owned passphrase bytes. */
346
+ export function derivePassphraseKek(passphrase, kdf) {
347
+ if (!isNonEmptyPassphrase(passphrase) || !validKdf(kdf)) {
348
+ throw keyringFailure("unwrap", "kdf");
349
+ }
350
+ const salt = decodeCanonicalBase64(kdf.salt);
351
+ if (!salt)
352
+ throw keyringFailure("unwrap", "kdf");
353
+ try {
354
+ return scryptSync(passphrase, salt, KEK_BYTES, {
355
+ N: kdf.n,
356
+ r: kdf.r,
357
+ p: kdf.p,
358
+ maxmem: SCRYPT_MAXMEM,
359
+ });
360
+ }
361
+ catch {
362
+ throw keyringFailure("unwrap", "kdf");
363
+ }
364
+ }
365
+ export function createPassphraseKek(passphrase, options = {}) {
366
+ if (!isNonEmptyPassphrase(passphrase))
367
+ throw new KeyringPassphraseRequiredError();
368
+ const salt = (options.randomBytes ?? nodeRandomBytes)(SCRYPT_SALT_BYTES);
369
+ if (!Buffer.isBuffer(salt) || salt.length !== SCRYPT_SALT_BYTES) {
370
+ throw keyringFailure("wrap", "kdf");
371
+ }
372
+ const kdf = {
373
+ n: 16384,
374
+ r: 8,
375
+ p: 1,
376
+ salt: salt.toString("base64"),
377
+ };
378
+ try {
379
+ return { kek: derivePassphraseKek(passphrase, kdf), descriptor: { wrap: "passphrase", kdf } };
380
+ }
381
+ finally {
382
+ salt.fill(0);
383
+ }
384
+ }
385
+ /** Create a KEK using the selected platform custody mechanism. */
386
+ export function createKek(options = {}) {
387
+ const mode = selectMode(options);
388
+ if (mode === "passphrase") {
389
+ if (!isNonEmptyPassphrase(options.passphrase))
390
+ throw new KeyringPassphraseRequiredError();
391
+ return createPassphraseKek(options.passphrase, options.randomBytes === undefined ? {} : { randomBytes: options.randomBytes });
392
+ }
393
+ const kek = (options.randomBytes ?? nodeRandomBytes)(KEK_BYTES);
394
+ if (!Buffer.isBuffer(kek) || kek.length !== KEK_BYTES) {
395
+ throw keyringFailure("wrap", "input");
396
+ }
397
+ try {
398
+ const wrapOptions = { mode };
399
+ if (options.platform !== undefined)
400
+ wrapOptions.platform = options.platform;
401
+ if (options.env !== undefined)
402
+ wrapOptions.env = options.env;
403
+ if (options.spawnSync !== undefined)
404
+ wrapOptions.spawnSync = options.spawnSync;
405
+ if (options.commandExists !== undefined)
406
+ wrapOptions.commandExists = options.commandExists;
407
+ if (options.randomBytes !== undefined)
408
+ wrapOptions.randomBytes = options.randomBytes;
409
+ if (options.keyId !== undefined)
410
+ wrapOptions.keyId = options.keyId;
411
+ return {
412
+ kek,
413
+ descriptor: wrapKek(kek, wrapOptions),
414
+ };
415
+ }
416
+ catch (error) {
417
+ kek.fill(0);
418
+ throw error;
419
+ }
420
+ }
421
+ /** Lazily recover a KEK. The returned Buffer is owned by the caller. */
422
+ export function unwrapKek(descriptor, options = {}) {
423
+ const spawn = options.spawnSync ?? spawnCaptured;
424
+ if (descriptor.wrap === "dpapi") {
425
+ if (descriptor.kdf !== undefined || typeof descriptor.blob !== "string") {
426
+ throw keyringFailure("unwrap", "descriptor");
427
+ }
428
+ const blob = decodeCanonicalBase64(descriptor.blob);
429
+ if (!blob)
430
+ throw keyringFailure("unwrap", "descriptor");
431
+ const output = runCaptured("unwrap", windowsPowerShellPath(options.env), dpapiUnwrapArgv(), blob, spawn);
432
+ if (output.length !== KEK_BYTES) {
433
+ output.fill(0);
434
+ throw keyringFailure("unwrap", "output");
435
+ }
436
+ return output;
437
+ }
438
+ if (descriptor.wrap === "keychain") {
439
+ if (descriptor.blob !== undefined || descriptor.kdf !== undefined) {
440
+ throw keyringFailure("unwrap", "descriptor");
441
+ }
442
+ const output = runCaptured("unwrap", "security", keychainLoadArgv(options.keyId), undefined, spawn);
443
+ try {
444
+ return decodeLineSecret(output, "unwrap");
445
+ }
446
+ finally {
447
+ output.fill(0);
448
+ }
449
+ }
450
+ if (descriptor.wrap === "libsecret") {
451
+ if (descriptor.blob !== undefined || descriptor.kdf !== undefined) {
452
+ throw keyringFailure("unwrap", "descriptor");
453
+ }
454
+ const output = runCaptured("unwrap", "secret-tool", libsecretLoadArgv(options.keyId), undefined, spawn);
455
+ try {
456
+ return decodeLineSecret(output, "unwrap");
457
+ }
458
+ finally {
459
+ output.fill(0);
460
+ }
461
+ }
462
+ if (descriptor.wrap === "passphrase") {
463
+ if (descriptor.blob !== undefined || !validKdf(descriptor.kdf)) {
464
+ throw keyringFailure("unwrap", "descriptor");
465
+ }
466
+ if (!isNonEmptyPassphrase(options.passphrase))
467
+ throw new KeyringPassphraseRequiredError();
468
+ return derivePassphraseKek(options.passphrase, descriptor.kdf);
469
+ }
470
+ throw keyringFailure("unwrap", "descriptor");
471
+ }
472
+ /** Constant-time helper for tests and callers that verify a passphrase-derived round trip. */
473
+ export function sameKek(left, right) {
474
+ return left.length === right.length && timingSafeEqual(left, right);
475
+ }
476
+ //# sourceMappingURL=os-keyring.js.map