@vex-chat/crypto 2.0.0 → 2.1.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.
package/dist/index.js CHANGED
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Copyright (c) 2020-2026 Vex Heavy Industries LLC
3
+ * Licensed under AGPL-3.0. See LICENSE for details.
4
+ * Commercial licenses available at vex.wtf
5
+ */
1
6
  import { hkdf } from "@noble/hashes/hkdf.js";
2
7
  import { hmac } from "@noble/hashes/hmac.js";
3
8
  import { pbkdf2 as noblePbkdf2 } from "@noble/hashes/pbkdf2.js";
@@ -9,6 +14,161 @@ import ed2curve from "ed2curve";
9
14
  import { Packr } from "msgpackr";
10
15
  import nacl from "tweetnacl";
11
16
  import { z } from "zod/v4";
17
+ function getWebCrypto() {
18
+ const cryptoCandidate = globalThis.crypto;
19
+ if (!isWebCryptoLike(cryptoCandidate)) {
20
+ throw new Error("Web Crypto API is not available in this runtime for fips profile operations.");
21
+ }
22
+ return cryptoCandidate;
23
+ }
24
+ function isWebCryptoLike(value) {
25
+ if (typeof value !== "object" || value === null) {
26
+ return false;
27
+ }
28
+ return ("getRandomValues" in value &&
29
+ typeof value.getRandomValues === "function" &&
30
+ "subtle" in value &&
31
+ typeof value.subtle === "object" &&
32
+ value.subtle !== null);
33
+ }
34
+ function randomBytesWebCrypto(length) {
35
+ if (!Number.isInteger(length) || length < 0) {
36
+ throw new Error(`Expected non-negative integer length, received ${String(length)}.`);
37
+ }
38
+ const cryptoImpl = getWebCrypto();
39
+ const result = new Uint8Array(length);
40
+ let offset = 0;
41
+ while (offset < length) {
42
+ const chunkLength = Math.min(65536, length - offset);
43
+ const chunk = result.subarray(offset, offset + chunkLength);
44
+ cryptoImpl.getRandomValues(chunk);
45
+ offset += chunkLength;
46
+ }
47
+ return result;
48
+ }
49
+ function unsupported(profile, operation) {
50
+ throw new Error(`Crypto profile "${profile}" does not implement ${operation} yet.`);
51
+ }
52
+ const tweetnaclProvider = {
53
+ boxBefore: (myPrivateKey, theirPublicKey) => nacl.box.before(theirPublicKey, myPrivateKey),
54
+ boxKeyPair: () => nacl.box.keyPair(),
55
+ boxKeyPairFromSecret: (secretKey) => nacl.box.keyPair.fromSecretKey(secretKey),
56
+ profile: "tweetnacl",
57
+ randomBytes: (length) => nacl.randomBytes(length),
58
+ secretbox: (plaintext, nonce, key) => nacl.secretbox(plaintext, nonce, key),
59
+ secretboxOpen: (ciphertext, nonce, key) => nacl.secretbox.open(ciphertext, nonce, key),
60
+ sign: (message, secretKey) => nacl.sign(message, secretKey),
61
+ signKeyPair: () => nacl.sign.keyPair(),
62
+ signKeyPairFromSecret: (secretKey) => nacl.sign.keyPair.fromSecretKey(secretKey),
63
+ signOpen: (signedMessage, publicKey) => nacl.sign.open(signedMessage, publicKey),
64
+ };
65
+ const fipsProvider = {
66
+ boxBefore: (myPrivateKey, theirPublicKey) => {
67
+ void myPrivateKey;
68
+ void theirPublicKey;
69
+ return unsupported("fips", "xDH");
70
+ },
71
+ boxKeyPair: () => unsupported("fips", "xBoxKeyPair"),
72
+ boxKeyPairFromSecret: (secretKey) => {
73
+ void secretKey;
74
+ return unsupported("fips", "xBoxKeyPairFromSecret");
75
+ },
76
+ profile: "fips",
77
+ randomBytes: (length) => randomBytesWebCrypto(length),
78
+ secretbox: (plaintext, nonce, key) => {
79
+ void plaintext;
80
+ void nonce;
81
+ void key;
82
+ return unsupported("fips", "xSecretbox");
83
+ },
84
+ secretboxOpen: (ciphertext, nonce, key) => {
85
+ void ciphertext;
86
+ void nonce;
87
+ void key;
88
+ return unsupported("fips", "xSecretboxOpen");
89
+ },
90
+ sign: (message, secretKey) => {
91
+ void message;
92
+ void secretKey;
93
+ return unsupported("fips", "xSign");
94
+ },
95
+ signKeyPair: () => unsupported("fips", "xSignKeyPair"),
96
+ signKeyPairFromSecret: (secretKey) => {
97
+ void secretKey;
98
+ return unsupported("fips", "xSignKeyPairFromSecret");
99
+ },
100
+ signOpen: (signedMessage, publicKey) => {
101
+ void signedMessage;
102
+ void publicKey;
103
+ return unsupported("fips", "xSignOpen");
104
+ },
105
+ };
106
+ const providers = {
107
+ fips: fipsProvider,
108
+ tweetnacl: tweetnaclProvider,
109
+ };
110
+ let activeCryptoProfile = "tweetnacl";
111
+ let activeCryptoProvider = providers[activeCryptoProfile];
112
+ /** Returns the currently configured crypto profile. */
113
+ export function getCryptoProfile() {
114
+ return activeCryptoProfile;
115
+ }
116
+ /**
117
+ * Sets the runtime crypto profile.
118
+ *
119
+ * `tweetnacl` preserves existing behavior.
120
+ * `fips` currently enables only backend-agnostic helpers; NaCl-coupled
121
+ * primitives throw until a FIPS backend implementation is wired in.
122
+ */
123
+ export function setCryptoProfile(profile) {
124
+ activeCryptoProfile = profile;
125
+ activeCryptoProvider = providers[profile];
126
+ }
127
+ function concatBytes(a, b) {
128
+ const out = new Uint8Array(a.length + b.length);
129
+ out.set(a, 0);
130
+ out.set(b, a.length);
131
+ return out;
132
+ }
133
+ function decodeFipsSignedMessage(signedMessage) {
134
+ if (signedMessage.length < 2) {
135
+ throw new Error("Invalid FIPS signed message: missing signature length prefix.");
136
+ }
137
+ const signatureLength = (signedMessage[0] ?? 0) * 256 + (signedMessage[1] ?? 0);
138
+ const signatureStart = 2;
139
+ const signatureEnd = signatureStart + signatureLength;
140
+ if (signedMessage.length < signatureEnd) {
141
+ throw new Error("Invalid FIPS signed message: signature length exceeds message length.");
142
+ }
143
+ return {
144
+ message: signedMessage.slice(signatureEnd),
145
+ signature: signedMessage.slice(signatureStart, signatureEnd),
146
+ };
147
+ }
148
+ function encodeFipsSignedMessage(signature, message) {
149
+ if (signature.length > 65535) {
150
+ throw new Error("FIPS signature too long to encode.");
151
+ }
152
+ const prefix = new Uint8Array(2);
153
+ prefix[0] = (signature.length >> 8) & 0xff;
154
+ prefix[1] = signature.length & 0xff;
155
+ return concatBytes(concatBytes(prefix, signature), message);
156
+ }
157
+ function getSubtleCrypto() {
158
+ return getWebCrypto().subtle;
159
+ }
160
+ function provider() {
161
+ return activeCryptoProvider;
162
+ }
163
+ function requireAesGcmNonce(nonce) {
164
+ if (nonce.length < 12) {
165
+ throw new Error(`AES-GCM requires a nonce of at least 12 bytes, received ${String(nonce.length)}.`);
166
+ }
167
+ return nonce.slice(0, 12);
168
+ }
169
+ function toBufferSource(bytes) {
170
+ return Uint8Array.from(bytes).buffer;
171
+ }
12
172
  // msgpackr with useRecords:false emits standard msgpack (no nonstandard record extension).
13
173
  // moreTypes:false keeps the extension set to only what other decoders understand.
14
174
  // pack() returns Node Buffer (tight view) so consumers like axios send the correct bytes.
@@ -32,6 +192,7 @@ export class XUtils {
32
192
  static encodeUTF8 = encodeUTF8;
33
193
  /**
34
194
  * Checks if two buffer-like objects are equal.
195
+ * When lengths match, comparison is constant-time in the inputs (no early exit on first differing byte).
35
196
  *
36
197
  * @param buf1
37
198
  * @param buf2
@@ -44,12 +205,16 @@ export class XUtils {
44
205
  if (a.byteLength !== b.byteLength) {
45
206
  return false;
46
207
  }
208
+ let diff = 0;
47
209
  for (let i = 0; i !== a.byteLength; i++) {
48
- if (a[i] !== b[i]) {
210
+ const x = a[i];
211
+ const y = b[i];
212
+ if (x === undefined || y === undefined) {
49
213
  return false;
50
214
  }
215
+ diff |= x ^ y;
51
216
  }
52
- return true;
217
+ return diff === 0;
53
218
  }
54
219
  /**
55
220
  * Decodes a hex string into a Uint8Array.
@@ -80,12 +245,33 @@ export class XUtils {
80
245
  c: ITERATIONS,
81
246
  dkLen: 32,
82
247
  });
83
- const DECRYPTED_SIGNKEY = nacl.secretbox.open(ENCRYPTED_KEY, ENCRYPTION_NONCE, DERIVED_KEY);
248
+ const DECRYPTED_SIGNKEY = provider().secretboxOpen(ENCRYPTED_KEY, ENCRYPTION_NONCE, DERIVED_KEY);
84
249
  if (DECRYPTED_SIGNKEY === null) {
85
250
  throw new Error("Decryption failed. Wrong password?");
86
251
  }
87
252
  return XUtils.encodeHex(DECRYPTED_SIGNKEY);
88
253
  };
254
+ /**
255
+ * Async variant of decryptKeyData for cross-runtime/FIPS backends.
256
+ * Supports both profile formats emitted by encryptKeyDataAsync.
257
+ */
258
+ static decryptKeyDataAsync = async (keyData, password) => {
259
+ const ITERATIONS = XUtils.uint8ArrToNumber(keyData.slice(0, 6));
260
+ const PKBDF_SALT = keyData.slice(6, 30);
261
+ const ENCRYPTION_NONCE = keyData.slice(30, 54);
262
+ const ENCRYPTED_KEY = keyData.slice(54);
263
+ const DERIVED_KEY = noblePbkdf2(sha512, password, PKBDF_SALT, {
264
+ c: ITERATIONS,
265
+ dkLen: 32,
266
+ });
267
+ const decrypted = activeCryptoProfile === "fips"
268
+ ? await xSecretboxOpenAsync(ENCRYPTED_KEY, ENCRYPTION_NONCE, DERIVED_KEY)
269
+ : xSecretboxOpen(ENCRYPTED_KEY, ENCRYPTION_NONCE, DERIVED_KEY);
270
+ if (decrypted === null) {
271
+ throw new Error("Decryption failed. Wrong password?");
272
+ }
273
+ return XUtils.encodeHex(decrypted);
274
+ };
89
275
  /**
90
276
  * Returns the empty header (32 0's)
91
277
  *
@@ -103,25 +289,21 @@ export class XUtils {
103
289
  return bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, "0"), "");
104
290
  }
105
291
  /**
106
- * Encrypts a secret key with a password and saves it as a file.
107
- *
108
- * @param path The path to save the keyfile.
109
- /**
110
- * Encrypts a secret key into a portable binary format.
111
- * The result can be written to disk, sent over the network, etc.
112
- * No I/O the caller handles persistence.
113
- *
114
- * Format: [iterations(6)|salt(24)|nonce(24)|ciphertext(N)]
115
- *
116
- * @param password The password to derive the encryption key from.
117
- * @param keyToSave The hex-encoded secret key to encrypt.
118
- * @param iterationOverride Optional PBKDF2 iteration count (random if omitted).
119
- * @returns The encrypted key data as a Uint8Array.
120
- */
292
+ * Encrypts a secret key into a portable binary format.
293
+ * The result can be written to disk, sent over the network, etc.
294
+ * No I/O the caller handles persistence.
295
+ *
296
+ * Format: [iterations(6)|salt(24)|nonce(24)|ciphertext(N)]
297
+ *
298
+ * @param password The password to derive the encryption key from.
299
+ * @param keyToSave The hex-encoded secret key to encrypt.
300
+ * @param iterationOverride Optional PBKDF2 iteration count (random if omitted).
301
+ * @returns The encrypted key data as a Uint8Array.
302
+ */
121
303
  static encryptKeyData = (password, keyToSave, iterationOverride) => {
122
304
  const UNENCRYPTED_SIGNKEY = XUtils.decodeHex(keyToSave);
123
305
  const OFFSET = 1000;
124
- const rand = nacl.randomBytes(2);
306
+ const rand = provider().randomBytes(2);
125
307
  const [N1 = 0, N2 = 0] = rand;
126
308
  const iterations = iterationOverride !== undefined && iterationOverride !== 0
127
309
  ? iterationOverride
@@ -133,7 +315,43 @@ export class XUtils {
133
315
  dkLen: 32,
134
316
  });
135
317
  const NONCE = xMakeNonce();
136
- const ENCRYPTED_SIGNKEY = nacl.secretbox(UNENCRYPTED_SIGNKEY, NONCE, ENCRYPTION_KEY);
318
+ const ENCRYPTED_SIGNKEY = provider().secretbox(UNENCRYPTED_SIGNKEY, NONCE, ENCRYPTION_KEY);
319
+ const result = new Uint8Array(ITERATIONS.length +
320
+ PKBDF_SALT.length +
321
+ NONCE.length +
322
+ ENCRYPTED_SIGNKEY.length);
323
+ let offset = 0;
324
+ result.set(ITERATIONS, offset);
325
+ offset += ITERATIONS.length;
326
+ result.set(PKBDF_SALT, offset);
327
+ offset += PKBDF_SALT.length;
328
+ result.set(NONCE, offset);
329
+ offset += NONCE.length;
330
+ result.set(ENCRYPTED_SIGNKEY, offset);
331
+ return result;
332
+ };
333
+ /**
334
+ * Async variant of encryptKeyData for cross-runtime/FIPS backends.
335
+ * Format remains [iterations(6)|salt(24)|nonce(24)|ciphertext(N)].
336
+ */
337
+ static encryptKeyDataAsync = async (password, keyToSave, iterationOverride) => {
338
+ const UNENCRYPTED_SIGNKEY = XUtils.decodeHex(keyToSave);
339
+ const OFFSET = 1000;
340
+ const rand = xRandomBytes(2);
341
+ const [N1 = 0, N2 = 0] = rand;
342
+ const iterations = iterationOverride !== undefined && iterationOverride !== 0
343
+ ? iterationOverride
344
+ : N1 * N2 + OFFSET;
345
+ const ITERATIONS = XUtils.numberToUint8Arr(iterations);
346
+ const PKBDF_SALT = xMakeNonce();
347
+ const ENCRYPTION_KEY = noblePbkdf2(sha512, password, PKBDF_SALT, {
348
+ c: iterations,
349
+ dkLen: 32,
350
+ });
351
+ const NONCE = xMakeNonce();
352
+ const ENCRYPTED_SIGNKEY = activeCryptoProfile === "fips"
353
+ ? await xSecretboxAsync(UNENCRYPTED_SIGNKEY, NONCE, ENCRYPTION_KEY)
354
+ : xSecretbox(UNENCRYPTED_SIGNKEY, NONCE, ENCRYPTION_KEY);
137
355
  const result = new Uint8Array(ITERATIONS.length +
138
356
  PKBDF_SALT.length +
139
357
  NONCE.length +
@@ -170,7 +388,8 @@ export class XUtils {
170
388
  /**
171
389
  * Packs a javascript object and a 32 byte header into a vex message.
172
390
  *
173
- * @param arr The array to convert.
391
+ * @param msg Message body (msgpack-serialized).
392
+ * @param header Optional 32-byte header; defaults to an empty header.
174
393
  * @returns the packed message.
175
394
  */
176
395
  static packMessage(msg, header) {
@@ -193,9 +412,9 @@ export class XUtils {
193
412
  }
194
413
  /**
195
414
  * Takes a vex message and unpacks it into its header and a javascript object
196
- * respresentation of its body.
415
+ * representation of its body.
197
416
  *
198
- * @param arr The array to convert.
417
+ * @param msg Full wire message (32-byte header + msgpack body).
199
418
  * @returns [32 byte header, message body]
200
419
  */
201
420
  static unpackMessage(msg) {
@@ -245,12 +464,33 @@ export const xConstants = {
245
464
  };
246
465
  /** Generate a fresh X25519 box key pair. */
247
466
  export function xBoxKeyPair() {
248
- return nacl.box.keyPair();
467
+ return provider().boxKeyPair();
468
+ }
469
+ /** Async box keypair generation for the active profile. */
470
+ export async function xBoxKeyPairAsync() {
471
+ if (activeCryptoProfile === "tweetnacl") {
472
+ return xBoxKeyPair();
473
+ }
474
+ const subtle = getSubtleCrypto();
475
+ const pair = await subtle.generateKey({ name: "ECDH", namedCurve: "P-256" }, true, ["deriveBits"]);
476
+ return {
477
+ publicKey: new Uint8Array(await subtle.exportKey("raw", pair.publicKey)),
478
+ secretKey: new Uint8Array(await subtle.exportKey("pkcs8", pair.privateKey)),
479
+ };
249
480
  }
250
481
  /** Restore an X25519 box key pair from a 32-byte secret key. */
251
482
  export function xBoxKeyPairFromSecret(secretKey) {
252
- return nacl.box.keyPair.fromSecretKey(secretKey);
483
+ return provider().boxKeyPairFromSecret(secretKey);
484
+ }
485
+ /** Async box key restore from private key material. */
486
+ export function xBoxKeyPairFromSecretAsync(secretKey) {
487
+ if (activeCryptoProfile === "tweetnacl") {
488
+ return Promise.resolve(xBoxKeyPairFromSecret(secretKey));
489
+ }
490
+ void secretKey;
491
+ return Promise.reject(new Error('Crypto profile "fips" does not implement xBoxKeyPairFromSecretAsync yet.'));
253
492
  }
493
+ // ── Key pair type ───────────────────────────────────────────────────────────
254
494
  /**
255
495
  * Concatanates multiple Uint8Arrays.
256
496
  *
@@ -271,6 +511,7 @@ export function xConcat(...arrays) {
271
511
  }
272
512
  return result;
273
513
  }
514
+ // ── Key generation ─────────────────────────────────────────────────────────
274
515
  /**
275
516
  * Derives a shared Secret Key from a known private key and
276
517
  * a peer's known public key.
@@ -280,9 +521,19 @@ export function xConcat(...arrays) {
280
521
  * @returns The derived shared secret, SK.
281
522
  */
282
523
  export function xDH(myPrivateKey, theirPublicKey) {
283
- return nacl.box.before(theirPublicKey, myPrivateKey);
524
+ return provider().boxBefore(myPrivateKey, theirPublicKey);
525
+ }
526
+ /** Async DH for cross-runtime/FIPS backends. */
527
+ export async function xDHAsync(myPrivateKey, theirPublicKey) {
528
+ if (activeCryptoProfile === "tweetnacl") {
529
+ return xDH(myPrivateKey, theirPublicKey);
530
+ }
531
+ const subtle = getSubtleCrypto();
532
+ const privateKey = await importEcdhPrivateKey(myPrivateKey);
533
+ const publicKey = await importEcdhPublicKey(theirPublicKey);
534
+ const shared = await subtle.deriveBits({ name: "ECDH", public: publicKey }, privateKey, 256);
535
+ return new Uint8Array(shared);
284
536
  }
285
- // ── Key pair type ───────────────────────────────────────────────────────────
286
537
  /**
287
538
  * Encode an X25519 or X448 public key PK into a byte sequence.
288
539
  * The encoding consists of 0 or 1 to represent the type of curve, followed by l
@@ -316,7 +567,6 @@ export function xEncode(curveType, publicKey) {
316
567
  }
317
568
  return Uint8Array.from(bytes);
318
569
  }
319
- // ── Key generation ─────────────────────────────────────────────────────────
320
570
  /**
321
571
  * Hashes some data.
322
572
  *
@@ -326,6 +576,7 @@ export function xEncode(curveType, publicKey) {
326
576
  export function xHash(data) {
327
577
  return XUtils.encodeHex(sha512(data));
328
578
  }
579
+ // ── Signing ────────────────────────────────────────────────────────────────
329
580
  export function xKDF(IKM) {
330
581
  return hkdf(sha512, IKM, xMakeSalt(xConstants.CURVE), new TextEncoder().encode(xConstants.INFO), xConstants.KEY_LENGTH);
331
582
  }
@@ -333,41 +584,123 @@ export function xKDF(IKM) {
333
584
  * Returns a 24 byte random nonce of cryptographic quality.
334
585
  */
335
586
  export function xMakeNonce() {
336
- return nacl.randomBytes(24);
587
+ return provider().randomBytes(24);
337
588
  }
589
+ // ── Symmetric encryption (XSalsa20-Poly1305) ──────────────────────────────
338
590
  /** Cryptographically secure random bytes. */
339
591
  export function xRandomBytes(length) {
340
- return nacl.randomBytes(length);
592
+ return provider().randomBytes(length);
341
593
  }
342
- // ── Signing ────────────────────────────────────────────────────────────────
343
594
  /** Encrypt with a shared secret key. */
344
595
  export function xSecretbox(plaintext, nonce, key) {
345
- return nacl.secretbox(plaintext, nonce, key);
596
+ return provider().secretbox(plaintext, nonce, key);
597
+ }
598
+ // ── Random ─────────────────────────────────────────────────────────────────
599
+ /** Async authenticated encryption for cross-runtime/FIPS backends. */
600
+ export async function xSecretboxAsync(plaintext, nonce, key) {
601
+ if (activeCryptoProfile === "tweetnacl") {
602
+ return xSecretbox(plaintext, nonce, key);
603
+ }
604
+ const subtle = getSubtleCrypto();
605
+ const iv = requireAesGcmNonce(nonce);
606
+ const aesKey = await importAesKey(key, ["encrypt"]);
607
+ const ciphertext = await subtle.encrypt({ iv: toBufferSource(iv), name: "AES-GCM" }, aesKey, toBufferSource(plaintext));
608
+ return new Uint8Array(ciphertext);
346
609
  }
347
610
  /** Decrypt with a shared secret key. Returns null if authentication fails. */
348
611
  export function xSecretboxOpen(ciphertext, nonce, key) {
349
- return nacl.secretbox.open(ciphertext, nonce, key);
612
+ return provider().secretboxOpen(ciphertext, nonce, key);
613
+ }
614
+ /** Async authenticated decryption for cross-runtime/FIPS backends. */
615
+ export async function xSecretboxOpenAsync(ciphertext, nonce, key) {
616
+ if (activeCryptoProfile === "tweetnacl") {
617
+ return xSecretboxOpen(ciphertext, nonce, key);
618
+ }
619
+ const subtle = getSubtleCrypto();
620
+ const iv = requireAesGcmNonce(nonce);
621
+ const aesKey = await importAesKey(key, ["decrypt"]);
622
+ try {
623
+ const plaintext = await subtle.decrypt({ iv: toBufferSource(iv), name: "AES-GCM" }, aesKey, toBufferSource(ciphertext));
624
+ return new Uint8Array(plaintext);
625
+ }
626
+ catch {
627
+ return null;
628
+ }
350
629
  }
351
- // ── Symmetric encryption (XSalsa20-Poly1305) ──────────────────────────────
352
630
  /** Sign a message with an Ed25519 secret key. Returns signed message (64-byte signature prefix + message). */
353
631
  export function xSign(message, secretKey) {
354
- return nacl.sign(message, secretKey);
632
+ return provider().sign(message, secretKey);
633
+ }
634
+ /** Async signing for cross-runtime/FIPS backends. */
635
+ export async function xSignAsync(message, secretKey) {
636
+ if (activeCryptoProfile === "tweetnacl") {
637
+ return xSign(message, secretKey);
638
+ }
639
+ const subtle = getSubtleCrypto();
640
+ const privateKey = await importEcdsaPrivateKey(secretKey);
641
+ const signature = new Uint8Array(await subtle.sign({ hash: "SHA-256", name: "ECDSA" }, privateKey, toBufferSource(message)));
642
+ return encodeFipsSignedMessage(signature, message);
355
643
  }
356
644
  /** Generate a fresh Ed25519 signing key pair. */
357
645
  export function xSignKeyPair() {
358
- return nacl.sign.keyPair();
646
+ return provider().signKeyPair();
647
+ }
648
+ /** Async keypair generation for the active profile. */
649
+ export async function xSignKeyPairAsync() {
650
+ if (activeCryptoProfile === "tweetnacl") {
651
+ return xSignKeyPair();
652
+ }
653
+ const subtle = getSubtleCrypto();
654
+ const pair = await subtle.generateKey({ name: "ECDSA", namedCurve: "P-256" }, true, ["sign", "verify"]);
655
+ return {
656
+ publicKey: new Uint8Array(await subtle.exportKey("spki", pair.publicKey)),
657
+ secretKey: new Uint8Array(await subtle.exportKey("pkcs8", pair.privateKey)),
658
+ };
359
659
  }
360
- // ── Random ─────────────────────────────────────────────────────────────────
361
660
  /** Restore an Ed25519 signing key pair from a 64-byte secret key. */
362
661
  export function xSignKeyPairFromSecret(secretKey) {
363
- return nacl.sign.keyPair.fromSecretKey(secretKey);
662
+ return provider().signKeyPairFromSecret(secretKey);
663
+ }
664
+ /** Async restore of signing keypair for the active profile. */
665
+ export function xSignKeyPairFromSecretAsync(secretKey) {
666
+ if (activeCryptoProfile === "tweetnacl") {
667
+ return Promise.resolve(xSignKeyPairFromSecret(secretKey));
668
+ }
669
+ void secretKey;
670
+ return Promise.reject(new Error('Crypto profile "fips" does not implement xSignKeyPairFromSecretAsync yet.'));
364
671
  }
365
672
  /** Verify and open a signed message. Returns the original message, or null if verification fails. */
366
673
  export function xSignOpen(signedMessage, publicKey) {
367
- return nacl.sign.open(signedMessage, publicKey);
674
+ return provider().signOpen(signedMessage, publicKey);
675
+ }
676
+ /** Async verify/open for cross-runtime/FIPS backends. */
677
+ export async function xSignOpenAsync(signedMessage, publicKey) {
678
+ if (activeCryptoProfile === "tweetnacl") {
679
+ return xSignOpen(signedMessage, publicKey);
680
+ }
681
+ const subtle = getSubtleCrypto();
682
+ const parsed = decodeFipsSignedMessage(signedMessage);
683
+ const verifyKey = await importEcdsaPublicKey(publicKey);
684
+ const valid = await subtle.verify({ hash: "SHA-256", name: "ECDSA" }, verifyKey, toBufferSource(parsed.signature), toBufferSource(parsed.message));
685
+ return valid ? parsed.message : null;
686
+ }
687
+ async function importAesKey(key, usages) {
688
+ return getSubtleCrypto().importKey("raw", toBufferSource(key), { name: "AES-GCM" }, false, usages);
689
+ }
690
+ async function importEcdhPrivateKey(secretKey) {
691
+ return getSubtleCrypto().importKey("pkcs8", toBufferSource(secretKey), { name: "ECDH", namedCurve: "P-256" }, true, ["deriveBits"]);
692
+ }
693
+ async function importEcdhPublicKey(publicKey) {
694
+ return getSubtleCrypto().importKey("raw", toBufferSource(publicKey), { name: "ECDH", namedCurve: "P-256" }, true, []);
695
+ }
696
+ async function importEcdsaPrivateKey(secretKey) {
697
+ return getSubtleCrypto().importKey("pkcs8", toBufferSource(secretKey), { name: "ECDSA", namedCurve: "P-256" }, true, ["sign"]);
698
+ }
699
+ async function importEcdsaPublicKey(publicKey) {
700
+ return getSubtleCrypto().importKey("spki", toBufferSource(publicKey), { name: "ECDSA", namedCurve: "P-256" }, true, ["verify"]);
368
701
  }
369
702
  /**
370
- * @ignore
703
+ * @internal
371
704
  */
372
705
  function isEven(value) {
373
706
  if (value % BigInt(2) === BigInt(0)) {
@@ -378,13 +711,13 @@ function isEven(value) {
378
711
  }
379
712
  }
380
713
  /**
381
- * @ignore
714
+ * @internal
382
715
  */
383
716
  function keyLength(curve) {
384
717
  return curve === "X25519" ? 32 : 57;
385
718
  }
386
719
  /**
387
- * @ignore
720
+ * @internal
388
721
  */
389
722
  function xMakeSalt(curve) {
390
723
  const salt = new Uint8Array(keyLength(curve));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}