raz-encrypt 2.1.0 → 2.3.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/LICENSE +21 -21
- package/README.md +448 -442
- package/dist/canonicalJson.d.ts +0 -15
- package/dist/canonicalJson.js +13 -73
- package/dist/canonicalJson.js.map +1 -1
- package/dist/core.d.ts +2 -4
- package/dist/core.js +1 -3
- package/dist/core.js.map +1 -1
- package/dist/crypto/classical.d.ts +0 -2
- package/dist/crypto/classical.js +0 -4
- package/dist/crypto/classical.js.map +1 -1
- package/dist/crypto/frameCipher.js +2 -8
- package/dist/crypto/frameCipher.js.map +1 -1
- package/dist/crypto/hybrid.d.ts +8 -95
- package/dist/crypto/hybrid.js +49 -374
- package/dist/crypto/hybrid.js.map +1 -1
- package/dist/crypto/nodeHybrid.d.ts +4 -6
- package/dist/crypto/nodeHybrid.js +2 -3
- package/dist/crypto/nodeHybrid.js.map +1 -1
- package/dist/crypto/pqc.d.ts +2 -7
- package/dist/crypto/pqc.js +4 -13
- package/dist/crypto/pqc.js.map +1 -1
- package/dist/crypto/ratchet.js +0 -5
- package/dist/crypto/ratchet.js.map +1 -1
- package/dist/fileCrypto.d.ts +2 -44
- package/dist/fileCrypto.js +28 -197
- package/dist/fileCrypto.js.map +1 -1
- package/dist/identity.d.ts +4 -69
- package/dist/identity.js +12 -111
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +7 -8
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/store.d.ts +5 -42
- package/dist/store.js +22 -254
- package/dist/store.js.map +1 -1
- package/dist/trust.d.ts +2 -143
- package/dist/trust.js +27 -376
- package/dist/trust.js.map +1 -1
- package/package.json +69 -62
- package/dist/crypto/confirmedSession.d.ts +0 -47
- package/dist/crypto/confirmedSession.js +0 -84
- package/dist/crypto/confirmedSession.js.map +0 -1
- package/dist/crypto/frameSession.d.ts +0 -40
- package/dist/crypto/frameSession.js +0 -96
- package/dist/crypto/frameSession.js.map +0 -1
- package/dist/passphrase.d.ts +0 -27
- package/dist/passphrase.js +0 -69
- package/dist/passphrase.js.map +0 -1
package/dist/crypto/hybrid.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { gcm } from "@noble/ciphers/aes.js";
|
|
2
|
-
import { equalBytes } from "@noble/ciphers/utils.js";
|
|
3
2
|
import { hkdf } from "@noble/hashes/hkdf.js";
|
|
4
|
-
import { hmac } from "@noble/hashes/hmac.js";
|
|
5
3
|
import { sha384 } from "@noble/hashes/sha2.js";
|
|
6
4
|
import { bytesToHex, concatBytes, hexToBytes, randomBytes, utf8ToBytes } from "@noble/hashes/utils.js";
|
|
7
5
|
import { canonicalize, hashDocument } from "../canonicalJson.js";
|
|
8
|
-
import { fingerprint } from "../fingerprint.js";
|
|
9
6
|
import { classicalSharedSecret, classicalSign, classicalVerify, generateClassicalKeypair } from "./classical.js";
|
|
10
7
|
import { generatePqcKemKeypair, pqcDecapsulate, pqcEncapsulate, pqcSign, pqcVerify } from "./pqc.js";
|
|
11
8
|
// No import of ../store.js or ../trust.js here (only their LogEntry TYPE,
|
|
@@ -13,13 +10,7 @@ import { generatePqcKemKeypair, pqcDecapsulate, pqcEncapsulate, pqcSign, pqcVeri
|
|
|
13
10
|
// browser bundler on its own. The node:fs-backed default wiring for
|
|
14
11
|
// sign/verify/encryptFor/decryptFrom lives in ./nodeHybrid.ts instead,
|
|
15
12
|
// which is what "." (not "./core") re-exports.
|
|
16
|
-
|
|
17
|
-
// both parties and every public value in the box; the sender dual-signs the
|
|
18
|
-
// box under this domain tag (also passed as the ML-DSA context).
|
|
19
|
-
const BOX_VERSION = 2;
|
|
20
|
-
const BOX_KEY_INFO = utf8ToBytes("raz-encrypt-box-v2|key");
|
|
21
|
-
const BOX_DOMAIN_TAG = "raz-encrypt-box-v2|sign";
|
|
22
|
-
const BOX_CONTEXT = utf8ToBytes(BOX_DOMAIN_TAG);
|
|
13
|
+
const HYBRID_INFO = utf8ToBytes("raz-encrypt-hybrid-v1");
|
|
23
14
|
const ALGORITHMS = { classical: "ECDSA-P384", pqc: "ML-DSA-87" };
|
|
24
15
|
export class UntrustedPartyError extends Error {
|
|
25
16
|
constructor(alias) {
|
|
@@ -27,89 +18,6 @@ export class UntrustedPartyError extends Error {
|
|
|
27
18
|
this.name = "UntrustedPartyError";
|
|
28
19
|
}
|
|
29
20
|
}
|
|
30
|
-
/** Thrown by decryptFromCore for a structurally-malformed EncryptedBox or a failed AEAD decryption — both mean "this box is unusable", so one error class covers both causes. */
|
|
31
|
-
export class DecryptionError extends Error {
|
|
32
|
-
constructor(message) {
|
|
33
|
-
super(message);
|
|
34
|
-
this.name = "DecryptionError";
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
/** True for a non-empty, even-length string of hex digits only — what every hex-encoded field in this module expects. */
|
|
38
|
-
function isHex(value) {
|
|
39
|
-
return typeof value === "string" && value.length > 0 && value.length % 2 === 0 && /^[0-9a-fA-F]+$/.test(value);
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* True only for the exact canonical format `new Date().toISOString()` itself
|
|
43
|
-
* produces — the one format this codebase ever actually writes. A round-trip
|
|
44
|
-
* check (not a regex, not bare `Date.parse`) catches wrong formats, non-ISO
|
|
45
|
-
* strings `Date.parse` would otherwise accept (implementation-defined beyond
|
|
46
|
-
* strict ISO-8601), AND calendar-overflow values some engines silently roll
|
|
47
|
-
* forward (e.g. a Feb 30th) — all in one comparison: any mismatch, whatever
|
|
48
|
-
* the cause, fails the round-trip (ADR 0010). Exported so other modules that
|
|
49
|
-
* define their own timestamp fields (e.g. trust.ts's rotation/revocation
|
|
50
|
-
* documents) can hold them to the same strict standard instead of each
|
|
51
|
-
* re-deriving their own looser check.
|
|
52
|
-
*/
|
|
53
|
-
export function isValidIsoInstant(value) {
|
|
54
|
-
const date = new Date(value);
|
|
55
|
-
return !Number.isNaN(date.getTime()) && date.toISOString() === value;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Structural shape check only — right fields, right primitive types, hex
|
|
59
|
-
* fields actually parse as hex, and (issue #4) a present `expiresAt` must be
|
|
60
|
-
* a valid ISO instant, not just a string. Runs before any
|
|
61
|
-
* hexToBytes/checkTrust call so a malformed certificate can't crash
|
|
62
|
-
* verifyCore instead of just failing it.
|
|
63
|
-
*/
|
|
64
|
-
function isValidCertificateShape(certificate) {
|
|
65
|
-
if (typeof certificate !== "object" || certificate === null)
|
|
66
|
-
return false;
|
|
67
|
-
const c = certificate;
|
|
68
|
-
if (typeof c.documentHash !== "string")
|
|
69
|
-
return false;
|
|
70
|
-
if (!isHex(c.classicalSignature))
|
|
71
|
-
return false;
|
|
72
|
-
if (!isHex(c.pqcSignature))
|
|
73
|
-
return false;
|
|
74
|
-
if (typeof c.algorithms !== "object" || c.algorithms === null)
|
|
75
|
-
return false;
|
|
76
|
-
if (typeof c.signedAt !== "string")
|
|
77
|
-
return false;
|
|
78
|
-
if (c.version !== undefined && c.version !== 2)
|
|
79
|
-
return false;
|
|
80
|
-
if (c.version === 2 && !isValidIsoInstant(c.signedAt))
|
|
81
|
-
return false;
|
|
82
|
-
if (c.expiresAt !== undefined && (typeof c.expiresAt !== "string" || !isValidIsoInstant(c.expiresAt)))
|
|
83
|
-
return false;
|
|
84
|
-
if (typeof c.signer !== "object" || c.signer === null)
|
|
85
|
-
return false;
|
|
86
|
-
const signer = c.signer;
|
|
87
|
-
if (typeof signer.alias !== "string")
|
|
88
|
-
return false;
|
|
89
|
-
if (!isHex(signer.classicalPublicKey))
|
|
90
|
-
return false;
|
|
91
|
-
if (!isHex(signer.pqcSignPublicKey))
|
|
92
|
-
return false;
|
|
93
|
-
return true;
|
|
94
|
-
}
|
|
95
|
-
/** Same structural-shape treatment as isValidCertificateShape, for the box encryptFor/decryptFrom exchange instead of a Certificate. Version is checked separately so a v1 box gets a clear error. */
|
|
96
|
-
function isValidEncryptedBoxShape(box) {
|
|
97
|
-
if (typeof box !== "object" || box === null)
|
|
98
|
-
return false;
|
|
99
|
-
const b = box;
|
|
100
|
-
const sig = b.signature;
|
|
101
|
-
return (isHex(b.id) &&
|
|
102
|
-
b.id.length === 32 &&
|
|
103
|
-
typeof b.signedAt === "string" &&
|
|
104
|
-
isValidIsoInstant(b.signedAt) &&
|
|
105
|
-
isHex(b.kemCipherText) &&
|
|
106
|
-
isHex(b.nonce) &&
|
|
107
|
-
isHex(b.ciphertext) &&
|
|
108
|
-
typeof sig === "object" &&
|
|
109
|
-
sig !== null &&
|
|
110
|
-
isHex(sig.classicalSignature) &&
|
|
111
|
-
isHex(sig.pqcSignature));
|
|
112
|
-
}
|
|
113
21
|
/**
|
|
114
22
|
* The exact bytes both signatures are computed over. Binds `expiresAt` into
|
|
115
23
|
* the signed payload (not just `documentHash`) so a certificate's expiry
|
|
@@ -121,17 +29,6 @@ function isValidEncryptedBoxShape(box) {
|
|
|
121
29
|
function signedMessage(documentHash, expiresAt) {
|
|
122
30
|
return utf8ToBytes(canonicalize({ documentHash, expiresAt: expiresAt ?? null }));
|
|
123
31
|
}
|
|
124
|
-
const CERTIFICATE_V2_DOMAIN = "raz-encrypt/certificate/v2";
|
|
125
|
-
/** v2 signed payload: also binds the signer's alias and signedAt, under a domain-separation tag (ADR 0017). */
|
|
126
|
-
function signedMessageV2(documentHash, expiresAt, alias, signedAt) {
|
|
127
|
-
return utf8ToBytes(canonicalize({ domain: CERTIFICATE_V2_DOMAIN, documentHash, expiresAt: expiresAt ?? null, alias, signedAt }));
|
|
128
|
-
}
|
|
129
|
-
/** The exact bytes `certificate`'s signatures are over, by its format version. */
|
|
130
|
-
function certificateMessage(certificate) {
|
|
131
|
-
return certificate.version === 2
|
|
132
|
-
? signedMessageV2(certificate.documentHash, certificate.expiresAt, certificate.signer.alias, certificate.signedAt)
|
|
133
|
-
: signedMessage(certificate.documentHash, certificate.expiresAt);
|
|
134
|
-
}
|
|
135
32
|
async function requireTrusted(checkTrust, counterpart) {
|
|
136
33
|
const status = await checkTrust(counterpart);
|
|
137
34
|
if (status !== "trusted")
|
|
@@ -148,14 +45,9 @@ async function log(onLog, entry) {
|
|
|
148
45
|
* signing never checks anyone else's trust status, only your own keys.
|
|
149
46
|
*/
|
|
150
47
|
export async function signCore(identity, document, options = {}, deps = {}) {
|
|
151
|
-
if (options.expiresAt !== undefined && !isValidIsoInstant(options.expiresAt)) {
|
|
152
|
-
throw new Error(`options.expiresAt must be a valid ISO-8601 instant in the exact format new Date().toISOString() produces (e.g. "2024-01-01T00:00:00.000Z"); got ${JSON.stringify(options.expiresAt)}.`);
|
|
153
|
-
}
|
|
154
48
|
const documentHash = hashDocument(document);
|
|
155
|
-
const
|
|
156
|
-
const message = signedMessageV2(documentHash, options.expiresAt, identity.alias, signedAt);
|
|
49
|
+
const message = signedMessage(documentHash, options.expiresAt);
|
|
157
50
|
const certificate = {
|
|
158
|
-
version: 2,
|
|
159
51
|
documentHash,
|
|
160
52
|
classicalSignature: bytesToHex(classicalSign(message, identity.classical.secretKey)),
|
|
161
53
|
pqcSignature: bytesToHex(pqcSign(message, identity.pqcSign.secretKey)),
|
|
@@ -165,7 +57,7 @@ export async function signCore(identity, document, options = {}, deps = {}) {
|
|
|
165
57
|
classicalPublicKey: bytesToHex(identity.classical.publicKey),
|
|
166
58
|
pqcSignPublicKey: bytesToHex(identity.pqcSign.publicKey),
|
|
167
59
|
},
|
|
168
|
-
signedAt,
|
|
60
|
+
signedAt: new Date().toISOString(),
|
|
169
61
|
...(options.expiresAt ? { expiresAt: options.expiresAt } : {}),
|
|
170
62
|
};
|
|
171
63
|
await log(deps.onLog, { action: "sign", documentHash });
|
|
@@ -178,18 +70,8 @@ export async function signCore(identity, document, options = {}, deps = {}) {
|
|
|
178
70
|
* fails the whole verification.
|
|
179
71
|
*/
|
|
180
72
|
export async function verifyCore(identity, document, certificate, deps) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
// No real signer to name — certificate.signer may not even exist. The
|
|
184
|
-
// audit log still gets an entry so a verify attempt that happened isn't
|
|
185
|
-
// silently uncounted just because the input was garbage. Awaited, same
|
|
186
|
-
// as every log() call below — a failed write propagates to the caller
|
|
187
|
-
// instead of becoming an unhandled rejection (issue #5).
|
|
188
|
-
await log(deps.onLog, { action: "verify", result: result.reason });
|
|
189
|
-
return result;
|
|
190
|
-
}
|
|
191
|
-
const record = async (result) => {
|
|
192
|
-
await log(deps.onLog, {
|
|
73
|
+
const record = (result) => {
|
|
74
|
+
void log(deps.onLog, {
|
|
193
75
|
action: "verify",
|
|
194
76
|
documentHash: certificate.documentHash,
|
|
195
77
|
counterpartAlias: certificate.signer.alias,
|
|
@@ -210,7 +92,7 @@ export async function verifyCore(identity, document, certificate, deps) {
|
|
|
210
92
|
if (certificate.expiresAt && Date.now() >= Date.parse(certificate.expiresAt)) {
|
|
211
93
|
return record({ valid: false, reason: "expired" });
|
|
212
94
|
}
|
|
213
|
-
const message =
|
|
95
|
+
const message = signedMessage(certificate.documentHash, certificate.expiresAt);
|
|
214
96
|
const classicalOk = classicalVerify(hexToBytes(certificate.classicalSignature), message, hexToBytes(certificate.signer.classicalPublicKey));
|
|
215
97
|
if (!classicalOk)
|
|
216
98
|
return record({ valid: false, reason: "classical-signature-mismatch" });
|
|
@@ -219,124 +101,39 @@ export async function verifyCore(identity, document, certificate, deps) {
|
|
|
219
101
|
return record({ valid: false, reason: "pqc-signature-mismatch" });
|
|
220
102
|
return record({ valid: true });
|
|
221
103
|
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
constructor(id) {
|
|
225
|
-
super(`Box ${id} has already been seen and was rejected as a replay.`);
|
|
226
|
-
this.name = "ReplayedBoxError";
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
/** Everything both sides know about a box before decryption: the parties and every public value in it. */
|
|
230
|
-
function boxContext(sender, recipient, box) {
|
|
231
|
-
return {
|
|
232
|
-
version: BOX_VERSION,
|
|
233
|
-
sender: { fingerprint: fingerprint(sender), classicalPublicKey: sender.classicalPublicKey },
|
|
234
|
-
recipient: {
|
|
235
|
-
fingerprint: fingerprint(recipient),
|
|
236
|
-
classicalPublicKey: recipient.classicalPublicKey,
|
|
237
|
-
pqcKemPublicKey: recipient.pqcKemPublicKey,
|
|
238
|
-
},
|
|
239
|
-
id: box.id,
|
|
240
|
-
signedAt: box.signedAt,
|
|
241
|
-
kemCipherText: box.kemCipherText,
|
|
242
|
-
nonce: box.nonce,
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
function deriveBoxKey(ecdhSecret, kemSecret, context) {
|
|
246
|
-
const salt = sha384(utf8ToBytes(canonicalize(context)));
|
|
247
|
-
return hkdf(sha384, concatBytes(ecdhSecret, kemSecret), salt, BOX_KEY_INFO, 32);
|
|
248
|
-
}
|
|
249
|
-
function boxAad(context) {
|
|
250
|
-
return utf8ToBytes(canonicalize(context));
|
|
251
|
-
}
|
|
252
|
-
function boxSignedMessage(context, ciphertext) {
|
|
253
|
-
return utf8ToBytes(canonicalize({ tag: BOX_DOMAIN_TAG, context, ciphertextHash: bytesToHex(sha384(hexToBytes(ciphertext))) }));
|
|
104
|
+
function deriveHybridKey(ecdhSecret, kemSecret) {
|
|
105
|
+
return hkdf(sha384, concatBytes(ecdhSecret, kemSecret), undefined, HYBRID_INFO, 32);
|
|
254
106
|
}
|
|
255
107
|
/**
|
|
256
|
-
* Encrypts `data` for `counterpart`
|
|
257
|
-
* ECDH-P384 and an ML-KEM-1024 encapsulation
|
|
258
|
-
*
|
|
259
|
-
*
|
|
260
|
-
* it cannot be forged by the recipient or anyone else. Throws
|
|
261
|
-
* UntrustedPartyError unless `deps.checkTrust(counterpart)` reports "trusted".
|
|
262
|
-
*
|
|
263
|
-
* There is still NO forward secrecy: the ECDH half uses long-term keys. Use a
|
|
264
|
-
* session handshake for anything that needs it.
|
|
108
|
+
* Encrypts `data` for `counterpart` using a symmetric key derived from BOTH
|
|
109
|
+
* an ECDH-P384 exchange and an ML-KEM-1024 encapsulation (HKDF-SHA384
|
|
110
|
+
* combines the two secrets), then AES-256-GCM. Throws UntrustedPartyError
|
|
111
|
+
* unless `deps.checkTrust(counterpart)` reports "trusted".
|
|
265
112
|
*/
|
|
266
113
|
export async function encryptForCore(identity, counterpart, data, deps) {
|
|
267
114
|
await requireTrusted(deps.checkTrust, counterpart);
|
|
268
|
-
const sender = publicCardOf(identity);
|
|
269
115
|
const ecdhSecret = classicalSharedSecret(identity.classical.secretKey, hexToBytes(counterpart.classicalPublicKey));
|
|
270
|
-
const { cipherText, sharedSecret: kemSecret } = pqcEncapsulate(hexToBytes(counterpart.pqcKemPublicKey));
|
|
116
|
+
const { cipherText: kemCipherText, sharedSecret: kemSecret } = pqcEncapsulate(hexToBytes(counterpart.pqcKemPublicKey));
|
|
117
|
+
const key = deriveHybridKey(ecdhSecret, kemSecret);
|
|
271
118
|
const nonce = randomBytes(12);
|
|
272
|
-
const
|
|
273
|
-
id: bytesToHex(randomBytes(16)),
|
|
274
|
-
signedAt: new Date().toISOString(),
|
|
275
|
-
kemCipherText: bytesToHex(cipherText),
|
|
276
|
-
nonce: bytesToHex(nonce),
|
|
277
|
-
};
|
|
278
|
-
const context = boxContext(sender, counterpart, head);
|
|
279
|
-
const key = deriveBoxKey(ecdhSecret, kemSecret, context);
|
|
280
|
-
const ciphertext = bytesToHex(gcm(key, nonce, boxAad(context)).encrypt(utf8ToBytes(canonicalize(data))));
|
|
281
|
-
const message = boxSignedMessage(context, ciphertext);
|
|
282
|
-
const signature = {
|
|
283
|
-
classicalSignature: bytesToHex(classicalSign(message, identity.classical.secretKey)),
|
|
284
|
-
pqcSignature: bytesToHex(pqcSign(message, identity.pqcSign.secretKey, BOX_CONTEXT)),
|
|
285
|
-
};
|
|
119
|
+
const ciphertext = gcm(key, nonce).encrypt(utf8ToBytes(canonicalize(data)));
|
|
286
120
|
await log(deps.onLog, { action: "encrypt", counterpartAlias: counterpart.alias });
|
|
287
|
-
return {
|
|
121
|
+
return { kemCipherText: bytesToHex(kemCipherText), nonce: bytesToHex(nonce), ciphertext: bytesToHex(ciphertext) };
|
|
288
122
|
}
|
|
289
123
|
/**
|
|
290
124
|
* Decrypts a box produced by `encryptFor`. `counterpart` is the sender's
|
|
291
125
|
* public card. Throws UntrustedPartyError unless `deps.checkTrust(counterpart)`
|
|
292
|
-
* reports "trusted"
|
|
293
|
-
*
|
|
294
|
-
* someone else, or a box not signed by `counterpart` is a DecryptionError. If
|
|
295
|
-
* `deps.isReplay` is given it is consulted only after the signature checks
|
|
296
|
-
* out, and a true result throws ReplayedBoxError.
|
|
126
|
+
* reports "trusted" — this stops a caller from accidentally decrypting "as
|
|
127
|
+
* if" a message came from someone they never actually trusted.
|
|
297
128
|
*/
|
|
298
129
|
export async function decryptFromCore(identity, counterpart, box, deps) {
|
|
299
130
|
await requireTrusted(deps.checkTrust, counterpart);
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
throw new DecryptionError("Malformed EncryptedBox: id/signedAt/kemCipherText/nonce/ciphertext/signature are not all valid.");
|
|
305
|
-
}
|
|
306
|
-
const recipient = publicCardOf(identity);
|
|
307
|
-
const context = boxContext(counterpart, recipient, box);
|
|
308
|
-
// Verify before touching the KEM or the cipher.
|
|
309
|
-
const message = boxSignedMessage(context, box.ciphertext);
|
|
310
|
-
const classicalOk = classicalVerify(hexToBytes(box.signature.classicalSignature), message, hexToBytes(counterpart.classicalPublicKey));
|
|
311
|
-
const pqcOk = pqcVerify(hexToBytes(box.signature.pqcSignature), message, hexToBytes(counterpart.pqcSignPublicKey), BOX_CONTEXT);
|
|
312
|
-
if (!classicalOk || !pqcOk) {
|
|
313
|
-
throw new DecryptionError(`Box from "${counterpart.alias}" was rejected: its signature does not match this sender and recipient.`);
|
|
314
|
-
}
|
|
315
|
-
if (deps.isReplay && (await deps.isReplay({ id: box.id, signedAt: box.signedAt, senderFingerprint: fingerprint(counterpart) }))) {
|
|
316
|
-
throw new ReplayedBoxError(box.id);
|
|
317
|
-
}
|
|
318
|
-
let plaintext;
|
|
319
|
-
try {
|
|
320
|
-
const ecdhSecret = classicalSharedSecret(identity.classical.secretKey, hexToBytes(counterpart.classicalPublicKey));
|
|
321
|
-
const kemSecret = pqcDecapsulate(hexToBytes(box.kemCipherText), identity.pqcKem.secretKey);
|
|
322
|
-
const key = deriveBoxKey(ecdhSecret, kemSecret, context);
|
|
323
|
-
plaintext = gcm(key, hexToBytes(box.nonce), boxAad(context)).decrypt(hexToBytes(box.ciphertext));
|
|
324
|
-
}
|
|
325
|
-
catch (err) {
|
|
326
|
-
throw new DecryptionError(`Failed to decrypt box from "${counterpart.alias}": ${err instanceof Error ? err.message : String(err)}`);
|
|
327
|
-
}
|
|
131
|
+
const ecdhSecret = classicalSharedSecret(identity.classical.secretKey, hexToBytes(counterpart.classicalPublicKey));
|
|
132
|
+
const kemSecret = pqcDecapsulate(hexToBytes(box.kemCipherText), identity.pqcKem.secretKey);
|
|
133
|
+
const key = deriveHybridKey(ecdhSecret, kemSecret);
|
|
134
|
+
const plaintext = gcm(key, hexToBytes(box.nonce)).decrypt(hexToBytes(box.ciphertext));
|
|
328
135
|
await log(deps.onLog, { action: "decrypt", counterpartAlias: counterpart.alias });
|
|
329
|
-
|
|
330
|
-
return JSON.parse(new TextDecoder().decode(plaintext));
|
|
331
|
-
}
|
|
332
|
-
catch (err) {
|
|
333
|
-
// Decryption succeeded (so the sender really did send these exact
|
|
334
|
-
// bytes), but they aren't valid JSON — a malicious or buggy sender, not
|
|
335
|
-
// a tampering attacker. Fail closed with the same error type as every
|
|
336
|
-
// other rejection here, instead of crashing the caller on a raw
|
|
337
|
-
// SyntaxError (found by fuzzing, issue #42).
|
|
338
|
-
throw new DecryptionError(`Box from "${counterpart.alias}" decrypted, but its plaintext is not valid JSON: ${err instanceof Error ? err.message : String(err)}`);
|
|
339
|
-
}
|
|
136
|
+
return JSON.parse(new TextDecoder().decode(plaintext));
|
|
340
137
|
}
|
|
341
138
|
// --- Session handshake ------------------------------------------------
|
|
342
139
|
//
|
|
@@ -370,55 +167,21 @@ export async function decryptFromCore(identity, counterpart, box, deps) {
|
|
|
370
167
|
// message carrying the KEM ciphertext (the initiator is the one who
|
|
371
168
|
// encapsulates, same initiator/responder asymmetry ADR 0004 already
|
|
372
169
|
// established); the responder completes the handshake from that reply.
|
|
373
|
-
const SESSION_INFO_INITIATOR_TO_RESPONDER = utf8ToBytes("raz-encrypt-session-
|
|
374
|
-
const SESSION_INFO_RESPONDER_TO_INITIATOR = utf8ToBytes("raz-encrypt-session-
|
|
375
|
-
const SESSION_INFO_KEY_CONFIRMATION = utf8ToBytes("raz-encrypt-session-
|
|
170
|
+
const SESSION_INFO_INITIATOR_TO_RESPONDER = utf8ToBytes("raz-encrypt-session-v2|initiator-to-responder");
|
|
171
|
+
const SESSION_INFO_RESPONDER_TO_INITIATOR = utf8ToBytes("raz-encrypt-session-v2|responder-to-initiator");
|
|
172
|
+
const SESSION_INFO_KEY_CONFIRMATION = utf8ToBytes("raz-encrypt-session-v2|key-confirmation");
|
|
376
173
|
// A fourth, additional HKDF output (issue #29/raz-encrypt #29) from the exact
|
|
377
174
|
// same combined input key material and transcript salt as the three outputs
|
|
378
175
|
// above — NOT a repurposing of any of them. This is the seed for a two-party
|
|
379
176
|
// ratchet (see ./ratchet.ts) built on top of the handshake, never itself used
|
|
380
177
|
// to encrypt a frame directly.
|
|
381
|
-
const SESSION_INFO_ROOT_KEY = utf8ToBytes("raz-encrypt-session-
|
|
382
|
-
// Domain-separation tag for handshake signatures (ADR 0008, raz-encrypt
|
|
383
|
-
// #2/issue #2): embedded as a `tag` field inside each handshake message's
|
|
384
|
-
// signed payload AND passed as ML-DSA's native `context` option (FIPS 204
|
|
385
|
-
// §5.4) — belt-and-suspenders, not redundant: the payload field survives
|
|
386
|
-
// even if a caller signs with a different PQC primitive later, the `context`
|
|
387
|
-
// option is enforced by the algorithm itself. One version counter shared
|
|
388
|
-
// with the SESSION_INFO_* labels above, not a separately-tracked one.
|
|
389
|
-
const HANDSHAKE_DOMAIN_TAG = "raz-encrypt-session-v3|handshake";
|
|
390
|
-
const HANDSHAKE_CONTEXT = utf8ToBytes(HANDSHAKE_DOMAIN_TAG);
|
|
178
|
+
const SESSION_INFO_ROOT_KEY = utf8ToBytes("raz-encrypt-session-v2|root-key");
|
|
391
179
|
export class HandshakeVerificationError extends Error {
|
|
392
180
|
constructor(message) {
|
|
393
181
|
super(message);
|
|
394
182
|
this.name = "HandshakeVerificationError";
|
|
395
183
|
}
|
|
396
184
|
}
|
|
397
|
-
/** Thrown for a structurally-malformed handshake message (non-hex fields) — distinct from HandshakeVerificationError, which means the shape was fine but the signature didn't check out. */
|
|
398
|
-
export class MalformedHandshakeMessageError extends Error {
|
|
399
|
-
constructor(message) {
|
|
400
|
-
super(message);
|
|
401
|
-
this.name = "MalformedHandshakeMessageError";
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
function isValidHandshakeSignatureShape(signature) {
|
|
405
|
-
if (typeof signature !== "object" || signature === null)
|
|
406
|
-
return false;
|
|
407
|
-
const s = signature;
|
|
408
|
-
return isHex(s.classicalSignature) && isHex(s.pqcSignature);
|
|
409
|
-
}
|
|
410
|
-
function isValidResponderHandshakeMessageShape(message) {
|
|
411
|
-
if (typeof message !== "object" || message === null)
|
|
412
|
-
return false;
|
|
413
|
-
const m = message;
|
|
414
|
-
return isHex(m.ephemeralClassicalPublicKey) && isHex(m.ephemeralKemPublicKey) && isHex(m.nonce) && isValidHandshakeSignatureShape(m.signature);
|
|
415
|
-
}
|
|
416
|
-
function isValidInitiatorHandshakeMessageShape(message) {
|
|
417
|
-
if (typeof message !== "object" || message === null)
|
|
418
|
-
return false;
|
|
419
|
-
const m = message;
|
|
420
|
-
return isHex(m.ephemeralClassicalPublicKey) && isHex(m.nonce) && isHex(m.kemCipherText) && isValidHandshakeSignatureShape(m.signature);
|
|
421
|
-
}
|
|
422
185
|
/** Reconstructs the counterpart-facing PublicCard shape from an Identity, without importing identity.js (which pulls in node:fs) — keeps this module browser-safe. */
|
|
423
186
|
function publicCardOf(identity) {
|
|
424
187
|
return {
|
|
@@ -436,7 +199,7 @@ function signHandshakePayload(identity, payload) {
|
|
|
436
199
|
const message = handshakeSignedMessage(payload);
|
|
437
200
|
return {
|
|
438
201
|
classicalSignature: bytesToHex(classicalSign(message, identity.classical.secretKey)),
|
|
439
|
-
pqcSignature: bytesToHex(pqcSign(message, identity.pqcSign.secretKey
|
|
202
|
+
pqcSignature: bytesToHex(pqcSign(message, identity.pqcSign.secretKey)),
|
|
440
203
|
};
|
|
441
204
|
}
|
|
442
205
|
/** Throws HandshakeVerificationError unless BOTH the classical and PQ signatures check out — mirrors verifyCore's all-or-nothing dual-signature requirement. */
|
|
@@ -445,58 +208,12 @@ function verifyHandshakeSignature(signer, payload, signature) {
|
|
|
445
208
|
const classicalOk = classicalVerify(hexToBytes(signature.classicalSignature), message, hexToBytes(signer.classicalPublicKey));
|
|
446
209
|
if (!classicalOk)
|
|
447
210
|
throw new HandshakeVerificationError(`Handshake rejected: classical signature from "${signer.alias}" did not verify.`);
|
|
448
|
-
const pqcOk = pqcVerify(hexToBytes(signature.pqcSignature), message, hexToBytes(signer.pqcSignPublicKey)
|
|
211
|
+
const pqcOk = pqcVerify(hexToBytes(signature.pqcSignature), message, hexToBytes(signer.pqcSignPublicKey));
|
|
449
212
|
if (!pqcOk)
|
|
450
213
|
throw new HandshakeVerificationError(`Handshake rejected: PQC signature from "${signer.alias}" did not verify.`);
|
|
451
214
|
}
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
if (role !== "initiator" && role !== "responder")
|
|
455
|
-
throw new TypeError(`Unknown handshake role: ${String(role)}`);
|
|
456
|
-
return utf8ToBytes(canonicalize({ domain: KEY_CONFIRMATION_DOMAIN, role, ...transcript }));
|
|
457
|
-
}
|
|
458
|
-
/**
|
|
459
|
-
* The tag to send the counterpart as proof you derived the same secrets:
|
|
460
|
-
* HMAC-SHA384, keyed by the handshake's `confirmationKey`, over the full
|
|
461
|
-
* transcript and YOUR role (hex, 96 characters). Folding the role in means
|
|
462
|
-
* your own tag can never be replayed back to you as the counterpart's.
|
|
463
|
-
* Send it only after the handshake call returned, and treat the connection
|
|
464
|
-
* as unauthenticated until `verifyKeyConfirmation` succeeds on the tag you
|
|
465
|
-
* receive.
|
|
466
|
-
*/
|
|
467
|
-
export function makeKeyConfirmation(confirmationKey, role, transcript) {
|
|
468
|
-
if (confirmationKey.length !== 32)
|
|
469
|
-
throw new TypeError("confirmationKey must be 32 bytes");
|
|
470
|
-
return bytesToHex(hmac(sha384, confirmationKey, keyConfirmationBytes(role, transcript)));
|
|
471
|
-
}
|
|
472
|
-
/**
|
|
473
|
-
* Checks the tag received from the counterpart. Pass the COUNTERPART's role
|
|
474
|
-
* (an initiator verifies "responder"). Returns false — never throws — for a
|
|
475
|
-
* wrong tag, a malformed one (any non-string, odd length, non-hex, wrong
|
|
476
|
-
* length, uppercase) or an unusable key/role, and compares in constant time.
|
|
477
|
-
*/
|
|
478
|
-
export function verifyKeyConfirmation(confirmationKey, counterpartRole, transcript, tag) {
|
|
479
|
-
if (typeof tag !== "string" || !/^[0-9a-f]{96}$/.test(tag))
|
|
480
|
-
return false;
|
|
481
|
-
let expected;
|
|
482
|
-
try {
|
|
483
|
-
expected = makeKeyConfirmation(confirmationKey, counterpartRole, transcript);
|
|
484
|
-
}
|
|
485
|
-
catch {
|
|
486
|
-
return false;
|
|
487
|
-
}
|
|
488
|
-
return equalBytes(hexToBytes(tag), hexToBytes(expected));
|
|
489
|
-
}
|
|
490
|
-
/**
|
|
491
|
-
* Hashes the FULL transcript — both messages in their entirety, including
|
|
492
|
-
* each one's own signature and (for the initiator's message) the KEM
|
|
493
|
-
* ciphertext — not just the stripped ephemeral-key/nonce subset. Binding the
|
|
494
|
-
* signatures and kemCipherText into the salt means the derived Session Keys
|
|
495
|
-
* depend on the complete handshake as actually exchanged, not a partial
|
|
496
|
-
* view of it.
|
|
497
|
-
*/
|
|
498
|
-
function handshakeTranscriptSalt(initiatorCard, responderCard, responderMessage, initiatorMessage) {
|
|
499
|
-
return sha384(utf8ToBytes(canonicalize({ initiatorCard, responderCard, responderMessage, initiatorMessage })));
|
|
215
|
+
function handshakeTranscriptSalt(initiatorCard, responderCard, responderMessage, initiatorEphemeral) {
|
|
216
|
+
return sha384(utf8ToBytes(canonicalize({ initiatorCard, responderCard, responderMessage, initiatorEphemeral })));
|
|
500
217
|
}
|
|
501
218
|
function deriveSessionSecrets(ephemeralEcdhSecret, kemSecret, staticEcdhSecret, transcriptSalt) {
|
|
502
219
|
const ikm = concatBytes(ephemeralEcdhSecret, kemSecret, staticEcdhSecret);
|
|
@@ -523,26 +240,13 @@ export function createResponderHandshakeCore(identity) {
|
|
|
523
240
|
const ephemeralClassical = generateClassicalKeypair();
|
|
524
241
|
const ephemeralKem = generatePqcKemKeypair();
|
|
525
242
|
const nonce = bytesToHex(randomBytes(32));
|
|
526
|
-
|
|
527
|
-
// knows who it's talking to, so its own signed payload can only bind what
|
|
528
|
-
// it already knows — tag, role, its own fingerprint, its own ephemeral
|
|
529
|
-
// keys and nonce. See ADR 0008 for why this asymmetry (vs. the
|
|
530
|
-
// initiator's reply, which CAN bind the peer) is accepted, not closed.
|
|
531
|
-
const signedPayload = {
|
|
532
|
-
tag: HANDSHAKE_DOMAIN_TAG,
|
|
533
|
-
role: "responder",
|
|
534
|
-
ownFingerprint: fingerprint(publicCardOf(identity)),
|
|
243
|
+
const payload = {
|
|
535
244
|
ephemeralClassicalPublicKey: bytesToHex(ephemeralClassical.publicKey),
|
|
536
245
|
ephemeralKemPublicKey: bytesToHex(ephemeralKem.publicKey),
|
|
537
246
|
nonce,
|
|
538
247
|
};
|
|
539
|
-
const signature = signHandshakePayload(identity,
|
|
540
|
-
const message = {
|
|
541
|
-
ephemeralClassicalPublicKey: signedPayload.ephemeralClassicalPublicKey,
|
|
542
|
-
ephemeralKemPublicKey: signedPayload.ephemeralKemPublicKey,
|
|
543
|
-
nonce,
|
|
544
|
-
signature,
|
|
545
|
-
};
|
|
248
|
+
const signature = signHandshakePayload(identity, payload);
|
|
249
|
+
const message = { ...payload, signature };
|
|
546
250
|
return {
|
|
547
251
|
message,
|
|
548
252
|
ephemeral: {
|
|
@@ -565,46 +269,26 @@ export function createResponderHandshakeCore(identity) {
|
|
|
565
269
|
* checks anyone's trust status, same as signCore.
|
|
566
270
|
*/
|
|
567
271
|
export function establishSessionInitiatorCore(identity, counterpart, responderMessage) {
|
|
568
|
-
if (!isValidResponderHandshakeMessageShape(responderMessage)) {
|
|
569
|
-
throw new MalformedHandshakeMessageError("Malformed ResponderHandshakeMessage: ephemeral keys/nonce/signature must all be hex strings.");
|
|
570
|
-
}
|
|
571
272
|
verifyHandshakeSignature(counterpart, {
|
|
572
|
-
tag: HANDSHAKE_DOMAIN_TAG,
|
|
573
|
-
role: "responder",
|
|
574
|
-
ownFingerprint: fingerprint(counterpart),
|
|
575
273
|
ephemeralClassicalPublicKey: responderMessage.ephemeralClassicalPublicKey,
|
|
576
274
|
ephemeralKemPublicKey: responderMessage.ephemeralKemPublicKey,
|
|
577
275
|
nonce: responderMessage.nonce,
|
|
578
276
|
}, responderMessage.signature);
|
|
579
277
|
const ephemeralClassical = generateClassicalKeypair();
|
|
580
278
|
const nonce = bytesToHex(randomBytes(32));
|
|
581
|
-
const {
|
|
582
|
-
|
|
583
|
-
// talking to and has the responder's message in hand — so its signed
|
|
584
|
-
// payload binds everything issue #2 asks for: both fingerprints, both
|
|
585
|
-
// nonces, and the KEM ciphertext this message carries.
|
|
586
|
-
const signedPayload = {
|
|
587
|
-
tag: HANDSHAKE_DOMAIN_TAG,
|
|
588
|
-
role: "initiator",
|
|
589
|
-
ownFingerprint: fingerprint(publicCardOf(identity)),
|
|
590
|
-
peerFingerprint: fingerprint(counterpart),
|
|
591
|
-
ephemeralClassicalPublicKey: bytesToHex(ephemeralClassical.publicKey),
|
|
592
|
-
nonce,
|
|
593
|
-
peerNonce: responderMessage.nonce,
|
|
594
|
-
kemCipherText: bytesToHex(cipherText),
|
|
595
|
-
};
|
|
596
|
-
const signature = signHandshakePayload(identity, signedPayload);
|
|
597
|
-
const message = {
|
|
598
|
-
ephemeralClassicalPublicKey: signedPayload.ephemeralClassicalPublicKey,
|
|
599
|
-
nonce,
|
|
600
|
-
signature,
|
|
601
|
-
kemCipherText: signedPayload.kemCipherText,
|
|
602
|
-
};
|
|
279
|
+
const payload = { ephemeralClassicalPublicKey: bytesToHex(ephemeralClassical.publicKey), nonce };
|
|
280
|
+
const signature = signHandshakePayload(identity, payload);
|
|
603
281
|
const ephemeralEcdhSecret = classicalSharedSecret(ephemeralClassical.secretKey, hexToBytes(responderMessage.ephemeralClassicalPublicKey));
|
|
282
|
+
const { cipherText, sharedSecret: kemSecret } = pqcEncapsulate(hexToBytes(responderMessage.ephemeralKemPublicKey));
|
|
604
283
|
const staticEcdhSecret = classicalSharedSecret(identity.classical.secretKey, hexToBytes(counterpart.classicalPublicKey));
|
|
605
|
-
const transcriptSalt = handshakeTranscriptSalt(publicCardOf(identity), counterpart, responderMessage,
|
|
284
|
+
const transcriptSalt = handshakeTranscriptSalt(publicCardOf(identity), counterpart, responderMessage, payload);
|
|
606
285
|
const { keys, confirmationKey, rootKey } = deriveSessionSecrets(ephemeralEcdhSecret, kemSecret, staticEcdhSecret, transcriptSalt);
|
|
607
|
-
return {
|
|
286
|
+
return {
|
|
287
|
+
message: { ...payload, signature, kemCipherText: bytesToHex(cipherText) },
|
|
288
|
+
keys,
|
|
289
|
+
confirmationKey,
|
|
290
|
+
rootKey,
|
|
291
|
+
};
|
|
608
292
|
}
|
|
609
293
|
/**
|
|
610
294
|
* Completes the handshake as the connection's responder, given the
|
|
@@ -616,23 +300,14 @@ export function establishSessionInitiatorCore(identity, counterpart, responderMe
|
|
|
616
300
|
* confirmation key the initiator derived.
|
|
617
301
|
*/
|
|
618
302
|
export function establishSessionResponderCore(identity, counterpart, ephemeral, initiatorMessage) {
|
|
619
|
-
|
|
620
|
-
throw new MalformedHandshakeMessageError("Malformed InitiatorHandshakeMessage: ephemeral key/nonce/signature/kemCipherText must all be hex strings.");
|
|
621
|
-
}
|
|
622
|
-
verifyHandshakeSignature(counterpart, {
|
|
623
|
-
tag: HANDSHAKE_DOMAIN_TAG,
|
|
624
|
-
role: "initiator",
|
|
625
|
-
ownFingerprint: fingerprint(counterpart),
|
|
626
|
-
peerFingerprint: fingerprint(publicCardOf(identity)),
|
|
627
|
-
ephemeralClassicalPublicKey: initiatorMessage.ephemeralClassicalPublicKey,
|
|
628
|
-
nonce: initiatorMessage.nonce,
|
|
629
|
-
peerNonce: ephemeral.message.nonce,
|
|
630
|
-
kemCipherText: initiatorMessage.kemCipherText,
|
|
631
|
-
}, initiatorMessage.signature);
|
|
303
|
+
verifyHandshakeSignature(counterpart, { ephemeralClassicalPublicKey: initiatorMessage.ephemeralClassicalPublicKey, nonce: initiatorMessage.nonce }, initiatorMessage.signature);
|
|
632
304
|
const ephemeralEcdhSecret = classicalSharedSecret(ephemeral.ephemeralClassicalSecretKey, hexToBytes(initiatorMessage.ephemeralClassicalPublicKey));
|
|
633
305
|
const kemSecret = pqcDecapsulate(hexToBytes(initiatorMessage.kemCipherText), ephemeral.ephemeralKemSecretKey);
|
|
634
306
|
const staticEcdhSecret = classicalSharedSecret(identity.classical.secretKey, hexToBytes(counterpart.classicalPublicKey));
|
|
635
|
-
const transcriptSalt = handshakeTranscriptSalt(counterpart, publicCardOf(identity), ephemeral.message,
|
|
307
|
+
const transcriptSalt = handshakeTranscriptSalt(counterpart, publicCardOf(identity), ephemeral.message, {
|
|
308
|
+
ephemeralClassicalPublicKey: initiatorMessage.ephemeralClassicalPublicKey,
|
|
309
|
+
nonce: initiatorMessage.nonce,
|
|
310
|
+
});
|
|
636
311
|
return deriveSessionSecrets(ephemeralEcdhSecret, kemSecret, staticEcdhSecret, transcriptSalt);
|
|
637
312
|
}
|
|
638
313
|
//# sourceMappingURL=hybrid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid.js","sourceRoot":"","sources":["../../src/crypto/hybrid.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hybrid.js","sourceRoot":"","sources":["../../src/crypto/hybrid.ts"],"names":[],"mappings":"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"}
|