@reclaimprotocol/attestor-core 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/README.md +39 -0
  2. package/lib/avs/abis/avsDirectoryABI.d.ts +60 -0
  3. package/lib/avs/abis/avsDirectoryABI.js +344 -0
  4. package/lib/avs/abis/delegationABI.d.ts +126 -0
  5. package/lib/avs/abis/delegationABI.js +5 -0
  6. package/lib/avs/abis/registryABI.d.ts +136 -0
  7. package/lib/avs/abis/registryABI.js +729 -0
  8. package/lib/avs/client/create-claim-on-avs.d.ts +10 -0
  9. package/lib/avs/client/create-claim-on-avs.js +147 -0
  10. package/lib/avs/config.d.ts +7 -0
  11. package/lib/avs/config.js +24 -0
  12. package/lib/avs/contracts/ReclaimServiceManager.d.ts +697 -0
  13. package/lib/avs/contracts/ReclaimServiceManager.js +3 -0
  14. package/lib/avs/contracts/common.d.ts +21 -0
  15. package/lib/avs/contracts/common.js +3 -0
  16. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +888 -0
  17. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1174 -0
  18. package/lib/avs/contracts/factories/index.d.ts +1 -0
  19. package/lib/avs/contracts/factories/index.js +9 -0
  20. package/lib/avs/contracts/index.d.ts +3 -0
  21. package/lib/avs/contracts/index.js +30 -0
  22. package/lib/avs/tests/test.operator.d.ts +11 -0
  23. package/lib/avs/tests/test.operator.js +313 -0
  24. package/lib/avs/tests/utils.d.ts +2 -0
  25. package/lib/avs/tests/utils.js +50 -0
  26. package/lib/avs/types/index.d.ts +55 -0
  27. package/lib/avs/types/index.js +3 -0
  28. package/lib/avs/utils/contracts.d.ts +21 -0
  29. package/lib/avs/utils/contracts.js +38 -0
  30. package/lib/avs/utils/register.d.ts +27 -0
  31. package/lib/avs/utils/register.js +76 -0
  32. package/lib/avs/utils/tasks.d.ts +22 -0
  33. package/lib/avs/utils/tasks.js +45 -0
  34. package/lib/client/create-claim.d.ts +5 -0
  35. package/lib/client/create-claim.js +357 -0
  36. package/lib/client/index.d.ts +3 -0
  37. package/lib/client/index.js +20 -0
  38. package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +16 -0
  39. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +60 -0
  40. package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +25 -0
  41. package/lib/client/tunnels/make-rpc-tls-tunnel.js +135 -0
  42. package/lib/client/utils/attestor-pool.d.ts +6 -0
  43. package/lib/client/utils/attestor-pool.js +28 -0
  44. package/lib/client/utils/client-socket.d.ts +9 -0
  45. package/lib/client/utils/client-socket.js +77 -0
  46. package/lib/client/utils/message-handler.d.ts +4 -0
  47. package/lib/client/utils/message-handler.js +93 -0
  48. package/lib/config/index.d.ts +23 -0
  49. package/lib/config/index.js +35 -0
  50. package/lib/index.d.ts +9 -0
  51. package/lib/index.js +39 -0
  52. package/lib/proto/api.d.ts +414 -0
  53. package/lib/proto/api.js +2756 -0
  54. package/lib/providers/http/index.d.ts +3 -0
  55. package/lib/providers/http/index.js +472 -0
  56. package/lib/providers/http/utils.d.ts +44 -0
  57. package/lib/providers/http/utils.js +302 -0
  58. package/lib/providers/index.d.ts +4 -0
  59. package/lib/providers/index.js +11 -0
  60. package/lib/scripts/check-avs-registration.d.ts +1 -0
  61. package/lib/scripts/check-avs-registration.js +28 -0
  62. package/lib/scripts/generate-provider-types.d.ts +5 -0
  63. package/lib/scripts/generate-provider-types.js +82 -0
  64. package/lib/scripts/generate-receipt.d.ts +9 -0
  65. package/lib/scripts/generate-receipt.js +93 -0
  66. package/lib/scripts/register-avs-operator.d.ts +1 -0
  67. package/lib/scripts/register-avs-operator.js +6 -0
  68. package/lib/scripts/start-server.d.ts +1 -0
  69. package/lib/scripts/start-server.js +6 -0
  70. package/lib/scripts/verify-root-ca.d.ts +1 -0
  71. package/lib/scripts/verify-root-ca.js +51 -0
  72. package/lib/server/create-server.d.ts +7 -0
  73. package/lib/server/create-server.js +85 -0
  74. package/lib/server/handlers/claimTunnel.d.ts +2 -0
  75. package/lib/server/handlers/claimTunnel.js +55 -0
  76. package/lib/server/handlers/completeClaimOnChain.d.ts +2 -0
  77. package/lib/server/handlers/completeClaimOnChain.js +28 -0
  78. package/lib/server/handlers/createClaimOnChain.d.ts +2 -0
  79. package/lib/server/handlers/createClaimOnChain.js +31 -0
  80. package/lib/server/handlers/createTunnel.d.ts +2 -0
  81. package/lib/server/handlers/createTunnel.js +65 -0
  82. package/lib/server/handlers/disconnectTunnel.d.ts +2 -0
  83. package/lib/server/handlers/disconnectTunnel.js +10 -0
  84. package/lib/server/handlers/index.d.ts +4 -0
  85. package/lib/server/handlers/index.js +18 -0
  86. package/lib/server/handlers/init.d.ts +2 -0
  87. package/lib/server/handlers/init.js +21 -0
  88. package/lib/server/index.d.ts +4 -0
  89. package/lib/server/index.js +21 -0
  90. package/lib/server/socket.d.ts +11 -0
  91. package/lib/server/socket.js +95 -0
  92. package/lib/server/tunnels/make-tcp-tunnel.d.ts +20 -0
  93. package/lib/server/tunnels/make-tcp-tunnel.js +182 -0
  94. package/lib/server/utils/apm.d.ts +11 -0
  95. package/lib/server/utils/apm.js +39 -0
  96. package/lib/server/utils/assert-valid-claim-request.d.ts +29 -0
  97. package/lib/server/utils/assert-valid-claim-request.js +189 -0
  98. package/lib/server/utils/config-env.d.ts +1 -0
  99. package/lib/server/utils/config-env.js +7 -0
  100. package/lib/server/utils/generics.d.ts +22 -0
  101. package/lib/server/utils/generics.js +59 -0
  102. package/lib/server/utils/iso.d.ts +1 -0
  103. package/lib/server/utils/iso.js +260 -0
  104. package/lib/server/utils/keep-alive.d.ts +7 -0
  105. package/lib/server/utils/keep-alive.js +42 -0
  106. package/lib/server/utils/process-handshake.d.ts +13 -0
  107. package/lib/server/utils/process-handshake.js +179 -0
  108. package/lib/server/utils/verify-server-certificates.d.ts +7 -0
  109. package/lib/server/utils/verify-server-certificates.js +102 -0
  110. package/lib/tests/describe-with-server.d.ts +21 -0
  111. package/lib/tests/describe-with-server.js +67 -0
  112. package/lib/tests/mock-provider-server.d.ts +13 -0
  113. package/lib/tests/mock-provider-server.js +65 -0
  114. package/lib/tests/mocks.d.ts +4 -0
  115. package/lib/tests/mocks.js +23 -0
  116. package/lib/tests/test.claim-creation.d.ts +1 -0
  117. package/lib/tests/test.claim-creation.js +187 -0
  118. package/lib/tests/test.http-parser.d.ts +1 -0
  119. package/lib/tests/test.http-parser.js +118 -0
  120. package/lib/tests/test.http-provider-utils.d.ts +1 -0
  121. package/lib/tests/test.http-provider-utils.js +1932 -0
  122. package/lib/tests/test.http-provider.d.ts +1 -0
  123. package/lib/tests/test.http-provider.js +43 -0
  124. package/lib/tests/test.rpc-communication.d.ts +1 -0
  125. package/lib/tests/test.rpc-communication.js +64 -0
  126. package/lib/tests/test.rpc-tunnel.d.ts +1 -0
  127. package/lib/tests/test.rpc-tunnel.js +168 -0
  128. package/lib/tests/test.signatures.d.ts +1 -0
  129. package/lib/tests/test.signatures.js +24 -0
  130. package/lib/tests/test.tcp-tunnel.d.ts +1 -0
  131. package/lib/tests/test.tcp-tunnel.js +64 -0
  132. package/lib/tests/test.zk.d.ts +1 -0
  133. package/lib/tests/test.zk.js +169 -0
  134. package/lib/tests/utils.d.ts +12 -0
  135. package/lib/tests/utils.js +49 -0
  136. package/lib/types/claims.d.ts +64 -0
  137. package/lib/types/claims.js +3 -0
  138. package/lib/types/client.d.ts +136 -0
  139. package/lib/types/client.js +3 -0
  140. package/lib/types/general.d.ts +39 -0
  141. package/lib/types/general.js +3 -0
  142. package/lib/types/handlers.d.ts +10 -0
  143. package/lib/types/handlers.js +3 -0
  144. package/lib/types/index.d.ts +9 -0
  145. package/lib/types/index.js +26 -0
  146. package/lib/types/providers.d.ts +135 -0
  147. package/lib/types/providers.gen.d.ts +414 -0
  148. package/lib/types/providers.gen.js +14 -0
  149. package/lib/types/providers.js +3 -0
  150. package/lib/types/rpc.d.ts +35 -0
  151. package/lib/types/rpc.js +3 -0
  152. package/lib/types/signatures.d.ts +28 -0
  153. package/lib/types/signatures.js +3 -0
  154. package/lib/types/tunnel.d.ts +18 -0
  155. package/lib/types/tunnel.js +3 -0
  156. package/lib/types/zk.d.ts +16 -0
  157. package/lib/types/zk.js +3 -0
  158. package/lib/utils/benchmark.d.ts +1 -0
  159. package/lib/utils/benchmark.js +70 -0
  160. package/lib/utils/claims.d.ts +33 -0
  161. package/lib/utils/claims.js +112 -0
  162. package/lib/utils/env.d.ts +3 -0
  163. package/lib/utils/env.js +20 -0
  164. package/lib/utils/error.d.ts +27 -0
  165. package/lib/utils/error.js +43 -0
  166. package/lib/utils/generics.d.ts +112 -0
  167. package/lib/utils/generics.js +348 -0
  168. package/lib/utils/http-parser.d.ts +55 -0
  169. package/lib/utils/http-parser.js +249 -0
  170. package/lib/utils/index.d.ts +10 -0
  171. package/lib/utils/index.js +27 -0
  172. package/lib/utils/logger.d.ts +13 -0
  173. package/lib/utils/logger.js +100 -0
  174. package/lib/utils/prepare-packets.d.ts +16 -0
  175. package/lib/utils/prepare-packets.js +61 -0
  176. package/lib/utils/redactions.d.ts +41 -0
  177. package/lib/utils/redactions.js +111 -0
  178. package/lib/utils/retries.d.ts +12 -0
  179. package/lib/utils/retries.js +28 -0
  180. package/lib/utils/signatures/eth.d.ts +2 -0
  181. package/lib/utils/signatures/eth.js +33 -0
  182. package/lib/utils/signatures/index.d.ts +5 -0
  183. package/lib/utils/signatures/index.js +11 -0
  184. package/lib/utils/socket-base.d.ts +21 -0
  185. package/lib/utils/socket-base.js +89 -0
  186. package/lib/utils/tls.d.ts +2 -0
  187. package/lib/utils/tls.js +32 -0
  188. package/lib/utils/validation.d.ts +2 -0
  189. package/lib/utils/validation.js +46 -0
  190. package/lib/utils/ws.d.ts +12 -0
  191. package/lib/utils/ws.js +21 -0
  192. package/lib/utils/zk.d.ts +50 -0
  193. package/lib/utils/zk.js +282 -0
  194. package/lib/window-rpc/index.d.ts +3 -0
  195. package/lib/window-rpc/index.js +20 -0
  196. package/lib/window-rpc/setup-window-rpc.d.ts +5 -0
  197. package/lib/window-rpc/setup-window-rpc.js +239 -0
  198. package/lib/window-rpc/types.d.ts +184 -0
  199. package/lib/window-rpc/types.js +3 -0
  200. package/lib/window-rpc/utils.d.ts +13 -0
  201. package/lib/window-rpc/utils.js +76 -0
  202. package/lib/window-rpc/window-rpc-zk.d.ts +11 -0
  203. package/lib/window-rpc/window-rpc-zk.js +72 -0
  204. package/package.json +117 -0
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidCountryCode = isValidCountryCode;
4
+ const countries = {
5
+ AF: 'Afghanistan',
6
+ AX: 'Åland Islands',
7
+ AL: 'Albania',
8
+ DZ: 'Algeria',
9
+ AS: 'American Samoa',
10
+ AD: 'Andorra',
11
+ AO: 'Angola',
12
+ AI: 'Anguilla',
13
+ AQ: 'Antarctica',
14
+ AG: 'Antigua and Barbuda',
15
+ AR: 'Argentina',
16
+ AM: 'Armenia',
17
+ AW: 'Aruba',
18
+ AU: 'Australia',
19
+ AT: 'Austria',
20
+ AZ: 'Azerbaijan',
21
+ BS: 'Bahamas',
22
+ BH: 'Bahrain',
23
+ BD: 'Bangladesh',
24
+ BB: 'Barbados',
25
+ BY: 'Belarus',
26
+ BE: 'Belgium',
27
+ BZ: 'Belize',
28
+ BJ: 'Benin',
29
+ BM: 'Bermuda',
30
+ BT: 'Bhutan',
31
+ BO: 'Bolivia, Plurinational State of',
32
+ BQ: 'Bonaire, Sint Eustatius and Saba',
33
+ BA: 'Bosnia and Herzegovina',
34
+ BW: 'Botswana',
35
+ BV: 'Bouvet Island',
36
+ BR: 'Brazil',
37
+ IO: 'British Indian Ocean Territory',
38
+ BN: 'Brunei Darussalam',
39
+ BG: 'Bulgaria',
40
+ BF: 'Burkina Faso',
41
+ BI: 'Burundi',
42
+ KH: 'Cambodia',
43
+ CM: 'Cameroon',
44
+ CA: 'Canada',
45
+ CV: 'Cape Verde',
46
+ KY: 'Cayman Islands',
47
+ CF: 'Central African Republic',
48
+ TD: 'Chad',
49
+ CL: 'Chile',
50
+ CN: 'China',
51
+ CX: 'Christmas Island',
52
+ CC: 'Cocos (Keeling) Islands',
53
+ CO: 'Colombia',
54
+ KM: 'Comoros',
55
+ CG: 'Congo',
56
+ CD: 'Congo, the Democratic Republic of the',
57
+ CK: 'Cook Islands',
58
+ CR: 'Costa Rica',
59
+ CI: "Côte d'Ivoire",
60
+ HR: 'Croatia',
61
+ CU: 'Cuba',
62
+ CW: 'Curaçao',
63
+ CY: 'Cyprus',
64
+ CZ: 'Czech Republic',
65
+ DK: 'Denmark',
66
+ DJ: 'Djibouti',
67
+ DM: 'Dominica',
68
+ DO: 'Dominican Republic',
69
+ EC: 'Ecuador',
70
+ EG: 'Egypt',
71
+ SV: 'El Salvador',
72
+ GQ: 'Equatorial Guinea',
73
+ ER: 'Eritrea',
74
+ EE: 'Estonia',
75
+ ET: 'Ethiopia',
76
+ FK: 'Falkland Islands (Malvinas)',
77
+ FO: 'Faroe Islands',
78
+ FJ: 'Fiji',
79
+ FI: 'Finland',
80
+ FR: 'France',
81
+ GF: 'French Guiana',
82
+ PF: 'French Polynesia',
83
+ TF: 'French Southern Territories',
84
+ GA: 'Gabon',
85
+ GM: 'Gambia',
86
+ GE: 'Georgia',
87
+ DE: 'Germany',
88
+ GH: 'Ghana',
89
+ GI: 'Gibraltar',
90
+ GR: 'Greece',
91
+ GL: 'Greenland',
92
+ GD: 'Grenada',
93
+ GP: 'Guadeloupe',
94
+ GU: 'Guam',
95
+ GT: 'Guatemala',
96
+ GG: 'Guernsey',
97
+ GN: 'Guinea',
98
+ GW: 'Guinea-Bissau',
99
+ GY: 'Guyana',
100
+ HT: 'Haiti',
101
+ HM: 'Heard Island and McDonald Mcdonald Islands',
102
+ VA: 'Holy See (Vatican City State)',
103
+ HN: 'Honduras',
104
+ HK: 'Hong Kong',
105
+ HU: 'Hungary',
106
+ IS: 'Iceland',
107
+ IN: 'India',
108
+ ID: 'Indonesia',
109
+ IR: 'Iran, Islamic Republic of',
110
+ IQ: 'Iraq',
111
+ IE: 'Ireland',
112
+ IM: 'Isle of Man',
113
+ IL: 'Israel',
114
+ IT: 'Italy',
115
+ JM: 'Jamaica',
116
+ JP: 'Japan',
117
+ JE: 'Jersey',
118
+ JO: 'Jordan',
119
+ KZ: 'Kazakhstan',
120
+ KE: 'Kenya',
121
+ KI: 'Kiribati',
122
+ XK: 'Kosovo',
123
+ KP: "Korea, Democratic People's Republic of",
124
+ KR: 'Korea, Republic of',
125
+ KW: 'Kuwait',
126
+ KG: 'Kyrgyzstan',
127
+ LA: "Lao People's Democratic Republic",
128
+ LV: 'Latvia',
129
+ LB: 'Lebanon',
130
+ LS: 'Lesotho',
131
+ LR: 'Liberia',
132
+ LY: 'Libya',
133
+ LI: 'Liechtenstein',
134
+ LT: 'Lithuania',
135
+ LU: 'Luxembourg',
136
+ MO: 'Macao',
137
+ MK: 'North Macedonia',
138
+ MG: 'Madagascar',
139
+ MW: 'Malawi',
140
+ MY: 'Malaysia',
141
+ MV: 'Maldives',
142
+ ML: 'Mali',
143
+ MT: 'Malta',
144
+ MH: 'Marshall Islands',
145
+ MQ: 'Martinique',
146
+ MR: 'Mauritania',
147
+ MU: 'Mauritius',
148
+ YT: 'Mayotte',
149
+ MX: 'Mexico',
150
+ FM: 'Micronesia, Federated States of',
151
+ MD: 'Moldova, Republic of',
152
+ MC: 'Monaco',
153
+ MN: 'Mongolia',
154
+ ME: 'Montenegro',
155
+ MS: 'Montserrat',
156
+ MA: 'Morocco',
157
+ MZ: 'Mozambique',
158
+ MM: 'Myanmar',
159
+ NA: 'Namibia',
160
+ NR: 'Nauru',
161
+ NP: 'Nepal',
162
+ NL: 'Netherlands',
163
+ AN: 'Netherlands Antilles',
164
+ NC: 'New Caledonia',
165
+ NZ: 'New Zealand',
166
+ NI: 'Nicaragua',
167
+ NE: 'Niger',
168
+ NG: 'Nigeria',
169
+ NU: 'Niue',
170
+ NF: 'Norfolk Island',
171
+ MP: 'Northern Mariana Islands',
172
+ NO: 'Norway',
173
+ OM: 'Oman',
174
+ PK: 'Pakistan',
175
+ PW: 'Palau',
176
+ PS: 'Palestine, State of',
177
+ PA: 'Panama',
178
+ PG: 'Papua New Guinea',
179
+ PY: 'Paraguay',
180
+ PE: 'Peru',
181
+ PH: 'Philippines',
182
+ PN: 'Pitcairn',
183
+ PL: 'Poland',
184
+ PT: 'Portugal',
185
+ PR: 'Puerto Rico',
186
+ QA: 'Qatar',
187
+ RE: 'Réunion',
188
+ RO: 'Romania',
189
+ RU: 'Russian Federation',
190
+ RW: 'Rwanda',
191
+ BL: 'Saint Barthélemy',
192
+ SH: 'Saint Helena, Ascension and Tristan da Cunha',
193
+ KN: 'Saint Kitts and Nevis',
194
+ LC: 'Saint Lucia',
195
+ MF: 'Saint Martin (French part)',
196
+ PM: 'Saint Pierre and Miquelon',
197
+ VC: 'Saint Vincent and the Grenadines',
198
+ WS: 'Samoa',
199
+ SM: 'San Marino',
200
+ ST: 'Sao Tome and Principe',
201
+ SA: 'Saudi Arabia',
202
+ SN: 'Senegal',
203
+ RS: 'Serbia',
204
+ SC: 'Seychelles',
205
+ SL: 'Sierra Leone',
206
+ SG: 'Singapore',
207
+ SX: 'Sint Maarten (Dutch part)',
208
+ SK: 'Slovakia',
209
+ SI: 'Slovenia',
210
+ SB: 'Solomon Islands',
211
+ SO: 'Somalia',
212
+ ZA: 'South Africa',
213
+ GS: 'South Georgia and the South Sandwich Islands',
214
+ SS: 'South Sudan',
215
+ ES: 'Spain',
216
+ LK: 'Sri Lanka',
217
+ SD: 'Sudan',
218
+ SR: 'Suriname',
219
+ SJ: 'Svalbard and Jan Mayen',
220
+ SZ: 'Swaziland',
221
+ SE: 'Sweden',
222
+ CH: 'Switzerland',
223
+ SY: 'Syrian Arab Republic',
224
+ TW: 'Taiwan, Province of China',
225
+ TJ: 'Tajikistan',
226
+ TZ: 'Tanzania, United Republic of',
227
+ TH: 'Thailand',
228
+ TL: 'Timor-Leste',
229
+ TG: 'Togo',
230
+ TK: 'Tokelau',
231
+ TO: 'Tonga',
232
+ TT: 'Trinidad and Tobago',
233
+ TN: 'Tunisia',
234
+ TR: 'Turkey',
235
+ TM: 'Turkmenistan',
236
+ TC: 'Turks and Caicos Islands',
237
+ TV: 'Tuvalu',
238
+ UG: 'Uganda',
239
+ UA: 'Ukraine',
240
+ AE: 'United Arab Emirates',
241
+ GB: 'United Kingdom',
242
+ US: 'United States',
243
+ UM: 'United States Minor Outlying Islands',
244
+ UY: 'Uruguay',
245
+ UZ: 'Uzbekistan',
246
+ VU: 'Vanuatu',
247
+ VE: 'Venezuela, Bolivarian Republic of',
248
+ VN: 'Viet Nam',
249
+ VG: 'Virgin Islands, British',
250
+ VI: 'Virgin Islands, U.S.',
251
+ WF: 'Wallis and Futuna',
252
+ EH: 'Western Sahara',
253
+ YE: 'Yemen',
254
+ ZM: 'Zambia',
255
+ ZW: 'Zimbabwe'
256
+ };
257
+ function isValidCountryCode(countryCode) {
258
+ return (countryCode.toUpperCase() in countries);
259
+ }
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZlci91dGlscy9pc28udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErUEEsZ0RBRUM7QUFoUUQsTUFBTSxTQUFTLEdBQUc7SUFDakIsRUFBRSxFQUFFLGFBQWE7SUFDakIsRUFBRSxFQUFFLGVBQWU7SUFDbkIsRUFBRSxFQUFFLFNBQVM7SUFDYixFQUFFLEVBQUUsU0FBUztJQUNiLEVBQUUsRUFBRSxnQkFBZ0I7SUFDcEIsRUFBRSxFQUFFLFNBQVM7SUFDYixFQUFFLEVBQUUsUUFBUTtJQUNaLEVBQUUsRUFBRSxVQUFVO0lBQ2QsRUFBRSxFQUFFLFlBQVk7SUFDaEIsRUFBRSxFQUFFLHFCQUFxQjtJQUN6QixFQUFFLEVBQUUsV0FBVztJQUNmLEVBQUUsRUFBRSxTQUFTO0lBQ2IsRUFBRSxFQUFFLE9BQU87SUFDWCxFQUFFLEVBQUUsV0FBVztJQUNmLEVBQUUsRUFBRSxTQUFTO0lBQ2IsRUFBRSxFQUFFLFlBQVk7SUFDaEIsRUFBRSxFQUFFLFNBQVM7SUFDYixFQUFFLEVBQUUsU0FBUztJQUNiLEVBQUUsRUFBRSxZQUFZO0lBQ2hCLEVBQUUsRUFBRSxVQUFVO0lBQ2QsRUFBRSxFQUFFLFNBQVM7SUFDYixFQUFFLEVBQUUsU0FBUztJQUNiLEVBQUUsRUFBRSxRQUFRO0lBQ1osRUFBRSxFQUFFLE9BQU87SUFDWCxFQUFFLEVBQUUsU0FBUztJQUNiLEVBQUUsRUFBRSxRQUFRO0lBQ1osRUFBRSxFQUFFLGlDQUFpQztJQUNyQyxFQUFFLEVBQUUsa0NBQWtDO0lBQ3RDLEVBQUUsRUFBRSx3QkFBd0I7SUFDNUIsRUFBRSxFQUFFLFVBQVU7SUFDZCxFQUFFLEVBQUUsZUFBZTtJQUNuQixFQUFFLEVBQUUsUUFBUTtJQUNaLEVBQUUsRUFBRSxnQ0FBZ0M7SUFDcEMsRUFBRSxFQUFFLG1CQUFtQjtJQUN2QixFQUFFLEVBQUUsVUFBVTtJQUNkLEVBQUUsRUFBRSxjQUFjO0lB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
@@ -0,0 +1,7 @@
1
+ import { Logger } from 'pino';
2
+ import { WebSocket } from 'ws';
3
+ /**
4
+ * Adds a keep-alive mechanism to the WebSocket
5
+ * client
6
+ */
7
+ export declare function addKeepAlive(ws: WebSocket, logger: Logger): void;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addKeepAlive = addKeepAlive;
4
+ const config_1 = require("src/config");
5
+ /**
6
+ * Adds a keep-alive mechanism to the WebSocket
7
+ * client
8
+ */
9
+ function addKeepAlive(ws, logger) {
10
+ let sendTimeout;
11
+ let killTimeout;
12
+ ws.on('message', () => {
13
+ logger.trace('data recv, resetting timer');
14
+ resetTimer();
15
+ });
16
+ ws.on('pong', () => {
17
+ logger.trace('pong received, resetting timer');
18
+ resetTimer();
19
+ });
20
+ ws.on('error', cleanup);
21
+ ws.on('close', cleanup);
22
+ function resetTimer() {
23
+ cleanup();
24
+ resetSendTimeout();
25
+ killTimeout = setTimeout(() => {
26
+ logger.warn('no data received in a while, closing connection');
27
+ ws.close();
28
+ }, config_1.MAX_NO_DATA_INTERVAL_MS);
29
+ }
30
+ function resetSendTimeout() {
31
+ // reset ping
32
+ sendTimeout = setTimeout(() => {
33
+ ws.ping();
34
+ resetSendTimeout();
35
+ }, config_1.PING_INTERVAL_MS);
36
+ }
37
+ function cleanup() {
38
+ clearTimeout(killTimeout);
39
+ clearTimeout(sendTimeout);
40
+ }
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VlcC1hbGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMva2VlcC1hbGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBLG9DQXdDQztBQS9DRCx1Q0FBc0U7QUFHdEU7OztHQUdHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLEVBQWEsRUFBRSxNQUFjO0lBQ3pELElBQUksV0FBMkIsQ0FBQTtJQUMvQixJQUFJLFdBQTJCLENBQUE7SUFFL0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1FBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtRQUMxQyxVQUFVLEVBQUUsQ0FBQTtJQUNiLENBQUMsQ0FBQyxDQUFBO0lBQ0YsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO1FBQ2xCLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTtRQUM5QyxVQUFVLEVBQUUsQ0FBQTtJQUNiLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDdkIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFdkIsU0FBUyxVQUFVO1FBQ2xCLE9BQU8sRUFBRSxDQUFBO1FBQ1QsZ0JBQWdCLEVBQUUsQ0FBQTtRQUVsQixXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUM3QixNQUFNLENBQUMsSUFBSSxDQUNWLGlEQUFpRCxDQUNqRCxDQUFBO1lBQ0QsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ1gsQ0FBQyxFQUFFLGdDQUF1QixDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUVELFNBQVMsZ0JBQWdCO1FBQ3hCLGFBQWE7UUFDYixXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUM3QixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDVCxnQkFBZ0IsRUFBRSxDQUFBO1FBQ25CLENBQUMsRUFBRSx5QkFBZ0IsQ0FBQyxDQUFBO0lBQ3JCLENBQUM7SUFFRCxTQUFTLE9BQU87UUFDZixZQUFZLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDekIsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzFCLENBQUM7QUFDRixDQUFDIn0=
@@ -0,0 +1,13 @@
1
+ import { ClaimTunnelRequest } from 'src/proto/api';
2
+ import { Logger } from 'src/types';
3
+ /**
4
+ * Verifies server cert chain and removes handshake messages from transcript
5
+ * @param receipt
6
+ * @param logger
7
+ */
8
+ export declare function processHandshake(receipt: ClaimTunnelRequest['transcript'], logger: Logger): Promise<{
9
+ tlsVersion: "TLS1_3" | "TLS1_2";
10
+ cipherSuite: "TLS_CHACHA20_POLY1305_SHA256" | "TLS_AES_256_GCM_SHA384" | "TLS_AES_128_GCM_SHA256" | "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256" | "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" | "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" | "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" | "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" | "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" | "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA" | "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA";
11
+ hostname: string;
12
+ nextMsgIndex: number;
13
+ }>;
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processHandshake = processHandshake;
4
+ const tls_1 = require("@reclaimprotocol/tls");
5
+ const parse_certificate_1 = require("@reclaimprotocol/tls/lib/utils/parse-certificate");
6
+ const api_1 = require("src/proto/api");
7
+ const utils_1 = require("src/utils");
8
+ const RECORD_LENGTH_BYTES = 3;
9
+ /**
10
+ * Verifies server cert chain and removes handshake messages from transcript
11
+ * @param receipt
12
+ * @param logger
13
+ */
14
+ async function processHandshake(receipt, logger) {
15
+ //const handshakeMessages = extractHandshakeFromTranscript(receipt)
16
+ let currentPacketIdx = 0;
17
+ let readPacketIdx = 0;
18
+ let handshakeData;
19
+ let packetData;
20
+ const handshakeRawMessages = [];
21
+ const certificates = [];
22
+ let cipherSuite = undefined;
23
+ let tlsVersion = undefined;
24
+ let serverRandom = undefined;
25
+ let clientRandom = undefined;
26
+ let serverFinishedIdx = -1;
27
+ let clientFinishedIdx = -1;
28
+ let certVerified = false;
29
+ let hostname = undefined;
30
+ let clientChangeCipherSpecMsgIdx = -1;
31
+ let serverChangeCipherSpecMsgIdx = -1;
32
+ while ((packetData = await readPacket())) {
33
+ const { type, content } = packetData;
34
+ switch (type) {
35
+ case tls_1.SUPPORTED_RECORD_TYPE_MAP.CLIENT_HELLO:
36
+ const clientHello = (0, tls_1.parseClientHello)(handshakeRawMessages[0]);
37
+ clientRandom = clientHello.serverRandom;
38
+ const { SERVER_NAME: sni } = clientHello.extensions;
39
+ hostname = sni === null || sni === void 0 ? void 0 : sni.serverName;
40
+ if (!hostname) {
41
+ throw new Error('client hello has no SNI');
42
+ }
43
+ break;
44
+ case tls_1.SUPPORTED_RECORD_TYPE_MAP.SERVER_HELLO:
45
+ const serverHello = await (0, tls_1.parseServerHello)(content);
46
+ cipherSuite = serverHello.cipherSuite;
47
+ tlsVersion = serverHello.serverTlsVersion;
48
+ serverRandom = serverHello.serverRandom;
49
+ logger.info({ serverTLSVersion: tlsVersion, cipherSuite }, 'extracted server hello params');
50
+ break;
51
+ case tls_1.SUPPORTED_RECORD_TYPE_MAP.CERTIFICATE:
52
+ const parseResult = (0, tls_1.parseCertificates)(content, { version: tlsVersion });
53
+ certificates.push(...parseResult.certificates);
54
+ break;
55
+ case tls_1.SUPPORTED_RECORD_TYPE_MAP.CERTIFICATE_VERIFY:
56
+ const signature = (0, tls_1.parseServerCertificateVerify)(content);
57
+ if (!(certificates === null || certificates === void 0 ? void 0 : certificates.length)) {
58
+ throw new Error('No provider certificates received');
59
+ }
60
+ const signatureData = await (0, tls_1.getSignatureDataTls13)(handshakeRawMessages.slice(0, -1), cipherSuite);
61
+ await (0, tls_1.verifyCertificateSignature)({
62
+ ...signature,
63
+ publicKey: certificates[0].getPublicKey(),
64
+ signatureData,
65
+ });
66
+ await (0, parse_certificate_1.verifyCertificateChain)(certificates, hostname);
67
+ logger.info({ host: hostname }, 'verified provider certificate chain');
68
+ certVerified = true;
69
+ break;
70
+ case tls_1.SUPPORTED_RECORD_TYPE_MAP.SERVER_KEY_SHARE:
71
+ if (!(certificates === null || certificates === void 0 ? void 0 : certificates.length)) {
72
+ throw new Error('No provider certificates received');
73
+ }
74
+ const keyShare = await (0, tls_1.processServerKeyShare)(content);
75
+ const signatureData12 = await (0, tls_1.getSignatureDataTls12)({
76
+ clientRandom: clientRandom,
77
+ serverRandom: serverRandom,
78
+ curveType: keyShare.publicKeyType,
79
+ publicKey: keyShare.publicKey,
80
+ });
81
+ // verify signature
82
+ await (0, tls_1.verifyCertificateSignature)({
83
+ signature: keyShare.signatureBytes,
84
+ algorithm: keyShare.signatureAlgorithm,
85
+ publicKey: certificates[0].getPublicKey(),
86
+ signatureData: signatureData12,
87
+ });
88
+ await (0, parse_certificate_1.verifyCertificateChain)(certificates, hostname);
89
+ logger.info({ host: hostname }, 'verified provider certificate chain');
90
+ certVerified = true;
91
+ break;
92
+ case tls_1.SUPPORTED_RECORD_TYPE_MAP.FINISHED:
93
+ if (receipt[readPacketIdx].sender === api_1.TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT) {
94
+ clientFinishedIdx = readPacketIdx;
95
+ }
96
+ else {
97
+ serverFinishedIdx = readPacketIdx;
98
+ }
99
+ break;
100
+ }
101
+ }
102
+ if (!certVerified) {
103
+ throw new Error('No provider certificates received');
104
+ }
105
+ if (tlsVersion === 'TLS1_3' && serverFinishedIdx < 0) {
106
+ throw new Error('server finished message not found');
107
+ }
108
+ if (tlsVersion === 'TLS1_2' && (serverChangeCipherSpecMsgIdx < 0 || clientChangeCipherSpecMsgIdx < 0)) {
109
+ throw new Error('change cipher spec message not found');
110
+ }
111
+ async function readPacket() {
112
+ var _a;
113
+ if (currentPacketIdx > (receipt.length - 1)) {
114
+ return;
115
+ }
116
+ if (certVerified && serverFinishedIdx > 0 && clientFinishedIdx > 0) {
117
+ return;
118
+ }
119
+ readPacketIdx = currentPacketIdx;
120
+ if (!(handshakeData === null || handshakeData === void 0 ? void 0 : handshakeData.length)) {
121
+ const { message, reveal, sender } = receipt[currentPacketIdx];
122
+ const recordHeader = message.slice(0, 5);
123
+ const content = getWithoutHeader(message);
124
+ if (message[0] === tls_1.PACKET_TYPE['CHANGE_CIPHER_SPEC']) { //skip change cipher spec message
125
+ if (sender === api_1.TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT) {
126
+ clientChangeCipherSpecMsgIdx = currentPacketIdx;
127
+ }
128
+ else {
129
+ serverChangeCipherSpecMsgIdx = currentPacketIdx;
130
+ }
131
+ currentPacketIdx++;
132
+ return await readPacket();
133
+ }
134
+ if (message[0] === tls_1.PACKET_TYPE['WRAPPED_RECORD'] ||
135
+ (serverChangeCipherSpecMsgIdx > 0 && sender === api_1.TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER) ||
136
+ (clientChangeCipherSpecMsgIdx > 0 && sender === api_1.TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT)) { // encrypted
137
+ if (!tlsVersion || !cipherSuite) {
138
+ throw new Error('Could not find cipherSuite to use');
139
+ }
140
+ if (!((_a = reveal === null || reveal === void 0 ? void 0 : reveal.directReveal) === null || _a === void 0 ? void 0 : _a.key)) {
141
+ throw new Error('no direct reveal for handshake packet');
142
+ }
143
+ const { plaintext } = await (0, utils_1.decryptDirect)(reveal === null || reveal === void 0 ? void 0 : reveal.directReveal, cipherSuite, recordHeader, tlsVersion, content);
144
+ handshakeData = plaintext;
145
+ if (tlsVersion === 'TLS1_3') {
146
+ handshakeData = handshakeData.slice(0, -1);
147
+ }
148
+ }
149
+ else {
150
+ handshakeData = content;
151
+ }
152
+ }
153
+ const type = handshakeData[0];
154
+ const content = (0, tls_1.readWithLength)(handshakeData.slice(1), RECORD_LENGTH_BYTES);
155
+ if (!content) {
156
+ logger.warn('missing bytes from packet');
157
+ return;
158
+ }
159
+ const totalLength = 1 + RECORD_LENGTH_BYTES + content.length;
160
+ handshakeRawMessages.push(handshakeData.slice(0, totalLength));
161
+ handshakeData = handshakeData.slice(totalLength);
162
+ if (!handshakeData.length) {
163
+ currentPacketIdx++;
164
+ }
165
+ return { type, content };
166
+ }
167
+ const nextMsgIndex = Math.max(serverFinishedIdx, clientFinishedIdx) + 1;
168
+ return {
169
+ tlsVersion: tlsVersion,
170
+ cipherSuite: cipherSuite,
171
+ hostname: hostname,
172
+ nextMsgIndex
173
+ };
174
+ }
175
+ function getWithoutHeader(message) {
176
+ // strip the record header (xx 03 03 xx xx)
177
+ return message.slice(5);
178
+ }
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1oYW5kc2hha2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3V0aWxzL3Byb2Nlc3MtaGFuZHNoYWtlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNkJBLDRDQXlNQztBQXRPRCw4Q0FlNkI7QUFDN0Isd0ZBQXlGO0FBQ3pGLHVDQUErRTtBQUUvRSxxQ0FBeUM7QUFHekMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUE7QUFFN0I7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxPQUF5QyxFQUFFLE1BQWM7SUFDL0YsbUVBQW1FO0lBQ25FLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQTtJQUNyQixJQUFJLGFBQXlCLENBQUE7SUFDN0IsSUFBSSxVQUFrRCxDQUFBO0lBQ3RELE1BQU0sb0JBQW9CLEdBQWlCLEVBQUUsQ0FBQTtJQUM3QyxNQUFNLFlBQVksR0FBc0IsRUFBRSxDQUFBO0lBQzFDLElBQUksV0FBVyxHQUE0QixTQUFTLENBQUE7SUFDcEQsSUFBSSxVQUFVLEdBQW1DLFNBQVMsQ0FBQTtJQUMxRCxJQUFJLFlBQVksR0FBMkIsU0FBUyxDQUFBO0lBQ3BELElBQUksWUFBWSxHQUEyQixTQUFTLENBQUE7SUFDcEQsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUMxQixJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzFCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQTtJQUN4QixJQUFJLFFBQVEsR0FBdUIsU0FBUyxDQUFBO0lBQzVDLElBQUksNEJBQTRCLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDckMsSUFBSSw0QkFBNEIsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNyQyxPQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sRUFB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
@@ -0,0 +1,7 @@
1
+ import { IDecryptedTranscript } from 'src/types';
2
+ /**
3
+ * Verifies server cert chain and removes handshake messages from transcript, returning new one
4
+ * @param receipt
5
+ * @param logger
6
+ */
7
+ export declare function verifyServerCertificates(receipt: IDecryptedTranscript, logger: any): Promise<IDecryptedTranscript>;
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.verifyServerCertificates = verifyServerCertificates;
4
+ const tls_1 = require("@reclaimprotocol/tls");
5
+ const parse_certificate_1 = require("@reclaimprotocol/tls/lib/utils/parse-certificate");
6
+ const utils_1 = require("src/utils");
7
+ const RECORD_LENGTH_BYTES = 3;
8
+ /**
9
+ * Verifies server cert chain and removes handshake messages from transcript, returning new one
10
+ * @param receipt
11
+ * @param logger
12
+ */
13
+ async function verifyServerCertificates(receipt, logger) {
14
+ const handshakeMsgs = (0, utils_1.extractHandshakeFromTranscript)(receipt);
15
+ let handshakeData = (0, tls_1.concatenateUint8Arrays)(handshakeMsgs.messages.map(m => m.message));
16
+ let packetData;
17
+ const handshakeRawMessages = [];
18
+ const certificates = [];
19
+ let cipherSuite = undefined;
20
+ let serverRandom = undefined;
21
+ let clientRandom = undefined;
22
+ let certVerified = false;
23
+ while ((packetData = readPacket()) && !certVerified) {
24
+ const { type, content } = packetData;
25
+ switch (type) {
26
+ case tls_1.SUPPORTED_RECORD_TYPE_MAP.CLIENT_HELLO:
27
+ const clientHello = (0, tls_1.parseClientHello)(handshakeRawMessages[0]);
28
+ clientRandom = clientHello.serverRandom;
29
+ break;
30
+ case tls_1.SUPPORTED_RECORD_TYPE_MAP.SERVER_HELLO:
31
+ const serverHello = await (0, tls_1.parseServerHello)(content);
32
+ cipherSuite = serverHello.cipherSuite;
33
+ serverRandom = serverHello.serverRandom;
34
+ break;
35
+ case tls_1.SUPPORTED_RECORD_TYPE_MAP.CERTIFICATE:
36
+ const parseResult = (0, tls_1.parseCertificates)(content, { version: receipt.tlsVersion });
37
+ certificates.push(...parseResult.certificates);
38
+ break;
39
+ case tls_1.SUPPORTED_RECORD_TYPE_MAP.CERTIFICATE_VERIFY:
40
+ const signature = (0, tls_1.parseServerCertificateVerify)(content);
41
+ if (!(certificates === null || certificates === void 0 ? void 0 : certificates.length)) {
42
+ throw new Error('No provider certificates received');
43
+ }
44
+ const signatureData = await (0, tls_1.getSignatureDataTls13)(handshakeRawMessages.slice(0, -1), cipherSuite);
45
+ await (0, tls_1.verifyCertificateSignature)({
46
+ ...signature,
47
+ publicKey: certificates[0].getPublicKey(),
48
+ signatureData,
49
+ });
50
+ await (0, parse_certificate_1.verifyCertificateChain)(certificates, receipt.hostname);
51
+ logger.info({ host: receipt.hostname }, 'verified provider certificate chain');
52
+ certVerified = true;
53
+ break;
54
+ case tls_1.SUPPORTED_RECORD_TYPE_MAP.SERVER_KEY_SHARE:
55
+ if (!(certificates === null || certificates === void 0 ? void 0 : certificates.length)) {
56
+ throw new Error('No provider certificates received');
57
+ }
58
+ const keyShare = await (0, tls_1.processServerKeyShare)(content);
59
+ const signatureData12 = await (0, tls_1.getSignatureDataTls12)({
60
+ clientRandom: clientRandom,
61
+ serverRandom: serverRandom,
62
+ curveType: keyShare.publicKeyType,
63
+ publicKey: keyShare.publicKey,
64
+ });
65
+ // verify signature
66
+ await (0, tls_1.verifyCertificateSignature)({
67
+ signature: keyShare.signatureBytes,
68
+ algorithm: keyShare.signatureAlgorithm,
69
+ publicKey: certificates[0].getPublicKey(),
70
+ signatureData: signatureData12,
71
+ });
72
+ await (0, parse_certificate_1.verifyCertificateChain)(certificates, receipt.hostname);
73
+ logger.info({ host: receipt.hostname }, 'verified provider certificate chain');
74
+ certVerified = true;
75
+ break;
76
+ }
77
+ }
78
+ if (!certVerified) {
79
+ throw new Error('No provider certificates received');
80
+ }
81
+ function readPacket() {
82
+ if (!handshakeData.length) {
83
+ return;
84
+ }
85
+ const type = handshakeData[0];
86
+ const content = (0, tls_1.readWithLength)(handshakeData.slice(1), RECORD_LENGTH_BYTES);
87
+ if (!content) {
88
+ logger.warn('missing bytes from packet');
89
+ return;
90
+ }
91
+ const totalLength = 1 + RECORD_LENGTH_BYTES + content.length;
92
+ handshakeRawMessages.push(handshakeData.slice(0, totalLength));
93
+ handshakeData = handshakeData.slice(totalLength);
94
+ return { type, content };
95
+ }
96
+ return {
97
+ tlsVersion: receipt.tlsVersion,
98
+ hostname: receipt.hostname,
99
+ transcript: receipt.transcript.slice(handshakeMsgs.lastMsgIndex)
100
+ };
101
+ }
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LXNlcnZlci1jZXJ0aWZpY2F0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3V0aWxzL3ZlcmlmeS1zZXJ2ZXItY2VydGlmaWNhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBbUJBLDREQWdIQztBQW5JRCw4Q0FNNkI7QUFDN0Isd0ZBQXlGO0FBRXpGLHFDQUEwRDtBQUcxRCxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQTtBQUU3Qjs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLHdCQUF3QixDQUFDLE9BQTZCLEVBQUUsTUFBTTtJQUNuRixNQUFNLGFBQWEsR0FBRyxJQUFBLHNDQUE4QixFQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzdELElBQUksYUFBYSxHQUFHLElBQUEsNEJBQXNCLEVBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUN0RixJQUFJLFVBQXlDLENBQUE7SUFDN0MsTUFBTSxvQkFBb0IsR0FBaUIsRUFBRSxDQUFBO0lBQzdDLE1BQU0sWUFBWSxHQUFzQixFQUFFLENBQUE7SUFDMUMsSUFBSSxXQUFXLEdBQTRCLFNBQVMsQ0FBQTtJQUNwRCxJQUFJLFlBQVksR0FBMkIsU0FBUyxDQUFBO0lBQ3BELElBQUksWUFBWSxHQUEyQixTQUFTLENBQUE7SUFFcEQsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFBO0lBQ3hCLE9BQU0sQ0FBQyxVQUFVLEdBQUcsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BELE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsVUFBVSxDQUFBO1FBRXBDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDZixLQUFLLCtCQUF5QixDQUFDLFlBQVk7Z0JBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUEsc0JBQWdCLEVBQUMs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