@reclaimprotocol/attestor-core 5.0.1-beta.9 → 5.0.2-beta.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 (310) hide show
  1. package/browser/resources/attestor-browser.min.mjs +4513 -0
  2. package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +1 -1
  3. package/lib/external-rpc/index.js +10397 -3
  4. package/lib/index.js +8325 -10
  5. package/lib/server/utils/generics.d.ts +1 -1
  6. package/lib/server/utils/proxy-session.d.ts +1 -1
  7. package/lib/types/general.d.ts +0 -1
  8. package/lib/types/providers.d.ts +3 -2
  9. package/lib/types/signatures.d.ts +1 -2
  10. package/lib/utils/generics.d.ts +1 -6
  11. package/lib/utils/index.d.ts +0 -1
  12. package/package.json +9 -11
  13. package/lib/avs/abis/avsDirectoryABI.js +0 -343
  14. package/lib/avs/abis/delegationABI.js +0 -4
  15. package/lib/avs/abis/registryABI.js +0 -728
  16. package/lib/avs/client/create-claim-on-avs.js +0 -168
  17. package/lib/avs/config.js +0 -26
  18. package/lib/avs/contracts/ReclaimServiceManager.js +0 -0
  19. package/lib/avs/contracts/common.js +0 -0
  20. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +0 -1183
  21. package/lib/avs/contracts/factories/index.js +0 -4
  22. package/lib/avs/contracts/index.js +0 -6
  23. package/lib/avs/types/index.js +0 -0
  24. package/lib/avs/utils/contracts.js +0 -53
  25. package/lib/avs/utils/register.js +0 -74
  26. package/lib/avs/utils/tasks.js +0 -48
  27. package/lib/browser/avs/abis/avsDirectoryABI.d.ts +0 -60
  28. package/lib/browser/avs/abis/avsDirectoryABI.js +0 -343
  29. package/lib/browser/avs/abis/delegationABI.d.ts +0 -126
  30. package/lib/browser/avs/abis/delegationABI.js +0 -4
  31. package/lib/browser/avs/abis/registryABI.d.ts +0 -136
  32. package/lib/browser/avs/abis/registryABI.js +0 -728
  33. package/lib/browser/avs/client/create-claim-on-avs.d.ts +0 -12
  34. package/lib/browser/avs/client/create-claim-on-avs.js +0 -168
  35. package/lib/browser/avs/config.d.ts +0 -7
  36. package/lib/browser/avs/config.js +0 -26
  37. package/lib/browser/avs/contracts/ReclaimServiceManager.d.ts +0 -601
  38. package/lib/browser/avs/contracts/ReclaimServiceManager.js +0 -0
  39. package/lib/browser/avs/contracts/common.d.ts +0 -50
  40. package/lib/browser/avs/contracts/common.js +0 -0
  41. package/lib/browser/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +0 -890
  42. package/lib/browser/avs/contracts/factories/ReclaimServiceManager__factory.js +0 -1183
  43. package/lib/browser/avs/contracts/factories/index.d.ts +0 -1
  44. package/lib/browser/avs/contracts/factories/index.js +0 -4
  45. package/lib/browser/avs/contracts/index.d.ts +0 -3
  46. package/lib/browser/avs/contracts/index.js +0 -6
  47. package/lib/browser/avs/types/index.d.ts +0 -55
  48. package/lib/browser/avs/types/index.js +0 -0
  49. package/lib/browser/avs/utils/contracts.d.ts +0 -21
  50. package/lib/browser/avs/utils/contracts.js +0 -53
  51. package/lib/browser/avs/utils/register.d.ts +0 -27
  52. package/lib/browser/avs/utils/register.js +0 -74
  53. package/lib/browser/avs/utils/tasks.d.ts +0 -22
  54. package/lib/browser/avs/utils/tasks.js +0 -48
  55. package/lib/browser/client/create-claim.d.ts +0 -5
  56. package/lib/browser/client/create-claim.js +0 -461
  57. package/lib/browser/client/index.d.ts +0 -3
  58. package/lib/browser/client/index.js +0 -3
  59. package/lib/browser/client/tunnels/make-rpc-tcp-tunnel.d.ts +0 -16
  60. package/lib/browser/client/tunnels/make-rpc-tcp-tunnel.js +0 -53
  61. package/lib/browser/client/tunnels/make-rpc-tls-tunnel.d.ts +0 -26
  62. package/lib/browser/client/tunnels/make-rpc-tls-tunnel.js +0 -127
  63. package/lib/browser/client/utils/attestor-pool.d.ts +0 -8
  64. package/lib/browser/client/utils/attestor-pool.js +0 -24
  65. package/lib/browser/client/utils/client-socket.d.ts +0 -11
  66. package/lib/browser/client/utils/client-socket.js +0 -120
  67. package/lib/browser/client/utils/message-handler.d.ts +0 -4
  68. package/lib/browser/client/utils/message-handler.js +0 -97
  69. package/lib/browser/config/index.d.ts +0 -31
  70. package/lib/browser/config/index.js +0 -62
  71. package/lib/browser/external-rpc/benchmark.d.ts +0 -1
  72. package/lib/browser/external-rpc/benchmark.js +0 -82
  73. package/lib/browser/external-rpc/event-bus.d.ts +0 -7
  74. package/lib/browser/external-rpc/event-bus.js +0 -17
  75. package/lib/browser/external-rpc/global.d.js +0 -0
  76. package/lib/browser/external-rpc/handle-incoming-msg.d.ts +0 -2
  77. package/lib/browser/external-rpc/handle-incoming-msg.js +0 -241
  78. package/lib/browser/external-rpc/index.d.ts +0 -3
  79. package/lib/browser/external-rpc/index.js +0 -3
  80. package/lib/browser/external-rpc/jsc-polyfills/1.d.ts +0 -14
  81. package/lib/browser/external-rpc/jsc-polyfills/1.js +0 -80
  82. package/lib/browser/external-rpc/jsc-polyfills/2.d.ts +0 -1
  83. package/lib/browser/external-rpc/jsc-polyfills/2.js +0 -15
  84. package/lib/browser/external-rpc/jsc-polyfills/event.d.ts +0 -10
  85. package/lib/browser/external-rpc/jsc-polyfills/event.js +0 -19
  86. package/lib/browser/external-rpc/jsc-polyfills/index.d.ts +0 -2
  87. package/lib/browser/external-rpc/jsc-polyfills/index.js +0 -2
  88. package/lib/browser/external-rpc/jsc-polyfills/ws.d.ts +0 -21
  89. package/lib/browser/external-rpc/jsc-polyfills/ws.js +0 -83
  90. package/lib/browser/external-rpc/setup-browser.d.ts +0 -6
  91. package/lib/browser/external-rpc/setup-browser.js +0 -33
  92. package/lib/browser/external-rpc/setup-jsc.d.ts +0 -24
  93. package/lib/browser/external-rpc/setup-jsc.js +0 -22
  94. package/lib/browser/external-rpc/types.d.ts +0 -213
  95. package/lib/browser/external-rpc/types.js +0 -0
  96. package/lib/browser/external-rpc/utils.d.ts +0 -20
  97. package/lib/browser/external-rpc/utils.js +0 -100
  98. package/lib/browser/external-rpc/zk.d.ts +0 -14
  99. package/lib/browser/external-rpc/zk.js +0 -58
  100. package/lib/browser/index.browser.js +0 -13
  101. package/lib/browser/index.d.ts +0 -9
  102. package/lib/browser/index.js +0 -13
  103. package/lib/browser/mechain/abis/governanceABI.d.ts +0 -50
  104. package/lib/browser/mechain/abis/governanceABI.js +0 -461
  105. package/lib/browser/mechain/abis/taskABI.d.ts +0 -157
  106. package/lib/browser/mechain/abis/taskABI.js +0 -512
  107. package/lib/browser/mechain/client/create-claim-on-mechain.d.ts +0 -10
  108. package/lib/browser/mechain/client/create-claim-on-mechain.js +0 -33
  109. package/lib/browser/mechain/client/index.d.ts +0 -1
  110. package/lib/browser/mechain/client/index.js +0 -1
  111. package/lib/browser/mechain/constants/index.d.ts +0 -3
  112. package/lib/browser/mechain/constants/index.js +0 -8
  113. package/lib/browser/mechain/index.d.ts +0 -2
  114. package/lib/browser/mechain/index.js +0 -2
  115. package/lib/browser/mechain/types/index.d.ts +0 -23
  116. package/lib/browser/mechain/types/index.js +0 -0
  117. package/lib/browser/proto/api.d.ts +0 -651
  118. package/lib/browser/proto/api.js +0 -4250
  119. package/lib/browser/proto/tee-bundle.d.ts +0 -156
  120. package/lib/browser/proto/tee-bundle.js +0 -1296
  121. package/lib/browser/providers/http/index.d.ts +0 -18
  122. package/lib/browser/providers/http/index.js +0 -640
  123. package/lib/browser/providers/http/patch-parse5-tree.d.ts +0 -6
  124. package/lib/browser/providers/http/patch-parse5-tree.js +0 -34
  125. package/lib/browser/providers/http/utils.d.ts +0 -77
  126. package/lib/browser/providers/http/utils.js +0 -283
  127. package/lib/browser/providers/index.d.ts +0 -4
  128. package/lib/browser/providers/index.js +0 -7
  129. package/lib/browser/types/bgp.d.ts +0 -11
  130. package/lib/browser/types/bgp.js +0 -0
  131. package/lib/browser/types/claims.d.ts +0 -70
  132. package/lib/browser/types/claims.js +0 -0
  133. package/lib/browser/types/client.d.ts +0 -163
  134. package/lib/browser/types/client.js +0 -0
  135. package/lib/browser/types/general.d.ts +0 -77
  136. package/lib/browser/types/general.js +0 -0
  137. package/lib/browser/types/handlers.d.ts +0 -10
  138. package/lib/browser/types/handlers.js +0 -0
  139. package/lib/browser/types/index.d.ts +0 -10
  140. package/lib/browser/types/index.js +0 -10
  141. package/lib/browser/types/providers.d.ts +0 -161
  142. package/lib/browser/types/providers.gen.d.ts +0 -443
  143. package/lib/browser/types/providers.gen.js +0 -16
  144. package/lib/browser/types/providers.js +0 -0
  145. package/lib/browser/types/rpc.d.ts +0 -35
  146. package/lib/browser/types/rpc.js +0 -0
  147. package/lib/browser/types/signatures.d.ts +0 -28
  148. package/lib/browser/types/signatures.js +0 -0
  149. package/lib/browser/types/tunnel.d.ts +0 -18
  150. package/lib/browser/types/tunnel.js +0 -0
  151. package/lib/browser/types/zk.d.ts +0 -38
  152. package/lib/browser/types/zk.js +0 -0
  153. package/lib/browser/utils/auth.d.ts +0 -8
  154. package/lib/browser/utils/auth.js +0 -71
  155. package/lib/browser/utils/b64-json.d.ts +0 -2
  156. package/lib/browser/utils/b64-json.js +0 -17
  157. package/lib/browser/utils/claims.d.ts +0 -33
  158. package/lib/browser/utils/claims.js +0 -89
  159. package/lib/browser/utils/env.d.ts +0 -3
  160. package/lib/browser/utils/env.js +0 -19
  161. package/lib/browser/utils/error.d.ts +0 -26
  162. package/lib/browser/utils/error.js +0 -54
  163. package/lib/browser/utils/generics.d.ts +0 -119
  164. package/lib/browser/utils/generics.js +0 -272
  165. package/lib/browser/utils/http-parser.d.ts +0 -59
  166. package/lib/browser/utils/http-parser.js +0 -201
  167. package/lib/browser/utils/index.browser.js +0 -13
  168. package/lib/browser/utils/index.d.ts +0 -13
  169. package/lib/browser/utils/index.js +0 -13
  170. package/lib/browser/utils/logger.browser.js +0 -88
  171. package/lib/browser/utils/logger.d.ts +0 -14
  172. package/lib/browser/utils/logger.js +0 -88
  173. package/lib/browser/utils/prepare-packets.d.ts +0 -16
  174. package/lib/browser/utils/prepare-packets.js +0 -69
  175. package/lib/browser/utils/redactions.d.ts +0 -73
  176. package/lib/browser/utils/redactions.js +0 -135
  177. package/lib/browser/utils/retries.d.ts +0 -12
  178. package/lib/browser/utils/retries.js +0 -26
  179. package/lib/browser/utils/signatures/eth.d.ts +0 -2
  180. package/lib/browser/utils/signatures/eth.js +0 -31
  181. package/lib/browser/utils/signatures/index.d.ts +0 -5
  182. package/lib/browser/utils/signatures/index.js +0 -12
  183. package/lib/browser/utils/socket-base.d.ts +0 -23
  184. package/lib/browser/utils/socket-base.js +0 -96
  185. package/lib/browser/utils/tls-imports.d.ts +0 -21
  186. package/lib/browser/utils/tls-imports.js +0 -71
  187. package/lib/browser/utils/tls.d.ts +0 -2
  188. package/lib/browser/utils/tls.js +0 -58
  189. package/lib/browser/utils/ws.d.ts +0 -7
  190. package/lib/browser/utils/ws.js +0 -22
  191. package/lib/browser/utils/zk.d.ts +0 -71
  192. package/lib/browser/utils/zk.js +0 -625
  193. package/lib/client/create-claim.js +0 -461
  194. package/lib/client/index.js +0 -3
  195. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +0 -53
  196. package/lib/client/tunnels/make-rpc-tls-tunnel.js +0 -127
  197. package/lib/client/utils/attestor-pool.js +0 -24
  198. package/lib/client/utils/client-socket.js +0 -120
  199. package/lib/client/utils/message-handler.js +0 -97
  200. package/lib/config/index.js +0 -62
  201. package/lib/external-rpc/benchmark.js +0 -82
  202. package/lib/external-rpc/event-bus.js +0 -17
  203. package/lib/external-rpc/global.d.js +0 -0
  204. package/lib/external-rpc/handle-incoming-msg.js +0 -241
  205. package/lib/external-rpc/jsc-polyfills/1.js +0 -80
  206. package/lib/external-rpc/jsc-polyfills/2.js +0 -15
  207. package/lib/external-rpc/jsc-polyfills/event.js +0 -19
  208. package/lib/external-rpc/jsc-polyfills/index.js +0 -2
  209. package/lib/external-rpc/jsc-polyfills/ws.js +0 -83
  210. package/lib/external-rpc/setup-browser.js +0 -33
  211. package/lib/external-rpc/setup-jsc.js +0 -22
  212. package/lib/external-rpc/types.js +0 -0
  213. package/lib/external-rpc/utils.js +0 -100
  214. package/lib/external-rpc/zk.js +0 -58
  215. package/lib/index.browser.d.ts +0 -9
  216. package/lib/mechain/abis/governanceABI.js +0 -461
  217. package/lib/mechain/abis/taskABI.js +0 -512
  218. package/lib/mechain/client/create-claim-on-mechain.js +0 -33
  219. package/lib/mechain/client/index.js +0 -1
  220. package/lib/mechain/constants/index.js +0 -8
  221. package/lib/mechain/index.js +0 -2
  222. package/lib/mechain/types/index.js +0 -0
  223. package/lib/proto/api.js +0 -4250
  224. package/lib/proto/tee-bundle.js +0 -1296
  225. package/lib/providers/http/index.js +0 -640
  226. package/lib/providers/http/patch-parse5-tree.js +0 -34
  227. package/lib/providers/http/utils.js +0 -283
  228. package/lib/providers/index.js +0 -7
  229. package/lib/scripts/check-avs-registration.js +0 -28
  230. package/lib/scripts/fallbacks/crypto.js +0 -4
  231. package/lib/scripts/fallbacks/empty.js +0 -4
  232. package/lib/scripts/fallbacks/re2.js +0 -7
  233. package/lib/scripts/fallbacks/snarkjs.js +0 -10
  234. package/lib/scripts/fallbacks/stwo.js +0 -159
  235. package/lib/scripts/generate-provider-types.js +0 -101
  236. package/lib/scripts/generate-receipt.js +0 -101
  237. package/lib/scripts/generate-toprf-keys.js +0 -24
  238. package/lib/scripts/jsc-cli-rpc.js +0 -35
  239. package/lib/scripts/register-avs-operator.js +0 -3
  240. package/lib/scripts/start-server.js +0 -11
  241. package/lib/scripts/update-avs-metadata.js +0 -20
  242. package/lib/scripts/utils.js +0 -10
  243. package/lib/scripts/whitelist-operator.js +0 -16
  244. package/lib/server/create-server.js +0 -105
  245. package/lib/server/handlers/claimTeeBundle.js +0 -232
  246. package/lib/server/handlers/claimTunnel.js +0 -80
  247. package/lib/server/handlers/completeClaimOnChain.js +0 -29
  248. package/lib/server/handlers/createClaimOnChain.js +0 -32
  249. package/lib/server/handlers/createTaskOnMechain.js +0 -57
  250. package/lib/server/handlers/createTunnel.js +0 -98
  251. package/lib/server/handlers/disconnectTunnel.js +0 -8
  252. package/lib/server/handlers/fetchCertificateBytes.js +0 -57
  253. package/lib/server/handlers/index.js +0 -25
  254. package/lib/server/handlers/init.js +0 -33
  255. package/lib/server/handlers/toprf.js +0 -19
  256. package/lib/server/index.js +0 -4
  257. package/lib/server/socket.js +0 -112
  258. package/lib/server/tunnels/make-tcp-tunnel.js +0 -202
  259. package/lib/server/utils/apm.js +0 -29
  260. package/lib/server/utils/assert-valid-claim-request.js +0 -354
  261. package/lib/server/utils/config-env.js +0 -4
  262. package/lib/server/utils/dns.js +0 -24
  263. package/lib/server/utils/gcp-attestation.js +0 -237
  264. package/lib/server/utils/generics.js +0 -45
  265. package/lib/server/utils/iso.js +0 -259
  266. package/lib/server/utils/keep-alive.js +0 -38
  267. package/lib/server/utils/nitro-attestation.js +0 -249
  268. package/lib/server/utils/oprf-raw.js +0 -61
  269. package/lib/server/utils/process-handshake.js +0 -233
  270. package/lib/server/utils/proxy-session.js +0 -4
  271. package/lib/server/utils/tee-oprf-mpc-verification.js +0 -86
  272. package/lib/server/utils/tee-oprf-verification.js +0 -151
  273. package/lib/server/utils/tee-transcript-reconstruction.js +0 -140
  274. package/lib/server/utils/tee-verification.js +0 -358
  275. package/lib/server/utils/validation.js +0 -45
  276. package/lib/types/bgp.js +0 -0
  277. package/lib/types/claims.js +0 -0
  278. package/lib/types/client.js +0 -0
  279. package/lib/types/general.js +0 -0
  280. package/lib/types/handlers.js +0 -0
  281. package/lib/types/index.js +0 -10
  282. package/lib/types/providers.gen.js +0 -16
  283. package/lib/types/providers.js +0 -0
  284. package/lib/types/rpc.js +0 -0
  285. package/lib/types/signatures.js +0 -0
  286. package/lib/types/tunnel.js +0 -0
  287. package/lib/types/zk.js +0 -0
  288. package/lib/utils/auth.js +0 -71
  289. package/lib/utils/b64-json.js +0 -17
  290. package/lib/utils/bgp-listener.js +0 -123
  291. package/lib/utils/claims.js +0 -89
  292. package/lib/utils/env.js +0 -19
  293. package/lib/utils/error.js +0 -54
  294. package/lib/utils/generics.js +0 -272
  295. package/lib/utils/http-parser.js +0 -201
  296. package/lib/utils/index.browser.d.ts +0 -13
  297. package/lib/utils/index.js +0 -14
  298. package/lib/utils/logger.browser.d.ts +0 -14
  299. package/lib/utils/logger.js +0 -82
  300. package/lib/utils/prepare-packets.js +0 -69
  301. package/lib/utils/redactions.js +0 -135
  302. package/lib/utils/retries.js +0 -26
  303. package/lib/utils/signatures/eth.js +0 -31
  304. package/lib/utils/signatures/index.js +0 -12
  305. package/lib/utils/socket-base.js +0 -96
  306. package/lib/utils/tls-imports.d.ts +0 -21
  307. package/lib/utils/tls-imports.js +0 -71
  308. package/lib/utils/tls.js +0 -58
  309. package/lib/utils/ws.js +0 -22
  310. package/lib/utils/zk.js +0 -625
@@ -1,233 +0,0 @@
1
- import {
2
- concatenateUint8Arrays,
3
- getSignatureDataTls12,
4
- getSignatureDataTls13,
5
- PACKET_TYPE,
6
- parseCertificates,
7
- parseClientHello,
8
- parseServerCertificateVerify,
9
- parseServerHello,
10
- processServerKeyShare,
11
- SUPPORTED_RECORD_TYPE_MAP,
12
- uint8ArrayToDataView,
13
- verifyCertificateChain,
14
- verifyCertificateSignature
15
- } from "@reclaimprotocol/tls";
16
- import { TranscriptMessageSenderType } from "../../proto/api.js";
17
- import { decryptDirect } from "../../utils/index.js";
18
- const RECORD_LENGTH_BYTES = 3;
19
- async function processHandshake(receipt, logger) {
20
- const certificates = [];
21
- const handshakeRawMessages = [];
22
- let currentPacketIdx = 0;
23
- let cipherSuite = void 0;
24
- let tlsVersion = void 0;
25
- let serverRandom = void 0;
26
- let clientRandom = void 0;
27
- let serverFinishedIdx = -1;
28
- let clientFinishedIdx = -1;
29
- let certVerified = false;
30
- let certVerifyHandled = false;
31
- let hostname = void 0;
32
- let clientChangeCipherSpecMsgIdx = -1;
33
- let serverChangeCipherSpecMsgIdx = -1;
34
- let incompletePkt = void 0;
35
- while (serverFinishedIdx < 0 || clientFinishedIdx < 0) {
36
- const packetIdx = currentPacketIdx++;
37
- if (packetIdx >= receipt.length) {
38
- throw new Error(
39
- "Receipt over but server finish: " + serverFinishedIdx + ", client finish: " + clientFinishedIdx
40
- );
41
- }
42
- const { message, reveal, sender } = receipt[packetIdx];
43
- if (message[0] === PACKET_TYPE["CHANGE_CIPHER_SPEC"]) {
44
- if (sender === TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT) {
45
- clientChangeCipherSpecMsgIdx = packetIdx;
46
- logger.trace("found client change cipher spec message");
47
- } else {
48
- serverChangeCipherSpecMsgIdx = packetIdx;
49
- logger.trace("found server change cipher spec message");
50
- }
51
- continue;
52
- }
53
- let plaintext = getWithoutHeader(message);
54
- if (!plaintext) {
55
- throw new Error("incomplete TLS record encountered");
56
- }
57
- if (
58
- // decrypt if wrapped record or after change cipher spec message,
59
- // after which records are encrypted
60
- message[0] === PACKET_TYPE["WRAPPED_RECORD"] || serverChangeCipherSpecMsgIdx > 0 && sender === TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER || clientChangeCipherSpecMsgIdx > 0 && sender === TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT
61
- ) {
62
- if (!tlsVersion || !cipherSuite) {
63
- throw new Error("Could not find cipherSuite to use & got enc record");
64
- }
65
- if (!reveal?.directReveal?.key) {
66
- throw new Error(
67
- "no direct reveal for handshake packet: " + packetIdx
68
- );
69
- }
70
- const recordHeader = message.slice(0, 5);
71
- ({ plaintext } = await decryptDirect(
72
- reveal?.directReveal,
73
- cipherSuite,
74
- recordHeader,
75
- tlsVersion,
76
- plaintext
77
- ));
78
- if (tlsVersion === "TLS1_3") {
79
- plaintext = plaintext.slice(0, -1);
80
- }
81
- }
82
- if (incompletePkt) {
83
- const incSender = receipt[incompletePkt.packetIdx].sender;
84
- if (incSender !== sender) {
85
- throw new Error(
86
- "Missing follow up to incomplete packet at idx: " + incompletePkt.packetIdx
87
- );
88
- }
89
- plaintext = concatenateUint8Arrays([
90
- incompletePkt.remainingBytes,
91
- plaintext
92
- ]);
93
- incompletePkt = void 0;
94
- }
95
- const handshakeMessages = [];
96
- for (let offset = 0; offset < plaintext.length; ) {
97
- const type = plaintext[offset];
98
- const content = readWithLength(plaintext.slice(offset + 1), RECORD_LENGTH_BYTES);
99
- if (!content) {
100
- incompletePkt = {
101
- remainingBytes: plaintext.slice(offset),
102
- packetIdx
103
- };
104
- break;
105
- }
106
- handshakeMessages.push({
107
- type,
108
- content,
109
- contentWithHeader: plaintext.slice(
110
- offset,
111
- offset + 1 + RECORD_LENGTH_BYTES + content.length
112
- ),
113
- packetIdx
114
- });
115
- offset += 1 + RECORD_LENGTH_BYTES + content.length;
116
- }
117
- for (const msg of handshakeMessages) {
118
- await processHandshakeMessage(msg);
119
- handshakeRawMessages.push(msg.contentWithHeader);
120
- }
121
- }
122
- if (!certVerified) {
123
- throw new Error("No provider certificates received");
124
- }
125
- if (tlsVersion === "TLS1_3" && serverFinishedIdx < 0) {
126
- throw new Error("server finished message not found");
127
- }
128
- if (tlsVersion === "TLS1_3" && !certVerifyHandled) {
129
- throw new Error("TLS1.3 cert verify packet not received");
130
- }
131
- if (tlsVersion === "TLS1_2" && (serverChangeCipherSpecMsgIdx < 0 || clientChangeCipherSpecMsgIdx < 0)) {
132
- throw new Error("change cipher spec message not found");
133
- }
134
- const nextMsgIndex = Math.max(serverFinishedIdx, clientFinishedIdx) + 1;
135
- return {
136
- tlsVersion,
137
- cipherSuite,
138
- hostname,
139
- nextMsgIndex
140
- };
141
- async function processHandshakeMessage({ type, content, contentWithHeader, packetIdx }) {
142
- switch (type) {
143
- case SUPPORTED_RECORD_TYPE_MAP.CLIENT_HELLO:
144
- const clientHello = parseClientHello(contentWithHeader);
145
- clientRandom = clientHello.serverRandom;
146
- const { SERVER_NAME: sni } = clientHello.extensions;
147
- hostname = sni?.serverName;
148
- if (!hostname) {
149
- throw new Error("client hello has no SNI");
150
- }
151
- break;
152
- case SUPPORTED_RECORD_TYPE_MAP.SERVER_HELLO:
153
- const serverHello = await parseServerHello(content);
154
- cipherSuite = serverHello.cipherSuite;
155
- tlsVersion = serverHello.serverTlsVersion;
156
- serverRandom = serverHello.serverRandom;
157
- logger.info(
158
- { serverTLSVersion: tlsVersion, cipherSuite },
159
- "extracted server hello params"
160
- );
161
- break;
162
- case SUPPORTED_RECORD_TYPE_MAP.CERTIFICATE:
163
- const parseResult = parseCertificates(content, { version: tlsVersion });
164
- certificates.push(...parseResult.certificates);
165
- await verifyCertificateChain(certificates, hostname, logger);
166
- logger.info({ hostname }, "verified provider certificate chain");
167
- certVerified = true;
168
- break;
169
- case SUPPORTED_RECORD_TYPE_MAP.CERTIFICATE_VERIFY:
170
- const signature = parseServerCertificateVerify(content);
171
- if (!certificates?.length) {
172
- throw new Error("No provider certificates received");
173
- }
174
- const signatureData = await getSignatureDataTls13(
175
- handshakeRawMessages,
176
- cipherSuite
177
- );
178
- await verifyCertificateSignature({
179
- ...signature,
180
- publicKey: certificates[0].getPublicKey(),
181
- signatureData
182
- });
183
- certVerifyHandled = true;
184
- break;
185
- case SUPPORTED_RECORD_TYPE_MAP.SERVER_KEY_SHARE:
186
- if (!certificates?.length) {
187
- throw new Error("No provider certificates received");
188
- }
189
- const keyShare = await processServerKeyShare(content);
190
- const signatureData12 = await getSignatureDataTls12(
191
- {
192
- clientRandom,
193
- serverRandom,
194
- curveType: keyShare.publicKeyType,
195
- publicKey: keyShare.publicKey
196
- }
197
- );
198
- await verifyCertificateSignature({
199
- signature: keyShare.signatureBytes,
200
- algorithm: keyShare.signatureAlgorithm,
201
- publicKey: certificates[0].getPublicKey(),
202
- signatureData: signatureData12,
203
- publicKeyType: keyShare.publicKeyType
204
- });
205
- await verifyCertificateChain(certificates, hostname, logger);
206
- logger.info({ hostname }, "verified provider certificate chain");
207
- certVerified = true;
208
- break;
209
- case SUPPORTED_RECORD_TYPE_MAP.FINISHED:
210
- const packet = receipt[packetIdx];
211
- if (packet.sender === TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT) {
212
- clientFinishedIdx = packetIdx;
213
- } else {
214
- serverFinishedIdx = packetIdx;
215
- }
216
- break;
217
- }
218
- }
219
- }
220
- function getWithoutHeader(message) {
221
- return readWithLength(message.slice(3), 2);
222
- }
223
- function readWithLength(data, lengthBytes = 2) {
224
- const dataView = uint8ArrayToDataView(data);
225
- const length = lengthBytes === 1 ? dataView.getUint8(0) : dataView.getUint16(lengthBytes === 3 ? 1 : 0);
226
- if (data.length < lengthBytes + length) {
227
- return void 0;
228
- }
229
- return data.slice(lengthBytes, lengthBytes + length);
230
- }
231
- export {
232
- processHandshake
233
- };
@@ -1,4 +0,0 @@
1
- import { isValidProxySessionId } from "../../utils/generics.js";
2
- export {
3
- isValidProxySessionId
4
- };
@@ -1,86 +0,0 @@
1
- import { AttestorError } from "../../utils/error.js";
2
- function verifyOprfMpcOutputs(kPayload, tPayload, logger) {
3
- const kOutputs = kPayload.oprfOutputs || [];
4
- const tOutputs = tPayload.oprfOutputs || [];
5
- if (kOutputs.length === 0 && tOutputs.length === 0) {
6
- logger.debug("No OPRF MPC outputs to verify");
7
- return [];
8
- }
9
- if (kOutputs.length !== tOutputs.length) {
10
- throw new AttestorError(
11
- "ERROR_INVALID_CLAIM",
12
- `OPRF MPC count mismatch: TEE_K has ${kOutputs.length}, TEE_T has ${tOutputs.length}`
13
- );
14
- }
15
- logger.info(`Verifying ${kOutputs.length} OPRF MPC outputs`);
16
- const results = [];
17
- for (const [i, kOut] of kOutputs.entries()) {
18
- const tOut = tOutputs[i];
19
- if (kOut.tlsStart < 0 || tOut.tlsStart < 0) {
20
- throw new AttestorError(
21
- "ERROR_INVALID_CLAIM",
22
- `OPRF MPC invalid position at index ${i}: negative start position`
23
- );
24
- }
25
- if (kOut.tlsLength <= 0 || kOut.tlsLength > 64 || tOut.tlsLength <= 0 || tOut.tlsLength > 64) {
26
- throw new AttestorError(
27
- "ERROR_INVALID_CLAIM",
28
- `OPRF MPC invalid length at index ${i}: must be 1-64 bytes (TEE_K: ${kOut.tlsLength}, TEE_T: ${tOut.tlsLength})`
29
- );
30
- }
31
- if (kOut.hashOutput.length !== 32 || tOut.hashOutput.length !== 32) {
32
- throw new AttestorError(
33
- "ERROR_INVALID_CLAIM",
34
- `OPRF MPC invalid hash size at index ${i}: expected 32 bytes (TEE_K: ${kOut.hashOutput.length}, TEE_T: ${tOut.hashOutput.length})`
35
- );
36
- }
37
- if (kOut.tlsStart !== tOut.tlsStart || kOut.tlsLength !== tOut.tlsLength) {
38
- throw new AttestorError(
39
- "ERROR_INVALID_CLAIM",
40
- `OPRF MPC position mismatch at index ${i}: TEE_K [${kOut.tlsStart}:${kOut.tlsStart + kOut.tlsLength}] vs TEE_T [${tOut.tlsStart}:${tOut.tlsStart + tOut.tlsLength}]`
41
- );
42
- }
43
- if (!buffersEqual(kOut.hashOutput, tOut.hashOutput)) {
44
- throw new AttestorError(
45
- "ERROR_INVALID_CLAIM",
46
- `OPRF MPC hash mismatch at index ${i}: outputs differ between TEE_K and TEE_T`
47
- );
48
- }
49
- const hashOutputHex = Buffer.from(kOut.hashOutput).toString("hex");
50
- const hashOutputBase64 = Buffer.from(kOut.hashOutput).toString("base64");
51
- logger.info(
52
- {
53
- index: i,
54
- position: kOut.tlsStart,
55
- length: kOut.tlsLength,
56
- hashOutputLen: kOut.hashOutput.length,
57
- hashOutputHex: hashOutputHex.substring(0, 32) + "...",
58
- hashOutputBase64Preview: hashOutputBase64.substring(0, 20) + "..."
59
- },
60
- "OPRF MPC output verified"
61
- );
62
- results.push({
63
- position: kOut.tlsStart,
64
- length: kOut.tlsLength,
65
- output: new Uint8Array(kOut.hashOutput),
66
- // Use SHA256(CMAC) as the replacement value
67
- isMPC: true
68
- });
69
- }
70
- logger.info(`Successfully verified ${results.length} OPRF MPC outputs`);
71
- return results;
72
- }
73
- function buffersEqual(a, b) {
74
- if (a.length !== b.length) {
75
- return false;
76
- }
77
- for (const [i, element] of a.entries()) {
78
- if (element !== b[i]) {
79
- return false;
80
- }
81
- }
82
- return true;
83
- }
84
- export {
85
- verifyOprfMpcOutputs
86
- };
@@ -1,151 +0,0 @@
1
- import bs58 from "bs58";
2
- import { AttestorError } from "../../utils/error.js";
3
- import { makeDefaultOPRFOperator } from "../../utils/zk.js";
4
- async function verifyOprfProofs(bundleData, logger) {
5
- if (!bundleData.oprfVerifications || bundleData.oprfVerifications.length === 0) {
6
- logger.debug("No OPRF verifications present in bundle");
7
- return [];
8
- }
9
- const { tOutputPayload } = bundleData;
10
- const consolidatedCiphertext = tOutputPayload.consolidatedResponseCiphertext;
11
- if (!consolidatedCiphertext || consolidatedCiphertext.length === 0) {
12
- throw new AttestorError("ERROR_INVALID_CLAIM", "No consolidated ciphertext for OPRF verification");
13
- }
14
- const results = [];
15
- logger.info(`Verifying ${bundleData.oprfVerifications.length} OPRF proofs`);
16
- for (const [idx, oprfData] of bundleData.oprfVerifications.entries()) {
17
- try {
18
- const result = await verifySingleOprfProof(
19
- oprfData,
20
- consolidatedCiphertext,
21
- idx,
22
- logger
23
- );
24
- results.push(result);
25
- } catch (error) {
26
- logger.error({ error, index: idx }, "OPRF proof verification failed");
27
- throw new AttestorError(
28
- "ERROR_INVALID_CLAIM",
29
- `OPRF verification failed at index ${idx}: ${error.message}`
30
- );
31
- }
32
- }
33
- logger.info(`Successfully verified ${results.length} OPRF proofs`);
34
- return results;
35
- }
36
- async function verifySingleOprfProof(oprfData, consolidatedCiphertext, index, logger) {
37
- const publicSignalsJson = JSON.parse(new TextDecoder().decode(oprfData.publicSignalsJson));
38
- const { proof, publicSignals, cipher } = publicSignalsJson;
39
- if (!proof || !publicSignals) {
40
- throw new Error("Missing proof or public signals in OPRF data");
41
- }
42
- const ciphertextChunk = consolidatedCiphertext.slice(
43
- oprfData.streamPos,
44
- oprfData.streamPos + oprfData.streamLength
45
- );
46
- const completePublicSignals = {
47
- out: publicSignals.out || Uint8Array.from([]),
48
- // Replace null input with extracted ciphertext
49
- in: ciphertextChunk,
50
- // Convert base64 nonces and counters
51
- noncesAndCounters: publicSignals.blocks?.map((block) => ({
52
- nonce: Buffer.from(block.nonce || "", "base64"),
53
- counter: block.counter || 0,
54
- boundary: block.boundary || ""
55
- })) || [],
56
- // Process TOPRF data
57
- toprf: publicSignals.toprf ? {
58
- ...publicSignals.toprf,
59
- // Convert domain separator from base64
60
- domainSeparator: publicSignals.toprf.domainSeparator ? Buffer.from(publicSignals.toprf.domainSeparator, "base64").toString("utf8") : "reclaim",
61
- // Convert output from base64
62
- output: publicSignals.toprf.output ? Buffer.from(publicSignals.toprf.output, "base64") : new Uint8Array(),
63
- // Convert response fields from base64
64
- responses: publicSignals.toprf.responses?.map((resp) => ({
65
- publicKeyShare: Buffer.from(resp.publicKeyShare || "", "base64"),
66
- evaluated: Buffer.from(resp.evaluated || "", "base64"),
67
- c: Buffer.from(resp.c || "", "base64"),
68
- r: Buffer.from(resp.r || "", "base64")
69
- })) || [],
70
- // Locations are already in correct format
71
- locations: publicSignals.toprf.locations || []
72
- } : void 0
73
- };
74
- const algorithm = cipher.replace("-toprf", "");
75
- const zkEngine = "gnark";
76
- const oprfOperator = makeDefaultOPRFOperator(algorithm, zkEngine, logger);
77
- const proofBytes = Buffer.from(proof, "base64");
78
- const isValid = await oprfOperator.groth16Verify(
79
- completePublicSignals,
80
- proofBytes,
81
- logger
82
- );
83
- if (!isValid) {
84
- throw new Error("OPRF proof verification failed");
85
- }
86
- logger.debug(`OPRF ${index}: Proof verified successfully`);
87
- const oprfOutput = completePublicSignals.toprf?.output;
88
- if (!oprfOutput || oprfOutput.length === 0) {
89
- throw new Error("No OPRF output found in verified proof");
90
- }
91
- const oprfLocation = completePublicSignals.toprf?.locations?.[0];
92
- if (!oprfLocation) {
93
- throw new Error("No OPRF location found in public signals");
94
- }
95
- logger.info(`OPRF #${index}: streamPos=${oprfData.streamPos}, locationPos=${oprfLocation.pos}, finalPos=${oprfData.streamPos + oprfLocation.pos}, len=${oprfLocation.len}`);
96
- return {
97
- // The position in the plaintext where to replace (stream position + OPRF location within chunk)
98
- position: oprfData.streamPos + oprfLocation.pos,
99
- length: oprfLocation.len,
100
- output: oprfOutput
101
- };
102
- }
103
- function replaceOprfRanges(plaintext, oprfResults, logger) {
104
- if (oprfResults.length === 0) {
105
- return plaintext;
106
- }
107
- const replacements = oprfResults.map((result) => {
108
- let outputBytes;
109
- let encodedOutput;
110
- if (result.isMPC) {
111
- encodedOutput = bs58.encode(result.output);
112
- outputBytes = new TextEncoder().encode(encodedOutput);
113
- } else {
114
- encodedOutput = Buffer.from(result.output).toString("base64");
115
- const truncated = encodedOutput.substring(0, result.length);
116
- outputBytes = new TextEncoder().encode(truncated);
117
- }
118
- return { result, outputBytes, encodedOutput };
119
- });
120
- replacements.sort((a, b) => a.result.position - b.result.position);
121
- let newSize = plaintext.length;
122
- for (const { result, outputBytes } of replacements) {
123
- const sizeDiff = outputBytes.length - result.length;
124
- newSize += sizeDiff;
125
- }
126
- logger.info(`Transcript size: ${plaintext.length} -> ${newSize} (${newSize - plaintext.length >= 0 ? "+" : ""}${newSize - plaintext.length} bytes)`);
127
- const newPlaintext = new Uint8Array(newSize);
128
- let srcPos = 0;
129
- let dstPos = 0;
130
- for (const [idx, { result, outputBytes, encodedOutput }] of replacements.entries()) {
131
- const segmentLength = result.position - srcPos;
132
- if (segmentLength > 0) {
133
- newPlaintext.set(plaintext.slice(srcPos, result.position), dstPos);
134
- dstPos += segmentLength;
135
- }
136
- const currentContent = plaintext.slice(result.position, result.position + result.length);
137
- logger.info(`OPRF #${idx} at pos ${result.position}: "${Buffer.from(currentContent).toString("utf8")}" (${result.length}b) -> "${encodedOutput}" (${outputBytes.length}b)${result.isMPC ? " [MPC/base58]" : ""}`);
138
- newPlaintext.set(outputBytes, dstPos);
139
- dstPos += outputBytes.length;
140
- srcPos = result.position + result.length;
141
- }
142
- if (srcPos < plaintext.length) {
143
- newPlaintext.set(plaintext.slice(srcPos), dstPos);
144
- }
145
- logger.info(`Replaced ${oprfResults.length} OPRF ranges in plaintext`);
146
- return newPlaintext;
147
- }
148
- export {
149
- replaceOprfRanges,
150
- verifyOprfProofs
151
- };
@@ -1,140 +0,0 @@
1
- import { AttestorError } from "../../utils/error.js";
2
- import { REDACTION_CHAR_CODE } from "../../utils/index.js";
3
- async function reconstructTlsTranscript(bundleData, logger, oprfResults) {
4
- try {
5
- const revealedRequest = reconstructRequest(bundleData, logger);
6
- const reconstructedResponse = await reconstructConsolidatedResponse(bundleData, logger, oprfResults);
7
- const certificateInfo = bundleData.kOutputPayload.certificateInfo;
8
- logger.info("TLS transcript reconstruction completed successfully", {
9
- requestSize: revealedRequest.length,
10
- responseSize: reconstructedResponse.length,
11
- hasCertificateInfo: !!certificateInfo
12
- });
13
- return {
14
- revealedRequest,
15
- reconstructedResponse,
16
- certificateInfo
17
- };
18
- } catch (error) {
19
- logger.error({ error }, "TLS transcript reconstruction failed");
20
- throw new AttestorError("ERROR_INVALID_CLAIM", `Transcript reconstruction failed: ${error.message}`);
21
- }
22
- }
23
- function reconstructRequest(bundleData, logger) {
24
- const { kOutputPayload } = bundleData;
25
- if (!kOutputPayload.requestRedactionRanges || kOutputPayload.requestRedactionRanges.length === 0) {
26
- logger.warn("No request redaction ranges - using redacted request as-is");
27
- return kOutputPayload.redactedRequest;
28
- }
29
- const revealedRequest = new Uint8Array(kOutputPayload.redactedRequest);
30
- const prettyRequest = new Uint8Array(revealedRequest);
31
- for (const range of kOutputPayload.requestRedactionRanges) {
32
- if (!range.type.includes("proof")) {
33
- const start = range.start;
34
- const length = range.length;
35
- for (let i = 0; i < length && start + i < prettyRequest.length; i++) {
36
- prettyRequest[start + i] = REDACTION_CHAR_CODE;
37
- }
38
- }
39
- }
40
- return prettyRequest;
41
- }
42
- async function reconstructConsolidatedResponse(bundleData, logger, oprfResults) {
43
- const { kOutputPayload, tOutputPayload } = bundleData;
44
- const consolidatedKeystream = kOutputPayload.consolidatedResponseKeystream;
45
- const consolidatedCiphertext = tOutputPayload.consolidatedResponseCiphertext;
46
- if (!consolidatedKeystream || consolidatedKeystream.length === 0) {
47
- throw new AttestorError("ERROR_INVALID_CLAIM", "No consolidated response keystream available");
48
- }
49
- if (!consolidatedCiphertext || consolidatedCiphertext.length === 0) {
50
- throw new AttestorError("ERROR_INVALID_CLAIM", "No consolidated response ciphertext available");
51
- }
52
- if (consolidatedKeystream.length !== consolidatedCiphertext.length) {
53
- logger.warn("Keystream and ciphertext length mismatch", {
54
- keystreamLength: consolidatedKeystream.length,
55
- ciphertextLength: consolidatedCiphertext.length
56
- });
57
- }
58
- const minLength = Math.min(consolidatedKeystream.length, consolidatedCiphertext.length);
59
- const reconstructedResponse = new Uint8Array(minLength);
60
- for (let i = 0; i < minLength; i++) {
61
- reconstructedResponse[i] = consolidatedKeystream[i] ^ consolidatedCiphertext[i];
62
- }
63
- logger.info(`Reconstructed response: ${reconstructedResponse.length} bytes, ${kOutputPayload.responseRedactionRanges?.length || 0} redaction ranges`);
64
- let processedResponse = applyResponseRedactionRanges(reconstructedResponse, kOutputPayload.responseRedactionRanges, logger);
65
- if (oprfResults && oprfResults.length > 0) {
66
- logger.info(`Applying ${oprfResults.length} OPRF replacements before trimming`);
67
- const { replaceOprfRanges } = await import("../../server/utils/tee-oprf-verification.js");
68
- processedResponse = replaceOprfRanges(processedResponse, oprfResults, logger);
69
- }
70
- let leadingAsterisks = 0;
71
- for (const element of processedResponse) {
72
- if (element === REDACTION_CHAR_CODE) {
73
- leadingAsterisks++;
74
- } else {
75
- break;
76
- }
77
- }
78
- let trailingAsterisks = 0;
79
- for (let i = processedResponse.length - 1; i >= leadingAsterisks; i--) {
80
- if (processedResponse[i] === REDACTION_CHAR_CODE) {
81
- trailingAsterisks++;
82
- } else {
83
- break;
84
- }
85
- }
86
- const finalLength = processedResponse.length - leadingAsterisks - trailingAsterisks;
87
- logger.info(`After processing: ${processedResponse.length} bytes, ${leadingAsterisks} leading and ${trailingAsterisks} trailing asterisks trimmed, final: ${finalLength} bytes`);
88
- return processedResponse.slice(leadingAsterisks, processedResponse.length - trailingAsterisks);
89
- }
90
- function applyResponseRedactionRanges(response, redactionRanges, logger) {
91
- if (!redactionRanges || redactionRanges.length === 0) {
92
- return response;
93
- }
94
- const result = new Uint8Array(response);
95
- const consolidatedRanges = consolidateRedactionRanges(redactionRanges);
96
- if (logger) {
97
- logger.info(`Applying ${consolidatedRanges.length} redaction ranges to ${response.length} byte response`);
98
- }
99
- for (const [idx, range] of consolidatedRanges.entries()) {
100
- const rangeStart = range.start;
101
- const rangeEnd = range.start + range.length;
102
- if (rangeStart < 0 || rangeEnd > result.length) {
103
- if (logger) {
104
- logger.warn(`Redaction range #${idx} out of bounds: [${rangeStart}-${rangeEnd}] vs ${result.length}`);
105
- }
106
- continue;
107
- }
108
- if (logger && idx < 3) {
109
- logger.info(`Redaction range #${idx}: [${rangeStart}-${rangeEnd}]`);
110
- }
111
- for (let i = rangeStart; i < rangeEnd; i++) {
112
- result[i] = REDACTION_CHAR_CODE;
113
- }
114
- }
115
- return result;
116
- }
117
- function consolidateRedactionRanges(ranges) {
118
- if (ranges.length === 0) {
119
- return [];
120
- }
121
- const sortedRanges = [...ranges].sort((a, b) => a.start - b.start);
122
- const consolidated = [];
123
- let current = { ...sortedRanges[0] };
124
- for (let i = 1; i < sortedRanges.length; i++) {
125
- const next = sortedRanges[i];
126
- if (next.start <= current.start + current.length) {
127
- const endCurrent = current.start + current.length;
128
- const endNext = next.start + next.length;
129
- current.length = Math.max(endCurrent, endNext) - current.start;
130
- } else {
131
- consolidated.push(current);
132
- current = { ...next };
133
- }
134
- }
135
- consolidated.push(current);
136
- return consolidated;
137
- }
138
- export {
139
- reconstructTlsTranscript
140
- };