@vex-chat/crypto 2.0.0 → 2.0.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/README.md +30 -17
- package/dist/index.d.ts +19 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -23
- package/dist/index.js.map +1 -1
- package/package.json +10 -4
- package/src/index.ts +27 -27
package/README.md
CHANGED
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
[](./dist/index.d.ts)
|
|
8
8
|
[](https://github.com/plantain-00/type-coverage)
|
|
9
9
|
[](./package.json)
|
|
10
|
-
[](https://bundlejs.com/?q=@vex-chat/crypto&treeshake=[*])
|
|
11
10
|
[](https://securityscorecards.dev/viewer/?uri=github.com/vex-protocol/crypto-js)
|
|
12
11
|
[](https://socket.dev/npm/package/@vex-chat/crypto)
|
|
13
12
|
|
|
@@ -15,15 +14,17 @@ Crypto primitives for the [Vex](https://vex.wtf) encrypted chat platform. Sign,
|
|
|
15
14
|
|
|
16
15
|
## What's in the box
|
|
17
16
|
|
|
18
|
-
- **Key generation** — `xBoxKeyPair()` / `xSignKeyPair()` / `xSignKeyPairFromSecret()` / `xBoxKeyPairFromSecret()` for X25519 (
|
|
19
|
-
- **Signing** — `xSign()` / `
|
|
20
|
-
- **Authenticated encryption** — `xSecretbox()` / `xSecretboxOpen()` (
|
|
21
|
-
- **Hashing & KDF** — `xHash()` (SHA-512), `xKDF()` (HKDF-
|
|
22
|
-
- **
|
|
23
|
-
- **
|
|
24
|
-
- **
|
|
17
|
+
- **Key generation** — `xBoxKeyPair()` / `xSignKeyPair()` / `xSignKeyPairFromSecret()` / `xBoxKeyPairFromSecret()` for X25519 (box) and Ed25519 (sign) keypairs (`tweetnacl`).
|
|
18
|
+
- **Signing** — `xSign()` / `xSignOpen()` over arbitrary bytes (Ed25519, `tweetnacl`).
|
|
19
|
+
- **Authenticated encryption** — `xSecretbox()` / `xSecretboxOpen()` (XSalsa20-Poly1305 secretbox) and `xDH()` (X25519 scalar mult) via `tweetnacl`.
|
|
20
|
+
- **Hashing & KDF** — `xHash()` (SHA-512 hex via `@noble/hashes`), `xKDF()` (**HKDF-SHA-512** via `@noble/hashes`), `xHMAC()` (HMAC-SHA-256 via `@noble/hashes`), and `XUtils.encryptKeyData` / `decryptKeyData` (**PBKDF2-SHA-512** + `tweetnacl` secretbox).
|
|
21
|
+
- **Curve key encoding** — `xEncode()` prefixes a 32-byte X25519 public key for the wire format (not msgpack).
|
|
22
|
+
- **Msgpack framing** — `XUtils.packMessage()` / `unpackMessage()` wrap a 32-byte header + msgpack body (`msgpackr`); `unpackMessage` validates base fields with Zod.
|
|
23
|
+
- **Text & byte encoding** — `XUtils` hex/base64/UTF-8 helpers (`@stablelib/base64`, `@stablelib/utf8`).
|
|
24
|
+
- **Mnemonics** — `xMnemonic()` (BIP39 via `bip39`).
|
|
25
|
+
- **Utilities** — `xConcat()`, `xMakeNonce()`, `xRandomBytes()`, `XUtils.bytesEqual` (constant-time when lengths match), and `XKeyConvert` (Ed25519 ↔ X25519 via `ed2curve`).
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+
**HKDF, PBKDF2, HMAC, and SHA-512 / SHA-256** all run through **`@noble/hashes`**. **`tweetnacl`** supplies CSPRNG, box, sign, and secretbox.
|
|
27
28
|
|
|
28
29
|
## Install
|
|
29
30
|
|
|
@@ -44,12 +45,11 @@ import {
|
|
|
44
45
|
xBoxKeyPair,
|
|
45
46
|
xSignKeyPair,
|
|
46
47
|
xSign,
|
|
48
|
+
xSignOpen,
|
|
47
49
|
xSecretbox,
|
|
48
50
|
xSecretboxOpen,
|
|
49
51
|
xDH,
|
|
50
52
|
xMakeNonce,
|
|
51
|
-
xEncode,
|
|
52
|
-
xDecode,
|
|
53
53
|
XUtils,
|
|
54
54
|
} from "@vex-chat/crypto";
|
|
55
55
|
|
|
@@ -57,9 +57,10 @@ import {
|
|
|
57
57
|
const signKeys = xSignKeyPair();
|
|
58
58
|
const boxKeys = xBoxKeyPair();
|
|
59
59
|
|
|
60
|
-
// Sign a message
|
|
60
|
+
// Sign a message (returns 64-byte signature prefix + message)
|
|
61
61
|
const message = XUtils.encodeUTF8("hello vex");
|
|
62
|
-
const
|
|
62
|
+
const signed = xSign(message, signKeys.secretKey);
|
|
63
|
+
const opened = xSignOpen(signed, signKeys.publicKey);
|
|
63
64
|
|
|
64
65
|
// Derive a shared secret and encrypt
|
|
65
66
|
const shared = xDH(boxKeys.secretKey, otherPartyPublicKey);
|
|
@@ -69,12 +70,24 @@ const ciphertext = xSecretbox(message, nonce, shared);
|
|
|
69
70
|
// Decrypt
|
|
70
71
|
const plaintext = xSecretboxOpen(ciphertext, nonce, shared);
|
|
71
72
|
|
|
72
|
-
//
|
|
73
|
-
const
|
|
74
|
-
|
|
73
|
+
// Msgpack wire body (32-byte header + msgpack); see XUtils.packMessage / unpackMessage
|
|
74
|
+
const wire = XUtils.packMessage({
|
|
75
|
+
type: "success",
|
|
76
|
+
transmissionID: "abc",
|
|
77
|
+
data: null,
|
|
78
|
+
});
|
|
79
|
+
const [, body] = XUtils.unpackMessage(wire);
|
|
75
80
|
```
|
|
76
81
|
|
|
77
|
-
|
|
82
|
+
## API documentation
|
|
83
|
+
|
|
84
|
+
HTML and JSON API reference is generated from TSDoc on `src/index.ts`:
|
|
85
|
+
|
|
86
|
+
```sh
|
|
87
|
+
npm run docs
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Output is written to `./docs/` (gitignored). CI runs the same generator with `--treatWarningsAsErrors`.
|
|
78
91
|
|
|
79
92
|
## License
|
|
80
93
|
|
package/dist/index.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export declare class XUtils {
|
|
|
18
18
|
static encodeUTF8: typeof encodeUTF8;
|
|
19
19
|
/**
|
|
20
20
|
* Checks if two buffer-like objects are equal.
|
|
21
|
+
* When lengths match, comparison is constant-time in the inputs (no early exit on first differing byte).
|
|
21
22
|
*
|
|
22
23
|
* @param buf1
|
|
23
24
|
* @param buf2
|
|
@@ -53,21 +54,17 @@ export declare class XUtils {
|
|
|
53
54
|
*/
|
|
54
55
|
static encodeHex(bytes: Uint8Array): string;
|
|
55
56
|
/**
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
* @param keyToSave The hex-encoded secret key to encrypt.
|
|
68
|
-
* @param iterationOverride Optional PBKDF2 iteration count (random if omitted).
|
|
69
|
-
* @returns The encrypted key data as a Uint8Array.
|
|
70
|
-
*/
|
|
57
|
+
* Encrypts a secret key into a portable binary format.
|
|
58
|
+
* The result can be written to disk, sent over the network, etc.
|
|
59
|
+
* No I/O — the caller handles persistence.
|
|
60
|
+
*
|
|
61
|
+
* Format: [iterations(6)|salt(24)|nonce(24)|ciphertext(N)]
|
|
62
|
+
*
|
|
63
|
+
* @param password The password to derive the encryption key from.
|
|
64
|
+
* @param keyToSave The hex-encoded secret key to encrypt.
|
|
65
|
+
* @param iterationOverride Optional PBKDF2 iteration count (random if omitted).
|
|
66
|
+
* @returns The encrypted key data as a Uint8Array.
|
|
67
|
+
*/
|
|
71
68
|
static encryptKeyData: (password: string, keyToSave: string, iterationOverride?: number) => Uint8Array;
|
|
72
69
|
/**
|
|
73
70
|
* Returns a six bit Uint8Array representation of an integer.
|
|
@@ -81,7 +78,8 @@ export declare class XUtils {
|
|
|
81
78
|
/**
|
|
82
79
|
* Packs a javascript object and a 32 byte header into a vex message.
|
|
83
80
|
*
|
|
84
|
-
* @param
|
|
81
|
+
* @param msg Message body (msgpack-serialized).
|
|
82
|
+
* @param header Optional 32-byte header; defaults to an empty header.
|
|
85
83
|
* @returns the packed message.
|
|
86
84
|
*/
|
|
87
85
|
static packMessage(msg: unknown, header?: Uint8Array): Uint8Array<ArrayBufferLike>;
|
|
@@ -94,9 +92,9 @@ export declare class XUtils {
|
|
|
94
92
|
static uint8ArrToNumber(arr: Uint8Array): number;
|
|
95
93
|
/**
|
|
96
94
|
* Takes a vex message and unpacks it into its header and a javascript object
|
|
97
|
-
*
|
|
95
|
+
* representation of its body.
|
|
98
96
|
*
|
|
99
|
-
* @param
|
|
97
|
+
* @param msg Full wire message (32-byte header + msgpack body).
|
|
100
98
|
* @returns [32 byte header, message body]
|
|
101
99
|
*/
|
|
102
100
|
static unpackMessage(msg: Buffer | Uint8Array): [Uint8Array, BaseMsg];
|
|
@@ -107,7 +105,7 @@ export declare class XUtils {
|
|
|
107
105
|
* @param msg the message to create the HMAC of
|
|
108
106
|
* @param SK the secret key to create the HMAC with
|
|
109
107
|
*/
|
|
110
|
-
export declare function xHMAC(msg: unknown, SK: Uint8Array): Uint8Array<ArrayBufferLike>;
|
|
108
|
+
export declare function xHMAC(msg: unknown, SK: Uint8Array): Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>;
|
|
111
109
|
/**
|
|
112
110
|
* Gets a word list representation of a byte sequence.
|
|
113
111
|
*
|
|
@@ -130,10 +128,8 @@ export interface KeyPair {
|
|
|
130
128
|
* @param IKM the initial key material.
|
|
131
129
|
* @returns The generated key.
|
|
132
130
|
*/
|
|
133
|
-
/**
|
|
134
|
-
|
|
135
|
-
*/
|
|
136
|
-
interface XConstants {
|
|
131
|
+
/** Shape of the {@link xConstants} runtime object. */
|
|
132
|
+
export interface XConstants {
|
|
137
133
|
CURVE: "X25519";
|
|
138
134
|
HASH: "SHA-512";
|
|
139
135
|
HEADER_SIZE: 32;
|
|
@@ -193,5 +189,4 @@ export declare function xSignKeyPair(): KeyPair;
|
|
|
193
189
|
export declare function xSignKeyPairFromSecret(secretKey: Uint8Array): KeyPair;
|
|
194
190
|
/** Verify and open a signed message. Returns the original message, or null if verification fails. */
|
|
195
191
|
export declare function xSignOpen(signedMessage: Uint8Array, publicKey: Uint8Array): null | Uint8Array;
|
|
196
|
-
export {};
|
|
197
192
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAM/C,OAAO,EACH,MAAM,IAAI,YAAY,EACtB,MAAM,IAAI,YAAY,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7E,OAAO,QAAQ,MAAM,UAAU,CAAC;AAYhC;;;GAGG;AACH,eAAO,MAAM,WAAW,iBAAW,CAAC;AAEpC;;;GAGG;AAEH,qBAAa,MAAM;IACf,OAAc,YAAY,sBAAgB;IAE1C,OAAc,UAAU,oBAAc;IAEtC,OAAc,YAAY,sBAAgB;IAE1C,OAAc,UAAU,oBAAc;IAEtC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -32,6 +32,7 @@ export class XUtils {
|
|
|
32
32
|
static encodeUTF8 = encodeUTF8;
|
|
33
33
|
/**
|
|
34
34
|
* Checks if two buffer-like objects are equal.
|
|
35
|
+
* When lengths match, comparison is constant-time in the inputs (no early exit on first differing byte).
|
|
35
36
|
*
|
|
36
37
|
* @param buf1
|
|
37
38
|
* @param buf2
|
|
@@ -44,12 +45,16 @@ export class XUtils {
|
|
|
44
45
|
if (a.byteLength !== b.byteLength) {
|
|
45
46
|
return false;
|
|
46
47
|
}
|
|
48
|
+
let diff = 0;
|
|
47
49
|
for (let i = 0; i !== a.byteLength; i++) {
|
|
48
|
-
|
|
50
|
+
const x = a[i];
|
|
51
|
+
const y = b[i];
|
|
52
|
+
if (x === undefined || y === undefined) {
|
|
49
53
|
return false;
|
|
50
54
|
}
|
|
55
|
+
diff |= x ^ y;
|
|
51
56
|
}
|
|
52
|
-
return
|
|
57
|
+
return diff === 0;
|
|
53
58
|
}
|
|
54
59
|
/**
|
|
55
60
|
* Decodes a hex string into a Uint8Array.
|
|
@@ -103,21 +108,17 @@ export class XUtils {
|
|
|
103
108
|
return bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, "0"), "");
|
|
104
109
|
}
|
|
105
110
|
/**
|
|
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
|
-
*/
|
|
111
|
+
* Encrypts a secret key into a portable binary format.
|
|
112
|
+
* The result can be written to disk, sent over the network, etc.
|
|
113
|
+
* No I/O — the caller handles persistence.
|
|
114
|
+
*
|
|
115
|
+
* Format: [iterations(6)|salt(24)|nonce(24)|ciphertext(N)]
|
|
116
|
+
*
|
|
117
|
+
* @param password The password to derive the encryption key from.
|
|
118
|
+
* @param keyToSave The hex-encoded secret key to encrypt.
|
|
119
|
+
* @param iterationOverride Optional PBKDF2 iteration count (random if omitted).
|
|
120
|
+
* @returns The encrypted key data as a Uint8Array.
|
|
121
|
+
*/
|
|
121
122
|
static encryptKeyData = (password, keyToSave, iterationOverride) => {
|
|
122
123
|
const UNENCRYPTED_SIGNKEY = XUtils.decodeHex(keyToSave);
|
|
123
124
|
const OFFSET = 1000;
|
|
@@ -170,7 +171,8 @@ export class XUtils {
|
|
|
170
171
|
/**
|
|
171
172
|
* Packs a javascript object and a 32 byte header into a vex message.
|
|
172
173
|
*
|
|
173
|
-
* @param
|
|
174
|
+
* @param msg Message body (msgpack-serialized).
|
|
175
|
+
* @param header Optional 32-byte header; defaults to an empty header.
|
|
174
176
|
* @returns the packed message.
|
|
175
177
|
*/
|
|
176
178
|
static packMessage(msg, header) {
|
|
@@ -193,9 +195,9 @@ export class XUtils {
|
|
|
193
195
|
}
|
|
194
196
|
/**
|
|
195
197
|
* Takes a vex message and unpacks it into its header and a javascript object
|
|
196
|
-
*
|
|
198
|
+
* representation of its body.
|
|
197
199
|
*
|
|
198
|
-
* @param
|
|
200
|
+
* @param msg Full wire message (32-byte header + msgpack body).
|
|
199
201
|
* @returns [32 byte header, message body]
|
|
200
202
|
*/
|
|
201
203
|
static unpackMessage(msg) {
|
|
@@ -367,7 +369,7 @@ export function xSignOpen(signedMessage, publicKey) {
|
|
|
367
369
|
return nacl.sign.open(signedMessage, publicKey);
|
|
368
370
|
}
|
|
369
371
|
/**
|
|
370
|
-
* @
|
|
372
|
+
* @internal
|
|
371
373
|
*/
|
|
372
374
|
function isEven(value) {
|
|
373
375
|
if (value % BigInt(2) === BigInt(0)) {
|
|
@@ -378,13 +380,13 @@ function isEven(value) {
|
|
|
378
380
|
}
|
|
379
381
|
}
|
|
380
382
|
/**
|
|
381
|
-
* @
|
|
383
|
+
* @internal
|
|
382
384
|
*/
|
|
383
385
|
function keyLength(curve) {
|
|
384
386
|
return curve === "X25519" ? 32 : 57;
|
|
385
387
|
}
|
|
386
388
|
/**
|
|
387
|
-
* @
|
|
389
|
+
* @internal
|
|
388
390
|
*/
|
|
389
391
|
function xMakeSalt(curve) {
|
|
390
392
|
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":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACH,MAAM,IAAI,YAAY,EACtB,MAAM,IAAI,YAAY,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,2FAA2F;AAC3F,kFAAkF;AAClF,0FAA0F;AAC1F,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAClE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAEpC;;;GAGG;AACH,+HAA+H;AAC/H,MAAM,OAAO,MAAM;IACR,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IAEnC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAE/B,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IAEnC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAEtC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACH,MAAM,IAAI,YAAY,EACtB,MAAM,IAAI,YAAY,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,2FAA2F;AAC3F,kFAAkF;AAClF,0FAA0F;AAC1F,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAClE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAEpC;;;GAGG;AACH,+HAA+H;AAC/H,MAAM,OAAO,MAAM;IACR,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IAEnC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAE/B,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IAEnC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAEtC;;;;;;;;OAQG;IACI,MAAM,CAAC,UAAU,CACpB,IAA8B,EAC9B,IAA8B;QAE9B,MAAM,CAAC,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,CAAC,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,KAAK,CAAC,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,SAAS,CAAC,SAAiB;QACrC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,UAAU,EAAE,CAAC;QAC5B,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACjD,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,cAAc,GAAG,CAC3B,OAAmB,EACnB,QAAgB,EACV,EAAE;QACR,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;YAC1D,CAAC,EAAE,UAAU;YACb,KAAK,EAAE,EAAE;SACZ,CAAC,CAAC;QACH,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACzC,aAAa,EACb,gBAAgB,EAChB,WAAW,CACd,CAAC;QAEF,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF;;;;OAIG;IACI,MAAM,CAAC,WAAW;QACrB,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,SAAS,CAAC,KAAiB;QACrC,OAAO,KAAK,CAAC,MAAM,CACf,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EACvD,EAAE,CACL,CAAC;IACN,CAAC;IAED;;;;;;;;;;;OAWG;IACI,MAAM,CAAC,cAAc,GAAG,CAC3B,QAAgB,EAChB,SAAiB,EACjB,iBAA0B,EAChB,EAAE;QACZ,MAAM,mBAAmB,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QAC9B,MAAM,UAAU,GACZ,iBAAiB,KAAK,SAAS,IAAI,iBAAiB,KAAK,CAAC;YACtD,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;QAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;QAChC,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;YAC7D,CAAC,EAAE,UAAU;YACb,KAAK,EAAE,EAAE;SACZ,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;QAC3B,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CACpC,mBAAmB,EACnB,KAAK,EACL,cAAc,CACjB,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,UAAU,CACzB,UAAU,CAAC,MAAM;YACb,UAAU,CAAC,MAAM;YACjB,KAAK,CAAC,MAAM;YACZ,iBAAiB,CAAC,MAAM,CAC/B,CAAC;QACF,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEF;;;;;;;OAOG;IACI,MAAM,CAAC,gBAAgB,CAAC,CAAS;QACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,eAAe,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACX,qDAAqD;gBACjD,MAAM,CAAC,CAAC,CAAC,CAChB,CAAC;QACN,CAAC;QAED,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACrB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACpB,CAAC;QACD,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,WAAW,CAAC,GAAY,EAAE,MAAmB;QACvD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,gBAAgB,CAAC,GAAe;QAC1C,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACrB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,aAAa,CACvB,GAAwB;QAExB,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;QACnD,6EAA6E;QAC7E,MAAM,GAAG,GAAY,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,CAAC;aACT,MAAM,CAAC;YACJ,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;YAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,CAAC;aACD,KAAK,EAAE;aACP,KAAK,CAAC,GAAG,CAAY,CAAC;QAE3B,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;;AAGL;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,GAAY,EAAE,EAAc;IAC9C,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,OAAmB,EAAE,QAAmB;IAC9D,OAAO,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAe;IAClC,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,EAAE;IACf,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,GAAG;CACtB,CAAC;AAkCF,4CAA4C;AAC5C,MAAM,UAAU,WAAW;IACvB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,qBAAqB,CAAC,SAAqB;IACvD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,GAAG,MAAoB;IAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEzE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,UAAU,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAE3C,uCAAuC;IACvC,oDAAoD;IACpD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,GAAG,CACf,YAAwB,EACxB,cAA0B;IAE1B,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AACzD,CAAC;AAED,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CACnB,SAA4B,EAC5B,SAAqB;IAErB,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACX,6CAA6C;YACzC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YACxB,0BAA0B,CACjC,CAAC;IACN,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,QAAQ,SAAS,EAAE,CAAC;QAChB,KAAK,MAAM;YACP,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,MAAM;QACV,KAAK,QAAQ;YACT,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,MAAM;IACd,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEvD,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,IAAgB;IAClC,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAe;IAChC,OAAO,IAAI,CACP,MAAM,EACN,GAAG,EACH,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAC3B,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EACzC,UAAU,CAAC,UAAU,CACxB,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACtB,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,YAAY,CAAC,MAAc;IACvC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,8EAA8E;AAE9E,wCAAwC;AACxC,MAAM,UAAU,UAAU,CACtB,SAAqB,EACrB,KAAiB,EACjB,GAAe;IAEf,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,cAAc,CAC1B,UAAsB,EACtB,KAAiB,EACjB,GAAe;IAEf,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,6EAA6E;AAE7E,8GAA8G;AAC9G,MAAM,UAAU,KAAK,CAAC,OAAmB,EAAE,SAAqB;IAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,YAAY;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,8EAA8E;AAE9E,qEAAqE;AACrE,MAAM,UAAU,sBAAsB,CAAC,SAAqB;IACxD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,SAAS,CACrB,aAAyB,EACzB,SAAqB;IAErB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAC,KAAa;IACzB,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;SAAM,CAAC;QACJ,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,KAAwB;IACvC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,KAAwB;IACvC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vex-chat/crypto",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "Crypto primitives for the Vex encrypted chat platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -38,12 +38,13 @@
|
|
|
38
38
|
"lint:pkg": "publint --strict",
|
|
39
39
|
"lint:types": "attw --pack . --ignore-rules cjs-resolves-to-esm",
|
|
40
40
|
"lint:api": "api-extractor run --local --verbose",
|
|
41
|
+
"docs": "npx typedoc --options typedoc.json",
|
|
41
42
|
"test": "vitest run",
|
|
42
43
|
"test:types": "tsc --noEmit",
|
|
43
44
|
"prepublish": "npm run build"
|
|
44
45
|
},
|
|
45
46
|
"peerDependencies": {
|
|
46
|
-
"@vex-chat/types": "
|
|
47
|
+
"@vex-chat/types": "2.0.0",
|
|
47
48
|
"typescript": ">=5.9.0 || >=6.0.0"
|
|
48
49
|
},
|
|
49
50
|
"peerDependenciesMeta": {
|
|
@@ -52,13 +53,14 @@
|
|
|
52
53
|
}
|
|
53
54
|
},
|
|
54
55
|
"dependencies": {
|
|
55
|
-
"@noble/hashes": "2.0
|
|
56
|
+
"@noble/hashes": "2.2.0",
|
|
56
57
|
"@stablelib/base64": "2.0.1",
|
|
57
58
|
"@stablelib/utf8": "2.1.0",
|
|
58
59
|
"bip39": "3.1.0",
|
|
59
60
|
"ed2curve": "0.3.0",
|
|
60
61
|
"msgpackr": "1.11.9",
|
|
61
|
-
"tweetnacl": "1.0.3"
|
|
62
|
+
"tweetnacl": "1.0.3",
|
|
63
|
+
"zod": "4.3.6"
|
|
62
64
|
},
|
|
63
65
|
"devDependencies": {
|
|
64
66
|
"@arethetypeswrong/cli": "0.18.2",
|
|
@@ -78,10 +80,14 @@
|
|
|
78
80
|
"publint": "0.3.18",
|
|
79
81
|
"rimraf": "6.1.3",
|
|
80
82
|
"type-coverage": "2.29.7",
|
|
83
|
+
"typedoc": "0.28.18",
|
|
81
84
|
"typescript": "6.0.2",
|
|
82
85
|
"typescript-eslint": "8.58.1",
|
|
83
86
|
"vitest": "4.1.4"
|
|
84
87
|
},
|
|
88
|
+
"directories": {
|
|
89
|
+
"doc": "docs"
|
|
90
|
+
},
|
|
85
91
|
"typeCoverage": {
|
|
86
92
|
"atLeast": 100,
|
|
87
93
|
"strict": true,
|
package/src/index.ts
CHANGED
|
@@ -44,6 +44,7 @@ export class XUtils {
|
|
|
44
44
|
|
|
45
45
|
/**
|
|
46
46
|
* Checks if two buffer-like objects are equal.
|
|
47
|
+
* When lengths match, comparison is constant-time in the inputs (no early exit on first differing byte).
|
|
47
48
|
*
|
|
48
49
|
* @param buf1
|
|
49
50
|
* @param buf2
|
|
@@ -59,12 +60,16 @@ export class XUtils {
|
|
|
59
60
|
if (a.byteLength !== b.byteLength) {
|
|
60
61
|
return false;
|
|
61
62
|
}
|
|
63
|
+
let diff = 0;
|
|
62
64
|
for (let i = 0; i !== a.byteLength; i++) {
|
|
63
|
-
|
|
65
|
+
const x = a[i];
|
|
66
|
+
const y = b[i];
|
|
67
|
+
if (x === undefined || y === undefined) {
|
|
64
68
|
return false;
|
|
65
69
|
}
|
|
70
|
+
diff |= x ^ y;
|
|
66
71
|
}
|
|
67
|
-
return
|
|
72
|
+
return diff === 0;
|
|
68
73
|
}
|
|
69
74
|
|
|
70
75
|
/**
|
|
@@ -135,21 +140,17 @@ export class XUtils {
|
|
|
135
140
|
}
|
|
136
141
|
|
|
137
142
|
/**
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
* @param keyToSave The hex-encoded secret key to encrypt.
|
|
150
|
-
* @param iterationOverride Optional PBKDF2 iteration count (random if omitted).
|
|
151
|
-
* @returns The encrypted key data as a Uint8Array.
|
|
152
|
-
*/
|
|
143
|
+
* Encrypts a secret key into a portable binary format.
|
|
144
|
+
* The result can be written to disk, sent over the network, etc.
|
|
145
|
+
* No I/O — the caller handles persistence.
|
|
146
|
+
*
|
|
147
|
+
* Format: [iterations(6)|salt(24)|nonce(24)|ciphertext(N)]
|
|
148
|
+
*
|
|
149
|
+
* @param password The password to derive the encryption key from.
|
|
150
|
+
* @param keyToSave The hex-encoded secret key to encrypt.
|
|
151
|
+
* @param iterationOverride Optional PBKDF2 iteration count (random if omitted).
|
|
152
|
+
* @returns The encrypted key data as a Uint8Array.
|
|
153
|
+
*/
|
|
153
154
|
public static encryptKeyData = (
|
|
154
155
|
password: string,
|
|
155
156
|
keyToSave: string,
|
|
@@ -219,7 +220,8 @@ export class XUtils {
|
|
|
219
220
|
/**
|
|
220
221
|
* Packs a javascript object and a 32 byte header into a vex message.
|
|
221
222
|
*
|
|
222
|
-
* @param
|
|
223
|
+
* @param msg Message body (msgpack-serialized).
|
|
224
|
+
* @param header Optional 32-byte header; defaults to an empty header.
|
|
223
225
|
* @returns the packed message.
|
|
224
226
|
*/
|
|
225
227
|
public static packMessage(msg: unknown, header?: Uint8Array) {
|
|
@@ -244,9 +246,9 @@ export class XUtils {
|
|
|
244
246
|
|
|
245
247
|
/**
|
|
246
248
|
* Takes a vex message and unpacks it into its header and a javascript object
|
|
247
|
-
*
|
|
249
|
+
* representation of its body.
|
|
248
250
|
*
|
|
249
|
-
* @param
|
|
251
|
+
* @param msg Full wire message (32-byte header + msgpack body).
|
|
250
252
|
* @returns [32 byte header, message body]
|
|
251
253
|
*/
|
|
252
254
|
public static unpackMessage(
|
|
@@ -323,10 +325,8 @@ export interface KeyPair {
|
|
|
323
325
|
// );
|
|
324
326
|
// }
|
|
325
327
|
|
|
326
|
-
/**
|
|
327
|
-
|
|
328
|
-
*/
|
|
329
|
-
interface XConstants {
|
|
328
|
+
/** Shape of the {@link xConstants} runtime object. */
|
|
329
|
+
export interface XConstants {
|
|
330
330
|
CURVE: "X25519";
|
|
331
331
|
HASH: "SHA-512";
|
|
332
332
|
HEADER_SIZE: 32;
|
|
@@ -513,7 +513,7 @@ export function xSignOpen(
|
|
|
513
513
|
}
|
|
514
514
|
|
|
515
515
|
/**
|
|
516
|
-
* @
|
|
516
|
+
* @internal
|
|
517
517
|
*/
|
|
518
518
|
function isEven(value: bigint) {
|
|
519
519
|
if (value % BigInt(2) === BigInt(0)) {
|
|
@@ -524,14 +524,14 @@ function isEven(value: bigint) {
|
|
|
524
524
|
}
|
|
525
525
|
|
|
526
526
|
/**
|
|
527
|
-
* @
|
|
527
|
+
* @internal
|
|
528
528
|
*/
|
|
529
529
|
function keyLength(curve: "X448" | "X25519"): number {
|
|
530
530
|
return curve === "X25519" ? 32 : 57;
|
|
531
531
|
}
|
|
532
532
|
|
|
533
533
|
/**
|
|
534
|
-
* @
|
|
534
|
+
* @internal
|
|
535
535
|
*/
|
|
536
536
|
function xMakeSalt(curve: "X448" | "X25519"): Uint8Array {
|
|
537
537
|
const salt = new Uint8Array(keyLength(curve));
|