@browsercore/profiles 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/profiles/chrome.d.ts +21 -0
- package/dist/profiles/chrome.d.ts.map +1 -1
- package/dist/profiles/chrome.js +27 -4
- package/dist/profiles/chrome.js.map +1 -1
- package/dist/profiles/edge.d.ts.map +1 -1
- package/dist/profiles/edge.js +10 -15
- package/dist/profiles/edge.js.map +1 -1
- package/dist/profiles/firefox.d.ts +3 -2
- package/dist/profiles/firefox.d.ts.map +1 -1
- package/dist/profiles/firefox.js +46 -19
- package/dist/profiles/firefox.js.map +1 -1
- package/dist/types.d.ts +31 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/validate.d.ts +15 -2
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +29 -2
- package/dist/validate.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,6 +13,12 @@
|
|
|
13
13
|
* - chrome-131+: X25519MLKEM768 (0x11ec) replaces Kyber768; the
|
|
14
14
|
* application_settings extension moves from 17513 to 17613.
|
|
15
15
|
*
|
|
16
|
+
* HTTP/2 SETTINGS shape, the key_share split (shared vs advertised groups),
|
|
17
|
+
* and the h2-only `priority` header are additionally verified against the
|
|
18
|
+
* chrome-131 oracle capture (browsercore-testing/captures/chrome-131/
|
|
19
|
+
* oracle_capture.reference.json, akamai h2 `1:65536;2:0;4:6291456;6:262144
|
|
20
|
+
* |15663105|0|m,a,s,p`).
|
|
21
|
+
*
|
|
16
22
|
* Chrome permutes its extension order at runtime (tls_permute_extensions), so
|
|
17
23
|
* `extensionOrder` stores the canonical pre-permutation seed that
|
|
18
24
|
* curl-impersonate configures. The order was verified via a curl_cffi capture
|
|
@@ -35,6 +41,21 @@ import type { BrowserProfile } from "../types.js";
|
|
|
35
41
|
* Shared by Edge (Chromium-based) — see {@link ../profiles/edge.ts}.
|
|
36
42
|
*/
|
|
37
43
|
export declare const chromeExtensionOrder: (appSettings: number) => readonly number[];
|
|
44
|
+
/**
|
|
45
|
+
* Chrome's actual SETTINGS frame payload. Real Chrome 131/140 sends exactly
|
|
46
|
+
* four settings (akamai fingerprint `1:65536;2:0;4:6291456;6:262144` — see the
|
|
47
|
+
* chrome-131 oracle capture in browsercore-testing). MAX_CONCURRENT_STREAMS (3)
|
|
48
|
+
* and MAX_FRAME_SIZE (5) are NOT sent: 16384 is the RFC 9113 default, so
|
|
49
|
+
* advertising it would diverge from the real SETTINGS frame. The top-level
|
|
50
|
+
* `maxFrameSize` tuning value stays 16384 — Chrome still frames at that size,
|
|
51
|
+
* it just omits the redundant setting.
|
|
52
|
+
*/
|
|
53
|
+
export declare const chromeHttp2Settings: {
|
|
54
|
+
readonly headerTableSize: 65536;
|
|
55
|
+
readonly enablePush: false;
|
|
56
|
+
readonly initialWindowSize: 6291456;
|
|
57
|
+
readonly maxHeaderListSize: 262144;
|
|
58
|
+
};
|
|
38
59
|
export declare const chrome120: BrowserProfile;
|
|
39
60
|
export declare const chrome128: BrowserProfile;
|
|
40
61
|
export declare const chrome140: BrowserProfile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../src/profiles/chrome.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../src/profiles/chrome.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AAK7D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,gBAAiB,MAAM,KAAG,SAAS,MAAM,EAEzE,CAAC;AAmCF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB;aAC5B,eAAe,EAAE,KAAK;aACtB,UAAU;aACV,iBAAiB,EAAE,OAAO;aAC1B,iBAAiB,EAAE,MAAM;CACnB,CAAC;AA0CX,eAAO,MAAM,SAAS,EAAE,cA+BvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,cA+BvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,cAyCvB,CAAC;AAEF,eAAO,MAAM,cAAc;;;;CAIjB,CAAC"}
|
package/dist/profiles/chrome.js
CHANGED
|
@@ -13,6 +13,12 @@
|
|
|
13
13
|
* - chrome-131+: X25519MLKEM768 (0x11ec) replaces Kyber768; the
|
|
14
14
|
* application_settings extension moves from 17513 to 17613.
|
|
15
15
|
*
|
|
16
|
+
* HTTP/2 SETTINGS shape, the key_share split (shared vs advertised groups),
|
|
17
|
+
* and the h2-only `priority` header are additionally verified against the
|
|
18
|
+
* chrome-131 oracle capture (browsercore-testing/captures/chrome-131/
|
|
19
|
+
* oracle_capture.reference.json, akamai h2 `1:65536;2:0;4:6291456;6:262144
|
|
20
|
+
* |15663105|0|m,a,s,p`).
|
|
21
|
+
*
|
|
16
22
|
* Chrome permutes its extension order at runtime (tls_permute_extensions), so
|
|
17
23
|
* `extensionOrder` stores the canonical pre-permutation seed that
|
|
18
24
|
* curl-impersonate configures. The order was verified via a curl_cffi capture
|
|
@@ -69,12 +75,19 @@ const chromeHttp2Base = {
|
|
|
69
75
|
connectionWindowUpdate: 15663105,
|
|
70
76
|
pseudoHeaderOrder: ["method", "authority", "scheme", "path"],
|
|
71
77
|
};
|
|
72
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Chrome's actual SETTINGS frame payload. Real Chrome 131/140 sends exactly
|
|
80
|
+
* four settings (akamai fingerprint `1:65536;2:0;4:6291456;6:262144` — see the
|
|
81
|
+
* chrome-131 oracle capture in browsercore-testing). MAX_CONCURRENT_STREAMS (3)
|
|
82
|
+
* and MAX_FRAME_SIZE (5) are NOT sent: 16384 is the RFC 9113 default, so
|
|
83
|
+
* advertising it would diverge from the real SETTINGS frame. The top-level
|
|
84
|
+
* `maxFrameSize` tuning value stays 16384 — Chrome still frames at that size,
|
|
85
|
+
* it just omits the redundant setting.
|
|
86
|
+
*/
|
|
87
|
+
export const chromeHttp2Settings = {
|
|
73
88
|
headerTableSize: 65536,
|
|
74
89
|
enablePush: false,
|
|
75
|
-
maxConcurrentStreams: 100,
|
|
76
90
|
initialWindowSize: 6291456,
|
|
77
|
-
maxFrameSize: 16384,
|
|
78
91
|
maxHeaderListSize: 262144,
|
|
79
92
|
};
|
|
80
93
|
const chromeHttp1Base = {
|
|
@@ -184,12 +197,22 @@ export const chrome140 = {
|
|
|
184
197
|
tls: {
|
|
185
198
|
...chromeTlsBase,
|
|
186
199
|
extensionOrder: chromeExtensionOrder(17613),
|
|
187
|
-
|
|
200
|
+
// Chrome 131+ shares exactly these in key_share (chrome-131 oracle:
|
|
201
|
+
// GREASE 1-byte "00", X25519MLKEM768 1216B, x25519 32B). P-256/P-384
|
|
202
|
+
// are advertised but never shared. The GREASE slot is injected at
|
|
203
|
+
// runtime via the `grease` flag (randomized per RFC 8701).
|
|
204
|
+
keyShareGroups: ["X25519MLKEM768", "x25519"],
|
|
205
|
+
// supported_groups advertisement (chrome-131 oracle): GREASE, 4588,
|
|
206
|
+
// 29, 23, 24 — the shared list plus secp256r1/secp384r1.
|
|
207
|
+
keyShareAdvertisedGroups: ["X25519MLKEM768", "x25519", "secp256r1", "secp384r1"],
|
|
188
208
|
cipherSuites: chromeCipherSuites,
|
|
189
209
|
},
|
|
190
210
|
http2: {
|
|
191
211
|
...chromeHttp2Base,
|
|
192
212
|
settings: chromeHttp2Settings,
|
|
213
|
+
// Chrome 131+ closes navigations with the extensible-priority header
|
|
214
|
+
// (chrome-131 oracle HEADERS: `priority: u=0, i`). Not an h1 default.
|
|
215
|
+
http2DefaultHeaders: { "priority": "u=0, i" },
|
|
193
216
|
},
|
|
194
217
|
http1: {
|
|
195
218
|
...chromeHttp1Base,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/profiles/chrome.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/profiles/chrome.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,wFAAwF;AACxF,MAAM,MAAM,GAAG,uBAAuB,CAAC;AAEvC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,WAAmB,EAAqB,EAAE,CAAC;IAC5E,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;CAC9E,CAAC;AAEF,MAAM,aAAa,GAAG;IAClB,iBAAiB,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;IACzC,mBAAmB,EAAE;QACjB,wBAAwB;QACxB,qBAAqB;QACrB,kBAAkB;QAClB,wBAAwB;QACxB,qBAAqB;QACrB,kBAAkB;QAClB,qBAAqB;QACrB,kBAAkB;KACrB;IACD,MAAM,EAAE,IAAI;IACZ,cAAc,EAAE,CAAC,IAAI,CAAC;IACtB,6BAA6B,EAAE,CAAC,IAAI,CAAC;IACrC,aAAa,EAAE,GAAG;CACZ,CAAC;AAEX,MAAM,eAAe,GAAG;IACpB,iBAAiB,EAAE,OAAO;IAC1B,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,KAAK;IACtB,MAAM,EAAE,GAAG;IACX,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3B,+DAA+D;IAC/D,oEAAoE;IACpE,yEAAyE;IACzE,iEAAiE;IACjE,MAAM,EAAE,KAAK;IACb,sBAAsB,EAAE,QAAQ;IAChC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC;CACtD,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAC/B,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,KAAK;IACjB,iBAAiB,EAAE,OAAO;IAC1B,iBAAiB,EAAE,MAAM;CACnB,CAAC;AAEX,MAAM,eAAe,GAAG;IACpB,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,mBAAmB;IACnC,WAAW,EAAE;QACT,MAAM;QACN,YAAY;QACZ,WAAW;QACX,kBAAkB;QAClB,oBAAoB;QACpB,2BAA2B;QAC3B,YAAY;QACZ,QAAQ;QACR,gBAAgB;QAChB,gBAAgB;QAChB,gBAAgB;QAChB,gBAAgB;QAChB,iBAAiB;QACjB,iBAAiB;KACpB;CACK,CAAC;AAEX,MAAM,kBAAkB,GAAsB;IAC1C,MAAM;IACN,wBAAwB;IACxB,wBAAwB;IACxB,8BAA8B;IAC9B,yCAAyC;IACzC,uCAAuC;IACvC,yCAAyC;IACzC,uCAAuC;IACvC,+CAA+C;IAC/C,6CAA6C;IAC7C,oCAAoC;IACpC,oCAAoC;IACpC,iCAAiC;IACjC,iCAAiC;IACjC,8BAA8B;IAC9B,8BAA8B;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAmB;IACrC,EAAE,EAAE,YAAyB;IAC7B,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,eAAe;IACxB,GAAG,EAAE;QACD,GAAG,aAAa;QAChB,cAAc,EAAE,oBAAoB,CAAC,KAAK,CAAC;QAC3C,cAAc,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC;QACpD,YAAY,EAAE,kBAAkB;KACnC;IACD,KAAK,EAAE;QACH,GAAG,eAAe;QAClB,QAAQ,EAAE,mBAAmB;KAChC;IACD,KAAK,EAAE;QACH,GAAG,eAAe;QAClB,cAAc,EAAE;YACZ,WAAW,EAAE,kEAAkE;YAC/E,kBAAkB,EAAE,IAAI;YACxB,oBAAoB,EAAE,SAAS;YAC/B,2BAA2B,EAAE,GAAG;YAChC,YAAY,EACR,uHAAuH;YAC3H,MAAM,EAAE,uFAAuF;YAC/F,gBAAgB,EAAE,MAAM;YACxB,gBAAgB,EAAE,UAAU;YAC5B,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,UAAU;YAC5B,iBAAiB,EAAE,gBAAgB;SACtC;KACJ;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAmB;IACrC,EAAE,EAAE,YAAyB;IAC7B,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,gBAAgB;IACzB,GAAG,EAAE;QACD,GAAG,aAAa;QAChB,cAAc,EAAE,oBAAoB,CAAC,KAAK,CAAC;QAC3C,cAAc,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC;QACtE,YAAY,EAAE,kBAAkB;KACnC;IACD,KAAK,EAAE;QACH,GAAG,eAAe;QAClB,QAAQ,EAAE,mBAAmB;KAChC;IACD,KAAK,EAAE;QACH,GAAG,eAAe;QAClB,cAAc,EAAE;YACZ,WAAW,EAAE,mEAAmE;YAChF,kBAAkB,EAAE,IAAI;YACxB,oBAAoB,EAAE,SAAS;YAC/B,2BAA2B,EAAE,GAAG;YAChC,YAAY,EACR,uHAAuH;YAC3H,MAAM,EAAE,uFAAuF;YAC/F,gBAAgB,EAAE,MAAM;YACxB,gBAAgB,EAAE,UAAU;YAC5B,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,UAAU;YAC5B,iBAAiB,EAAE,gBAAgB;SACtC;KACJ;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAmB;IACrC,EAAE,EAAE,YAAyB;IAC7B,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,eAAe;IACxB,GAAG,EAAE;QACD,GAAG,aAAa;QAChB,cAAc,EAAE,oBAAoB,CAAC,KAAK,CAAC;QAC3C,oEAAoE;QACpE,qEAAqE;QACrE,kEAAkE;QAClE,2DAA2D;QAC3D,cAAc,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC;QAC5C,oEAAoE;QACpE,yDAAyD;QACzD,wBAAwB,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC;QAChF,YAAY,EAAE,kBAAkB;KACnC;IACD,KAAK,EAAE;QACH,GAAG,eAAe;QAClB,QAAQ,EAAE,mBAAmB;QAC7B,qEAAqE;QACrE,sEAAsE;QACtE,mBAAmB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE;KAChD;IACD,KAAK,EAAE;QACH,GAAG,eAAe;QAClB,cAAc,EAAE;YACZ,WAAW,EAAE,mEAAmE;YAChF,kBAAkB,EAAE,IAAI;YACxB,oBAAoB,EAAE,SAAS;YAC/B,2BAA2B,EAAE,GAAG;YAChC,YAAY,EACR,uHAAuH;YAC3H,MAAM,EAAE,uFAAuF;YAC/F,gBAAgB,EAAE,MAAM;YACxB,gBAAgB,EAAE,UAAU;YAC5B,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,UAAU;YAC5B,iBAAiB,EAAE,gBAAgB;SACtC;KACJ;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,SAAS;IACT,SAAS;IACT,SAAS;CACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../src/profiles/edge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../src/profiles/edge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AAgG7D,eAAO,MAAM,OAAO,EAAE,cA6BrB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,cA6BrB,CAAC;AAEF,eAAO,MAAM,YAAY;;;CAGf,CAAC"}
|
package/dist/profiles/edge.js
CHANGED
|
@@ -9,9 +9,16 @@
|
|
|
9
9
|
* ground-truth signature; the extension order is shared verbatim with Chrome
|
|
10
10
|
* via {@link chromeExtensionOrder} (captured via curl_cffi against tls.peet.ws).
|
|
11
11
|
*/
|
|
12
|
-
import { chromeExtensionOrder } from "./chrome.js";
|
|
12
|
+
import { chromeExtensionOrder, chromeHttp2Settings } from "./chrome.js";
|
|
13
13
|
/** TLS 1.3 GREASE placeholder cipher (0x?a?a) Edge inserts at the top of the list. */
|
|
14
14
|
const GREASE = "TLS_GREASE_RESERVED_0";
|
|
15
|
+
/**
|
|
16
|
+
* Chromium's SETTINGS frame payload, shared verbatim with Chrome. Real
|
|
17
|
+
* Chromium (Chrome and Edge alike, per the chrome-131 oracle capture) sends
|
|
18
|
+
* exactly ids 1, 2, 4, 6 — no MAX_CONCURRENT_STREAMS, no MAX_FRAME_SIZE.
|
|
19
|
+
* See {@link chromeHttp2Settings} for the capture citation.
|
|
20
|
+
*/
|
|
21
|
+
const edgeHttp2Settings = chromeHttp2Settings;
|
|
15
22
|
/**
|
|
16
23
|
* Edge shares Chrome's extension order (modern Chromium 120+ is the base for
|
|
17
24
|
* edge-120 / edge-128). Both Edge profiles use application_settings_old (17513),
|
|
@@ -100,13 +107,7 @@ export const edge120 = {
|
|
|
100
107
|
},
|
|
101
108
|
http2: {
|
|
102
109
|
...edgeHttp2Base,
|
|
103
|
-
settings:
|
|
104
|
-
headerTableSize: 65536,
|
|
105
|
-
enablePush: false,
|
|
106
|
-
maxConcurrentStreams: 100,
|
|
107
|
-
initialWindowSize: 6291456,
|
|
108
|
-
maxFrameSize: 16384,
|
|
109
|
-
},
|
|
110
|
+
settings: edgeHttp2Settings,
|
|
110
111
|
},
|
|
111
112
|
http1: {
|
|
112
113
|
...edgeHttp1Base,
|
|
@@ -135,13 +136,7 @@ export const edge128 = {
|
|
|
135
136
|
},
|
|
136
137
|
http2: {
|
|
137
138
|
...edgeHttp2Base,
|
|
138
|
-
settings:
|
|
139
|
-
headerTableSize: 65536,
|
|
140
|
-
enablePush: false,
|
|
141
|
-
maxConcurrentStreams: 100,
|
|
142
|
-
initialWindowSize: 6291456,
|
|
143
|
-
maxFrameSize: 16384,
|
|
144
|
-
},
|
|
139
|
+
settings: edgeHttp2Settings,
|
|
145
140
|
},
|
|
146
141
|
http1: {
|
|
147
142
|
...edgeHttp1Base,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/profiles/edge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/profiles/edge.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
* Cipher order, extension order, signature algorithms, and named groups are
|
|
7
7
|
* byte-accurate against the firefox-133 ClientHello capture
|
|
8
8
|
* (tests/fixtures/firefox-133) and the patch's signatures[]/named_groups[]
|
|
9
|
-
* tables. HTTP/2
|
|
10
|
-
*
|
|
9
|
+
* tables. HTTP/2 data (SETTINGS values + order, pseudo-header order, h2-only
|
|
10
|
+
* headers) is aligned to the firefox-133 oracle capture in browsercore-testing
|
|
11
|
+
* — see the firefoxHttp2Impersonation / firefoxHttp2Settings comments.
|
|
11
12
|
*
|
|
12
13
|
* Note on cipher names: codes.js maps names to wire codes with a
|
|
13
14
|
* browser-specific remapping (AES_256->0x1302, ChaCha20->0x1303) so that this
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firefox.d.ts","sourceRoot":"","sources":["../../src/profiles/firefox.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"firefox.d.ts","sourceRoot":"","sources":["../../src/profiles/firefox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AA2H7D,eAAO,MAAM,UAAU,EAAE,cAmCxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,cAgCxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,cA+BxB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;CAIlB,CAAC"}
|
package/dist/profiles/firefox.js
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
* Cipher order, extension order, signature algorithms, and named groups are
|
|
7
7
|
* byte-accurate against the firefox-133 ClientHello capture
|
|
8
8
|
* (tests/fixtures/firefox-133) and the patch's signatures[]/named_groups[]
|
|
9
|
-
* tables. HTTP/2
|
|
10
|
-
*
|
|
9
|
+
* tables. HTTP/2 data (SETTINGS values + order, pseudo-header order, h2-only
|
|
10
|
+
* headers) is aligned to the firefox-133 oracle capture in browsercore-testing
|
|
11
|
+
* — see the firefoxHttp2Impersonation / firefoxHttp2Settings comments.
|
|
11
12
|
*
|
|
12
13
|
* Note on cipher names: codes.js maps names to wire codes with a
|
|
13
14
|
* browser-specific remapping (AES_256->0x1302, ChaCha20->0x1303) so that this
|
|
@@ -62,8 +63,17 @@ const firefoxTlsCiphers = [
|
|
|
62
63
|
"TLS_RSA_WITH_AES_128_CBC_SHA",
|
|
63
64
|
"TLS_RSA_WITH_AES_256_CBC_SHA",
|
|
64
65
|
];
|
|
66
|
+
/**
|
|
67
|
+
* Firefox HTTP/2 tuning shared across versions.
|
|
68
|
+
*
|
|
69
|
+
* `initialWindowSize` follows the real Firefox SETTINGS frame (131072 per the
|
|
70
|
+
* firefox-133 oracle capture in browsercore-testing) — the connection-level
|
|
71
|
+
* window grows via the preface WINDOW_UPDATE, not via SETTINGS.
|
|
72
|
+
* firefox-120 predates the impersonation data and pins the legacy 12MB value
|
|
73
|
+
* from the curl-impersonate patch; see its inline override.
|
|
74
|
+
*/
|
|
65
75
|
const firefoxHttp2Base = {
|
|
66
|
-
initialWindowSize:
|
|
76
|
+
initialWindowSize: 131072,
|
|
67
77
|
maxFrameSize: 16384,
|
|
68
78
|
headerTableSize: 65536,
|
|
69
79
|
weight: 256,
|
|
@@ -78,11 +88,30 @@ const firefoxTlsImpersonation = {
|
|
|
78
88
|
ecPointFormats: [0x00],
|
|
79
89
|
compressCertificateAlgorithms: [0x02, 0x01],
|
|
80
90
|
};
|
|
91
|
+
/**
|
|
92
|
+
* HTTP/2 impersonation fields shared by firefox-128 and firefox-135 (but not
|
|
93
|
+
* firefox-120, which predates the impersonation data). Values are aligned to
|
|
94
|
+
* the firefox-133 oracle capture (browsercore-testing/captures/firefox-133/
|
|
95
|
+
* oracle_capture.reference.json): SETTINGS `1:65536;2:0;4:131072;5:16384|
|
|
96
|
+
* 12517377|0|m,p,a,s` and pseudo-header wire order
|
|
97
|
+
* `:method,:path,:authority,:scheme`.
|
|
98
|
+
*/
|
|
81
99
|
const firefoxHttp2Impersonation = {
|
|
82
|
-
settingsOrder: [1, 2, 4,
|
|
100
|
+
settingsOrder: [1, 2, 4, 5],
|
|
83
101
|
grease: false,
|
|
84
102
|
connectionWindowUpdate: 12517377,
|
|
85
|
-
pseudoHeaderOrder: ["method", "
|
|
103
|
+
pseudoHeaderOrder: ["method", "path", "authority", "scheme"],
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Firefox SETTINGS frame payload per the firefox-133 oracle: four entries,
|
|
107
|
+
* ending in MAX_FRAME_SIZE (id 5) — Firefox sends MAX_FRAME_SIZE where Chrome
|
|
108
|
+
* sends MAX_HEADER_LIST_SIZE, and never sends MAX_CONCURRENT_STREAMS.
|
|
109
|
+
*/
|
|
110
|
+
const firefoxHttp2Settings = {
|
|
111
|
+
headerTableSize: 65536,
|
|
112
|
+
enablePush: false,
|
|
113
|
+
initialWindowSize: 131072,
|
|
114
|
+
maxFrameSize: 16384,
|
|
86
115
|
};
|
|
87
116
|
const firefoxHttp1Base = {
|
|
88
117
|
connection: "keep-alive",
|
|
@@ -111,6 +140,9 @@ export const firefox120 = {
|
|
|
111
140
|
},
|
|
112
141
|
http2: {
|
|
113
142
|
...firefoxHttp2Base,
|
|
143
|
+
// Pre-impersonation legacy data (no oracle capture): keep the
|
|
144
|
+
// curl-impersonate patch's 12MB SETTINGS window.
|
|
145
|
+
initialWindowSize: 12582912,
|
|
114
146
|
settings: {
|
|
115
147
|
headerTableSize: 65536,
|
|
116
148
|
enablePush: false,
|
|
@@ -145,13 +177,11 @@ export const firefox128 = {
|
|
|
145
177
|
http2: {
|
|
146
178
|
...firefoxHttp2Base,
|
|
147
179
|
...firefoxHttp2Impersonation,
|
|
148
|
-
settings:
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
maxFrameSize: 16384,
|
|
154
|
-
},
|
|
180
|
+
settings: firefoxHttp2Settings,
|
|
181
|
+
// h2-only defaults per real Firefox: `te: trailers` has been sent for
|
|
182
|
+
// as long as Firefox has spoken h2. The `priority` header is NOT set
|
|
183
|
+
// here — it first shipped in Firefox 133, after this profile.
|
|
184
|
+
http2DefaultHeaders: { "te": "trailers" },
|
|
155
185
|
},
|
|
156
186
|
http1: {
|
|
157
187
|
...firefoxHttp1Base,
|
|
@@ -179,13 +209,10 @@ export const firefox135 = {
|
|
|
179
209
|
http2: {
|
|
180
210
|
...firefoxHttp2Base,
|
|
181
211
|
...firefoxHttp2Impersonation,
|
|
182
|
-
settings:
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
initialWindowSize: 12582912,
|
|
187
|
-
maxFrameSize: 16384,
|
|
188
|
-
},
|
|
212
|
+
settings: firefoxHttp2Settings,
|
|
213
|
+
// h2-only defaults per the firefox-133 oracle HEADERS frame
|
|
214
|
+
// (wire order: priority before te).
|
|
215
|
+
http2DefaultHeaders: { "priority": "u=0, i", "te": "trailers" },
|
|
189
216
|
},
|
|
190
217
|
http1: {
|
|
191
218
|
...firefoxHttp1Base,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firefox.js","sourceRoot":"","sources":["../../src/profiles/firefox.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"firefox.js","sourceRoot":"","sources":["../../src/profiles/firefox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,MAAM,cAAc,GAAG;IACnB,cAAc,EAAE;QACZ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK;KACrE;IACD,iBAAiB,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;IACzC,cAAc,EAAE;QACZ,QAAQ;QACR,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;KACd;IACD,mBAAmB,EAAE;QACjB,wBAAwB;QACxB,wBAAwB;QACxB,wBAAwB;QACxB,qBAAqB;QACrB,qBAAqB;QACrB,qBAAqB;QACrB,kBAAkB;QAClB,kBAAkB;QAClB,kBAAkB;QAClB,YAAY;QACZ,gBAAgB;KACnB;IACD,MAAM,EAAE,KAAK;CACP,CAAC;AAEX,MAAM,iBAAiB,GAAG;IACtB,wBAAwB;IACxB,8BAA8B;IAC9B,wBAAwB;IACxB,yCAAyC;IACzC,uCAAuC;IACvC,+CAA+C;IAC/C,6CAA6C;IAC7C,yCAAyC;IACzC,uCAAuC;IACvC,sCAAsC;IACtC,sCAAsC;IACtC,oCAAoC;IACpC,oCAAoC;IACpC,iCAAiC;IACjC,iCAAiC;IACjC,8BAA8B;IAC9B,8BAA8B;CACxB,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,gBAAgB,GAAG;IACrB,iBAAiB,EAAE,MAAM;IACzB,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,KAAK;IACtB,MAAM,EAAE,GAAG;CACL,CAAC;AAEX;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG;IAC5B,cAAc,EAAE,CAAC,IAAI,CAAC;IACtB,6BAA6B,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;CACrC,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,yBAAyB,GAAG;IAC9B,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,EAAE,KAAK;IACb,sBAAsB,EAAE,QAAQ;IAChC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC;CACtD,CAAC;AAEX;;;;GAIG;AACH,MAAM,oBAAoB,GAAG;IACzB,eAAe,EAAE,KAAK;IACtB,UAAU,EAAE,KAAK;IACjB,iBAAiB,EAAE,MAAM;IACzB,YAAY,EAAE,KAAK;CACb,CAAC;AAEX,MAAM,gBAAgB,GAAG;IACrB,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,mBAAmB;IACnC,WAAW,EAAE;QACT,MAAM;QACN,YAAY;QACZ,QAAQ;QACR,iBAAiB;QACjB,iBAAiB;QACjB,YAAY;QACZ,2BAA2B;QAC3B,gBAAgB;QAChB,gBAAgB;QAChB,gBAAgB;QAChB,gBAAgB;KACnB;CACK,CAAC;AAEX,MAAM,CAAC,MAAM,UAAU,GAAmB;IACtC,EAAE,EAAE,aAA0B;IAC9B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;IAChB,GAAG,EAAE;QACD,GAAG,cAAc;QACjB,YAAY,EAAE,iBAAiB;KAClC;IACD,KAAK,EAAE;QACH,GAAG,gBAAgB;QACnB,8DAA8D;QAC9D,iDAAiD;QACjD,iBAAiB,EAAE,QAAQ;QAC3B,QAAQ,EAAE;YACN,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,oBAAoB,EAAE,GAAG;YACzB,iBAAiB,EAAE,QAAQ;YAC3B,YAAY,EAAE,KAAK;SACtB;KACJ;IACD,KAAK,EAAE;QACH,GAAG,gBAAgB;QACnB,cAAc,EAAE;YACZ,YAAY,EACR,sFAAsF;YAC1F,MAAM,EAAE,uFAAuF;YAC/F,iBAAiB,EAAE,gBAAgB;YACnC,2BAA2B,EAAE,GAAG;YAChC,gBAAgB,EAAE,UAAU;YAC5B,gBAAgB,EAAE,UAAU;YAC5B,gBAAgB,EAAE,MAAM;YACxB,gBAAgB,EAAE,IAAI;SACzB;KACJ;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAmB;IACtC,EAAE,EAAE,aAA0B;IAC9B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;IAChB,GAAG,EAAE;QACD,GAAG,cAAc;QACjB,GAAG,uBAAuB;QAC1B,YAAY,EAAE,iBAAiB;KAClC;IACD,KAAK,EAAE;QACH,GAAG,gBAAgB;QACnB,GAAG,yBAAyB;QAC5B,QAAQ,EAAE,oBAAoB;QAC9B,sEAAsE;QACtE,qEAAqE;QACrE,8DAA8D;QAC9D,mBAAmB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;KAC5C;IACD,KAAK,EAAE;QACH,GAAG,gBAAgB;QACnB,cAAc,EAAE;YACZ,YAAY,EACR,sFAAsF;YAC1F,MAAM,EAAE,uFAAuF;YAC/F,iBAAiB,EAAE,gBAAgB;YACnC,2BAA2B,EAAE,GAAG;YAChC,gBAAgB,EAAE,UAAU;YAC5B,gBAAgB,EAAE,UAAU;YAC5B,gBAAgB,EAAE,MAAM;YACxB,gBAAgB,EAAE,IAAI;SACzB;KACJ;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAmB;IACtC,EAAE,EAAE,aAA0B;IAC9B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;IAChB,GAAG,EAAE;QACD,GAAG,cAAc;QACjB,GAAG,uBAAuB;QAC1B,YAAY,EAAE,iBAAiB;KAClC;IACD,KAAK,EAAE;QACH,GAAG,gBAAgB;QACnB,GAAG,yBAAyB;QAC5B,QAAQ,EAAE,oBAAoB;QAC9B,4DAA4D;QAC5D,oCAAoC;QACpC,mBAAmB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;KAClE;IACD,KAAK,EAAE;QACH,GAAG,gBAAgB;QACnB,cAAc,EAAE;YACZ,YAAY,EACR,sFAAsF;YAC1F,MAAM,EAAE,uFAAuF;YAC/F,iBAAiB,EAAE,gBAAgB;YACnC,2BAA2B,EAAE,GAAG;YAChC,gBAAgB,EAAE,UAAU;YAC5B,gBAAgB,EAAE,UAAU;YAC5B,gBAAgB,EAAE,MAAM;YACxB,gBAAgB,EAAE,IAAI;SACzB;KACJ;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,UAAU;IACV,UAAU;IACV,UAAU;CACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -32,8 +32,27 @@ export interface TlsProfile {
|
|
|
32
32
|
readonly extensionOrder: readonly number[];
|
|
33
33
|
/** Supported TLS versions, highest first. */
|
|
34
34
|
readonly supportedVersions: readonly string[];
|
|
35
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Named groups actually shared in the TLS 1.3 key_share extension, in wire
|
|
37
|
+
* order. A strict subset (or equal) of {@link keyShareAdvertisedGroups}.
|
|
38
|
+
*
|
|
39
|
+
* Real browsers share fewer groups than they advertise: Chrome 131+ shares
|
|
40
|
+
* only X25519MLKEM768 + x25519 while advertising P-256/P-384 as well.
|
|
41
|
+
* GREASE key-share slots are NOT listed here — the `grease` flag drives
|
|
42
|
+
* them (values are randomized per connection, RFC 8701).
|
|
43
|
+
*/
|
|
36
44
|
readonly keyShareGroups: readonly string[];
|
|
45
|
+
/**
|
|
46
|
+
* Named groups advertised in the supported_groups extension, in wire order
|
|
47
|
+
* — the superset the browser claims to support. Distinct from
|
|
48
|
+
* {@link keyShareGroups} (the groups actually shared in key_share).
|
|
49
|
+
*
|
|
50
|
+
* Cross-repo contract field: the name `keyShareAdvertisedGroups` is fixed.
|
|
51
|
+
* Optional for backwards compatibility: when absent, consumers derive the
|
|
52
|
+
* advertised list from `keyShareGroups` (the pre-0.2.4 behavior).
|
|
53
|
+
* GREASE slots are not listed — the `grease` flag drives them.
|
|
54
|
+
*/
|
|
55
|
+
readonly keyShareAdvertisedGroups?: readonly string[];
|
|
37
56
|
/** Signature algorithms offered. */
|
|
38
57
|
readonly signatureAlgorithms: readonly string[];
|
|
39
58
|
/** record_size_limit extension value, if advertised. Absent when not sent. */
|
|
@@ -74,6 +93,17 @@ export interface Http2Profile {
|
|
|
74
93
|
readonly connectionWindowUpdate?: number;
|
|
75
94
|
/** Pseudo-header order. Chrome: ["method", "authority", "scheme", "path"]. */
|
|
76
95
|
readonly pseudoHeaderOrder?: readonly string[];
|
|
96
|
+
/**
|
|
97
|
+
* Headers real browsers add to every HTTP/2 request but not to HTTP/1.1
|
|
98
|
+
* (h2-only defaults, absent from {@link Http1Profile.defaultHeaders}).
|
|
99
|
+
* Key order mirrors the browser's wire order.
|
|
100
|
+
*
|
|
101
|
+
* Cross-repo contract field: the name `http2DefaultHeaders` is fixed.
|
|
102
|
+
* Optional: absent → consumers fall back to the HTTP/1.1 defaults.
|
|
103
|
+
* Chrome 131+: { "priority": "u=0, i" }; Firefox 133+: additionally
|
|
104
|
+
* { "te": "trailers" } (priority on Firefox landed in 133).
|
|
105
|
+
*/
|
|
106
|
+
readonly http2DefaultHeaders?: Readonly<Record<string, string>>;
|
|
77
107
|
}
|
|
78
108
|
/**
|
|
79
109
|
* HTTP/2 numeric settings (RFC 9113 §6.5.1).
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAE1D,+DAA+D;AAC/D,MAAM,MAAM,WAAW,GACjB,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,MAAM,CAAC;AAEb;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACvB,4FAA4F;IAC5F,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,kDAAkD;IAClD,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,6CAA6C;IAC7C,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/validate.d.ts
CHANGED
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
* A key honesty: GREASE (RFC 8701) values are randomized per-connection, so a
|
|
10
10
|
* profile cannot predict the exact GREASE bytes. We handle this where the data
|
|
11
11
|
* lets us — cipher suites mark GREASE slots with a named placeholder, so a
|
|
12
|
-
* GREASE slot in the profile matches any GREASE-pattern byte pair in the
|
|
12
|
+
* GREASE slot in the profile matches any GREASE-pattern byte pair in the
|
|
13
|
+
* capture, and named-group lists (key_share / supported_groups) are diffed
|
|
14
|
+
* with the capture's GREASE-pattern entries skipped for greasing profiles.
|
|
13
15
|
* Extension GREASE is not handled here because the profile stores literal wire
|
|
14
16
|
* codes for extensions (not placeholders), so it cannot robustly flag a GREASE
|
|
15
17
|
* extension slot. See the per-field comments below.
|
|
@@ -25,8 +27,13 @@ export interface TlsCapture {
|
|
|
25
27
|
readonly extensionTypes: readonly number[];
|
|
26
28
|
/** Supported versions advertised, as 2-byte codes, highest first. */
|
|
27
29
|
readonly supportedVersions: readonly number[];
|
|
28
|
-
/** Key-share named-group ids offered. */
|
|
30
|
+
/** Key-share named-group ids offered in the key_share extension. */
|
|
29
31
|
readonly keyShareGroups: readonly number[];
|
|
32
|
+
/**
|
|
33
|
+
* Named-group ids advertised in supported_groups. Superset of
|
|
34
|
+
* {@link keyShareGroups}. Absent when the capture tool doesn't record them.
|
|
35
|
+
*/
|
|
36
|
+
readonly keyShareAdvertisedGroups?: readonly number[];
|
|
30
37
|
/** Signature algorithm codes offered. */
|
|
31
38
|
readonly signatureAlgorithms: readonly number[];
|
|
32
39
|
/** EC point formats observed (wire codes). Absent when the capture tool doesn't record them. */
|
|
@@ -49,6 +56,12 @@ export interface ClientHelloExpected {
|
|
|
49
56
|
readonly supportedVersions: readonly number[];
|
|
50
57
|
/** Key-share named-group ids. */
|
|
51
58
|
readonly keyShareGroups: readonly number[];
|
|
59
|
+
/**
|
|
60
|
+
* Named-group ids advertised in supported_groups. Undefined when the
|
|
61
|
+
* profile doesn't split advertised from shared groups (consumers then
|
|
62
|
+
* derive advertised = keyShareGroups).
|
|
63
|
+
*/
|
|
64
|
+
readonly keyShareAdvertisedGroups?: readonly number[];
|
|
52
65
|
/** Signature algorithm codes. */
|
|
53
66
|
readonly signatureAlgorithms: readonly number[];
|
|
54
67
|
/** EC point formats offered (wire codes). Undefined when the profile doesn't specify them. */
|
package/dist/validate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/validate.js
CHANGED
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
* A key honesty: GREASE (RFC 8701) values are randomized per-connection, so a
|
|
10
10
|
* profile cannot predict the exact GREASE bytes. We handle this where the data
|
|
11
11
|
* lets us — cipher suites mark GREASE slots with a named placeholder, so a
|
|
12
|
-
* GREASE slot in the profile matches any GREASE-pattern byte pair in the
|
|
12
|
+
* GREASE slot in the profile matches any GREASE-pattern byte pair in the
|
|
13
|
+
* capture, and named-group lists (key_share / supported_groups) are diffed
|
|
14
|
+
* with the capture's GREASE-pattern entries skipped for greasing profiles.
|
|
13
15
|
* Extension GREASE is not handled here because the profile stores literal wire
|
|
14
16
|
* codes for extensions (not placeholders), so it cannot robustly flag a GREASE
|
|
15
17
|
* extension slot. See the per-field comments below.
|
|
@@ -84,6 +86,11 @@ export function buildExpectedClientHello(profile, serverName) {
|
|
|
84
86
|
grease: profile.tls.grease,
|
|
85
87
|
// Conditionally spread optional fields so absent properties are truly
|
|
86
88
|
// absent (exactOptionalPropertyTypes forbids assigning undefined).
|
|
89
|
+
...(profile.tls.keyShareAdvertisedGroups
|
|
90
|
+
? {
|
|
91
|
+
keyShareAdvertisedGroups: profile.tls.keyShareAdvertisedGroups.map(mapNamedGroup),
|
|
92
|
+
}
|
|
93
|
+
: {}),
|
|
87
94
|
...(profile.tls.ecPointFormats
|
|
88
95
|
? { ecPointFormats: Array.from(profile.tls.ecPointFormats) }
|
|
89
96
|
: {}),
|
|
@@ -116,6 +123,19 @@ function diffNumberArray(path, expected, actual, out) {
|
|
|
116
123
|
}
|
|
117
124
|
}
|
|
118
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Diff named-group lists with GREASE awareness. Profile group lists never
|
|
128
|
+
* carry GREASE names — the profile's `grease` flag drives those randomized
|
|
129
|
+
* slots (see the convention note in profiles/chrome.ts) — so for a greasing
|
|
130
|
+
* profile the capture's GREASE-pattern entries are skipped rather than counted
|
|
131
|
+
* as mismatches. Everything else is diffed in wire order.
|
|
132
|
+
*/
|
|
133
|
+
function diffGroupArray(path, profileGreased, expected, capture, out) {
|
|
134
|
+
const captureGroups = profileGreased
|
|
135
|
+
? capture.filter((v) => !isGreaseValue(v))
|
|
136
|
+
: [...capture];
|
|
137
|
+
diffNumberArray(path, expected, captureGroups, out);
|
|
138
|
+
}
|
|
119
139
|
/** Diff cipher suites with GREASE awareness: a GREASE slot matches any GREASE-pattern value. */
|
|
120
140
|
function diffCipherSuites(profile, expected, capture, out) {
|
|
121
141
|
const n = Math.max(expected.length, capture.length);
|
|
@@ -172,8 +192,15 @@ export function validateProfileAgainstCapture(profile, capture) {
|
|
|
172
192
|
diffCipherSuites(profile, expected.cipherSuites, capture.cipherSuites, diffs);
|
|
173
193
|
diffNumberArray("tls.extensionTypes", expected.extensionTypes, capture.extensionTypes, diffs);
|
|
174
194
|
diffNumberArray("tls.supportedVersions", expected.supportedVersions, capture.supportedVersions, diffs);
|
|
175
|
-
|
|
195
|
+
diffGroupArray("tls.keyShareGroups", profile.tls.grease, expected.keyShareGroups, capture.keyShareGroups, diffs);
|
|
176
196
|
diffNumberArray("tls.signatureAlgorithms", expected.signatureAlgorithms, capture.signatureAlgorithms, diffs);
|
|
197
|
+
// Advertised (supported_groups) list: only diff when both the profile
|
|
198
|
+
// splits it from the shared list and the capture records it. Captures that
|
|
199
|
+
// predate the split fall back to the keyShareGroups comparison above.
|
|
200
|
+
if (expected.keyShareAdvertisedGroups !== undefined &&
|
|
201
|
+
capture.keyShareAdvertisedGroups !== undefined) {
|
|
202
|
+
diffGroupArray("tls.keyShareAdvertisedGroups", profile.tls.grease, expected.keyShareAdvertisedGroups, capture.keyShareAdvertisedGroups, diffs);
|
|
203
|
+
}
|
|
177
204
|
// Optional impersonation fields: only diff when both the profile and the
|
|
178
205
|
// capture record them. Older captures may not include ecPointFormats or
|
|
179
206
|
// compressCertificateAlgorithms, so absence from the capture is not a mismatch.
|
package/dist/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|