@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.
Files changed (52) hide show
  1. package/README.md +1 -1
  2. package/bin/coverage-md.mjs +99 -0
  3. package/captures/test-malformed/http2/settings.bin +0 -0
  4. package/captures/test-malformed/http2/settings.meta.json +9 -0
  5. package/captures/test-no-extensions/tls/client_hello.bin +0 -0
  6. package/captures/test-no-extensions/tls/client_hello.meta.json +9 -0
  7. package/captures/test-wrong-type/http2/settings.bin +0 -0
  8. package/captures/test-wrong-type/http2/settings.meta.json +9 -0
  9. package/dist/bench/bench.d.ts +2 -0
  10. package/dist/bench/bench.d.ts.map +1 -1
  11. package/dist/bench/bench.js +12 -7
  12. package/dist/bench/bench.js.map +1 -1
  13. package/dist/captures/manifest.d.ts.map +1 -1
  14. package/dist/captures/manifest.js +6 -5
  15. package/dist/captures/manifest.js.map +1 -1
  16. package/dist/categories/compression.d.ts +6 -4
  17. package/dist/categories/compression.d.ts.map +1 -1
  18. package/dist/categories/compression.js +56 -6
  19. package/dist/categories/compression.js.map +1 -1
  20. package/dist/categories/cookies.js +0 -12
  21. package/dist/categories/cookies.js.map +1 -1
  22. package/dist/e2e/cert-gen.d.ts +1 -0
  23. package/dist/e2e/cert-gen.d.ts.map +1 -1
  24. package/dist/e2e/cert-gen.js +1 -1
  25. package/dist/e2e/cert-gen.js.map +1 -1
  26. package/dist/e2e/traffic-server.d.ts +48 -0
  27. package/dist/e2e/traffic-server.d.ts.map +1 -0
  28. package/dist/e2e/traffic-server.js +162 -0
  29. package/dist/e2e/traffic-server.js.map +1 -0
  30. package/dist/golden/golden.d.ts.map +1 -1
  31. package/dist/golden/golden.js +8 -7
  32. package/dist/golden/golden.js.map +1 -1
  33. package/dist/index.d.ts +4 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +10 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/node-provider.d.ts +42 -0
  38. package/dist/node-provider.d.ts.map +1 -0
  39. package/dist/node-provider.js +53 -0
  40. package/dist/node-provider.js.map +1 -0
  41. package/dist/provider.d.ts +52 -0
  42. package/dist/provider.d.ts.map +1 -0
  43. package/dist/provider.js +14 -0
  44. package/dist/provider.js.map +1 -0
  45. package/dist/reference/browser-provider.d.ts.map +1 -1
  46. package/dist/reference/browser-provider.js +4 -3
  47. package/dist/reference/browser-provider.js.map +1 -1
  48. package/dist/reference/node-crypto-provider.d.ts +31 -0
  49. package/dist/reference/node-crypto-provider.d.ts.map +1 -0
  50. package/dist/reference/node-crypto-provider.js +199 -0
  51. package/dist/reference/node-crypto-provider.js.map +1 -0
  52. 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.0",
4
- "description": "Protocol verification — RFC compliance tests, browser golden packet captures, integration tests, and benchmarking.",
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
- "lint": "oxlint --type-aware src/"
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.0",
58
+ "@browsercore/compression": "0.2.1",
55
59
  "@browsercore/cookies": "0.2.0",
56
- "@browsercore/crypto": "0.2.0",
57
- "@browsercore/fetch": "0.2.0",
58
- "@browsercore/http1": "0.2.0",
59
- "@browsercore/http2": "0.2.0",
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.0",
62
- "@browsercore/transport": "0.2.0"
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
  }