nlcurl 0.1.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.
Files changed (199) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/dist/cli/args.d.ts +42 -0
  4. package/dist/cli/args.d.ts.map +1 -0
  5. package/dist/cli/args.js +262 -0
  6. package/dist/cli/args.js.map +1 -0
  7. package/dist/cli/index.d.ts +8 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +114 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/output.d.ts +22 -0
  12. package/dist/cli/output.d.ts.map +1 -0
  13. package/dist/cli/output.js +105 -0
  14. package/dist/cli/output.js.map +1 -0
  15. package/dist/cookies/jar.d.ts +41 -0
  16. package/dist/cookies/jar.d.ts.map +1 -0
  17. package/dist/cookies/jar.js +148 -0
  18. package/dist/cookies/jar.js.map +1 -0
  19. package/dist/cookies/parser.d.ts +24 -0
  20. package/dist/cookies/parser.d.ts.map +1 -0
  21. package/dist/cookies/parser.js +93 -0
  22. package/dist/cookies/parser.js.map +1 -0
  23. package/dist/core/client.d.ts +79 -0
  24. package/dist/core/client.d.ts.map +1 -0
  25. package/dist/core/client.js +106 -0
  26. package/dist/core/client.js.map +1 -0
  27. package/dist/core/errors.d.ts +36 -0
  28. package/dist/core/errors.d.ts.map +1 -0
  29. package/dist/core/errors.js +65 -0
  30. package/dist/core/errors.js.map +1 -0
  31. package/dist/core/request.d.ts +96 -0
  32. package/dist/core/request.d.ts.map +1 -0
  33. package/dist/core/request.js +5 -0
  34. package/dist/core/request.js.map +1 -0
  35. package/dist/core/response.d.ts +48 -0
  36. package/dist/core/response.d.ts.map +1 -0
  37. package/dist/core/response.js +65 -0
  38. package/dist/core/response.js.map +1 -0
  39. package/dist/core/session.d.ts +60 -0
  40. package/dist/core/session.d.ts.map +1 -0
  41. package/dist/core/session.js +305 -0
  42. package/dist/core/session.js.map +1 -0
  43. package/dist/fingerprints/akamai.d.ts +17 -0
  44. package/dist/fingerprints/akamai.d.ts.map +1 -0
  45. package/dist/fingerprints/akamai.js +30 -0
  46. package/dist/fingerprints/akamai.js.map +1 -0
  47. package/dist/fingerprints/database.d.ts +33 -0
  48. package/dist/fingerprints/database.d.ts.map +1 -0
  49. package/dist/fingerprints/database.js +68 -0
  50. package/dist/fingerprints/database.js.map +1 -0
  51. package/dist/fingerprints/extensions.d.ts +49 -0
  52. package/dist/fingerprints/extensions.d.ts.map +1 -0
  53. package/dist/fingerprints/extensions.js +178 -0
  54. package/dist/fingerprints/extensions.js.map +1 -0
  55. package/dist/fingerprints/ja3.d.ts +32 -0
  56. package/dist/fingerprints/ja3.d.ts.map +1 -0
  57. package/dist/fingerprints/ja3.js +64 -0
  58. package/dist/fingerprints/ja3.js.map +1 -0
  59. package/dist/fingerprints/profiles/chrome.d.ts +30 -0
  60. package/dist/fingerprints/profiles/chrome.d.ts.map +1 -0
  61. package/dist/fingerprints/profiles/chrome.js +202 -0
  62. package/dist/fingerprints/profiles/chrome.js.map +1 -0
  63. package/dist/fingerprints/profiles/edge.d.ts +16 -0
  64. package/dist/fingerprints/profiles/edge.d.ts.map +1 -0
  65. package/dist/fingerprints/profiles/edge.js +61 -0
  66. package/dist/fingerprints/profiles/edge.js.map +1 -0
  67. package/dist/fingerprints/profiles/firefox.d.ts +13 -0
  68. package/dist/fingerprints/profiles/firefox.d.ts.map +1 -0
  69. package/dist/fingerprints/profiles/firefox.js +160 -0
  70. package/dist/fingerprints/profiles/firefox.js.map +1 -0
  71. package/dist/fingerprints/profiles/safari.d.ts +16 -0
  72. package/dist/fingerprints/profiles/safari.d.ts.map +1 -0
  73. package/dist/fingerprints/profiles/safari.js +140 -0
  74. package/dist/fingerprints/profiles/safari.js.map +1 -0
  75. package/dist/fingerprints/profiles/tor.d.ts +14 -0
  76. package/dist/fingerprints/profiles/tor.d.ts.map +1 -0
  77. package/dist/fingerprints/profiles/tor.js +136 -0
  78. package/dist/fingerprints/profiles/tor.js.map +1 -0
  79. package/dist/fingerprints/types.d.ts +104 -0
  80. package/dist/fingerprints/types.d.ts.map +1 -0
  81. package/dist/fingerprints/types.js +9 -0
  82. package/dist/fingerprints/types.js.map +1 -0
  83. package/dist/http/h1/client.d.ts +21 -0
  84. package/dist/http/h1/client.d.ts.map +1 -0
  85. package/dist/http/h1/client.js +136 -0
  86. package/dist/http/h1/client.js.map +1 -0
  87. package/dist/http/h1/encoder.d.ts +11 -0
  88. package/dist/http/h1/encoder.d.ts.map +1 -0
  89. package/dist/http/h1/encoder.js +75 -0
  90. package/dist/http/h1/encoder.js.map +1 -0
  91. package/dist/http/h1/parser.d.ts +61 -0
  92. package/dist/http/h1/parser.d.ts.map +1 -0
  93. package/dist/http/h1/parser.js +258 -0
  94. package/dist/http/h1/parser.js.map +1 -0
  95. package/dist/http/h2/client.d.ts +48 -0
  96. package/dist/http/h2/client.d.ts.map +1 -0
  97. package/dist/http/h2/client.js +376 -0
  98. package/dist/http/h2/client.js.map +1 -0
  99. package/dist/http/h2/frames.d.ts +65 -0
  100. package/dist/http/h2/frames.d.ts.map +1 -0
  101. package/dist/http/h2/frames.js +184 -0
  102. package/dist/http/h2/frames.js.map +1 -0
  103. package/dist/http/h2/hpack.d.ts +27 -0
  104. package/dist/http/h2/hpack.d.ts.map +1 -0
  105. package/dist/http/h2/hpack.js +423 -0
  106. package/dist/http/h2/hpack.js.map +1 -0
  107. package/dist/http/negotiator.d.ts +36 -0
  108. package/dist/http/negotiator.d.ts.map +1 -0
  109. package/dist/http/negotiator.js +101 -0
  110. package/dist/http/negotiator.js.map +1 -0
  111. package/dist/http/pool.d.ts +63 -0
  112. package/dist/http/pool.d.ts.map +1 -0
  113. package/dist/http/pool.js +177 -0
  114. package/dist/http/pool.js.map +1 -0
  115. package/dist/index.d.ts +22 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +23 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/middleware/interceptor.d.ts +27 -0
  120. package/dist/middleware/interceptor.d.ts.map +1 -0
  121. package/dist/middleware/interceptor.js +35 -0
  122. package/dist/middleware/interceptor.js.map +1 -0
  123. package/dist/middleware/rate-limiter.d.ts +26 -0
  124. package/dist/middleware/rate-limiter.d.ts.map +1 -0
  125. package/dist/middleware/rate-limiter.js +59 -0
  126. package/dist/middleware/rate-limiter.js.map +1 -0
  127. package/dist/middleware/retry.d.ts +17 -0
  128. package/dist/middleware/retry.d.ts.map +1 -0
  129. package/dist/middleware/retry.js +64 -0
  130. package/dist/middleware/retry.js.map +1 -0
  131. package/dist/proxy/http-proxy.d.ts +23 -0
  132. package/dist/proxy/http-proxy.d.ts.map +1 -0
  133. package/dist/proxy/http-proxy.js +93 -0
  134. package/dist/proxy/http-proxy.js.map +1 -0
  135. package/dist/proxy/socks.d.ts +24 -0
  136. package/dist/proxy/socks.d.ts.map +1 -0
  137. package/dist/proxy/socks.js +196 -0
  138. package/dist/proxy/socks.js.map +1 -0
  139. package/dist/tls/constants.d.ts +142 -0
  140. package/dist/tls/constants.d.ts.map +1 -0
  141. package/dist/tls/constants.js +163 -0
  142. package/dist/tls/constants.js.map +1 -0
  143. package/dist/tls/node-engine.d.ts +22 -0
  144. package/dist/tls/node-engine.d.ts.map +1 -0
  145. package/dist/tls/node-engine.js +190 -0
  146. package/dist/tls/node-engine.js.map +1 -0
  147. package/dist/tls/stealth/client-hello.d.ts +38 -0
  148. package/dist/tls/stealth/client-hello.d.ts.map +1 -0
  149. package/dist/tls/stealth/client-hello.js +197 -0
  150. package/dist/tls/stealth/client-hello.js.map +1 -0
  151. package/dist/tls/stealth/engine.d.ts +16 -0
  152. package/dist/tls/stealth/engine.d.ts.map +1 -0
  153. package/dist/tls/stealth/engine.js +196 -0
  154. package/dist/tls/stealth/engine.js.map +1 -0
  155. package/dist/tls/stealth/handshake.d.ts +45 -0
  156. package/dist/tls/stealth/handshake.d.ts.map +1 -0
  157. package/dist/tls/stealth/handshake.js +403 -0
  158. package/dist/tls/stealth/handshake.js.map +1 -0
  159. package/dist/tls/stealth/key-schedule.d.ts +85 -0
  160. package/dist/tls/stealth/key-schedule.d.ts.map +1 -0
  161. package/dist/tls/stealth/key-schedule.js +141 -0
  162. package/dist/tls/stealth/key-schedule.js.map +1 -0
  163. package/dist/tls/stealth/record-layer.d.ts +74 -0
  164. package/dist/tls/stealth/record-layer.d.ts.map +1 -0
  165. package/dist/tls/stealth/record-layer.js +167 -0
  166. package/dist/tls/stealth/record-layer.js.map +1 -0
  167. package/dist/tls/types.d.ts +58 -0
  168. package/dist/tls/types.d.ts.map +1 -0
  169. package/dist/tls/types.js +6 -0
  170. package/dist/tls/types.js.map +1 -0
  171. package/dist/utils/buffer-reader.d.ts +32 -0
  172. package/dist/utils/buffer-reader.d.ts.map +1 -0
  173. package/dist/utils/buffer-reader.js +99 -0
  174. package/dist/utils/buffer-reader.js.map +1 -0
  175. package/dist/utils/buffer-writer.d.ts +35 -0
  176. package/dist/utils/buffer-writer.d.ts.map +1 -0
  177. package/dist/utils/buffer-writer.js +121 -0
  178. package/dist/utils/buffer-writer.js.map +1 -0
  179. package/dist/utils/encoding.d.ts +19 -0
  180. package/dist/utils/encoding.d.ts.map +1 -0
  181. package/dist/utils/encoding.js +63 -0
  182. package/dist/utils/encoding.js.map +1 -0
  183. package/dist/utils/logger.d.ts +24 -0
  184. package/dist/utils/logger.d.ts.map +1 -0
  185. package/dist/utils/logger.js +56 -0
  186. package/dist/utils/logger.js.map +1 -0
  187. package/dist/utils/url.d.ts +22 -0
  188. package/dist/utils/url.d.ts.map +1 -0
  189. package/dist/utils/url.js +56 -0
  190. package/dist/utils/url.js.map +1 -0
  191. package/dist/ws/client.d.ts +63 -0
  192. package/dist/ws/client.d.ts.map +1 -0
  193. package/dist/ws/client.js +273 -0
  194. package/dist/ws/client.js.map +1 -0
  195. package/dist/ws/frame.d.ts +44 -0
  196. package/dist/ws/frame.d.ts.map +1 -0
  197. package/dist/ws/frame.js +146 -0
  198. package/dist/ws/frame.js.map +1 -0
  199. package/package.json +57 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../../src/tls/stealth/handshake.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * TLS 1.3 key schedule.
3
+ *
4
+ * Implements the HKDF-based key derivation defined in RFC 8446 section 7.
5
+ * Uses only `node:crypto` -- zero external dependencies.
6
+ */
7
+ export type HashAlgorithm = 'sha256' | 'sha384';
8
+ /** Hash output length in bytes. */
9
+ export declare function hashLength(alg: HashAlgorithm): number;
10
+ /**
11
+ * HKDF-Extract (RFC 5869 section 2.2).
12
+ *
13
+ * Returns a pseudo-random key of `hashLength(alg)` bytes.
14
+ */
15
+ export declare function hkdfExtract(alg: HashAlgorithm, salt: Buffer, ikm: Buffer): Buffer;
16
+ /**
17
+ * HKDF-Expand-Label (RFC 8446 section 7.1).
18
+ *
19
+ * HKDF-Expand-Label(Secret, Label, Context, Length) =
20
+ * HKDF-Expand(Secret, HkdfLabel, Length)
21
+ *
22
+ * struct {
23
+ * uint16 length = Length;
24
+ * opaque label<7..255> = "tls13 " + Label;
25
+ * opaque context<0..255> = Context;
26
+ * } HkdfLabel;
27
+ */
28
+ export declare function hkdfExpandLabel(alg: HashAlgorithm, secret: Buffer, label: string, context: Buffer, length: number): Buffer;
29
+ /**
30
+ * Derive-Secret (RFC 8446 section 7.1).
31
+ *
32
+ * Derive-Secret(Secret, Label, Messages) =
33
+ * HKDF-Expand-Label(Secret, Label, Transcript-Hash(Messages), Hash.length)
34
+ */
35
+ export declare function deriveSecret(alg: HashAlgorithm, secret: Buffer, label: string, transcriptHash: Buffer): Buffer;
36
+ /**
37
+ * Compute transcript hash incrementally.
38
+ */
39
+ export { createHash } from 'node:crypto';
40
+ /**
41
+ * Zero-length secret for the initial extract stage.
42
+ */
43
+ export declare function zeroKey(alg: HashAlgorithm): Buffer;
44
+ export interface HandshakeKeys {
45
+ clientHandshakeKey: Buffer;
46
+ clientHandshakeIV: Buffer;
47
+ serverHandshakeKey: Buffer;
48
+ serverHandshakeIV: Buffer;
49
+ handshakeSecret: Buffer;
50
+ /** Master secret (used to derive application keys after Finished). */
51
+ masterSecret: Buffer;
52
+ }
53
+ export interface ApplicationKeys {
54
+ clientKey: Buffer;
55
+ clientIV: Buffer;
56
+ serverKey: Buffer;
57
+ serverIV: Buffer;
58
+ }
59
+ /**
60
+ * Key and IV length for a cipher suite.
61
+ */
62
+ export declare function keyIVLengths(cipherName: string): {
63
+ keyLen: number;
64
+ ivLen: number;
65
+ };
66
+ /**
67
+ * Derive handshake traffic keys from the shared secret and transcript hash.
68
+ *
69
+ * This implements the Early Secret -> Handshake Secret portion of the
70
+ * RFC 8446 key schedule.
71
+ */
72
+ export declare function deriveHandshakeKeys(alg: HashAlgorithm, sharedSecret: Buffer, helloHash: Buffer, keyLen: number, ivLen: number): HandshakeKeys;
73
+ /**
74
+ * Derive application traffic keys from the master secret and the
75
+ * full handshake transcript hash.
76
+ */
77
+ export declare function deriveApplicationKeys(alg: HashAlgorithm, masterSecret: Buffer, handshakeHash: Buffer, keyLen: number, ivLen: number): ApplicationKeys;
78
+ /**
79
+ * Build the Finished verify_data.
80
+ *
81
+ * finished_key = HKDF-Expand-Label(BaseKey, "finished", "", Hash.length)
82
+ * verify_data = HMAC(finished_key, Transcript-Hash(Handshake Context))
83
+ */
84
+ export declare function computeFinishedVerifyData(alg: HashAlgorithm, baseSecret: Buffer, transcriptHash: Buffer): Buffer;
85
+ //# sourceMappingURL=key-schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-schedule.d.ts","sourceRoot":"","sources":["../../../src/tls/stealth/key-schedule.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhD,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAErD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,MAAM,CAER;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,MAAM,CAeR;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,GACrB,MAAM,CAER;AAED;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAElD;AAID,MAAM,WAAW,aAAa;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAQlF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,aAAa,EAClB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,aAAa,CAgCf;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,aAAa,EAClB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,eAAe,CAUjB;AAWD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,aAAa,EAClB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,MAAM,CASR"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * TLS 1.3 key schedule.
3
+ *
4
+ * Implements the HKDF-based key derivation defined in RFC 8446 section 7.
5
+ * Uses only `node:crypto` -- zero external dependencies.
6
+ */
7
+ import { createHmac, hkdfSync } from 'node:crypto';
8
+ /** Hash output length in bytes. */
9
+ export function hashLength(alg) {
10
+ return alg === 'sha256' ? 32 : 48;
11
+ }
12
+ /**
13
+ * HKDF-Extract (RFC 5869 section 2.2).
14
+ *
15
+ * Returns a pseudo-random key of `hashLength(alg)` bytes.
16
+ */
17
+ export function hkdfExtract(alg, salt, ikm) {
18
+ return Buffer.from(createHmac(alg, salt).update(ikm).digest());
19
+ }
20
+ /**
21
+ * HKDF-Expand-Label (RFC 8446 section 7.1).
22
+ *
23
+ * HKDF-Expand-Label(Secret, Label, Context, Length) =
24
+ * HKDF-Expand(Secret, HkdfLabel, Length)
25
+ *
26
+ * struct {
27
+ * uint16 length = Length;
28
+ * opaque label<7..255> = "tls13 " + Label;
29
+ * opaque context<0..255> = Context;
30
+ * } HkdfLabel;
31
+ */
32
+ export function hkdfExpandLabel(alg, secret, label, context, length) {
33
+ const fullLabel = Buffer.from('tls13 ' + label, 'ascii');
34
+ const hkdfLabel = Buffer.alloc(2 + 1 + fullLabel.length + 1 + context.length);
35
+ let offset = 0;
36
+ hkdfLabel.writeUInt16BE(length, offset);
37
+ offset += 2;
38
+ hkdfLabel[offset++] = fullLabel.length;
39
+ fullLabel.copy(hkdfLabel, offset);
40
+ offset += fullLabel.length;
41
+ hkdfLabel[offset++] = context.length;
42
+ context.copy(hkdfLabel, offset);
43
+ return Buffer.from(hkdfSync(alg, secret, hkdfLabel, Buffer.alloc(0), length));
44
+ }
45
+ /**
46
+ * Derive-Secret (RFC 8446 section 7.1).
47
+ *
48
+ * Derive-Secret(Secret, Label, Messages) =
49
+ * HKDF-Expand-Label(Secret, Label, Transcript-Hash(Messages), Hash.length)
50
+ */
51
+ export function deriveSecret(alg, secret, label, transcriptHash) {
52
+ return hkdfExpandLabel(alg, secret, label, transcriptHash, hashLength(alg));
53
+ }
54
+ /**
55
+ * Compute transcript hash incrementally.
56
+ */
57
+ export { createHash } from 'node:crypto';
58
+ /**
59
+ * Zero-length secret for the initial extract stage.
60
+ */
61
+ export function zeroKey(alg) {
62
+ return Buffer.alloc(hashLength(alg));
63
+ }
64
+ /**
65
+ * Key and IV length for a cipher suite.
66
+ */
67
+ export function keyIVLengths(cipherName) {
68
+ if (cipherName.includes('AES_128')) {
69
+ return { keyLen: 16, ivLen: 12 };
70
+ }
71
+ if (cipherName.includes('AES_256') || cipherName.includes('CHACHA20')) {
72
+ return { keyLen: 32, ivLen: 12 };
73
+ }
74
+ return { keyLen: 16, ivLen: 12 };
75
+ }
76
+ /**
77
+ * Derive handshake traffic keys from the shared secret and transcript hash.
78
+ *
79
+ * This implements the Early Secret -> Handshake Secret portion of the
80
+ * RFC 8446 key schedule.
81
+ */
82
+ export function deriveHandshakeKeys(alg, sharedSecret, helloHash, keyLen, ivLen) {
83
+ // 1. Early secret = HKDF-Extract(salt=0, IKM=0)
84
+ const earlySecret = hkdfExtract(alg, Buffer.alloc(hashLength(alg)), zeroKey(alg));
85
+ // 2. Derive salt for handshake secret
86
+ const derivedSalt = deriveSecret(alg, earlySecret, 'derived', emptyHash(alg));
87
+ // 3. Handshake secret = HKDF-Extract(salt=derived, IKM=shared_secret)
88
+ const handshakeSecret = hkdfExtract(alg, derivedSalt, sharedSecret);
89
+ // 4. Client/server handshake traffic secrets
90
+ const clientSecret = deriveSecret(alg, handshakeSecret, 'c hs traffic', helloHash);
91
+ const serverSecret = deriveSecret(alg, handshakeSecret, 's hs traffic', helloHash);
92
+ // 5. Traffic keys
93
+ const clientHandshakeKey = hkdfExpandLabel(alg, clientSecret, 'key', Buffer.alloc(0), keyLen);
94
+ const clientHandshakeIV = hkdfExpandLabel(alg, clientSecret, 'iv', Buffer.alloc(0), ivLen);
95
+ const serverHandshakeKey = hkdfExpandLabel(alg, serverSecret, 'key', Buffer.alloc(0), keyLen);
96
+ const serverHandshakeIV = hkdfExpandLabel(alg, serverSecret, 'iv', Buffer.alloc(0), ivLen);
97
+ // 6. Master secret derivation
98
+ const derivedMasterSalt = deriveSecret(alg, handshakeSecret, 'derived', emptyHash(alg));
99
+ const masterSecret = hkdfExtract(alg, derivedMasterSalt, zeroKey(alg));
100
+ return {
101
+ clientHandshakeKey,
102
+ clientHandshakeIV,
103
+ serverHandshakeKey,
104
+ serverHandshakeIV,
105
+ handshakeSecret,
106
+ masterSecret,
107
+ };
108
+ }
109
+ /**
110
+ * Derive application traffic keys from the master secret and the
111
+ * full handshake transcript hash.
112
+ */
113
+ export function deriveApplicationKeys(alg, masterSecret, handshakeHash, keyLen, ivLen) {
114
+ const clientSecret = deriveSecret(alg, masterSecret, 'c ap traffic', handshakeHash);
115
+ const serverSecret = deriveSecret(alg, masterSecret, 's ap traffic', handshakeHash);
116
+ return {
117
+ clientKey: hkdfExpandLabel(alg, clientSecret, 'key', Buffer.alloc(0), keyLen),
118
+ clientIV: hkdfExpandLabel(alg, clientSecret, 'iv', Buffer.alloc(0), ivLen),
119
+ serverKey: hkdfExpandLabel(alg, serverSecret, 'key', Buffer.alloc(0), keyLen),
120
+ serverIV: hkdfExpandLabel(alg, serverSecret, 'iv', Buffer.alloc(0), ivLen),
121
+ };
122
+ }
123
+ /**
124
+ * Hash of empty string -- used for the Derive-Secret("derived", "")
125
+ * step in the key schedule.
126
+ */
127
+ function emptyHash(alg) {
128
+ const { createHash } = require('node:crypto');
129
+ return createHash(alg).digest();
130
+ }
131
+ /**
132
+ * Build the Finished verify_data.
133
+ *
134
+ * finished_key = HKDF-Expand-Label(BaseKey, "finished", "", Hash.length)
135
+ * verify_data = HMAC(finished_key, Transcript-Hash(Handshake Context))
136
+ */
137
+ export function computeFinishedVerifyData(alg, baseSecret, transcriptHash) {
138
+ const finishedKey = hkdfExpandLabel(alg, baseSecret, 'finished', Buffer.alloc(0), hashLength(alg));
139
+ return Buffer.from(createHmac(alg, finishedKey).update(transcriptHash).digest());
140
+ }
141
+ //# sourceMappingURL=key-schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-schedule.js","sourceRoot":"","sources":["../../../src/tls/stealth/key-schedule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * TLS record layer.
3
+ *
4
+ * Handles framing, encryption, and decryption of TLS records.
5
+ * Operates on raw TCP byte streams.
6
+ */
7
+ export interface TLSRecord {
8
+ type: number;
9
+ version: number;
10
+ fragment: Buffer;
11
+ }
12
+ /**
13
+ * Read a single TLS record from a buffer.
14
+ *
15
+ * Returns the record and the number of bytes consumed, or `null` if
16
+ * the buffer does not contain a complete record.
17
+ */
18
+ export declare function readRecord(data: Buffer, offset: number): {
19
+ record: TLSRecord;
20
+ bytesRead: number;
21
+ } | null;
22
+ /**
23
+ * Write a TLS record (unencrypted) to a buffer.
24
+ */
25
+ export declare function writeRecord(type: number, version: number, payload: Buffer): Buffer;
26
+ export type AEADAlgorithm = 'aes-128-gcm' | 'aes-256-gcm' | 'chacha20-poly1305';
27
+ /**
28
+ * Determine AEAD algorithm from cipher suite name.
29
+ */
30
+ export declare function aeadFromCipher(cipherName: string): AEADAlgorithm;
31
+ /**
32
+ * Build the per-record nonce by XORing the IV with the 64-bit
33
+ * sequence number (zero-padded on the left).
34
+ */
35
+ export declare function buildNonce(iv: Buffer, sequenceNumber: bigint): Buffer;
36
+ /**
37
+ * Encrypt a TLS 1.3 record.
38
+ *
39
+ * The plaintext is the handshake/application data followed by the
40
+ * content type byte. The additional data is the record header of the
41
+ * outer (opaque) application_data record.
42
+ */
43
+ export declare function encryptRecord(algorithm: AEADAlgorithm, key: Buffer, nonce: Buffer, plaintext: Buffer, additionalData: Buffer): Buffer;
44
+ /**
45
+ * Decrypt a TLS 1.3 record.
46
+ *
47
+ * Returns the decrypted plaintext including the trailing content type
48
+ * byte. The caller must strip the content type.
49
+ */
50
+ export declare function decryptRecord(algorithm: AEADAlgorithm, key: Buffer, nonce: Buffer, ciphertext: Buffer, additionalData: Buffer): Buffer;
51
+ /**
52
+ * Build the additional data for a TLS 1.3 encrypted record.
53
+ *
54
+ * For TLS 1.3: the 5-byte record header of the *outer* record
55
+ * (type=application_data, version=0x0303, length).
56
+ */
57
+ export declare function buildAdditionalData(ciphertextLength: number): Buffer;
58
+ /**
59
+ * Wrap plaintext into an encrypted TLS 1.3 record.
60
+ *
61
+ * Appends the real content type byte to the plaintext, encrypts with
62
+ * AEAD, and wraps in a record with type=application_data.
63
+ */
64
+ export declare function wrapEncryptedRecord(algorithm: AEADAlgorithm, key: Buffer, iv: Buffer, sequenceNumber: bigint, contentType: number, plaintext: Buffer): Buffer;
65
+ /**
66
+ * Unwrap an encrypted TLS 1.3 record.
67
+ *
68
+ * Returns the decrypted plaintext and the real content type.
69
+ */
70
+ export declare function unwrapEncryptedRecord(algorithm: AEADAlgorithm, key: Buffer, iv: Buffer, sequenceNumber: bigint, record: TLSRecord): {
71
+ contentType: number;
72
+ plaintext: Buffer;
73
+ };
74
+ //# sourceMappingURL=record-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-layer.d.ts","sourceRoot":"","sources":["../../../src/tls/stealth/record-layer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAexG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAOlF;AAID,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,aAAa,GAAG,mBAAmB,CAAC;AAEhF;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAWhE;AAKD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CASrE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GACrB,MAAM,CAYR;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,MAAM,CAuBR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAMpE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,MAAM,CAYR;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,SAAS,GAChB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAgB5C"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * TLS record layer.
3
+ *
4
+ * Handles framing, encryption, and decryption of TLS records.
5
+ * Operates on raw TCP byte streams.
6
+ */
7
+ import { createCipheriv, createDecipheriv, } from 'node:crypto';
8
+ import { BufferWriter } from '../../utils/buffer-writer.js';
9
+ import { RecordType, ProtocolVersion } from '../constants.js';
10
+ import { TLSError } from '../../core/errors.js';
11
+ /** Maximum TLS record payload (2^14 = 16384). */
12
+ const MAX_RECORD_PAYLOAD = 16384;
13
+ /** Maximum ciphertext overhead (tag + content type byte). */
14
+ const MAX_CIPHERTEXT_OVERHEAD = 256;
15
+ // ---- Record reading ----
16
+ /**
17
+ * Read a single TLS record from a buffer.
18
+ *
19
+ * Returns the record and the number of bytes consumed, or `null` if
20
+ * the buffer does not contain a complete record.
21
+ */
22
+ export function readRecord(data, offset) {
23
+ if (data.length - offset < 5)
24
+ return null;
25
+ const type = data[offset];
26
+ const version = data.readUInt16BE(offset + 1);
27
+ const length = data.readUInt16BE(offset + 3);
28
+ if (data.length - offset - 5 < length)
29
+ return null;
30
+ const fragment = data.subarray(offset + 5, offset + 5 + length);
31
+ return {
32
+ record: { type, version, fragment },
33
+ bytesRead: 5 + length,
34
+ };
35
+ }
36
+ /**
37
+ * Write a TLS record (unencrypted) to a buffer.
38
+ */
39
+ export function writeRecord(type, version, payload) {
40
+ const w = new BufferWriter(5 + payload.length);
41
+ w.writeUInt8(type);
42
+ w.writeUInt16(version);
43
+ w.writeUInt16(payload.length);
44
+ w.writeBytes(payload);
45
+ return w.toBuffer();
46
+ }
47
+ /**
48
+ * Determine AEAD algorithm from cipher suite name.
49
+ */
50
+ export function aeadFromCipher(cipherName) {
51
+ if (cipherName.includes('AES_128_GCM') || cipherName.includes('aes-128-gcm')) {
52
+ return 'aes-128-gcm';
53
+ }
54
+ if (cipherName.includes('AES_256_GCM') || cipherName.includes('aes-256-gcm')) {
55
+ return 'aes-256-gcm';
56
+ }
57
+ if (cipherName.includes('CHACHA20') || cipherName.includes('chacha20')) {
58
+ return 'chacha20-poly1305';
59
+ }
60
+ throw new TLSError(`Unsupported cipher: ${cipherName}`);
61
+ }
62
+ /** Tag size for all supported AEAD algorithms. */
63
+ const TAG_SIZE = 16;
64
+ /**
65
+ * Build the per-record nonce by XORing the IV with the 64-bit
66
+ * sequence number (zero-padded on the left).
67
+ */
68
+ export function buildNonce(iv, sequenceNumber) {
69
+ const nonce = Buffer.from(iv);
70
+ const seqBuf = Buffer.alloc(8);
71
+ seqBuf.writeBigUInt64BE(sequenceNumber);
72
+ // XOR the last 8 bytes of IV with the sequence number
73
+ for (let i = 0; i < 8; i++) {
74
+ nonce[nonce.length - 8 + i] ^= seqBuf[i];
75
+ }
76
+ return nonce;
77
+ }
78
+ /**
79
+ * Encrypt a TLS 1.3 record.
80
+ *
81
+ * The plaintext is the handshake/application data followed by the
82
+ * content type byte. The additional data is the record header of the
83
+ * outer (opaque) application_data record.
84
+ */
85
+ export function encryptRecord(algorithm, key, nonce, plaintext, additionalData) {
86
+ const cipher = createCipheriv(algorithm, key, nonce, { authTagLength: TAG_SIZE });
87
+ cipher.setAAD(additionalData);
88
+ const encrypted = cipher.update(plaintext);
89
+ const final = cipher.final();
90
+ const tag = cipher.getAuthTag();
91
+ return Buffer.concat([encrypted, final, tag]);
92
+ }
93
+ /**
94
+ * Decrypt a TLS 1.3 record.
95
+ *
96
+ * Returns the decrypted plaintext including the trailing content type
97
+ * byte. The caller must strip the content type.
98
+ */
99
+ export function decryptRecord(algorithm, key, nonce, ciphertext, additionalData) {
100
+ if (ciphertext.length < TAG_SIZE) {
101
+ throw new TLSError('Record too short for AEAD tag');
102
+ }
103
+ const encryptedData = ciphertext.subarray(0, ciphertext.length - TAG_SIZE);
104
+ const tag = ciphertext.subarray(ciphertext.length - TAG_SIZE);
105
+ const decipher = createDecipheriv(algorithm, key, nonce, { authTagLength: TAG_SIZE });
106
+ decipher.setAAD(additionalData);
107
+ decipher.setAuthTag(tag);
108
+ try {
109
+ const decrypted = decipher.update(encryptedData);
110
+ const final = decipher.final();
111
+ return Buffer.concat([decrypted, final]);
112
+ }
113
+ catch {
114
+ throw new TLSError('AEAD decryption failed');
115
+ }
116
+ }
117
+ /**
118
+ * Build the additional data for a TLS 1.3 encrypted record.
119
+ *
120
+ * For TLS 1.3: the 5-byte record header of the *outer* record
121
+ * (type=application_data, version=0x0303, length).
122
+ */
123
+ export function buildAdditionalData(ciphertextLength) {
124
+ const w = new BufferWriter(5);
125
+ w.writeUInt8(RecordType.APPLICATION_DATA);
126
+ w.writeUInt16(ProtocolVersion.TLS_1_2); // TLS 1.3 records use 0x0303 in the header
127
+ w.writeUInt16(ciphertextLength);
128
+ return w.toBuffer();
129
+ }
130
+ /**
131
+ * Wrap plaintext into an encrypted TLS 1.3 record.
132
+ *
133
+ * Appends the real content type byte to the plaintext, encrypts with
134
+ * AEAD, and wraps in a record with type=application_data.
135
+ */
136
+ export function wrapEncryptedRecord(algorithm, key, iv, sequenceNumber, contentType, plaintext) {
137
+ // Build inner plaintext: data + content_type byte
138
+ const inner = Buffer.alloc(plaintext.length + 1);
139
+ plaintext.copy(inner);
140
+ inner[plaintext.length] = contentType;
141
+ const nonce = buildNonce(iv, sequenceNumber);
142
+ const ciphertextLength = inner.length + TAG_SIZE;
143
+ const aad = buildAdditionalData(ciphertextLength);
144
+ const ciphertext = encryptRecord(algorithm, key, nonce, inner, aad);
145
+ return writeRecord(RecordType.APPLICATION_DATA, ProtocolVersion.TLS_1_2, ciphertext);
146
+ }
147
+ /**
148
+ * Unwrap an encrypted TLS 1.3 record.
149
+ *
150
+ * Returns the decrypted plaintext and the real content type.
151
+ */
152
+ export function unwrapEncryptedRecord(algorithm, key, iv, sequenceNumber, record) {
153
+ const nonce = buildNonce(iv, sequenceNumber);
154
+ const aad = buildAdditionalData(record.fragment.length);
155
+ const inner = decryptRecord(algorithm, key, nonce, record.fragment, aad);
156
+ // Strip trailing zeros and find the real content type
157
+ let i = inner.length - 1;
158
+ while (i >= 0 && inner[i] === 0)
159
+ i--;
160
+ if (i < 0) {
161
+ throw new TLSError('Empty decrypted record');
162
+ }
163
+ const contentType = inner[i];
164
+ const plaintext = inner.subarray(0, i);
165
+ return { contentType, plaintext };
166
+ }
167
+ //# sourceMappingURL=record-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-layer.js","sourceRoot":"","sources":["../../../src/tls/stealth/record-layer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * TLS engine types and the ITLSEngine interface that both standard
3
+ * (node:tls) and stealth (raw handshake) engines implement.
4
+ */
5
+ import type { Socket } from 'node:net';
6
+ import type { Duplex } from 'node:stream';
7
+ import type { BrowserProfile } from '../fingerprints/types.js';
8
+ import type { Logger } from '../utils/logger.js';
9
+ export interface TLSConnectOptions {
10
+ host: string;
11
+ port: number;
12
+ /** Existing TCP socket to wrap (for proxy tunneling). */
13
+ socket?: Socket;
14
+ /** Server name for SNI. Defaults to `host`. */
15
+ servername?: string;
16
+ /** Skip certificate verification. */
17
+ insecure?: boolean;
18
+ /** ALPN protocols to offer. Derived from profile if not given. */
19
+ alpnProtocols?: string[];
20
+ /** Timeout for the TLS handshake in milliseconds. */
21
+ timeout?: number;
22
+ /** Abort signal. */
23
+ signal?: AbortSignal;
24
+ logger?: Logger;
25
+ }
26
+ export interface TLSConnectionInfo {
27
+ /** Negotiated TLS protocol version, e.g. "TLSv1.3". */
28
+ version: string;
29
+ /** Negotiated ALPN protocol, e.g. "h2" or "http/1.1". */
30
+ alpnProtocol: string | null;
31
+ /** Negotiated cipher suite name. */
32
+ cipher: string;
33
+ /** The JA3 hash of the ClientHello actually sent. */
34
+ ja3Hash?: string;
35
+ }
36
+ /**
37
+ * A TLS-encrypted duplex stream augmented with connection metadata.
38
+ */
39
+ export interface TLSSocket extends Duplex {
40
+ /** Connection metadata (available after the handshake completes). */
41
+ connectionInfo: TLSConnectionInfo;
42
+ /** Gracefully close the TLS connection. */
43
+ destroyTLS(): void;
44
+ }
45
+ /**
46
+ * Both the standard and stealth TLS engines implement this interface.
47
+ */
48
+ export interface ITLSEngine {
49
+ /**
50
+ * Open a TLS connection to the given host:port.
51
+ *
52
+ * If a BrowserProfile is supplied the engine MUST configure TLS
53
+ * parameters (cipher suites, curves, extensions, ALPN) to match the
54
+ * profile so that the JA3 fingerprint is correct.
55
+ */
56
+ connect(options: TLSConnectOptions, profile?: BrowserProfile): Promise<TLSSocket>;
57
+ }
58
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tls/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,MAAM;IACvC,qEAAqE;IACrE,cAAc,EAAE,iBAAiB,CAAC;IAClC,2CAA2C;IAC3C,UAAU,IAAI,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACnF"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * TLS engine types and the ITLSEngine interface that both standard
3
+ * (node:tls) and stealth (raw handshake) engines implement.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tls/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Binary reader for parsing TLS records, HTTP/2 frames, and other
3
+ * network protocol structures. All multi-byte integers are read in
4
+ * network byte order (big-endian) unless stated otherwise.
5
+ */
6
+ export declare class BufferReader {
7
+ private _buf;
8
+ private _pos;
9
+ constructor(buf: Buffer, offset?: number);
10
+ get position(): number;
11
+ get remaining(): number;
12
+ get length(): number;
13
+ get buffer(): Buffer;
14
+ peek(length: number): Buffer;
15
+ readUInt8(): number;
16
+ readUInt16(): number;
17
+ readUInt24(): number;
18
+ readUInt32(): number;
19
+ readBytes(length: number): Buffer;
20
+ /** Read a length-prefixed vector with 1-byte length field. */
21
+ readVector8(): Buffer;
22
+ /** Read a length-prefixed vector with 2-byte length field. */
23
+ readVector16(): Buffer;
24
+ /** Read a length-prefixed vector with 3-byte length field. */
25
+ readVector24(): Buffer;
26
+ skip(length: number): void;
27
+ seek(position: number): void;
28
+ /** Create a sub-reader over the next `length` bytes without copying. */
29
+ subReader(length: number): BufferReader;
30
+ private assertAvailable;
31
+ }
32
+ //# sourceMappingURL=buffer-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer-reader.d.ts","sourceRoot":"","sources":["../../src/utils/buffer-reader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;gBAET,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU;IAK3C,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAK5B,SAAS,IAAI,MAAM;IAOnB,UAAU,IAAI,MAAM;IAOpB,UAAU,IAAI,MAAM;IASpB,UAAU,IAAI,MAAM;IAOpB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAOjC,8DAA8D;IAC9D,WAAW,IAAI,MAAM;IAKrB,8DAA8D;IAC9D,YAAY,IAAI,MAAM;IAKtB,8DAA8D;IAC9D,YAAY,IAAI,MAAM;IAKtB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK1B,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO5B,wEAAwE;IACxE,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAOvC,OAAO,CAAC,eAAe;CAOxB"}