@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/CLA.md +38 -0
- package/LICENSE-COMMERCIAL +10 -0
- package/LICENSING.md +15 -0
- package/README.md +48 -19
- package/dist/index.d.ts +64 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +375 -42
- package/dist/index.js.map +1 -1
- package/package.json +14 -5
- package/src/__tests__/XKeyConvert.ts +6 -0
- package/src/__tests__/XUtils/bytesEqual.ts +6 -0
- package/src/__tests__/XUtils/emptyHeader.ts +6 -0
- package/src/__tests__/XUtils/numberToUint8Arr.ts +6 -0
- package/src/__tests__/XUtils/packMessage.ts +6 -0
- package/src/__tests__/XUtils/stringEncoding.ts +6 -0
- package/src/__tests__/XUtils/uint8ArrToNumber.ts +6 -0
- package/src/__tests__/XUtils/unpackMessage.ts +6 -0
- package/src/__tests__/cryptoProfile.ts +64 -0
- package/src/__tests__/xAsyncProfile.ts +69 -0
- package/src/__tests__/xConcat.ts +6 -0
- package/src/__tests__/xDH.ts +6 -0
- package/src/__tests__/xEncode.ts +6 -0
- package/src/__tests__/xHMAC.ts +6 -0
- package/src/__tests__/xMnemonic.ts +6 -0
- package/src/index.ts +606 -48
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
|
-
|
|
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
|
|
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 =
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
-
*
|
|
415
|
+
* representation of its body.
|
|
197
416
|
*
|
|
198
|
-
* @param
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
* @
|
|
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
|
-
* @
|
|
714
|
+
* @internal
|
|
382
715
|
*/
|
|
383
716
|
function keyLength(curve) {
|
|
384
717
|
return curve === "X25519" ? 32 : 57;
|
|
385
718
|
}
|
|
386
719
|
/**
|
|
387
|
-
* @
|
|
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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"}
|