nlcurl 0.7.0 → 0.9.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/README.md +149 -140
- package/dist/cache/groups.d.ts +75 -0
- package/dist/cache/groups.d.ts.map +1 -0
- package/dist/cache/groups.js +118 -0
- package/dist/cache/groups.js.map +1 -0
- package/dist/cache/no-vary-search.d.ts +33 -0
- package/dist/cache/no-vary-search.d.ts.map +1 -0
- package/dist/cache/no-vary-search.js +148 -0
- package/dist/cache/no-vary-search.js.map +1 -0
- package/dist/cache/range.d.ts +120 -0
- package/dist/cache/range.d.ts.map +1 -0
- package/dist/cache/range.js +193 -0
- package/dist/cache/range.js.map +1 -0
- package/dist/cache/store.d.ts +75 -37
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +217 -85
- package/dist/cache/store.js.map +1 -1
- package/dist/cache/types.d.ts +10 -39
- package/dist/cache/types.d.ts.map +1 -1
- package/dist/cli/args.d.ts +4 -37
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +3 -4
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/index.d.ts +0 -5
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +14 -20
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +14 -20
- package/dist/cli/output.js.map +1 -1
- package/dist/cookies/jar.d.ts +41 -40
- package/dist/cookies/jar.d.ts.map +1 -1
- package/dist/cookies/jar.js +65 -42
- package/dist/cookies/jar.js.map +1 -1
- package/dist/cookies/parser.d.ts +13 -17
- package/dist/cookies/parser.d.ts.map +1 -1
- package/dist/cookies/parser.js +23 -15
- package/dist/cookies/parser.js.map +1 -1
- package/dist/cookies/psl-data.d.ts +1 -1
- package/dist/cookies/psl-data.js +1 -1
- package/dist/cookies/public-suffix.d.ts +5 -27
- package/dist/cookies/public-suffix.d.ts.map +1 -1
- package/dist/cookies/public-suffix.js +5 -37
- package/dist/cookies/public-suffix.js.map +1 -1
- package/dist/core/auth.d.ts +61 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +159 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/client.d.ts +28 -40
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +31 -41
- package/dist/core/client.js.map +1 -1
- package/dist/core/errors.d.ts +64 -88
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +64 -88
- package/dist/core/errors.js.map +1 -1
- package/dist/core/request.d.ts +33 -113
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/response.d.ts +49 -66
- package/dist/core/response.d.ts.map +1 -1
- package/dist/core/response.js +45 -59
- package/dist/core/response.js.map +1 -1
- package/dist/core/session.d.ts +66 -78
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +136 -77
- package/dist/core/session.js.map +1 -1
- package/dist/core/validation.d.ts +58 -43
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +141 -56
- package/dist/core/validation.js.map +1 -1
- package/dist/dns/cache.d.ts +65 -0
- package/dist/dns/cache.d.ts.map +1 -0
- package/dist/dns/cache.js +119 -0
- package/dist/dns/cache.js.map +1 -0
- package/dist/dns/codec.d.ts +29 -19
- package/dist/dns/codec.d.ts.map +1 -1
- package/dist/dns/codec.js +73 -39
- package/dist/dns/codec.js.map +1 -1
- package/dist/dns/doh-resolver.d.ts +17 -31
- package/dist/dns/doh-resolver.d.ts.map +1 -1
- package/dist/dns/doh-resolver.js +47 -48
- package/dist/dns/doh-resolver.js.map +1 -1
- package/dist/dns/dot-resolver.d.ts +89 -0
- package/dist/dns/dot-resolver.d.ts.map +1 -0
- package/dist/dns/dot-resolver.js +166 -0
- package/dist/dns/dot-resolver.js.map +1 -0
- package/dist/dns/https-rr.d.ts +19 -30
- package/dist/dns/https-rr.d.ts.map +1 -1
- package/dist/dns/https-rr.js +22 -40
- package/dist/dns/https-rr.js.map +1 -1
- package/dist/dns/types.d.ts +31 -59
- package/dist/dns/types.d.ts.map +1 -1
- package/dist/dns/types.js +3 -14
- package/dist/dns/types.js.map +1 -1
- package/dist/fingerprints/akamai.d.ts +3 -11
- package/dist/fingerprints/akamai.d.ts.map +1 -1
- package/dist/fingerprints/akamai.js +3 -11
- package/dist/fingerprints/akamai.js.map +1 -1
- package/dist/fingerprints/database.d.ts +6 -14
- package/dist/fingerprints/database.d.ts.map +1 -1
- package/dist/fingerprints/database.js +6 -14
- package/dist/fingerprints/database.js.map +1 -1
- package/dist/fingerprints/extensions.d.ts +56 -71
- package/dist/fingerprints/extensions.d.ts.map +1 -1
- package/dist/fingerprints/extensions.js +58 -71
- package/dist/fingerprints/extensions.js.map +1 -1
- package/dist/fingerprints/ja3.d.ts +12 -30
- package/dist/fingerprints/ja3.d.ts.map +1 -1
- package/dist/fingerprints/ja3.js +12 -30
- package/dist/fingerprints/ja3.js.map +1 -1
- package/dist/fingerprints/ja4.d.ts +18 -0
- package/dist/fingerprints/ja4.d.ts.map +1 -0
- package/dist/fingerprints/ja4.js +81 -0
- package/dist/fingerprints/ja4.js.map +1 -0
- package/dist/fingerprints/profiles/chrome.d.ts +18 -21
- package/dist/fingerprints/profiles/chrome.d.ts.map +1 -1
- package/dist/fingerprints/profiles/chrome.js +35 -31
- package/dist/fingerprints/profiles/chrome.js.map +1 -1
- package/dist/fingerprints/profiles/edge.d.ts +7 -10
- package/dist/fingerprints/profiles/edge.d.ts.map +1 -1
- package/dist/fingerprints/profiles/edge.js +7 -10
- package/dist/fingerprints/profiles/edge.js.map +1 -1
- package/dist/fingerprints/profiles/firefox.d.ts +8 -11
- package/dist/fingerprints/profiles/firefox.d.ts.map +1 -1
- package/dist/fingerprints/profiles/firefox.js +8 -11
- package/dist/fingerprints/profiles/firefox.js.map +1 -1
- package/dist/fingerprints/profiles/safari.d.ts +11 -14
- package/dist/fingerprints/profiles/safari.d.ts.map +1 -1
- package/dist/fingerprints/profiles/safari.js +11 -14
- package/dist/fingerprints/profiles/safari.js.map +1 -1
- package/dist/fingerprints/profiles/tor.d.ts +5 -8
- package/dist/fingerprints/profiles/tor.d.ts.map +1 -1
- package/dist/fingerprints/profiles/tor.js +5 -8
- package/dist/fingerprints/profiles/tor.js.map +1 -1
- package/dist/fingerprints/types.d.ts +42 -73
- package/dist/fingerprints/types.d.ts.map +1 -1
- package/dist/hsts/store.d.ts +19 -21
- package/dist/hsts/store.d.ts.map +1 -1
- package/dist/hsts/store.js +20 -28
- package/dist/hsts/store.js.map +1 -1
- package/dist/hsts/types.d.ts +10 -14
- package/dist/hsts/types.d.ts.map +1 -1
- package/dist/http/alt-svc.d.ts +27 -52
- package/dist/http/alt-svc.d.ts.map +1 -1
- package/dist/http/alt-svc.js +17 -67
- package/dist/http/alt-svc.js.map +1 -1
- package/dist/http/early-hints.d.ts +23 -0
- package/dist/http/early-hints.d.ts.map +1 -0
- package/dist/http/early-hints.js +33 -0
- package/dist/http/early-hints.js.map +1 -0
- package/dist/http/form-data.d.ts +17 -35
- package/dist/http/form-data.d.ts.map +1 -1
- package/dist/http/form-data.js +12 -34
- package/dist/http/form-data.js.map +1 -1
- package/dist/http/h1/client.d.ts +14 -26
- package/dist/http/h1/client.d.ts.map +1 -1
- package/dist/http/h1/client.js +14 -23
- package/dist/http/h1/client.js.map +1 -1
- package/dist/http/h1/encoder.d.ts +21 -17
- package/dist/http/h1/encoder.d.ts.map +1 -1
- package/dist/http/h1/encoder.js +56 -20
- package/dist/http/h1/encoder.js.map +1 -1
- package/dist/http/h1/parser.d.ts +23 -59
- package/dist/http/h1/parser.d.ts.map +1 -1
- package/dist/http/h1/parser.js +61 -55
- package/dist/http/h1/parser.js.map +1 -1
- package/dist/http/h2/client.d.ts +23 -59
- package/dist/http/h2/client.d.ts.map +1 -1
- package/dist/http/h2/client.js +107 -64
- package/dist/http/h2/client.js.map +1 -1
- package/dist/http/h2/frames.d.ts +53 -84
- package/dist/http/h2/frames.d.ts.map +1 -1
- package/dist/http/h2/frames.js +48 -76
- package/dist/http/h2/frames.js.map +1 -1
- package/dist/http/h2/hpack.d.ts +20 -36
- package/dist/http/h2/hpack.d.ts.map +1 -1
- package/dist/http/h2/hpack.js +41 -36
- package/dist/http/h2/hpack.js.map +1 -1
- package/dist/http/negotiator.d.ts +25 -38
- package/dist/http/negotiator.d.ts.map +1 -1
- package/dist/http/negotiator.js +17 -38
- package/dist/http/negotiator.js.map +1 -1
- package/dist/http/pool.d.ts +34 -64
- package/dist/http/pool.d.ts.map +1 -1
- package/dist/http/pool.js +22 -41
- package/dist/http/pool.js.map +1 -1
- package/dist/http/resumable-upload.d.ts +76 -0
- package/dist/http/resumable-upload.d.ts.map +1 -0
- package/dist/http/resumable-upload.js +104 -0
- package/dist/http/resumable-upload.js.map +1 -0
- package/dist/http/trailers.d.ts +29 -0
- package/dist/http/trailers.d.ts.map +1 -0
- package/dist/http/trailers.js +57 -0
- package/dist/http/trailers.js.map +1 -0
- package/dist/index.d.ts +24 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/dist/middleware/circuit-breaker.d.ts +44 -0
- package/dist/middleware/circuit-breaker.d.ts.map +1 -0
- package/dist/middleware/circuit-breaker.js +96 -0
- package/dist/middleware/circuit-breaker.js.map +1 -0
- package/dist/middleware/interceptor.d.ts +13 -32
- package/dist/middleware/interceptor.d.ts.map +1 -1
- package/dist/middleware/interceptor.js +11 -16
- package/dist/middleware/interceptor.js.map +1 -1
- package/dist/middleware/rate-limiter.d.ts +8 -17
- package/dist/middleware/rate-limiter.d.ts.map +1 -1
- package/dist/middleware/rate-limiter.js +11 -12
- package/dist/middleware/rate-limiter.js.map +1 -1
- package/dist/middleware/retry-after.d.ts +15 -0
- package/dist/middleware/retry-after.d.ts.map +1 -0
- package/dist/middleware/retry-after.js +36 -0
- package/dist/middleware/retry-after.js.map +1 -0
- package/dist/middleware/retry.d.ts +9 -18
- package/dist/middleware/retry.d.ts.map +1 -1
- package/dist/middleware/retry.js +12 -9
- package/dist/middleware/retry.js.map +1 -1
- package/dist/proxy/auth.d.ts +73 -0
- package/dist/proxy/auth.d.ts.map +1 -0
- package/dist/proxy/auth.js +129 -0
- package/dist/proxy/auth.js.map +1 -0
- package/dist/proxy/env-proxy.d.ts +5 -15
- package/dist/proxy/env-proxy.d.ts.map +1 -1
- package/dist/proxy/env-proxy.js +5 -23
- package/dist/proxy/env-proxy.js.map +1 -1
- package/dist/proxy/http-proxy.d.ts +12 -19
- package/dist/proxy/http-proxy.d.ts.map +1 -1
- package/dist/proxy/http-proxy.js +5 -8
- package/dist/proxy/http-proxy.js.map +1 -1
- package/dist/proxy/socks.d.ts +13 -20
- package/dist/proxy/socks.d.ts.map +1 -1
- package/dist/proxy/socks.js +8 -10
- package/dist/proxy/socks.js.map +1 -1
- package/dist/sse/parser.d.ts +16 -37
- package/dist/sse/parser.d.ts.map +1 -1
- package/dist/sse/parser.js +31 -28
- package/dist/sse/parser.js.map +1 -1
- package/dist/tls/constants.d.ts +21 -72
- package/dist/tls/constants.d.ts.map +1 -1
- package/dist/tls/constants.js +21 -72
- package/dist/tls/constants.js.map +1 -1
- package/dist/tls/ct.d.ts +78 -0
- package/dist/tls/ct.d.ts.map +1 -0
- package/dist/tls/ct.js +175 -0
- package/dist/tls/ct.js.map +1 -0
- package/dist/tls/early-data.d.ts +45 -0
- package/dist/tls/early-data.d.ts.map +1 -0
- package/dist/tls/early-data.js +46 -0
- package/dist/tls/early-data.js.map +1 -0
- package/dist/tls/ech.d.ts +68 -85
- package/dist/tls/ech.d.ts.map +1 -1
- package/dist/tls/ech.js +54 -102
- package/dist/tls/ech.js.map +1 -1
- package/dist/tls/keylog.d.ts +34 -0
- package/dist/tls/keylog.d.ts.map +1 -0
- package/dist/tls/keylog.js +64 -0
- package/dist/tls/keylog.js.map +1 -0
- package/dist/tls/node-engine.d.ts +10 -17
- package/dist/tls/node-engine.d.ts.map +1 -1
- package/dist/tls/node-engine.js +41 -18
- package/dist/tls/node-engine.js.map +1 -1
- package/dist/tls/ocsp.d.ts +55 -0
- package/dist/tls/ocsp.d.ts.map +1 -0
- package/dist/tls/ocsp.js +131 -0
- package/dist/tls/ocsp.js.map +1 -0
- package/dist/tls/pin-verification.d.ts +5 -4
- package/dist/tls/pin-verification.d.ts.map +1 -1
- package/dist/tls/pin-verification.js +5 -11
- package/dist/tls/pin-verification.js.map +1 -1
- package/dist/tls/session-cache.d.ts +27 -39
- package/dist/tls/session-cache.d.ts.map +1 -1
- package/dist/tls/session-cache.js +20 -24
- package/dist/tls/session-cache.js.map +1 -1
- package/dist/tls/stealth/client-hello.d.ts +26 -45
- package/dist/tls/stealth/client-hello.d.ts.map +1 -1
- package/dist/tls/stealth/client-hello.js +15 -31
- package/dist/tls/stealth/client-hello.js.map +1 -1
- package/dist/tls/stealth/engine.d.ts +10 -15
- package/dist/tls/stealth/engine.d.ts.map +1 -1
- package/dist/tls/stealth/engine.js +98 -18
- package/dist/tls/stealth/engine.js.map +1 -1
- package/dist/tls/stealth/handshake.d.ts +32 -31
- package/dist/tls/stealth/handshake.d.ts.map +1 -1
- package/dist/tls/stealth/handshake.js +74 -47
- package/dist/tls/stealth/handshake.js.map +1 -1
- package/dist/tls/stealth/key-schedule.d.ts +81 -86
- package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
- package/dist/tls/stealth/key-schedule.js +70 -58
- package/dist/tls/stealth/key-schedule.js.map +1 -1
- package/dist/tls/stealth/record-layer.d.ts +52 -75
- package/dist/tls/stealth/record-layer.d.ts.map +1 -1
- package/dist/tls/stealth/record-layer.js +47 -63
- package/dist/tls/stealth/record-layer.js.map +1 -1
- package/dist/tls/stealth/tls12-handshake.d.ts +16 -0
- package/dist/tls/stealth/tls12-handshake.d.ts.map +1 -1
- package/dist/tls/stealth/tls12-handshake.js +10 -2
- package/dist/tls/stealth/tls12-handshake.js.map +1 -1
- package/dist/tls/types.d.ts +46 -60
- package/dist/tls/types.d.ts.map +1 -1
- package/dist/utils/buffer-reader.d.ts +26 -81
- package/dist/utils/buffer-reader.d.ts.map +1 -1
- package/dist/utils/buffer-reader.js +26 -81
- package/dist/utils/buffer-reader.js.map +1 -1
- package/dist/utils/buffer-writer.d.ts +30 -66
- package/dist/utils/buffer-writer.d.ts.map +1 -1
- package/dist/utils/buffer-writer.js +30 -66
- package/dist/utils/buffer-writer.js.map +1 -1
- package/dist/utils/compression.d.ts +18 -0
- package/dist/utils/compression.d.ts.map +1 -0
- package/dist/utils/compression.js +34 -0
- package/dist/utils/compression.js.map +1 -0
- package/dist/utils/dictionary-transport.d.ts +97 -0
- package/dist/utils/dictionary-transport.d.ts.map +1 -0
- package/dist/utils/dictionary-transport.js +171 -0
- package/dist/utils/dictionary-transport.js.map +1 -0
- package/dist/utils/encoding.d.ts +12 -30
- package/dist/utils/encoding.d.ts.map +1 -1
- package/dist/utils/encoding.js +15 -46
- package/dist/utils/encoding.js.map +1 -1
- package/dist/utils/happy-eyeballs.d.ts +18 -8
- package/dist/utils/happy-eyeballs.d.ts.map +1 -1
- package/dist/utils/happy-eyeballs.js +19 -27
- package/dist/utils/happy-eyeballs.js.map +1 -1
- package/dist/utils/logger.d.ts +54 -81
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +92 -64
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/tcp-fast-open.d.ts +30 -0
- package/dist/utils/tcp-fast-open.d.ts.map +1 -0
- package/dist/utils/tcp-fast-open.js +36 -0
- package/dist/utils/tcp-fast-open.js.map +1 -0
- package/dist/utils/url.d.ts +18 -25
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +18 -25
- package/dist/utils/url.js.map +1 -1
- package/dist/ws/client.d.ts +35 -53
- package/dist/ws/client.d.ts.map +1 -1
- package/dist/ws/client.js +96 -38
- package/dist/ws/client.js.map +1 -1
- package/dist/ws/frame.d.ts +24 -41
- package/dist/ws/frame.d.ts.map +1 -1
- package/dist/ws/frame.js +26 -33
- package/dist/ws/frame.js.map +1 -1
- package/dist/ws/permessage-deflate.d.ts +23 -28
- package/dist/ws/permessage-deflate.d.ts.map +1 -1
- package/dist/ws/permessage-deflate.js +18 -26
- package/dist/ws/permessage-deflate.js.map +1 -1
- package/package.json +2 -2
- package/dist/http/h3/detection.d.ts +0 -17
- package/dist/http/h3/detection.d.ts.map +0 -1
- package/dist/http/h3/detection.js +0 -59
- package/dist/http/h3/detection.js.map +0 -1
package/dist/tls/ct.d.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/** Hash algorithms used in Signed Certificate Timestamps. */
|
|
2
|
+
export declare enum SCTHashAlgorithm {
|
|
3
|
+
NONE = 0,
|
|
4
|
+
MD5 = 1,
|
|
5
|
+
SHA1 = 2,
|
|
6
|
+
SHA224 = 3,
|
|
7
|
+
SHA256 = 4,
|
|
8
|
+
SHA384 = 5,
|
|
9
|
+
SHA512 = 6
|
|
10
|
+
}
|
|
11
|
+
/** Digital signature algorithms used in Signed Certificate Timestamps. */
|
|
12
|
+
export declare enum SCTSignatureAlgorithm {
|
|
13
|
+
ANONYMOUS = 0,
|
|
14
|
+
RSA = 1,
|
|
15
|
+
DSA = 2,
|
|
16
|
+
ECDSA = 3
|
|
17
|
+
}
|
|
18
|
+
/** Signed Certificate Timestamp version identifiers. */
|
|
19
|
+
export declare enum SCTVersion {
|
|
20
|
+
V1 = 0
|
|
21
|
+
}
|
|
22
|
+
/** Parsed Signed Certificate Timestamp (RFC 6962). */
|
|
23
|
+
export interface SCT {
|
|
24
|
+
/** SCT structure version. */
|
|
25
|
+
version: SCTVersion;
|
|
26
|
+
/** Log ID (SHA-256 hash of the log's public key). */
|
|
27
|
+
logId: Buffer;
|
|
28
|
+
/** Timestamp when the SCT was issued. */
|
|
29
|
+
timestamp: Date;
|
|
30
|
+
/** SCT extensions data. */
|
|
31
|
+
extensions: Buffer;
|
|
32
|
+
/** Hash algorithm used in the signature. */
|
|
33
|
+
hashAlgorithm: SCTHashAlgorithm;
|
|
34
|
+
/** Signature algorithm used. */
|
|
35
|
+
signatureAlgorithm: SCTSignatureAlgorithm;
|
|
36
|
+
/** Digital signature bytes. */
|
|
37
|
+
signature: Buffer;
|
|
38
|
+
}
|
|
39
|
+
/** Result of validating SCTs for Certificate Transparency compliance. */
|
|
40
|
+
export interface SCTValidationResult {
|
|
41
|
+
/** Whether the certificate meets CT compliance requirements. */
|
|
42
|
+
compliant: boolean;
|
|
43
|
+
/** Number of unique SCTs found. */
|
|
44
|
+
sctCount: number;
|
|
45
|
+
/** Deduplicated SCT entries. */
|
|
46
|
+
scts: SCT[];
|
|
47
|
+
/** Source from which the SCTs were obtained. */
|
|
48
|
+
source?: "embedded" | "tls-extension" | "ocsp";
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Parse a serialized SCT list into individual SCT entries.
|
|
52
|
+
*
|
|
53
|
+
* @param {Buffer} data - TLS-encoded SCT list buffer.
|
|
54
|
+
* @returns {SCT[]} Array of parsed {@link SCT} objects.
|
|
55
|
+
*/
|
|
56
|
+
export declare function parseSCTList(data: Buffer): SCT[];
|
|
57
|
+
/**
|
|
58
|
+
* Validate a set of SCTs for Certificate Transparency compliance.
|
|
59
|
+
*
|
|
60
|
+
* Deduplicates by log ID and requires at least two unique logs.
|
|
61
|
+
*
|
|
62
|
+
* @param {SCT[]} scts - Array of parsed SCTs.
|
|
63
|
+
* @returns {SCTValidationResult} Validation result with compliance status.
|
|
64
|
+
*/
|
|
65
|
+
export declare function validateSCTs(scts: SCT[]): SCTValidationResult;
|
|
66
|
+
/**
|
|
67
|
+
* Extract embedded SCTs from a TLS socket's peer certificate.
|
|
68
|
+
*
|
|
69
|
+
* @param {{ getPeerCertificate?: (detailed?: boolean) => { raw?: Buffer; serialNumber?: string } }} socket - Socket with a `getPeerCertificate` method.
|
|
70
|
+
* @returns {SCTValidationResult | undefined} Validation result, or `undefined` if SCTs cannot be extracted.
|
|
71
|
+
*/
|
|
72
|
+
export declare function extractSCTsFromSocket(socket: {
|
|
73
|
+
getPeerCertificate?: (detailed?: boolean) => {
|
|
74
|
+
raw?: Buffer;
|
|
75
|
+
serialNumber?: string;
|
|
76
|
+
};
|
|
77
|
+
}): SCTValidationResult | undefined;
|
|
78
|
+
//# sourceMappingURL=ct.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ct.d.ts","sourceRoot":"","sources":["../../src/tls/ct.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,oBAAY,gBAAgB;IAC1B,IAAI,IAAI;IACR,GAAG,IAAI;IACP,IAAI,IAAI;IACR,MAAM,IAAI;IACV,MAAM,IAAI;IACV,MAAM,IAAI;IACV,MAAM,IAAI;CACX;AAED,0EAA0E;AAC1E,oBAAY,qBAAqB;IAC/B,SAAS,IAAI;IACb,GAAG,IAAI;IACP,GAAG,IAAI;IACP,KAAK,IAAI;CACV;AAED,wDAAwD;AACxD,oBAAY,UAAU;IACpB,EAAE,IAAI;CACP;AAED,sDAAsD;AACtD,MAAM,WAAW,GAAG;IAClB,6BAA6B;IAC7B,OAAO,EAAE,UAAU,CAAC;IACpB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,SAAS,EAAE,IAAI,CAAC;IAChB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,aAAa,EAAE,gBAAgB,CAAC;IAChC,gCAAgC;IAChC,kBAAkB,EAAE,qBAAqB,CAAC;IAC1C,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yEAAyE;AACzE,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,gDAAgD;IAChD,MAAM,CAAC,EAAE,UAAU,GAAG,eAAe,GAAG,MAAM,CAAC;CAChD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,CAsBhD;AA+CD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,mBAAmB,CAgB7D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAAE,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,mBAAmB,GAAG,SAAS,CA2CvK"}
|
package/dist/tls/ct.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/** Hash algorithms used in Signed Certificate Timestamps. */
|
|
2
|
+
export var SCTHashAlgorithm;
|
|
3
|
+
(function (SCTHashAlgorithm) {
|
|
4
|
+
SCTHashAlgorithm[SCTHashAlgorithm["NONE"] = 0] = "NONE";
|
|
5
|
+
SCTHashAlgorithm[SCTHashAlgorithm["MD5"] = 1] = "MD5";
|
|
6
|
+
SCTHashAlgorithm[SCTHashAlgorithm["SHA1"] = 2] = "SHA1";
|
|
7
|
+
SCTHashAlgorithm[SCTHashAlgorithm["SHA224"] = 3] = "SHA224";
|
|
8
|
+
SCTHashAlgorithm[SCTHashAlgorithm["SHA256"] = 4] = "SHA256";
|
|
9
|
+
SCTHashAlgorithm[SCTHashAlgorithm["SHA384"] = 5] = "SHA384";
|
|
10
|
+
SCTHashAlgorithm[SCTHashAlgorithm["SHA512"] = 6] = "SHA512";
|
|
11
|
+
})(SCTHashAlgorithm || (SCTHashAlgorithm = {}));
|
|
12
|
+
/** Digital signature algorithms used in Signed Certificate Timestamps. */
|
|
13
|
+
export var SCTSignatureAlgorithm;
|
|
14
|
+
(function (SCTSignatureAlgorithm) {
|
|
15
|
+
SCTSignatureAlgorithm[SCTSignatureAlgorithm["ANONYMOUS"] = 0] = "ANONYMOUS";
|
|
16
|
+
SCTSignatureAlgorithm[SCTSignatureAlgorithm["RSA"] = 1] = "RSA";
|
|
17
|
+
SCTSignatureAlgorithm[SCTSignatureAlgorithm["DSA"] = 2] = "DSA";
|
|
18
|
+
SCTSignatureAlgorithm[SCTSignatureAlgorithm["ECDSA"] = 3] = "ECDSA";
|
|
19
|
+
})(SCTSignatureAlgorithm || (SCTSignatureAlgorithm = {}));
|
|
20
|
+
/** Signed Certificate Timestamp version identifiers. */
|
|
21
|
+
export var SCTVersion;
|
|
22
|
+
(function (SCTVersion) {
|
|
23
|
+
SCTVersion[SCTVersion["V1"] = 0] = "V1";
|
|
24
|
+
})(SCTVersion || (SCTVersion = {}));
|
|
25
|
+
/**
|
|
26
|
+
* Parse a serialized SCT list into individual SCT entries.
|
|
27
|
+
*
|
|
28
|
+
* @param {Buffer} data - TLS-encoded SCT list buffer.
|
|
29
|
+
* @returns {SCT[]} Array of parsed {@link SCT} objects.
|
|
30
|
+
*/
|
|
31
|
+
export function parseSCTList(data) {
|
|
32
|
+
if (data.length < 2)
|
|
33
|
+
return [];
|
|
34
|
+
const listLength = data.readUInt16BE(0);
|
|
35
|
+
if (listLength + 2 > data.length)
|
|
36
|
+
return [];
|
|
37
|
+
const scts = [];
|
|
38
|
+
let offset = 2;
|
|
39
|
+
const end = 2 + listLength;
|
|
40
|
+
while (offset + 2 <= end) {
|
|
41
|
+
const sctLength = data.readUInt16BE(offset);
|
|
42
|
+
offset += 2;
|
|
43
|
+
if (offset + sctLength > end)
|
|
44
|
+
break;
|
|
45
|
+
const sct = parseSingleSCT(data.subarray(offset, offset + sctLength));
|
|
46
|
+
if (sct)
|
|
47
|
+
scts.push(sct);
|
|
48
|
+
offset += sctLength;
|
|
49
|
+
}
|
|
50
|
+
return scts;
|
|
51
|
+
}
|
|
52
|
+
function parseSingleSCT(data) {
|
|
53
|
+
if (data.length < 1 + 32 + 8 + 2 + 2 + 2)
|
|
54
|
+
return null;
|
|
55
|
+
let offset = 0;
|
|
56
|
+
const version = data[offset];
|
|
57
|
+
if (version !== SCTVersion.V1)
|
|
58
|
+
return null;
|
|
59
|
+
offset += 1;
|
|
60
|
+
const logId = Buffer.from(data.subarray(offset, offset + 32));
|
|
61
|
+
offset += 32;
|
|
62
|
+
const timestampMs = Number(data.readBigUInt64BE(offset));
|
|
63
|
+
const timestamp = new Date(timestampMs);
|
|
64
|
+
offset += 8;
|
|
65
|
+
const extensionsLength = data.readUInt16BE(offset);
|
|
66
|
+
offset += 2;
|
|
67
|
+
const extensions = Buffer.from(data.subarray(offset, offset + extensionsLength));
|
|
68
|
+
offset += extensionsLength;
|
|
69
|
+
if (offset + 4 > data.length)
|
|
70
|
+
return null;
|
|
71
|
+
const hashAlgorithm = data[offset];
|
|
72
|
+
offset += 1;
|
|
73
|
+
const signatureAlgorithm = data[offset];
|
|
74
|
+
offset += 1;
|
|
75
|
+
const signatureLength = data.readUInt16BE(offset);
|
|
76
|
+
offset += 2;
|
|
77
|
+
if (offset + signatureLength > data.length)
|
|
78
|
+
return null;
|
|
79
|
+
const signature = Buffer.from(data.subarray(offset, offset + signatureLength));
|
|
80
|
+
return {
|
|
81
|
+
version,
|
|
82
|
+
logId,
|
|
83
|
+
timestamp,
|
|
84
|
+
extensions,
|
|
85
|
+
hashAlgorithm,
|
|
86
|
+
signatureAlgorithm,
|
|
87
|
+
signature,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Validate a set of SCTs for Certificate Transparency compliance.
|
|
92
|
+
*
|
|
93
|
+
* Deduplicates by log ID and requires at least two unique logs.
|
|
94
|
+
*
|
|
95
|
+
* @param {SCT[]} scts - Array of parsed SCTs.
|
|
96
|
+
* @returns {SCTValidationResult} Validation result with compliance status.
|
|
97
|
+
*/
|
|
98
|
+
export function validateSCTs(scts) {
|
|
99
|
+
const uniqueLogs = new Set();
|
|
100
|
+
const uniqueSCTs = [];
|
|
101
|
+
for (const sct of scts) {
|
|
102
|
+
const logIdHex = sct.logId.toString("hex");
|
|
103
|
+
if (!uniqueLogs.has(logIdHex)) {
|
|
104
|
+
uniqueLogs.add(logIdHex);
|
|
105
|
+
uniqueSCTs.push(sct);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
compliant: uniqueLogs.size >= 2,
|
|
110
|
+
sctCount: uniqueSCTs.length,
|
|
111
|
+
scts: uniqueSCTs,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Extract embedded SCTs from a TLS socket's peer certificate.
|
|
116
|
+
*
|
|
117
|
+
* @param {{ getPeerCertificate?: (detailed?: boolean) => { raw?: Buffer; serialNumber?: string } }} socket - Socket with a `getPeerCertificate` method.
|
|
118
|
+
* @returns {SCTValidationResult | undefined} Validation result, or `undefined` if SCTs cannot be extracted.
|
|
119
|
+
*/
|
|
120
|
+
export function extractSCTsFromSocket(socket) {
|
|
121
|
+
if (!socket.getPeerCertificate)
|
|
122
|
+
return undefined;
|
|
123
|
+
const cert = socket.getPeerCertificate(true);
|
|
124
|
+
if (!cert || !cert.raw)
|
|
125
|
+
return undefined;
|
|
126
|
+
const sctExtOid = Buffer.from([0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0xd6, 0x79, 0x02, 0x04, 0x02]);
|
|
127
|
+
const extIdx = cert.raw.indexOf(sctExtOid);
|
|
128
|
+
if (extIdx === -1) {
|
|
129
|
+
return { compliant: false, sctCount: 0, scts: [] };
|
|
130
|
+
}
|
|
131
|
+
let offset = extIdx + sctExtOid.length;
|
|
132
|
+
if (offset < cert.raw.length && cert.raw[offset] === 0x01) {
|
|
133
|
+
offset += 3;
|
|
134
|
+
}
|
|
135
|
+
if (offset >= cert.raw.length || cert.raw[offset] !== 0x04) {
|
|
136
|
+
return { compliant: false, sctCount: 0, scts: [] };
|
|
137
|
+
}
|
|
138
|
+
offset++;
|
|
139
|
+
const result = readLength(cert.raw, offset);
|
|
140
|
+
if (result.value === -1)
|
|
141
|
+
return { compliant: false, sctCount: 0, scts: [] };
|
|
142
|
+
offset += result.bytesRead;
|
|
143
|
+
if (offset >= cert.raw.length || cert.raw[offset] !== 0x04) {
|
|
144
|
+
const scts = parseSCTList(cert.raw.subarray(offset));
|
|
145
|
+
const validation = validateSCTs(scts);
|
|
146
|
+
validation.source = "embedded";
|
|
147
|
+
return validation;
|
|
148
|
+
}
|
|
149
|
+
offset++;
|
|
150
|
+
const innerResult = readLength(cert.raw, offset);
|
|
151
|
+
if (innerResult.value === -1)
|
|
152
|
+
return { compliant: false, sctCount: 0, scts: [] };
|
|
153
|
+
offset += innerResult.bytesRead;
|
|
154
|
+
const sctData = cert.raw.subarray(offset, offset + innerResult.value);
|
|
155
|
+
const scts = parseSCTList(sctData);
|
|
156
|
+
const validation = validateSCTs(scts);
|
|
157
|
+
validation.source = "embedded";
|
|
158
|
+
return validation;
|
|
159
|
+
}
|
|
160
|
+
function readLength(buf, offset) {
|
|
161
|
+
if (offset >= buf.length)
|
|
162
|
+
return { value: -1, bytesRead: 0 };
|
|
163
|
+
const first = buf[offset];
|
|
164
|
+
if (first < 0x80)
|
|
165
|
+
return { value: first, bytesRead: 1 };
|
|
166
|
+
const numBytes = first & 0x7f;
|
|
167
|
+
if (numBytes === 0 || numBytes > 4 || offset + numBytes >= buf.length)
|
|
168
|
+
return { value: -1, bytesRead: 0 };
|
|
169
|
+
let value = 0;
|
|
170
|
+
for (let i = 0; i < numBytes; i++) {
|
|
171
|
+
value = (value << 8) | buf[offset + 1 + i];
|
|
172
|
+
}
|
|
173
|
+
return { value, bytesRead: 1 + numBytes };
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=ct.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ct.js","sourceRoot":"","sources":["../../src/tls/ct.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Configuration for TLS 1.3 early data (0-RTT). */
|
|
2
|
+
export interface EarlyDataConfig {
|
|
3
|
+
/** Enable early data transmission. */
|
|
4
|
+
enabled?: boolean;
|
|
5
|
+
/** Maximum early data payload size in bytes. */
|
|
6
|
+
maxSize?: number;
|
|
7
|
+
/** Restrict early data to safe (idempotent) HTTP methods only. */
|
|
8
|
+
safeOnly?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/** Outcome of an early data (0-RTT) transmission attempt. */
|
|
11
|
+
export interface EarlyDataResult {
|
|
12
|
+
/** Whether the server accepted the early data. */
|
|
13
|
+
accepted: boolean;
|
|
14
|
+
/** Whether early data transmission was attempted. */
|
|
15
|
+
attempted: boolean;
|
|
16
|
+
/** Number of bytes sent as early data. */
|
|
17
|
+
bytesSent: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Determine whether early data can be sent for the given HTTP method.
|
|
21
|
+
*
|
|
22
|
+
* @param {string} method - HTTP method string.
|
|
23
|
+
* @param {EarlyDataConfig} [config] - Early data configuration.
|
|
24
|
+
* @returns {boolean} `true` if early data is permitted.
|
|
25
|
+
*/
|
|
26
|
+
export declare function canSendEarlyData(method: string, config?: EarlyDataConfig): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Prepare request data for 0-RTT transmission.
|
|
29
|
+
*
|
|
30
|
+
* @param {Buffer} requestData - Serialized request bytes.
|
|
31
|
+
* @param {EarlyDataConfig} [config] - Early data configuration.
|
|
32
|
+
* @returns {Buffer|null} Buffer to send as early data, or `null` if not applicable.
|
|
33
|
+
*/
|
|
34
|
+
export declare function prepareEarlyData(requestData: Buffer, config?: EarlyDataConfig): Buffer | null;
|
|
35
|
+
/**
|
|
36
|
+
* Check whether the server accepted early data on a connected socket.
|
|
37
|
+
*
|
|
38
|
+
* @param {{ alpnProtocol?: string | false; earlyData?: boolean }} socket - Socket with optional `earlyData` flag.
|
|
39
|
+
* @returns {EarlyDataResult} Early data acceptance result.
|
|
40
|
+
*/
|
|
41
|
+
export declare function checkEarlyDataAccepted(socket: {
|
|
42
|
+
alpnProtocol?: string | false;
|
|
43
|
+
earlyData?: boolean;
|
|
44
|
+
}): EarlyDataResult;
|
|
45
|
+
//# sourceMappingURL=early-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"early-data.d.ts","sourceRoot":"","sources":["../../src/tls/early-data.ts"],"names":[],"mappings":"AAEA,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,QAAQ,EAAE,OAAO,CAAC;IAClB,qDAAqD;IACrD,SAAS,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAMlF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAO7F;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,eAAe,CAOtH"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
const SAFE_EARLY_DATA_METHODS = new Set(["GET", "HEAD", "OPTIONS"]);
|
|
2
|
+
/**
|
|
3
|
+
* Determine whether early data can be sent for the given HTTP method.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} method - HTTP method string.
|
|
6
|
+
* @param {EarlyDataConfig} [config] - Early data configuration.
|
|
7
|
+
* @returns {boolean} `true` if early data is permitted.
|
|
8
|
+
*/
|
|
9
|
+
export function canSendEarlyData(method, config) {
|
|
10
|
+
if (!config?.enabled)
|
|
11
|
+
return false;
|
|
12
|
+
if (config.safeOnly !== false && !SAFE_EARLY_DATA_METHODS.has(method.toUpperCase())) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Prepare request data for 0-RTT transmission.
|
|
19
|
+
*
|
|
20
|
+
* @param {Buffer} requestData - Serialized request bytes.
|
|
21
|
+
* @param {EarlyDataConfig} [config] - Early data configuration.
|
|
22
|
+
* @returns {Buffer|null} Buffer to send as early data, or `null` if not applicable.
|
|
23
|
+
*/
|
|
24
|
+
export function prepareEarlyData(requestData, config) {
|
|
25
|
+
if (!config?.enabled)
|
|
26
|
+
return null;
|
|
27
|
+
const maxSize = config.maxSize ?? 16384;
|
|
28
|
+
if (requestData.length > maxSize)
|
|
29
|
+
return null;
|
|
30
|
+
return requestData;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check whether the server accepted early data on a connected socket.
|
|
34
|
+
*
|
|
35
|
+
* @param {{ alpnProtocol?: string | false; earlyData?: boolean }} socket - Socket with optional `earlyData` flag.
|
|
36
|
+
* @returns {EarlyDataResult} Early data acceptance result.
|
|
37
|
+
*/
|
|
38
|
+
export function checkEarlyDataAccepted(socket) {
|
|
39
|
+
const accepted = socket.earlyData === true;
|
|
40
|
+
return {
|
|
41
|
+
accepted,
|
|
42
|
+
attempted: true,
|
|
43
|
+
bytesSent: 0,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=early-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"early-data.js","sourceRoot":"","sources":["../../src/tls/early-data.ts"],"names":[],"mappings":"AAAA,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAsBpE;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAwB;IACvE,IAAI,CAAC,MAAM,EAAE,OAAO;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACpF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,MAAwB;IAC5E,IAAI,CAAC,MAAM,EAAE,OAAO;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;IACxC,IAAI,WAAW,CAAC,MAAM,GAAG,OAAO;QAAE,OAAO,IAAI,CAAC;IAE9C,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA8D;IACnG,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC;IAC3C,OAAO;QACL,QAAQ;QACR,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,CAAC;KACb,CAAC;AACJ,CAAC"}
|
package/dist/tls/ech.d.ts
CHANGED
|
@@ -1,141 +1,108 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A parsed ECHConfig entry from an ECHConfigList.
|
|
3
|
-
*/
|
|
1
|
+
/** Parsed individual Encrypted Client Hello configuration entry. */
|
|
4
2
|
export interface ECHConfig {
|
|
5
|
-
/** ECH version
|
|
3
|
+
/** ECH config version identifier. */
|
|
6
4
|
version: number;
|
|
7
|
-
/** Length of
|
|
5
|
+
/** Length of the configuration contents. */
|
|
8
6
|
length: number;
|
|
9
|
-
/**
|
|
7
|
+
/** Raw configuration content bytes. */
|
|
10
8
|
contents: Buffer;
|
|
11
|
-
/**
|
|
9
|
+
/** Public name (outer SNI) extracted from the config. */
|
|
12
10
|
publicName: string;
|
|
13
11
|
}
|
|
14
|
-
/**
|
|
15
|
-
* Parsed ECH configuration ready for use in a TLS connection.
|
|
16
|
-
*/
|
|
12
|
+
/** Complete parsed ECH configuration list with outer SNI. */
|
|
17
13
|
export interface ECHParameters {
|
|
18
|
-
/** Raw ECHConfigList
|
|
14
|
+
/** Raw serialized ECHConfigList buffer. */
|
|
19
15
|
echConfigList: Buffer;
|
|
20
|
-
/**
|
|
16
|
+
/** Outer SNI derived from the first config's public name. */
|
|
21
17
|
outerSNI: string;
|
|
22
|
-
/**
|
|
18
|
+
/** Individual ECH configuration entries. */
|
|
23
19
|
configs: ECHConfig[];
|
|
24
20
|
}
|
|
25
|
-
/**
|
|
26
|
-
* ECH configuration options for the library.
|
|
27
|
-
*/
|
|
21
|
+
/** User-facing options for Encrypted Client Hello. */
|
|
28
22
|
export interface ECHOptions {
|
|
29
|
-
/**
|
|
30
|
-
* Whether to enable ECH when an ECHConfigList is available from HTTPS-RR.
|
|
31
|
-
* @default true when HTTPS-RR is enabled
|
|
32
|
-
*/
|
|
23
|
+
/** Enable ECH support. */
|
|
33
24
|
enabled?: boolean;
|
|
34
|
-
/**
|
|
35
|
-
* Pre-configured ECHConfigList (base64 or raw Buffer).
|
|
36
|
-
* When set, bypasses HTTPS-RR discovery.
|
|
37
|
-
*/
|
|
25
|
+
/** Base64 or binary ECHConfigList. */
|
|
38
26
|
echConfigList?: string | Buffer;
|
|
39
|
-
/**
|
|
40
|
-
* Whether to use GREASE ECH when no real ECH config is available.
|
|
41
|
-
* GREASE ECH pads ClientHello to resist distinguishing ECH-capable clients.
|
|
42
|
-
* @default false
|
|
43
|
-
*/
|
|
27
|
+
/** Send a GREASE ECH extension when no real config is available. */
|
|
44
28
|
grease?: boolean;
|
|
29
|
+
/** Maximum number of ECH retry attempts. */
|
|
30
|
+
maxRetries?: number;
|
|
45
31
|
}
|
|
46
32
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* ECHConfigList format (draft-ietf-tls-esni §4):
|
|
50
|
-
* ```
|
|
51
|
-
* struct {
|
|
52
|
-
* uint16 length;
|
|
53
|
-
* ECHConfig echConfigs<1..2^16-1>;
|
|
54
|
-
* } ECHConfigList;
|
|
55
|
-
*
|
|
56
|
-
* struct {
|
|
57
|
-
* uint16 version;
|
|
58
|
-
* uint16 length;
|
|
59
|
-
* opaque contents<1..2^16-1>;
|
|
60
|
-
* } ECHConfig;
|
|
61
|
-
* ```
|
|
33
|
+
* Parse a serialized ECHConfigList into structured parameters.
|
|
62
34
|
*
|
|
63
|
-
* @param data Raw ECHConfigList
|
|
64
|
-
* @returns Parsed
|
|
35
|
+
* @param {Buffer} data - Raw ECHConfigList buffer.
|
|
36
|
+
* @returns {ECHParameters|null} Parsed parameters, or `null` if the data is invalid.
|
|
65
37
|
*/
|
|
66
38
|
export declare function parseECHConfigList(data: Buffer): ECHParameters | null;
|
|
67
39
|
/**
|
|
68
|
-
*
|
|
69
|
-
* This makes ECH-capable clients indistinguishable from non-ECH clients
|
|
70
|
-
* by including a random ECH extension even when no real config is available.
|
|
40
|
+
* Generate a GREASE Encrypted Client Hello extension payload.
|
|
71
41
|
*
|
|
72
|
-
* @returns
|
|
42
|
+
* @returns {Buffer} Random GREASE ECH extension data.
|
|
73
43
|
*/
|
|
74
44
|
export declare function generateGreaseECH(): Buffer;
|
|
75
|
-
/** Parsed HPKE key configuration from an ECHConfig. */
|
|
45
|
+
/** Parsed HPKE key configuration from an ECHConfig entry. */
|
|
76
46
|
export interface HpkeKeyConfig {
|
|
47
|
+
/** Configuration identifier byte. */
|
|
77
48
|
configId: number;
|
|
49
|
+
/** Key Encapsulation Mechanism identifier. */
|
|
78
50
|
kemId: number;
|
|
51
|
+
/** Receiver's public key bytes. */
|
|
79
52
|
publicKey: Buffer;
|
|
53
|
+
/** Supported KDF and AEAD cipher suite pairs. */
|
|
80
54
|
cipherSuites: Array<{
|
|
81
55
|
kdfId: number;
|
|
82
56
|
aeadId: number;
|
|
83
57
|
}>;
|
|
84
58
|
}
|
|
85
59
|
/**
|
|
86
|
-
*
|
|
60
|
+
* Parse the HPKE key configuration from ECHConfig contents.
|
|
87
61
|
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* struct {
|
|
91
|
-
* uint8 config_id;
|
|
92
|
-
* uint16 kem_id;
|
|
93
|
-
* opaque public_key<1..2^16-1>;
|
|
94
|
-
* HpkeSymmetricCipherSuite cipher_suites<4..2^16-4>;
|
|
95
|
-
* } HpkeKeyConfig;
|
|
96
|
-
* ```
|
|
62
|
+
* @param {Buffer} contents - Raw contents buffer of an ECHConfig entry.
|
|
63
|
+
* @returns {HpkeKeyConfig|null} Parsed HPKE key config, or `null` if malformed.
|
|
97
64
|
*/
|
|
98
65
|
export declare function parseHpkeKeyConfig(contents: Buffer): HpkeKeyConfig | null;
|
|
99
66
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
67
|
+
* Extract the maximum name length field from ECHConfig contents.
|
|
68
|
+
*
|
|
69
|
+
* @param {Buffer} contents - Raw ECHConfig contents.
|
|
70
|
+
* @returns {number} Maximum name length, or `0` if unparseable.
|
|
102
71
|
*/
|
|
103
72
|
export declare function getMaxNameLength(contents: Buffer): number;
|
|
104
73
|
/**
|
|
105
|
-
*
|
|
74
|
+
* Build the outer ECH extension data for a ClientHello.
|
|
106
75
|
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
* opaque enc<0..2^16-1>
|
|
114
|
-
* opaque payload<1..2^16-1>
|
|
115
|
-
* ```
|
|
76
|
+
* @param {number} kdfId - KDF identifier.
|
|
77
|
+
* @param {number} aeadId - AEAD identifier.
|
|
78
|
+
* @param {number} configId - ECH config ID.
|
|
79
|
+
* @param {Buffer} enc - HPKE encapsulated key.
|
|
80
|
+
* @param {Buffer} payload - Encrypted inner ClientHello payload.
|
|
81
|
+
* @returns {Buffer} Serialized ECH outer extension bytes.
|
|
116
82
|
*/
|
|
117
83
|
export declare function buildECHOuterExtData(kdfId: number, aeadId: number, configId: number, enc: Buffer, payload: Buffer): Buffer;
|
|
118
|
-
/** Parameters
|
|
84
|
+
/** Parameters required to encrypt an inner ClientHello with ECH. */
|
|
119
85
|
export interface ECHEncryptionParams {
|
|
120
|
-
/**
|
|
86
|
+
/** Selected ECH configuration entry. */
|
|
121
87
|
config: ECHConfig;
|
|
122
|
-
/** Raw bytes of the selected
|
|
88
|
+
/** Raw bytes of the selected configuration (including version and length). */
|
|
123
89
|
configRaw: Buffer;
|
|
124
90
|
}
|
|
125
91
|
/**
|
|
126
|
-
*
|
|
127
|
-
*
|
|
92
|
+
* Extract the first raw ECHConfig entry from a serialized ECHConfigList.
|
|
93
|
+
*
|
|
94
|
+
* @param {Buffer} echConfigList - Full serialized ECHConfigList buffer.
|
|
95
|
+
* @returns {Buffer | null} Raw config bytes, or `null` if the list is too short.
|
|
128
96
|
*/
|
|
129
97
|
export declare function extractFirstECHConfigRaw(echConfigList: Buffer): Buffer | null;
|
|
130
98
|
/**
|
|
131
|
-
*
|
|
132
|
-
* returns all values needed to populate the outer ECH extension.
|
|
99
|
+
* Encrypt an inner ClientHello body using HPKE for Encrypted Client Hello.
|
|
133
100
|
*
|
|
134
|
-
* @param innerCHBody
|
|
135
|
-
* @param outerCHAAD
|
|
136
|
-
* @param config
|
|
137
|
-
* @param configRaw
|
|
138
|
-
* @returns
|
|
101
|
+
* @param {Buffer} innerCHBody - Serialized inner ClientHello body.
|
|
102
|
+
* @param {Buffer} outerCHAAD - Additional authenticated data from the outer ClientHello.
|
|
103
|
+
* @param {ECHConfig} config - Parsed ECH configuration entry.
|
|
104
|
+
* @param {Buffer} configRaw - Raw bytes of the ECH configuration.
|
|
105
|
+
* @returns {{ extensionData: Buffer; enc: Buffer; kdfId: number; aeadId: number; configId: number }} Extension data, encapsulated key, and algorithm identifiers.
|
|
139
106
|
*/
|
|
140
107
|
export declare function echEncryptInner(innerCHBody: Buffer, outerCHAAD: Buffer, config: ECHConfig, configRaw: Buffer): {
|
|
141
108
|
extensionData: Buffer;
|
|
@@ -144,4 +111,20 @@ export declare function echEncryptInner(innerCHBody: Buffer, outerCHAAD: Buffer,
|
|
|
144
111
|
aeadId: number;
|
|
145
112
|
configId: number;
|
|
146
113
|
};
|
|
114
|
+
/**
|
|
115
|
+
* Parse ECH retry configuration from a server's EncryptedExtensions.
|
|
116
|
+
*
|
|
117
|
+
* @param {Buffer} data - Serialized ECHConfigList from the retry_configs extension.
|
|
118
|
+
* @returns {ECHParameters | null} Parsed retry parameters, or `null` if invalid.
|
|
119
|
+
*/
|
|
120
|
+
export declare function parseECHRetryConfigs(data: Buffer): ECHParameters | null;
|
|
121
|
+
/**
|
|
122
|
+
* Determine whether an ECH retry should be attempted.
|
|
123
|
+
*
|
|
124
|
+
* @param {number} retryCount - Number of retries already attempted.
|
|
125
|
+
* @param {number} maxRetries - Maximum allowed retries.
|
|
126
|
+
* @param {ECHParameters | null} retryConfigs - Retry ECH configs from the server.
|
|
127
|
+
* @returns {boolean} `true` if another retry is warranted.
|
|
128
|
+
*/
|
|
129
|
+
export declare function shouldRetryECH(retryCount: number, maxRetries: number, retryConfigs: ECHParameters | null): boolean;
|
|
147
130
|
//# sourceMappingURL=ech.d.ts.map
|
package/dist/tls/ech.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ech.d.ts","sourceRoot":"","sources":["../../src/tls/ech.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ech.d.ts","sourceRoot":"","sources":["../../src/tls/ech.ts"],"names":[],"mappings":"AAEA,oEAAoE;AACpE,MAAM,WAAW,SAAS;IACxB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,sDAAsD;AACtD,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAwCrE;AA4BD;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA0B1C;AAED,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,YAAY,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAiCzE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBzD;AA8HD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAkB1H;AAED,oEAAoE;AACpE,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,MAAM,EAAE,SAAS,CAAC;IAClB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU7E;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAqBtM;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAEvE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO,CAIlH"}
|