@browsercore/testing 0.2.0 → 0.2.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 +1 -1
- package/bin/coverage-md.mjs +99 -0
- package/captures/test-malformed/http2/settings.bin +0 -0
- package/captures/test-malformed/http2/settings.meta.json +9 -0
- package/captures/test-no-extensions/tls/client_hello.bin +0 -0
- package/captures/test-no-extensions/tls/client_hello.meta.json +9 -0
- package/captures/test-wrong-type/http2/settings.bin +0 -0
- package/captures/test-wrong-type/http2/settings.meta.json +9 -0
- package/dist/bench/bench.d.ts +2 -0
- package/dist/bench/bench.d.ts.map +1 -1
- package/dist/bench/bench.js +12 -7
- package/dist/bench/bench.js.map +1 -1
- package/dist/captures/manifest.d.ts.map +1 -1
- package/dist/captures/manifest.js +6 -5
- package/dist/captures/manifest.js.map +1 -1
- package/dist/categories/compression.d.ts +6 -4
- package/dist/categories/compression.d.ts.map +1 -1
- package/dist/categories/compression.js +56 -6
- package/dist/categories/compression.js.map +1 -1
- package/dist/categories/cookies.js +0 -12
- package/dist/categories/cookies.js.map +1 -1
- package/dist/e2e/cert-gen.d.ts +1 -0
- package/dist/e2e/cert-gen.d.ts.map +1 -1
- package/dist/e2e/cert-gen.js +1 -1
- package/dist/e2e/cert-gen.js.map +1 -1
- package/dist/e2e/traffic-server.d.ts +48 -0
- package/dist/e2e/traffic-server.d.ts.map +1 -0
- package/dist/e2e/traffic-server.js +162 -0
- package/dist/e2e/traffic-server.js.map +1 -0
- package/dist/golden/golden.d.ts.map +1 -1
- package/dist/golden/golden.js +8 -7
- package/dist/golden/golden.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/node-provider.d.ts +42 -0
- package/dist/node-provider.d.ts.map +1 -0
- package/dist/node-provider.js +53 -0
- package/dist/node-provider.js.map +1 -0
- package/dist/provider.d.ts +52 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +14 -0
- package/dist/provider.js.map +1 -0
- package/dist/reference/browser-provider.d.ts.map +1 -1
- package/dist/reference/browser-provider.js +4 -3
- package/dist/reference/browser-provider.js.map +1 -1
- package/dist/reference/node-crypto-provider.d.ts +31 -0
- package/dist/reference/node-crypto-provider.d.ts.map +1 -0
- package/dist/reference/node-crypto-provider.js +199 -0
- package/dist/reference/node-crypto-provider.js.map +1 -0
- package/package.json +17 -10
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Node-backed CryptoProvider double.
|
|
3
|
+
*
|
|
4
|
+
* @browsercore/crypto 0.2.2 exports only types, errors, and utilities — the
|
|
5
|
+
* runtime NodeCryptoProvider implementation lives in
|
|
6
|
+
* `browsersmith/src/platform/crypto/node/`. This repo (Layer 4) cannot depend
|
|
7
|
+
* on browsersmith (Layer 5), so we provide a local Node-backed implementation
|
|
8
|
+
* of the `CryptoProvider` contract for tests and e2e harnesses.
|
|
9
|
+
*
|
|
10
|
+
* This double mirrors the production NodeCryptoProvider behavior:
|
|
11
|
+
* - Hashing via node:crypto (sha256, sha384)
|
|
12
|
+
* - HKDF via node:crypto.hkdfSync
|
|
13
|
+
* - HMAC via node:crypto.createHmac
|
|
14
|
+
* - AEAD via node:crypto.createCipheriv/createDecipheriv (GCM, CCM, ChaCha20)
|
|
15
|
+
* - X25519 via NobleX25519Backend (pure JS, no native binding)
|
|
16
|
+
* - ECDH via node:crypto.ECDH
|
|
17
|
+
* - Signatures via node:crypto.createVerify
|
|
18
|
+
* - Random bytes via node:crypto.randomBytes
|
|
19
|
+
*
|
|
20
|
+
* The production provider uses the same primitives — this double exists only
|
|
21
|
+
* because the package boundary moved the implementation to a higher layer.
|
|
22
|
+
*/
|
|
23
|
+
import { createCipheriv, createDecipheriv, createECDH, createHash, createHmac, createVerify, hkdfSync, randomBytes, } from "node:crypto";
|
|
24
|
+
import { NobleX25519Backend } from "@browsercore/crypto";
|
|
25
|
+
const noble = new NobleX25519Backend();
|
|
26
|
+
/** Curve → node:crypto named curve + expected coordinate length. */
|
|
27
|
+
const ECDH_CURVE_PARAMS = {
|
|
28
|
+
secp256r1: { nodeCurve: "prime256v1", coordLen: 32 },
|
|
29
|
+
secp384r1: { nodeCurve: "secp384r1", coordLen: 48 },
|
|
30
|
+
};
|
|
31
|
+
/** Map our HashId branded union to node:crypto's hash algorithm name. */
|
|
32
|
+
function hashName(hash) {
|
|
33
|
+
return hash === "SHA-256" ? "sha256" : "sha384";
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Convert a Uint8Array to a node Buffer for cipher APIs.
|
|
37
|
+
* Newer @types/node BinaryLike excludes bare ArrayBuffer — Buffer is always safe.
|
|
38
|
+
*/
|
|
39
|
+
function toBuf(data) {
|
|
40
|
+
return Buffer.from(data);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Map a 12-byte AEAD nonce to a node:crypto IV (Buffer).
|
|
44
|
+
* Used uniformly by every AEAD path so the conversion happens in one place.
|
|
45
|
+
*/
|
|
46
|
+
function toIv(nonce) {
|
|
47
|
+
return Buffer.from(nonce);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Node-backed CryptoProvider implementation.
|
|
51
|
+
*
|
|
52
|
+
* Satisfies the full `CryptoProvider` contract using node:crypto + noble-curves.
|
|
53
|
+
* Safe for tests and e2e harnesses — never imported by production protocol code.
|
|
54
|
+
*/
|
|
55
|
+
export const nodeCryptoProvider = {
|
|
56
|
+
randomBytes(length) {
|
|
57
|
+
return new Uint8Array(randomBytes(length));
|
|
58
|
+
},
|
|
59
|
+
sha256(data) {
|
|
60
|
+
return new Uint8Array(createHash("sha256").update(toBuf(data)).digest());
|
|
61
|
+
},
|
|
62
|
+
sha384(data) {
|
|
63
|
+
return new Uint8Array(createHash("sha384").update(toBuf(data)).digest());
|
|
64
|
+
},
|
|
65
|
+
hkdf(hash, salt, ikm, info, length) {
|
|
66
|
+
return new Uint8Array(hkdfSync(hashName(hash), toBuf(ikm), toBuf(salt), toBuf(info), length));
|
|
67
|
+
},
|
|
68
|
+
hmac(hash, key, data) {
|
|
69
|
+
return new Uint8Array(createHmac(hashName(hash), toBuf(key)).update(toBuf(data)).digest());
|
|
70
|
+
},
|
|
71
|
+
aes128GcmEncrypt(key, nonce, plaintext, aad) {
|
|
72
|
+
const cipher = createCipheriv("aes-128-gcm", toBuf(key), toIv(nonce));
|
|
73
|
+
cipher.setAAD(toBuf(aad));
|
|
74
|
+
const ciphertext = Buffer.concat([cipher.update(toBuf(plaintext)), cipher.final()]);
|
|
75
|
+
const tag = cipher.getAuthTag();
|
|
76
|
+
return new Uint8Array(Buffer.concat([ciphertext, tag]));
|
|
77
|
+
},
|
|
78
|
+
aes128GcmDecrypt(key, nonce, ciphertext, aad) {
|
|
79
|
+
const tagLen = 16;
|
|
80
|
+
const enc = ciphertext.subarray(0, ciphertext.length - tagLen);
|
|
81
|
+
const tag = ciphertext.subarray(ciphertext.length - tagLen);
|
|
82
|
+
const decipher = createDecipheriv("aes-128-gcm", toBuf(key), toIv(nonce));
|
|
83
|
+
decipher.setAuthTag(toBuf(tag));
|
|
84
|
+
decipher.setAAD(toBuf(aad));
|
|
85
|
+
return new Uint8Array(Buffer.concat([decipher.update(toBuf(enc)), decipher.final()]));
|
|
86
|
+
},
|
|
87
|
+
aes256GcmEncrypt(key, nonce, plaintext, aad) {
|
|
88
|
+
const cipher = createCipheriv("aes-256-gcm", toBuf(key), toIv(nonce));
|
|
89
|
+
cipher.setAAD(toBuf(aad));
|
|
90
|
+
const ciphertext = Buffer.concat([cipher.update(toBuf(plaintext)), cipher.final()]);
|
|
91
|
+
const tag = cipher.getAuthTag();
|
|
92
|
+
return new Uint8Array(Buffer.concat([ciphertext, tag]));
|
|
93
|
+
},
|
|
94
|
+
aes256GcmDecrypt(key, nonce, ciphertext, aad) {
|
|
95
|
+
const tagLen = 16;
|
|
96
|
+
const enc = ciphertext.subarray(0, ciphertext.length - tagLen);
|
|
97
|
+
const tag = ciphertext.subarray(ciphertext.length - tagLen);
|
|
98
|
+
const decipher = createDecipheriv("aes-256-gcm", toBuf(key), toIv(nonce));
|
|
99
|
+
decipher.setAuthTag(toBuf(tag));
|
|
100
|
+
decipher.setAAD(toBuf(aad));
|
|
101
|
+
return new Uint8Array(Buffer.concat([decipher.update(toBuf(enc)), decipher.final()]));
|
|
102
|
+
},
|
|
103
|
+
aes128CcmEncrypt(key, nonce, plaintext, aad) {
|
|
104
|
+
const cipher = createCipheriv("aes-128-ccm", toBuf(key), toIv(nonce), {
|
|
105
|
+
authTagLength: 16,
|
|
106
|
+
});
|
|
107
|
+
cipher.setAAD(toBuf(aad), { plaintextLength: plaintext.length });
|
|
108
|
+
const ciphertext = Buffer.concat([cipher.update(toBuf(plaintext)), cipher.final()]);
|
|
109
|
+
const tag = cipher.getAuthTag();
|
|
110
|
+
return new Uint8Array(Buffer.concat([ciphertext, tag]));
|
|
111
|
+
},
|
|
112
|
+
aes128CcmDecrypt(key, nonce, ciphertext, aad) {
|
|
113
|
+
const tagLen = 16;
|
|
114
|
+
const enc = ciphertext.subarray(0, ciphertext.length - tagLen);
|
|
115
|
+
const tag = ciphertext.subarray(ciphertext.length - tagLen);
|
|
116
|
+
const decipher = createDecipheriv("aes-128-ccm", toBuf(key), toIv(nonce), {
|
|
117
|
+
authTagLength: 16,
|
|
118
|
+
});
|
|
119
|
+
decipher.setAuthTag(toBuf(tag));
|
|
120
|
+
decipher.setAAD(toBuf(aad), { plaintextLength: enc.length });
|
|
121
|
+
return new Uint8Array(Buffer.concat([decipher.update(toBuf(enc)), decipher.final()]));
|
|
122
|
+
},
|
|
123
|
+
chacha20Poly1305Encrypt(key, nonce, plaintext, aad) {
|
|
124
|
+
const cipher = createCipheriv("chacha20-poly1305", toBuf(key), toIv(nonce), {
|
|
125
|
+
authTagLength: 16,
|
|
126
|
+
});
|
|
127
|
+
cipher.setAAD(toBuf(aad));
|
|
128
|
+
const ciphertext = Buffer.concat([cipher.update(toBuf(plaintext)), cipher.final()]);
|
|
129
|
+
const tag = cipher.getAuthTag();
|
|
130
|
+
return new Uint8Array(Buffer.concat([ciphertext, tag]));
|
|
131
|
+
},
|
|
132
|
+
chacha20Poly1305Decrypt(key, nonce, ciphertext, aad) {
|
|
133
|
+
const tagLen = 16;
|
|
134
|
+
const enc = ciphertext.subarray(0, ciphertext.length - tagLen);
|
|
135
|
+
const tag = ciphertext.subarray(ciphertext.length - tagLen);
|
|
136
|
+
const decipher = createDecipheriv("chacha20-poly1305", toBuf(key), toIv(nonce), {
|
|
137
|
+
authTagLength: 16,
|
|
138
|
+
});
|
|
139
|
+
decipher.setAuthTag(toBuf(tag));
|
|
140
|
+
decipher.setAAD(toBuf(aad));
|
|
141
|
+
return new Uint8Array(Buffer.concat([decipher.update(toBuf(enc)), decipher.final()]));
|
|
142
|
+
},
|
|
143
|
+
x25519GenerateKeyPair() {
|
|
144
|
+
const secretKey = this.randomBytes(32);
|
|
145
|
+
const publicKey = noble.publicKey(secretKey);
|
|
146
|
+
return { publicKey, secretKey };
|
|
147
|
+
},
|
|
148
|
+
x25519SharedSecret(secretKey, peerPublicKey) {
|
|
149
|
+
return noble.sharedSecret(secretKey, peerPublicKey);
|
|
150
|
+
},
|
|
151
|
+
ecdhGenerateKeyPair(curve) {
|
|
152
|
+
const params = ECDH_CURVE_PARAMS[curve];
|
|
153
|
+
const ecdh = createECDH(params.nodeCurve);
|
|
154
|
+
ecdh.generateKeys();
|
|
155
|
+
const publicKey = ecdh.getPublicKey(null, "uncompressed");
|
|
156
|
+
const secretKey = ecdh.getPrivateKey();
|
|
157
|
+
return {
|
|
158
|
+
curve,
|
|
159
|
+
publicKey: new Uint8Array(publicKey),
|
|
160
|
+
secretKey: new Uint8Array(secretKey),
|
|
161
|
+
};
|
|
162
|
+
},
|
|
163
|
+
ecdhSharedSecret(curve, secretKey, peerPublicKey) {
|
|
164
|
+
const params = ECDH_CURVE_PARAMS[curve];
|
|
165
|
+
const ecdh = createECDH(params.nodeCurve);
|
|
166
|
+
ecdh.setPrivateKey(toBuf(secretKey));
|
|
167
|
+
const shared = ecdh.computeSecret(toBuf(peerPublicKey));
|
|
168
|
+
return new Uint8Array(shared.subarray(shared.length - params.coordLen));
|
|
169
|
+
},
|
|
170
|
+
verifySignature(scheme, publicKey, signature, data) {
|
|
171
|
+
const verifier = createVerify(verificationHash(scheme));
|
|
172
|
+
verifier.update(toBuf(data));
|
|
173
|
+
return verifier.verify({ key: toBuf(publicKey), format: "der", type: "spki" }, toBuf(signature));
|
|
174
|
+
},
|
|
175
|
+
aesEcbEncrypt(key, block) {
|
|
176
|
+
const cipher = createCipheriv(key.length === 16 ? "aes-128-ecb" : "aes-256-ecb", toBuf(key), null);
|
|
177
|
+
cipher.setAutoPadding(false);
|
|
178
|
+
return new Uint8Array(cipher.update(toBuf(block)));
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* Map a TLS signature-scheme name to a node:crypto verification hash.
|
|
183
|
+
* Only the schemes the test suite exercises are covered.
|
|
184
|
+
*/
|
|
185
|
+
function verificationHash(scheme) {
|
|
186
|
+
switch (scheme) {
|
|
187
|
+
case "ecdsa_secp256r1_sha256":
|
|
188
|
+
case "rsa_pss_rsae_sha256":
|
|
189
|
+
case "rsa_pkcs1_sha256":
|
|
190
|
+
return "sha256";
|
|
191
|
+
case "ecdsa_secp384r1_sha384":
|
|
192
|
+
case "rsa_pss_rsae_sha384":
|
|
193
|
+
case "rsa_pkcs1_sha384":
|
|
194
|
+
return "sha384";
|
|
195
|
+
default:
|
|
196
|
+
return "sha256";
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=node-crypto-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-crypto-provider.js","sourceRoot":"","sources":["../../src/reference/node-crypto-provider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@browsercore/testing",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "Protocol verification
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "Protocol verification \u2014 RFC compliance tests, browser golden packet captures, integration tests, and benchmarking.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/jverneuer/browsercore-testing.git"
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"type": "module",
|
|
15
|
+
"sideEffects": false,
|
|
15
16
|
"main": "./dist/index.js",
|
|
16
17
|
"types": "./dist/index.d.ts",
|
|
17
18
|
"exports": {
|
|
@@ -22,6 +23,7 @@
|
|
|
22
23
|
},
|
|
23
24
|
"files": [
|
|
24
25
|
"dist",
|
|
26
|
+
"bin",
|
|
25
27
|
"captures",
|
|
26
28
|
"LICENSE",
|
|
27
29
|
"README.md"
|
|
@@ -36,7 +38,9 @@
|
|
|
36
38
|
"prepublishOnly": "npm run clean && npm run build",
|
|
37
39
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
38
40
|
"test": "vitest run",
|
|
39
|
-
"
|
|
41
|
+
"test:traffic": "vitest run tests/e2e/traffic-gate.test.ts",
|
|
42
|
+
"lint": "oxlint --type-aware src/",
|
|
43
|
+
"coverage-md": "./bin/coverage-md.mjs"
|
|
40
44
|
},
|
|
41
45
|
"devDependencies": {
|
|
42
46
|
"@browsercore/dev": "latest",
|
|
@@ -51,14 +55,17 @@
|
|
|
51
55
|
"node": ">=26.0.0"
|
|
52
56
|
},
|
|
53
57
|
"dependencies": {
|
|
54
|
-
"@browsercore/compression": "0.2.
|
|
58
|
+
"@browsercore/compression": "0.2.1",
|
|
55
59
|
"@browsercore/cookies": "0.2.0",
|
|
56
|
-
"@browsercore/crypto": "0.2.
|
|
57
|
-
"@browsercore/fetch": "0.2.
|
|
58
|
-
"@browsercore/http1": "0.2.
|
|
59
|
-
"@browsercore/http2": "0.2.
|
|
60
|
+
"@browsercore/crypto": "0.2.2",
|
|
61
|
+
"@browsercore/fetch": "0.2.5",
|
|
62
|
+
"@browsercore/http1": "0.2.1",
|
|
63
|
+
"@browsercore/http2": "0.2.3",
|
|
60
64
|
"@browsercore/profiles": "0.2.0",
|
|
61
|
-
"@browsercore/tls": "0.2
|
|
62
|
-
"@browsercore/transport": "0.2.
|
|
65
|
+
"@browsercore/tls": "0.4.2",
|
|
66
|
+
"@browsercore/transport": "0.2.5"
|
|
67
|
+
},
|
|
68
|
+
"overrides": {
|
|
69
|
+
"@browsercore/tls": "0.4.2"
|
|
63
70
|
}
|
|
64
71
|
}
|