@vex-chat/crypto 2.1.0 → 2.1.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.
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +155 -13
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
- package/src/__tests__/xAsyncApi.extended.test.ts +84 -0
- package/src/index.ts +254 -23
package/dist/index.d.ts
CHANGED
|
@@ -63,6 +63,13 @@ export declare class XUtils {
|
|
|
63
63
|
* Supports both profile formats emitted by encryptKeyDataAsync.
|
|
64
64
|
*/
|
|
65
65
|
static decryptKeyDataAsync: (keyData: Uint8Array, password: string) => Promise<string>;
|
|
66
|
+
/**
|
|
67
|
+
* 32-byte AES-256 key for local at-rest encryption (e.g. sqlite) derived from
|
|
68
|
+
* identity `secretKey`. For `tweetnacl` this is the 32-byte X25519 private key.
|
|
69
|
+
* For `fips` the identity secret is PKCS#8; HKDF is applied so AES keys never
|
|
70
|
+
* equal the raw private key material.
|
|
71
|
+
*/
|
|
72
|
+
static deriveLocalAtRestAesKey(identitySk: Uint8Array, profile: CryptoProfile): Uint8Array;
|
|
66
73
|
/**
|
|
67
74
|
* Returns the empty header (32 0's)
|
|
68
75
|
*
|
|
@@ -164,6 +171,13 @@ export interface XConstants {
|
|
|
164
171
|
KEY_LENGTH: 32 | 57;
|
|
165
172
|
MIN_OTK_SUPPLY: number;
|
|
166
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* FIPS: `device.signKey` in the database is the P-256 ECDSA public key (SPKI),
|
|
176
|
+
* used for account/device signature verification. X3DH on the client expects
|
|
177
|
+
* the same curve point as Web Crypto "raw" P-256 ECDH public bytes for
|
|
178
|
+
* `importEcdhPublicKey`. This converts SPKI → raw without a private key.
|
|
179
|
+
*/
|
|
180
|
+
export declare function fipsEcdhRawPublicKeyFromEcdsaSpkiAsync(ecdsaSpki: Uint8Array): Promise<Uint8Array>;
|
|
167
181
|
/** Generate a fresh X25519 box key pair. */
|
|
168
182
|
export declare function xBoxKeyPair(): KeyPair;
|
|
169
183
|
/** Async box keypair generation for the active profile. */
|
|
@@ -189,6 +203,12 @@ export declare function xConcat(...arrays: Uint8Array[]): Uint8Array;
|
|
|
189
203
|
export declare function xDH(myPrivateKey: Uint8Array, theirPublicKey: Uint8Array): Uint8Array;
|
|
190
204
|
/** Async DH for cross-runtime/FIPS backends. */
|
|
191
205
|
export declare function xDHAsync(myPrivateKey: Uint8Array, theirPublicKey: Uint8Array): Promise<Uint8Array>;
|
|
206
|
+
/**
|
|
207
|
+
* In `fips` mode only: derive a P-256 ECDH `KeyPair` (raw public + pkcs8 secret)
|
|
208
|
+
* from a P-256 ECDSA `KeyPair` (spki + pkcs8) using the same private scalar in Web Crypto.
|
|
209
|
+
* In `tweetnacl` mode, use `XKeyConvert.convertKeyPair` to map Ed25519 → X25519 instead.
|
|
210
|
+
*/
|
|
211
|
+
export declare function xEcdhKeyPairFromEcdsaKeyPairAsync(sign: KeyPair): Promise<KeyPair>;
|
|
192
212
|
/**
|
|
193
213
|
* Encode an X25519 or X448 public key PK into a byte sequence.
|
|
194
214
|
* The encoding consists of 0 or 1 to represent the type of curve, followed by l
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
1
2
|
/**
|
|
2
3
|
* Copyright (c) 2020-2026 Vex Heavy Industries LLC
|
|
3
4
|
* Licensed under AGPL-3.0. See LICENSE for details.
|
|
4
5
|
* Commercial licenses available at vex.wtf
|
|
5
6
|
*/
|
|
7
|
+
import { numberToBytesBE } from "@noble/curves/abstract/utils";
|
|
8
|
+
import { p256 } from "@noble/curves/p256";
|
|
6
9
|
import { hkdf } from "@noble/hashes/hkdf.js";
|
|
7
10
|
import { hmac } from "@noble/hashes/hmac.js";
|
|
8
11
|
import { pbkdf2 as noblePbkdf2 } from "@noble/hashes/pbkdf2.js";
|
|
@@ -124,6 +127,17 @@ export function setCryptoProfile(profile) {
|
|
|
124
127
|
activeCryptoProfile = profile;
|
|
125
128
|
activeCryptoProvider = providers[profile];
|
|
126
129
|
}
|
|
130
|
+
function bytesToBase64Url(bytes) {
|
|
131
|
+
const BufferCtor = getNodeBufferCtor();
|
|
132
|
+
if (BufferCtor !== undefined) {
|
|
133
|
+
return BufferCtor.from(bytes).toString("base64url");
|
|
134
|
+
}
|
|
135
|
+
return globalThis
|
|
136
|
+
.btoa(String.fromCodePoint(...Array.from(bytes)))
|
|
137
|
+
.replace(/\+/g, "-")
|
|
138
|
+
.replace(/\//g, "_")
|
|
139
|
+
.replace(/=+/g, "");
|
|
140
|
+
}
|
|
127
141
|
function concatBytes(a, b) {
|
|
128
142
|
const out = new Uint8Array(a.length + b.length);
|
|
129
143
|
out.set(a, 0);
|
|
@@ -154,6 +168,52 @@ function encodeFipsSignedMessage(signature, message) {
|
|
|
154
168
|
prefix[1] = signature.length & 0xff;
|
|
155
169
|
return concatBytes(concatBytes(prefix, signature), message);
|
|
156
170
|
}
|
|
171
|
+
async function fipsEcdhKeyPairFrom32ByteSeed(secretKey, subtle) {
|
|
172
|
+
if (secretKey.length !== 32) {
|
|
173
|
+
throw new Error("FIPS: expected a 32-byte IKM/seed for ECDH from-secret.");
|
|
174
|
+
}
|
|
175
|
+
const d = p256.utils.normPrivateKeyToScalar(Uint8Array.from(secretKey));
|
|
176
|
+
const d32 = numberToBytesBE(d, 32);
|
|
177
|
+
const rawPub = p256.getPublicKey(d, false);
|
|
178
|
+
if (rawPub[0] !== 0x04) {
|
|
179
|
+
throw new Error("FIPS: expected uncompressed P-256 public key.");
|
|
180
|
+
}
|
|
181
|
+
const jwk = {
|
|
182
|
+
crv: "P-256",
|
|
183
|
+
d: bytesToBase64Url(d32),
|
|
184
|
+
kty: "EC",
|
|
185
|
+
x: bytesToBase64Url(rawPub.subarray(1, 33)),
|
|
186
|
+
y: bytesToBase64Url(rawPub.subarray(33, 65)),
|
|
187
|
+
};
|
|
188
|
+
const ecdhPriv = await subtle.importKey("jwk", jwk, { name: "ECDH", namedCurve: "P-256" }, true, ["deriveBits"]);
|
|
189
|
+
const ecdhPubJwk = await subtle.exportKey("jwk", ecdhPriv);
|
|
190
|
+
const ecdhPubJwkNoD = { ...ecdhPubJwk };
|
|
191
|
+
delete ecdhPubJwkNoD.d;
|
|
192
|
+
ecdhPubJwkNoD.key_ops = [];
|
|
193
|
+
const ecdhPub = await subtle.importKey("jwk", ecdhPubJwkNoD, { name: "ECDH", namedCurve: "P-256" }, true, []);
|
|
194
|
+
return {
|
|
195
|
+
publicKey: new Uint8Array(await subtle.exportKey("raw", ecdhPub)),
|
|
196
|
+
secretKey: new Uint8Array(await subtle.exportKey("pkcs8", ecdhPriv)),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
async function fipsEcdhKeyPairFromPkcs8(secretKey, subtle) {
|
|
200
|
+
const ecdhPriv = await subtle.importKey("pkcs8", toBufferSource(secretKey), { name: "ECDH", namedCurve: "P-256" }, true, ["deriveBits"]);
|
|
201
|
+
const jwk = await subtle.exportKey("jwk", ecdhPriv);
|
|
202
|
+
const ecdhPubJwk = { ...jwk };
|
|
203
|
+
delete ecdhPubJwk.d;
|
|
204
|
+
ecdhPubJwk.key_ops = [];
|
|
205
|
+
const ecdhPub = await subtle.importKey("jwk", ecdhPubJwk, { name: "ECDH", namedCurve: "P-256" }, true, []);
|
|
206
|
+
return {
|
|
207
|
+
publicKey: new Uint8Array(await subtle.exportKey("raw", ecdhPub)),
|
|
208
|
+
secretKey: new Uint8Array(await subtle.exportKey("pkcs8", ecdhPriv)),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function getNodeBufferCtor() {
|
|
212
|
+
if (!("Buffer" in globalThis)) {
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
return globalThis.Buffer;
|
|
216
|
+
}
|
|
157
217
|
function getSubtleCrypto() {
|
|
158
218
|
return getWebCrypto().subtle;
|
|
159
219
|
}
|
|
@@ -272,6 +332,21 @@ export class XUtils {
|
|
|
272
332
|
}
|
|
273
333
|
return XUtils.encodeHex(decrypted);
|
|
274
334
|
};
|
|
335
|
+
/**
|
|
336
|
+
* 32-byte AES-256 key for local at-rest encryption (e.g. sqlite) derived from
|
|
337
|
+
* identity `secretKey`. For `tweetnacl` this is the 32-byte X25519 private key.
|
|
338
|
+
* For `fips` the identity secret is PKCS#8; HKDF is applied so AES keys never
|
|
339
|
+
* equal the raw private key material.
|
|
340
|
+
*/
|
|
341
|
+
static deriveLocalAtRestAesKey(identitySk, profile) {
|
|
342
|
+
if (profile === "tweetnacl") {
|
|
343
|
+
if (identitySk.length < 32) {
|
|
344
|
+
throw new Error("Expected at least 32 bytes of identity secret in tweetnacl mode.");
|
|
345
|
+
}
|
|
346
|
+
return identitySk.subarray(0, 32);
|
|
347
|
+
}
|
|
348
|
+
return new Uint8Array(hkdf(sha256, identitySk, new Uint8Array(0), new TextEncoder().encode("vex:at-rest:2.1.0-fips"), 32));
|
|
349
|
+
}
|
|
275
350
|
/**
|
|
276
351
|
* Returns the empty header (32 0's)
|
|
277
352
|
*
|
|
@@ -462,6 +537,32 @@ export const xConstants = {
|
|
|
462
537
|
KEY_LENGTH: 32,
|
|
463
538
|
MIN_OTK_SUPPLY: 100,
|
|
464
539
|
};
|
|
540
|
+
/**
|
|
541
|
+
* FIPS: `device.signKey` in the database is the P-256 ECDSA public key (SPKI),
|
|
542
|
+
* used for account/device signature verification. X3DH on the client expects
|
|
543
|
+
* the same curve point as Web Crypto "raw" P-256 ECDH public bytes for
|
|
544
|
+
* `importEcdhPublicKey`. This converts SPKI → raw without a private key.
|
|
545
|
+
*/
|
|
546
|
+
export async function fipsEcdhRawPublicKeyFromEcdsaSpkiAsync(ecdsaSpki) {
|
|
547
|
+
if (ecdsaSpki.length === 0) {
|
|
548
|
+
throw new Error("FIPS: empty ECDSA SPKI.");
|
|
549
|
+
}
|
|
550
|
+
const subtle = getSubtleCrypto();
|
|
551
|
+
const ecdsaPub = await importEcdsaPublicKey(ecdsaSpki);
|
|
552
|
+
const jwk = await subtle.exportKey("jwk", ecdsaPub);
|
|
553
|
+
if (jwk.x === undefined ||
|
|
554
|
+
jwk.y === undefined ||
|
|
555
|
+
jwk.x.length === 0 ||
|
|
556
|
+
jwk.y.length === 0) {
|
|
557
|
+
throw new Error("FIPS: could not export ECDSA public as JWK.");
|
|
558
|
+
}
|
|
559
|
+
const ecdhJwk = { ...jwk };
|
|
560
|
+
delete ecdhJwk.d;
|
|
561
|
+
ecdhJwk.key_ops = [];
|
|
562
|
+
ecdhJwk.ext = true;
|
|
563
|
+
const ecdhPub = await subtle.importKey("jwk", ecdhJwk, { name: "ECDH", namedCurve: "P-256" }, true, []);
|
|
564
|
+
return new Uint8Array(await subtle.exportKey("raw", ecdhPub));
|
|
565
|
+
}
|
|
465
566
|
/** Generate a fresh X25519 box key pair. */
|
|
466
567
|
export function xBoxKeyPair() {
|
|
467
568
|
return provider().boxKeyPair();
|
|
@@ -482,15 +583,18 @@ export async function xBoxKeyPairAsync() {
|
|
|
482
583
|
export function xBoxKeyPairFromSecret(secretKey) {
|
|
483
584
|
return provider().boxKeyPairFromSecret(secretKey);
|
|
484
585
|
}
|
|
586
|
+
// ── Key pair type ───────────────────────────────────────────────────────────
|
|
485
587
|
/** Async box key restore from private key material. */
|
|
486
|
-
export function xBoxKeyPairFromSecretAsync(secretKey) {
|
|
588
|
+
export async function xBoxKeyPairFromSecretAsync(secretKey) {
|
|
487
589
|
if (activeCryptoProfile === "tweetnacl") {
|
|
488
|
-
return
|
|
590
|
+
return xBoxKeyPairFromSecret(secretKey);
|
|
489
591
|
}
|
|
490
|
-
|
|
491
|
-
|
|
592
|
+
if (secretKey.length === 32) {
|
|
593
|
+
return fipsEcdhKeyPairFrom32ByteSeed(secretKey, getSubtleCrypto());
|
|
594
|
+
}
|
|
595
|
+
return fipsEcdhKeyPairFromPkcs8(secretKey, getSubtleCrypto());
|
|
492
596
|
}
|
|
493
|
-
// ── Key
|
|
597
|
+
// ── Key generation ─────────────────────────────────────────────────────────
|
|
494
598
|
/**
|
|
495
599
|
* Concatanates multiple Uint8Arrays.
|
|
496
600
|
*
|
|
@@ -511,7 +615,6 @@ export function xConcat(...arrays) {
|
|
|
511
615
|
}
|
|
512
616
|
return result;
|
|
513
617
|
}
|
|
514
|
-
// ── Key generation ─────────────────────────────────────────────────────────
|
|
515
618
|
/**
|
|
516
619
|
* Derives a shared Secret Key from a known private key and
|
|
517
620
|
* a peer's known public key.
|
|
@@ -534,6 +637,35 @@ export async function xDHAsync(myPrivateKey, theirPublicKey) {
|
|
|
534
637
|
const shared = await subtle.deriveBits({ name: "ECDH", public: publicKey }, privateKey, 256);
|
|
535
638
|
return new Uint8Array(shared);
|
|
536
639
|
}
|
|
640
|
+
/**
|
|
641
|
+
* In `fips` mode only: derive a P-256 ECDH `KeyPair` (raw public + pkcs8 secret)
|
|
642
|
+
* from a P-256 ECDSA `KeyPair` (spki + pkcs8) using the same private scalar in Web Crypto.
|
|
643
|
+
* In `tweetnacl` mode, use `XKeyConvert.convertKeyPair` to map Ed25519 → X25519 instead.
|
|
644
|
+
*/
|
|
645
|
+
export async function xEcdhKeyPairFromEcdsaKeyPairAsync(sign) {
|
|
646
|
+
if (activeCryptoProfile === "tweetnacl") {
|
|
647
|
+
return Promise.reject(new Error('xEcdhKeyPairFromEcdsaKeyPairAsync is for crypto profile "fips" only. Use XKeyConvert.convertKeyPair in tweetnacl mode.'));
|
|
648
|
+
}
|
|
649
|
+
const subtle = getSubtleCrypto();
|
|
650
|
+
const ecdsaPriv = await importEcdsaPrivateKey(sign.secretKey);
|
|
651
|
+
const jwk = await subtle.exportKey("jwk", ecdsaPriv);
|
|
652
|
+
if (typeof jwk.d !== "string" || jwk.d.length === 0) {
|
|
653
|
+
throw new Error("FIPS: could not export ECDSA private as JWK.");
|
|
654
|
+
}
|
|
655
|
+
const ecdhJwk = { ...jwk, key_ops: ["deriveBits"] };
|
|
656
|
+
ecdhJwk.ext = true;
|
|
657
|
+
const ecdhPriv = await subtle.importKey("jwk", ecdhJwk, { name: "ECDH", namedCurve: "P-256" }, true, ["deriveBits"]);
|
|
658
|
+
const ecdhPubJwk = await subtle.exportKey("jwk", ecdhPriv);
|
|
659
|
+
const ecdhPubJwkNoD = { ...ecdhPubJwk };
|
|
660
|
+
delete ecdhPubJwkNoD.d;
|
|
661
|
+
ecdhPubJwkNoD.key_ops = [];
|
|
662
|
+
const ecdhPub = await subtle.importKey("jwk", ecdhPubJwkNoD, { name: "ECDH", namedCurve: "P-256" }, true, []);
|
|
663
|
+
return {
|
|
664
|
+
publicKey: new Uint8Array(await subtle.exportKey("raw", ecdhPub)),
|
|
665
|
+
secretKey: new Uint8Array(await subtle.exportKey("pkcs8", ecdhPriv)),
|
|
666
|
+
};
|
|
667
|
+
}
|
|
668
|
+
// ── Signing ────────────────────────────────────────────────────────────────
|
|
537
669
|
/**
|
|
538
670
|
* Encode an X25519 or X448 public key PK into a byte sequence.
|
|
539
671
|
* The encoding consists of 0 or 1 to represent the type of curve, followed by l
|
|
@@ -576,7 +708,7 @@ export function xEncode(curveType, publicKey) {
|
|
|
576
708
|
export function xHash(data) {
|
|
577
709
|
return XUtils.encodeHex(sha512(data));
|
|
578
710
|
}
|
|
579
|
-
// ──
|
|
711
|
+
// ── Symmetric encryption (XSalsa20-Poly1305) ──────────────────────────────
|
|
580
712
|
export function xKDF(IKM) {
|
|
581
713
|
return hkdf(sha512, IKM, xMakeSalt(xConstants.CURVE), new TextEncoder().encode(xConstants.INFO), xConstants.KEY_LENGTH);
|
|
582
714
|
}
|
|
@@ -586,7 +718,7 @@ export function xKDF(IKM) {
|
|
|
586
718
|
export function xMakeNonce() {
|
|
587
719
|
return provider().randomBytes(24);
|
|
588
720
|
}
|
|
589
|
-
// ──
|
|
721
|
+
// ── Random ─────────────────────────────────────────────────────────────────
|
|
590
722
|
/** Cryptographically secure random bytes. */
|
|
591
723
|
export function xRandomBytes(length) {
|
|
592
724
|
return provider().randomBytes(length);
|
|
@@ -595,7 +727,6 @@ export function xRandomBytes(length) {
|
|
|
595
727
|
export function xSecretbox(plaintext, nonce, key) {
|
|
596
728
|
return provider().secretbox(plaintext, nonce, key);
|
|
597
729
|
}
|
|
598
|
-
// ── Random ─────────────────────────────────────────────────────────────────
|
|
599
730
|
/** Async authenticated encryption for cross-runtime/FIPS backends. */
|
|
600
731
|
export async function xSecretboxAsync(plaintext, nonce, key) {
|
|
601
732
|
if (activeCryptoProfile === "tweetnacl") {
|
|
@@ -662,12 +793,11 @@ export function xSignKeyPairFromSecret(secretKey) {
|
|
|
662
793
|
return provider().signKeyPairFromSecret(secretKey);
|
|
663
794
|
}
|
|
664
795
|
/** Async restore of signing keypair for the active profile. */
|
|
665
|
-
export function xSignKeyPairFromSecretAsync(secretKey) {
|
|
796
|
+
export async function xSignKeyPairFromSecretAsync(secretKey) {
|
|
666
797
|
if (activeCryptoProfile === "tweetnacl") {
|
|
667
|
-
return
|
|
798
|
+
return xSignKeyPairFromSecret(secretKey);
|
|
668
799
|
}
|
|
669
|
-
|
|
670
|
-
return Promise.reject(new Error('Crypto profile "fips" does not implement xSignKeyPairFromSecretAsync yet.'));
|
|
800
|
+
return fipsEcdsaKeyPairFromPkcs8(secretKey, getSubtleCrypto());
|
|
671
801
|
}
|
|
672
802
|
/** Verify and open a signed message. Returns the original message, or null if verification fails. */
|
|
673
803
|
export function xSignOpen(signedMessage, publicKey) {
|
|
@@ -684,6 +814,18 @@ export async function xSignOpenAsync(signedMessage, publicKey) {
|
|
|
684
814
|
const valid = await subtle.verify({ hash: "SHA-256", name: "ECDSA" }, verifyKey, toBufferSource(parsed.signature), toBufferSource(parsed.message));
|
|
685
815
|
return valid ? parsed.message : null;
|
|
686
816
|
}
|
|
817
|
+
async function fipsEcdsaKeyPairFromPkcs8(secretKey, subtle) {
|
|
818
|
+
const ecdsaPriv = await importEcdsaPrivateKey(secretKey);
|
|
819
|
+
const jwk = await subtle.exportKey("jwk", ecdsaPriv);
|
|
820
|
+
const ecdsaPubJwk = { ...jwk };
|
|
821
|
+
delete ecdsaPubJwk.d;
|
|
822
|
+
ecdsaPubJwk.key_ops = ["verify"];
|
|
823
|
+
const ecdsaPub = await subtle.importKey("jwk", ecdsaPubJwk, { name: "ECDSA", namedCurve: "P-256" }, true, ["verify"]);
|
|
824
|
+
return {
|
|
825
|
+
publicKey: new Uint8Array(await subtle.exportKey("spki", ecdsaPub)),
|
|
826
|
+
secretKey: Uint8Array.from(secretKey),
|
|
827
|
+
};
|
|
828
|
+
}
|
|
687
829
|
async function importAesKey(key, usages) {
|
|
688
830
|
return getSubtleCrypto().importKey("raw", toBufferSource(key), { name: "AES-GCM" }, false, usages);
|
|
689
831
|
}
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vex-chat/crypto",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "Crypto primitives for the Vex encrypted chat platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -43,6 +43,8 @@
|
|
|
43
43
|
"lint:api": "api-extractor run --local --verbose",
|
|
44
44
|
"docs": "npx typedoc --options typedoc.json",
|
|
45
45
|
"test": "vitest run",
|
|
46
|
+
"test:core": "vitest run --project core",
|
|
47
|
+
"test:async-api": "vitest run --project async-api",
|
|
46
48
|
"test:types": "tsc --noEmit",
|
|
47
49
|
"prepublish": "npm run build"
|
|
48
50
|
},
|
|
@@ -56,6 +58,7 @@
|
|
|
56
58
|
}
|
|
57
59
|
},
|
|
58
60
|
"dependencies": {
|
|
61
|
+
"@noble/curves": "1.4.0",
|
|
59
62
|
"@noble/hashes": "2.2.0",
|
|
60
63
|
"@stablelib/base64": "2.0.1",
|
|
61
64
|
"@stablelib/utf8": "2.1.0",
|
|
@@ -0,0 +1,84 @@
|
|
|
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
|
+
*
|
|
6
|
+
* More async-API coverage: at-rest key wrap + from-secret key restore.
|
|
7
|
+
* Paired with `xAsyncProfile.ts` in the `async-api` Vitest project (see `vitest.config.ts`).
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
setCryptoProfile,
|
|
12
|
+
xBoxKeyPairAsync,
|
|
13
|
+
xBoxKeyPairFromSecretAsync,
|
|
14
|
+
xSignKeyPairAsync,
|
|
15
|
+
xSignKeyPairFromSecretAsync,
|
|
16
|
+
XUtils,
|
|
17
|
+
} from "../index.js";
|
|
18
|
+
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
setCryptoProfile("tweetnacl");
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const fixedIterations = 5000;
|
|
24
|
+
|
|
25
|
+
test("encryptKeyDataAsync / decryptKeyDataAsync (tweetnacl)", async () => {
|
|
26
|
+
setCryptoProfile("tweetnacl");
|
|
27
|
+
const { publicKey, secretKey } = await xSignKeyPairAsync();
|
|
28
|
+
void publicKey;
|
|
29
|
+
const hex = XUtils.encodeHex(secretKey);
|
|
30
|
+
const enc = await XUtils.encryptKeyDataAsync(
|
|
31
|
+
"correct horse",
|
|
32
|
+
hex,
|
|
33
|
+
fixedIterations,
|
|
34
|
+
);
|
|
35
|
+
const out = await XUtils.decryptKeyDataAsync(enc, "correct horse");
|
|
36
|
+
expect(out).toBe(hex);
|
|
37
|
+
await expect(XUtils.decryptKeyDataAsync(enc, "wrong")).rejects.toThrow();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test("encryptKeyDataAsync / decryptKeyDataAsync (FIPS)", async () => {
|
|
41
|
+
setCryptoProfile("fips");
|
|
42
|
+
const { publicKey, secretKey } = await xSignKeyPairAsync();
|
|
43
|
+
void publicKey;
|
|
44
|
+
const hex = XUtils.encodeHex(secretKey);
|
|
45
|
+
const enc = await XUtils.encryptKeyDataAsync(
|
|
46
|
+
"battery staple",
|
|
47
|
+
hex,
|
|
48
|
+
fixedIterations,
|
|
49
|
+
);
|
|
50
|
+
const out = await XUtils.decryptKeyDataAsync(enc, "battery staple");
|
|
51
|
+
expect(out).toBe(hex);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test("xBoxKeyPairFromSecretAsync roundtrip (tweetnacl)", async () => {
|
|
55
|
+
setCryptoProfile("tweetnacl");
|
|
56
|
+
const a = await xBoxKeyPairAsync();
|
|
57
|
+
const b = await xBoxKeyPairFromSecretAsync(a.secretKey);
|
|
58
|
+
expect(XUtils.bytesEqual(a.publicKey, b.publicKey)).toBe(true);
|
|
59
|
+
expect(XUtils.bytesEqual(a.secretKey, b.secretKey)).toBe(true);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test("xBoxKeyPairFromSecretAsync roundtrip (FIPS)", async () => {
|
|
63
|
+
setCryptoProfile("fips");
|
|
64
|
+
const a = await xBoxKeyPairAsync();
|
|
65
|
+
const b = await xBoxKeyPairFromSecretAsync(a.secretKey);
|
|
66
|
+
expect(XUtils.bytesEqual(a.publicKey, b.publicKey)).toBe(true);
|
|
67
|
+
expect(XUtils.bytesEqual(a.secretKey, b.secretKey)).toBe(true);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test("xSignKeyPairFromSecretAsync roundtrip (tweetnacl)", async () => {
|
|
71
|
+
setCryptoProfile("tweetnacl");
|
|
72
|
+
const a = await xSignKeyPairAsync();
|
|
73
|
+
const b = await xSignKeyPairFromSecretAsync(a.secretKey);
|
|
74
|
+
expect(XUtils.bytesEqual(a.publicKey, b.publicKey)).toBe(true);
|
|
75
|
+
expect(XUtils.bytesEqual(a.secretKey, b.secretKey)).toBe(true);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test("xSignKeyPairFromSecretAsync roundtrip (FIPS)", async () => {
|
|
79
|
+
setCryptoProfile("fips");
|
|
80
|
+
const a = await xSignKeyPairAsync();
|
|
81
|
+
const b = await xSignKeyPairFromSecretAsync(a.secretKey);
|
|
82
|
+
expect(XUtils.bytesEqual(a.publicKey, b.publicKey)).toBe(true);
|
|
83
|
+
expect(XUtils.bytesEqual(a.secretKey, b.secretKey)).toBe(true);
|
|
84
|
+
});
|
package/src/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
1
2
|
/**
|
|
2
3
|
* Copyright (c) 2020-2026 Vex Heavy Industries LLC
|
|
3
4
|
* Licensed under AGPL-3.0. See LICENSE for details.
|
|
@@ -6,6 +7,8 @@
|
|
|
6
7
|
|
|
7
8
|
import type { BaseMsg } from "@vex-chat/types";
|
|
8
9
|
|
|
10
|
+
import { numberToBytesBE } from "@noble/curves/abstract/utils";
|
|
11
|
+
import { p256 } from "@noble/curves/p256";
|
|
9
12
|
import { hkdf } from "@noble/hashes/hkdf.js";
|
|
10
13
|
import { hmac } from "@noble/hashes/hmac.js";
|
|
11
14
|
import { pbkdf2 as noblePbkdf2 } from "@noble/hashes/pbkdf2.js";
|
|
@@ -180,6 +183,13 @@ const providers: Record<CryptoProfile, CryptoProvider> = {
|
|
|
180
183
|
let activeCryptoProfile: CryptoProfile = "tweetnacl";
|
|
181
184
|
let activeCryptoProvider: CryptoProvider = providers[activeCryptoProfile];
|
|
182
185
|
|
|
186
|
+
/** `globalThis` may omit `Buffer` in browsers; Node types can still attach `Buffer` to `globalThis` unconditionally. */
|
|
187
|
+
type NodeBufferish = {
|
|
188
|
+
from(data: ArrayBuffer | Uint8Array): {
|
|
189
|
+
toString(encoding: "base64url"): string;
|
|
190
|
+
};
|
|
191
|
+
};
|
|
192
|
+
|
|
183
193
|
/** Returns the currently configured crypto profile. */
|
|
184
194
|
export function getCryptoProfile(): CryptoProfile {
|
|
185
195
|
return activeCryptoProfile;
|
|
@@ -197,6 +207,18 @@ export function setCryptoProfile(profile: CryptoProfile): void {
|
|
|
197
207
|
activeCryptoProvider = providers[profile];
|
|
198
208
|
}
|
|
199
209
|
|
|
210
|
+
function bytesToBase64Url(bytes: Uint8Array): string {
|
|
211
|
+
const BufferCtor = getNodeBufferCtor();
|
|
212
|
+
if (BufferCtor !== undefined) {
|
|
213
|
+
return BufferCtor.from(bytes).toString("base64url");
|
|
214
|
+
}
|
|
215
|
+
return globalThis
|
|
216
|
+
.btoa(String.fromCodePoint(...Array.from(bytes)))
|
|
217
|
+
.replace(/\+/g, "-")
|
|
218
|
+
.replace(/\//g, "_")
|
|
219
|
+
.replace(/=+/g, "");
|
|
220
|
+
}
|
|
221
|
+
|
|
200
222
|
function concatBytes(a: Uint8Array, b: Uint8Array): Uint8Array {
|
|
201
223
|
const out = new Uint8Array(a.length + b.length);
|
|
202
224
|
out.set(a, 0);
|
|
@@ -241,6 +263,87 @@ function encodeFipsSignedMessage(
|
|
|
241
263
|
return concatBytes(concatBytes(prefix, signature), message);
|
|
242
264
|
}
|
|
243
265
|
|
|
266
|
+
async function fipsEcdhKeyPairFrom32ByteSeed(
|
|
267
|
+
secretKey: Uint8Array,
|
|
268
|
+
subtle: SubtleCrypto,
|
|
269
|
+
): Promise<KeyPair> {
|
|
270
|
+
if (secretKey.length !== 32) {
|
|
271
|
+
throw new Error(
|
|
272
|
+
"FIPS: expected a 32-byte IKM/seed for ECDH from-secret.",
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
const d = p256.utils.normPrivateKeyToScalar(Uint8Array.from(secretKey));
|
|
276
|
+
const d32 = numberToBytesBE(d, 32);
|
|
277
|
+
const rawPub = p256.getPublicKey(d, false);
|
|
278
|
+
if (rawPub[0] !== 0x04) {
|
|
279
|
+
throw new Error("FIPS: expected uncompressed P-256 public key.");
|
|
280
|
+
}
|
|
281
|
+
const jwk: JsonWebKey = {
|
|
282
|
+
crv: "P-256",
|
|
283
|
+
d: bytesToBase64Url(d32),
|
|
284
|
+
kty: "EC",
|
|
285
|
+
x: bytesToBase64Url(rawPub.subarray(1, 33)),
|
|
286
|
+
y: bytesToBase64Url(rawPub.subarray(33, 65)),
|
|
287
|
+
};
|
|
288
|
+
const ecdhPriv = await subtle.importKey(
|
|
289
|
+
"jwk",
|
|
290
|
+
jwk,
|
|
291
|
+
{ name: "ECDH", namedCurve: "P-256" },
|
|
292
|
+
true,
|
|
293
|
+
["deriveBits"],
|
|
294
|
+
);
|
|
295
|
+
const ecdhPubJwk = await subtle.exportKey("jwk", ecdhPriv);
|
|
296
|
+
const ecdhPubJwkNoD: JsonWebKey = { ...ecdhPubJwk };
|
|
297
|
+
delete ecdhPubJwkNoD.d;
|
|
298
|
+
ecdhPubJwkNoD.key_ops = [];
|
|
299
|
+
const ecdhPub = await subtle.importKey(
|
|
300
|
+
"jwk",
|
|
301
|
+
ecdhPubJwkNoD,
|
|
302
|
+
{ name: "ECDH", namedCurve: "P-256" },
|
|
303
|
+
true,
|
|
304
|
+
[],
|
|
305
|
+
);
|
|
306
|
+
return {
|
|
307
|
+
publicKey: new Uint8Array(await subtle.exportKey("raw", ecdhPub)),
|
|
308
|
+
secretKey: new Uint8Array(await subtle.exportKey("pkcs8", ecdhPriv)),
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
async function fipsEcdhKeyPairFromPkcs8(
|
|
313
|
+
secretKey: Uint8Array,
|
|
314
|
+
subtle: SubtleCrypto,
|
|
315
|
+
): Promise<KeyPair> {
|
|
316
|
+
const ecdhPriv = await subtle.importKey(
|
|
317
|
+
"pkcs8",
|
|
318
|
+
toBufferSource(secretKey),
|
|
319
|
+
{ name: "ECDH", namedCurve: "P-256" },
|
|
320
|
+
true,
|
|
321
|
+
["deriveBits"],
|
|
322
|
+
);
|
|
323
|
+
const jwk = await subtle.exportKey("jwk", ecdhPriv);
|
|
324
|
+
const ecdhPubJwk: JsonWebKey = { ...jwk };
|
|
325
|
+
delete ecdhPubJwk.d;
|
|
326
|
+
ecdhPubJwk.key_ops = [];
|
|
327
|
+
const ecdhPub = await subtle.importKey(
|
|
328
|
+
"jwk",
|
|
329
|
+
ecdhPubJwk,
|
|
330
|
+
{ name: "ECDH", namedCurve: "P-256" },
|
|
331
|
+
true,
|
|
332
|
+
[],
|
|
333
|
+
);
|
|
334
|
+
return {
|
|
335
|
+
publicKey: new Uint8Array(await subtle.exportKey("raw", ecdhPub)),
|
|
336
|
+
secretKey: new Uint8Array(await subtle.exportKey("pkcs8", ecdhPriv)),
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
function getNodeBufferCtor(): NodeBufferish | undefined {
|
|
341
|
+
if (!("Buffer" in globalThis)) {
|
|
342
|
+
return undefined;
|
|
343
|
+
}
|
|
344
|
+
return (globalThis as { Buffer: NodeBufferish }).Buffer;
|
|
345
|
+
}
|
|
346
|
+
|
|
244
347
|
function getSubtleCrypto(): SubtleCrypto {
|
|
245
348
|
return getWebCrypto().subtle;
|
|
246
349
|
}
|
|
@@ -396,6 +499,35 @@ export class XUtils {
|
|
|
396
499
|
return XUtils.encodeHex(decrypted);
|
|
397
500
|
};
|
|
398
501
|
|
|
502
|
+
/**
|
|
503
|
+
* 32-byte AES-256 key for local at-rest encryption (e.g. sqlite) derived from
|
|
504
|
+
* identity `secretKey`. For `tweetnacl` this is the 32-byte X25519 private key.
|
|
505
|
+
* For `fips` the identity secret is PKCS#8; HKDF is applied so AES keys never
|
|
506
|
+
* equal the raw private key material.
|
|
507
|
+
*/
|
|
508
|
+
public static deriveLocalAtRestAesKey(
|
|
509
|
+
identitySk: Uint8Array,
|
|
510
|
+
profile: CryptoProfile,
|
|
511
|
+
): Uint8Array {
|
|
512
|
+
if (profile === "tweetnacl") {
|
|
513
|
+
if (identitySk.length < 32) {
|
|
514
|
+
throw new Error(
|
|
515
|
+
"Expected at least 32 bytes of identity secret in tweetnacl mode.",
|
|
516
|
+
);
|
|
517
|
+
}
|
|
518
|
+
return identitySk.subarray(0, 32);
|
|
519
|
+
}
|
|
520
|
+
return new Uint8Array(
|
|
521
|
+
hkdf(
|
|
522
|
+
sha256,
|
|
523
|
+
identitySk,
|
|
524
|
+
new Uint8Array(0),
|
|
525
|
+
new TextEncoder().encode("vex:at-rest:2.1.0-fips"),
|
|
526
|
+
32,
|
|
527
|
+
),
|
|
528
|
+
);
|
|
529
|
+
}
|
|
530
|
+
|
|
399
531
|
/**
|
|
400
532
|
* Returns the empty header (32 0's)
|
|
401
533
|
*
|
|
@@ -663,6 +795,43 @@ export interface XConstants {
|
|
|
663
795
|
MIN_OTK_SUPPLY: number;
|
|
664
796
|
}
|
|
665
797
|
|
|
798
|
+
/**
|
|
799
|
+
* FIPS: `device.signKey` in the database is the P-256 ECDSA public key (SPKI),
|
|
800
|
+
* used for account/device signature verification. X3DH on the client expects
|
|
801
|
+
* the same curve point as Web Crypto "raw" P-256 ECDH public bytes for
|
|
802
|
+
* `importEcdhPublicKey`. This converts SPKI → raw without a private key.
|
|
803
|
+
*/
|
|
804
|
+
export async function fipsEcdhRawPublicKeyFromEcdsaSpkiAsync(
|
|
805
|
+
ecdsaSpki: Uint8Array,
|
|
806
|
+
): Promise<Uint8Array> {
|
|
807
|
+
if (ecdsaSpki.length === 0) {
|
|
808
|
+
throw new Error("FIPS: empty ECDSA SPKI.");
|
|
809
|
+
}
|
|
810
|
+
const subtle = getSubtleCrypto();
|
|
811
|
+
const ecdsaPub = await importEcdsaPublicKey(ecdsaSpki);
|
|
812
|
+
const jwk = await subtle.exportKey("jwk", ecdsaPub);
|
|
813
|
+
if (
|
|
814
|
+
jwk.x === undefined ||
|
|
815
|
+
jwk.y === undefined ||
|
|
816
|
+
jwk.x.length === 0 ||
|
|
817
|
+
jwk.y.length === 0
|
|
818
|
+
) {
|
|
819
|
+
throw new Error("FIPS: could not export ECDSA public as JWK.");
|
|
820
|
+
}
|
|
821
|
+
const ecdhJwk: JsonWebKey = { ...jwk };
|
|
822
|
+
delete ecdhJwk.d;
|
|
823
|
+
ecdhJwk.key_ops = [];
|
|
824
|
+
ecdhJwk.ext = true;
|
|
825
|
+
const ecdhPub = await subtle.importKey(
|
|
826
|
+
"jwk",
|
|
827
|
+
ecdhJwk,
|
|
828
|
+
{ name: "ECDH", namedCurve: "P-256" },
|
|
829
|
+
true,
|
|
830
|
+
[],
|
|
831
|
+
);
|
|
832
|
+
return new Uint8Array(await subtle.exportKey("raw", ecdhPub));
|
|
833
|
+
}
|
|
834
|
+
|
|
666
835
|
/** Generate a fresh X25519 box key pair. */
|
|
667
836
|
export function xBoxKeyPair(): KeyPair {
|
|
668
837
|
return provider().boxKeyPair();
|
|
@@ -694,22 +863,22 @@ export function xBoxKeyPairFromSecret(secretKey: Uint8Array): KeyPair {
|
|
|
694
863
|
return provider().boxKeyPairFromSecret(secretKey);
|
|
695
864
|
}
|
|
696
865
|
|
|
866
|
+
// ── Key pair type ───────────────────────────────────────────────────────────
|
|
867
|
+
|
|
697
868
|
/** Async box key restore from private key material. */
|
|
698
|
-
export function xBoxKeyPairFromSecretAsync(
|
|
869
|
+
export async function xBoxKeyPairFromSecretAsync(
|
|
699
870
|
secretKey: Uint8Array,
|
|
700
871
|
): Promise<KeyPair> {
|
|
701
872
|
if (activeCryptoProfile === "tweetnacl") {
|
|
702
|
-
return
|
|
873
|
+
return xBoxKeyPairFromSecret(secretKey);
|
|
703
874
|
}
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
),
|
|
709
|
-
);
|
|
875
|
+
if (secretKey.length === 32) {
|
|
876
|
+
return fipsEcdhKeyPairFrom32ByteSeed(secretKey, getSubtleCrypto());
|
|
877
|
+
}
|
|
878
|
+
return fipsEcdhKeyPairFromPkcs8(secretKey, getSubtleCrypto());
|
|
710
879
|
}
|
|
711
880
|
|
|
712
|
-
// ── Key
|
|
881
|
+
// ── Key generation ─────────────────────────────────────────────────────────
|
|
713
882
|
|
|
714
883
|
/**
|
|
715
884
|
* Concatanates multiple Uint8Arrays.
|
|
@@ -736,8 +905,6 @@ export function xConcat(...arrays: Uint8Array[]): Uint8Array {
|
|
|
736
905
|
return result;
|
|
737
906
|
}
|
|
738
907
|
|
|
739
|
-
// ── Key generation ─────────────────────────────────────────────────────────
|
|
740
|
-
|
|
741
908
|
/**
|
|
742
909
|
* Derives a shared Secret Key from a known private key and
|
|
743
910
|
* a peer's known public key.
|
|
@@ -772,6 +939,55 @@ export async function xDHAsync(
|
|
|
772
939
|
return new Uint8Array(shared);
|
|
773
940
|
}
|
|
774
941
|
|
|
942
|
+
/**
|
|
943
|
+
* In `fips` mode only: derive a P-256 ECDH `KeyPair` (raw public + pkcs8 secret)
|
|
944
|
+
* from a P-256 ECDSA `KeyPair` (spki + pkcs8) using the same private scalar in Web Crypto.
|
|
945
|
+
* In `tweetnacl` mode, use `XKeyConvert.convertKeyPair` to map Ed25519 → X25519 instead.
|
|
946
|
+
*/
|
|
947
|
+
export async function xEcdhKeyPairFromEcdsaKeyPairAsync(
|
|
948
|
+
sign: KeyPair,
|
|
949
|
+
): Promise<KeyPair> {
|
|
950
|
+
if (activeCryptoProfile === "tweetnacl") {
|
|
951
|
+
return Promise.reject(
|
|
952
|
+
new Error(
|
|
953
|
+
'xEcdhKeyPairFromEcdsaKeyPairAsync is for crypto profile "fips" only. Use XKeyConvert.convertKeyPair in tweetnacl mode.',
|
|
954
|
+
),
|
|
955
|
+
);
|
|
956
|
+
}
|
|
957
|
+
const subtle = getSubtleCrypto();
|
|
958
|
+
const ecdsaPriv = await importEcdsaPrivateKey(sign.secretKey);
|
|
959
|
+
const jwk = await subtle.exportKey("jwk", ecdsaPriv);
|
|
960
|
+
if (typeof jwk.d !== "string" || jwk.d.length === 0) {
|
|
961
|
+
throw new Error("FIPS: could not export ECDSA private as JWK.");
|
|
962
|
+
}
|
|
963
|
+
const ecdhJwk: JsonWebKey = { ...jwk, key_ops: ["deriveBits"] };
|
|
964
|
+
ecdhJwk.ext = true;
|
|
965
|
+
const ecdhPriv = await subtle.importKey(
|
|
966
|
+
"jwk",
|
|
967
|
+
ecdhJwk,
|
|
968
|
+
{ name: "ECDH", namedCurve: "P-256" },
|
|
969
|
+
true,
|
|
970
|
+
["deriveBits"],
|
|
971
|
+
);
|
|
972
|
+
const ecdhPubJwk = await subtle.exportKey("jwk", ecdhPriv);
|
|
973
|
+
const ecdhPubJwkNoD: JsonWebKey = { ...ecdhPubJwk };
|
|
974
|
+
delete ecdhPubJwkNoD.d;
|
|
975
|
+
ecdhPubJwkNoD.key_ops = [];
|
|
976
|
+
const ecdhPub = await subtle.importKey(
|
|
977
|
+
"jwk",
|
|
978
|
+
ecdhPubJwkNoD,
|
|
979
|
+
{ name: "ECDH", namedCurve: "P-256" },
|
|
980
|
+
true,
|
|
981
|
+
[],
|
|
982
|
+
);
|
|
983
|
+
return {
|
|
984
|
+
publicKey: new Uint8Array(await subtle.exportKey("raw", ecdhPub)),
|
|
985
|
+
secretKey: new Uint8Array(await subtle.exportKey("pkcs8", ecdhPriv)),
|
|
986
|
+
};
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
// ── Signing ────────────────────────────────────────────────────────────────
|
|
990
|
+
|
|
775
991
|
/**
|
|
776
992
|
* Encode an X25519 or X448 public key PK into a byte sequence.
|
|
777
993
|
* The encoding consists of 0 or 1 to represent the type of curve, followed by l
|
|
@@ -826,7 +1042,7 @@ export function xHash(data: Uint8Array) {
|
|
|
826
1042
|
return XUtils.encodeHex(sha512(data));
|
|
827
1043
|
}
|
|
828
1044
|
|
|
829
|
-
// ──
|
|
1045
|
+
// ── Symmetric encryption (XSalsa20-Poly1305) ──────────────────────────────
|
|
830
1046
|
|
|
831
1047
|
export function xKDF(IKM: Uint8Array): Uint8Array {
|
|
832
1048
|
return hkdf(
|
|
@@ -845,7 +1061,7 @@ export function xMakeNonce(): Uint8Array {
|
|
|
845
1061
|
return provider().randomBytes(24);
|
|
846
1062
|
}
|
|
847
1063
|
|
|
848
|
-
// ──
|
|
1064
|
+
// ── Random ─────────────────────────────────────────────────────────────────
|
|
849
1065
|
|
|
850
1066
|
/** Cryptographically secure random bytes. */
|
|
851
1067
|
export function xRandomBytes(length: number): Uint8Array {
|
|
@@ -861,8 +1077,6 @@ export function xSecretbox(
|
|
|
861
1077
|
return provider().secretbox(plaintext, nonce, key);
|
|
862
1078
|
}
|
|
863
1079
|
|
|
864
|
-
// ── Random ─────────────────────────────────────────────────────────────────
|
|
865
|
-
|
|
866
1080
|
/** Async authenticated encryption for cross-runtime/FIPS backends. */
|
|
867
1081
|
export async function xSecretboxAsync(
|
|
868
1082
|
plaintext: Uint8Array,
|
|
@@ -973,18 +1187,13 @@ export function xSignKeyPairFromSecret(secretKey: Uint8Array): KeyPair {
|
|
|
973
1187
|
}
|
|
974
1188
|
|
|
975
1189
|
/** Async restore of signing keypair for the active profile. */
|
|
976
|
-
export function xSignKeyPairFromSecretAsync(
|
|
1190
|
+
export async function xSignKeyPairFromSecretAsync(
|
|
977
1191
|
secretKey: Uint8Array,
|
|
978
1192
|
): Promise<KeyPair> {
|
|
979
1193
|
if (activeCryptoProfile === "tweetnacl") {
|
|
980
|
-
return
|
|
1194
|
+
return xSignKeyPairFromSecret(secretKey);
|
|
981
1195
|
}
|
|
982
|
-
|
|
983
|
-
return Promise.reject(
|
|
984
|
-
new Error(
|
|
985
|
-
'Crypto profile "fips" does not implement xSignKeyPairFromSecretAsync yet.',
|
|
986
|
-
),
|
|
987
|
-
);
|
|
1196
|
+
return fipsEcdsaKeyPairFromPkcs8(secretKey, getSubtleCrypto());
|
|
988
1197
|
}
|
|
989
1198
|
|
|
990
1199
|
/** Verify and open a signed message. Returns the original message, or null if verification fails. */
|
|
@@ -1015,6 +1224,28 @@ export async function xSignOpenAsync(
|
|
|
1015
1224
|
return valid ? parsed.message : null;
|
|
1016
1225
|
}
|
|
1017
1226
|
|
|
1227
|
+
async function fipsEcdsaKeyPairFromPkcs8(
|
|
1228
|
+
secretKey: Uint8Array,
|
|
1229
|
+
subtle: SubtleCrypto,
|
|
1230
|
+
): Promise<KeyPair> {
|
|
1231
|
+
const ecdsaPriv = await importEcdsaPrivateKey(secretKey);
|
|
1232
|
+
const jwk = await subtle.exportKey("jwk", ecdsaPriv);
|
|
1233
|
+
const ecdsaPubJwk: JsonWebKey = { ...jwk };
|
|
1234
|
+
delete ecdsaPubJwk.d;
|
|
1235
|
+
ecdsaPubJwk.key_ops = ["verify"];
|
|
1236
|
+
const ecdsaPub = await subtle.importKey(
|
|
1237
|
+
"jwk",
|
|
1238
|
+
ecdsaPubJwk,
|
|
1239
|
+
{ name: "ECDSA", namedCurve: "P-256" },
|
|
1240
|
+
true,
|
|
1241
|
+
["verify"],
|
|
1242
|
+
);
|
|
1243
|
+
return {
|
|
1244
|
+
publicKey: new Uint8Array(await subtle.exportKey("spki", ecdsaPub)),
|
|
1245
|
+
secretKey: Uint8Array.from(secretKey),
|
|
1246
|
+
};
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1018
1249
|
async function importAesKey(
|
|
1019
1250
|
key: Uint8Array,
|
|
1020
1251
|
usages: WebCryptoKeyUsage[],
|