@joclaim/attestor-core 0.2.0 → 0.2.3

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 (420) hide show
  1. package/README.md +21 -15
  2. package/lib/avs/abis/avsDirectoryABI.d.ts +60 -0
  3. package/lib/avs/abis/avsDirectoryABI.js +340 -0
  4. package/lib/avs/abis/delegationABI.d.ts +126 -0
  5. package/lib/avs/abis/delegationABI.js +1 -0
  6. package/lib/avs/abis/registryABI.d.ts +136 -0
  7. package/lib/avs/abis/registryABI.js +725 -0
  8. package/lib/avs/client/create-claim-on-avs.d.ts +12 -0
  9. package/lib/avs/client/create-claim-on-avs.js +138 -0
  10. package/lib/avs/config.d.ts +7 -0
  11. package/lib/avs/config.js +20 -0
  12. package/lib/avs/contracts/ReclaimServiceManager.d.ts +697 -0
  13. package/lib/avs/contracts/ReclaimServiceManager.js +1 -0
  14. package/lib/avs/contracts/common.d.ts +21 -0
  15. package/lib/avs/contracts/common.js +1 -0
  16. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +888 -0
  17. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1169 -0
  18. package/lib/avs/contracts/factories/index.d.ts +1 -0
  19. package/{src/avs/contracts/factories/index.ts → lib/avs/contracts/factories/index.js} +1 -1
  20. package/{src/avs/contracts/index.ts → lib/avs/contracts/index.d.ts} +0 -3
  21. package/lib/avs/contracts/index.js +2 -0
  22. package/lib/avs/types/index.d.ts +55 -0
  23. package/lib/avs/types/index.js +1 -0
  24. package/lib/avs/utils/contracts.d.ts +21 -0
  25. package/lib/avs/utils/contracts.js +33 -0
  26. package/lib/avs/utils/register.d.ts +27 -0
  27. package/lib/avs/utils/register.js +78 -0
  28. package/lib/avs/utils/tasks.d.ts +22 -0
  29. package/lib/avs/utils/tasks.js +40 -0
  30. package/lib/client/create-claim.d.ts +5 -0
  31. package/lib/client/create-claim.js +437 -0
  32. package/lib/client/index.d.ts +3 -0
  33. package/lib/client/index.js +3 -0
  34. package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +16 -0
  35. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +51 -0
  36. package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +26 -0
  37. package/lib/client/tunnels/make-rpc-tls-tunnel.js +131 -0
  38. package/lib/client/utils/attestor-pool.d.ts +8 -0
  39. package/lib/client/utils/attestor-pool.js +25 -0
  40. package/lib/client/utils/client-socket.d.ts +11 -0
  41. package/lib/client/utils/client-socket.js +98 -0
  42. package/lib/client/utils/message-handler.d.ts +4 -0
  43. package/lib/client/utils/message-handler.js +87 -0
  44. package/lib/config/index.d.ts +30 -0
  45. package/lib/config/index.js +43 -0
  46. package/lib/external-rpc/benchmark.d.ts +1 -0
  47. package/lib/external-rpc/benchmark.js +69 -0
  48. package/lib/external-rpc/event-bus.d.ts +7 -0
  49. package/lib/external-rpc/event-bus.js +14 -0
  50. package/lib/external-rpc/handle-incoming-msg.d.ts +2 -0
  51. package/lib/external-rpc/handle-incoming-msg.js +233 -0
  52. package/lib/external-rpc/index.d.ts +3 -0
  53. package/lib/external-rpc/index.js +3 -0
  54. package/lib/external-rpc/jsc-polyfills/1.d.ts +14 -0
  55. package/lib/external-rpc/jsc-polyfills/1.js +82 -0
  56. package/lib/external-rpc/jsc-polyfills/2.d.ts +1 -0
  57. package/lib/external-rpc/jsc-polyfills/2.js +20 -0
  58. package/lib/external-rpc/jsc-polyfills/event.d.ts +10 -0
  59. package/lib/external-rpc/jsc-polyfills/event.js +14 -0
  60. package/lib/external-rpc/jsc-polyfills/index.d.ts +2 -0
  61. package/lib/external-rpc/jsc-polyfills/index.js +2 -0
  62. package/lib/external-rpc/jsc-polyfills/ws.d.ts +21 -0
  63. package/lib/external-rpc/jsc-polyfills/ws.js +81 -0
  64. package/lib/external-rpc/setup-browser.d.ts +6 -0
  65. package/lib/external-rpc/setup-browser.js +33 -0
  66. package/lib/external-rpc/setup-jsc.d.ts +24 -0
  67. package/lib/external-rpc/setup-jsc.js +22 -0
  68. package/lib/external-rpc/types.d.ts +213 -0
  69. package/lib/external-rpc/types.js +1 -0
  70. package/lib/external-rpc/utils.d.ts +20 -0
  71. package/lib/external-rpc/utils.js +100 -0
  72. package/lib/external-rpc/zk.d.ts +14 -0
  73. package/lib/external-rpc/zk.js +63 -0
  74. package/lib/index.d.ts +9 -0
  75. package/lib/index.js +9 -0
  76. package/lib/mechain/abis/governanceABI.d.ts +50 -0
  77. package/lib/mechain/abis/governanceABI.js +458 -0
  78. package/lib/mechain/abis/taskABI.d.ts +157 -0
  79. package/lib/mechain/abis/taskABI.js +509 -0
  80. package/lib/mechain/client/create-claim-on-mechain.d.ts +10 -0
  81. package/lib/mechain/client/create-claim-on-mechain.js +28 -0
  82. package/lib/mechain/client/index.d.ts +1 -0
  83. package/lib/mechain/client/index.js +1 -0
  84. package/lib/mechain/constants/index.d.ts +3 -0
  85. package/{src/mechain/constants/index.ts → lib/mechain/constants/index.js} +3 -5
  86. package/lib/mechain/index.d.ts +2 -0
  87. package/lib/mechain/index.js +2 -0
  88. package/lib/mechain/types/index.d.ts +23 -0
  89. package/lib/mechain/types/index.js +1 -0
  90. package/lib/proto/api.d.ts +633 -0
  91. package/lib/proto/api.js +4258 -0
  92. package/lib/proto/tee-bundle.d.ts +135 -0
  93. package/lib/proto/tee-bundle.js +1161 -0
  94. package/lib/providers/http/index.d.ts +18 -0
  95. package/lib/providers/http/index.js +658 -0
  96. package/lib/providers/http/patch-parse5-tree.d.ts +6 -0
  97. package/lib/providers/http/patch-parse5-tree.js +33 -0
  98. package/lib/providers/http/utils.d.ts +77 -0
  99. package/lib/providers/http/utils.js +324 -0
  100. package/lib/providers/index.d.ts +4 -0
  101. package/lib/providers/index.js +4 -0
  102. package/lib/scripts/build-browser.d.ts +1 -0
  103. package/lib/scripts/build-browser.js +37 -0
  104. package/lib/scripts/build-jsc.d.ts +1 -0
  105. package/lib/scripts/build-jsc.js +49 -0
  106. package/lib/scripts/check-avs-registration.d.ts +1 -0
  107. package/lib/scripts/check-avs-registration.js +26 -0
  108. package/lib/scripts/fallbacks/crypto.d.ts +1 -0
  109. package/lib/scripts/fallbacks/crypto.js +1 -0
  110. package/lib/scripts/fallbacks/empty.d.ts +3 -0
  111. package/lib/scripts/fallbacks/empty.js +1 -0
  112. package/lib/scripts/fallbacks/re2.d.ts +1 -0
  113. package/lib/scripts/fallbacks/re2.js +4 -0
  114. package/lib/scripts/fallbacks/snarkjs.d.ts +1 -0
  115. package/lib/scripts/fallbacks/snarkjs.js +1 -0
  116. package/lib/scripts/generate-provider-types.d.ts +5 -0
  117. package/lib/scripts/generate-provider-types.js +78 -0
  118. package/lib/scripts/generate-receipt.d.ts +9 -0
  119. package/lib/scripts/generate-receipt.js +90 -0
  120. package/lib/scripts/generate-toprf-keys.d.ts +1 -0
  121. package/lib/scripts/generate-toprf-keys.js +20 -0
  122. package/lib/scripts/jsc-cli-rpc.d.ts +1 -0
  123. package/lib/scripts/jsc-cli-rpc.js +37 -0
  124. package/lib/scripts/register-avs-operator.d.ts +1 -0
  125. package/lib/scripts/register-avs-operator.js +4 -0
  126. package/lib/scripts/start-server.d.ts +1 -0
  127. package/lib/scripts/start-server.js +13 -0
  128. package/lib/scripts/update-avs-metadata.d.ts +1 -0
  129. package/lib/scripts/update-avs-metadata.js +19 -0
  130. package/lib/scripts/utils.d.ts +1 -0
  131. package/lib/scripts/utils.js +7 -0
  132. package/lib/scripts/whitelist-operator.d.ts +1 -0
  133. package/lib/scripts/whitelist-operator.js +15 -0
  134. package/lib/server/create-server.d.ts +7 -0
  135. package/lib/server/create-server.js +122 -0
  136. package/lib/server/handlers/claimTeeBundle.d.ts +6 -0
  137. package/lib/server/handlers/claimTeeBundle.js +206 -0
  138. package/lib/server/handlers/claimTunnel.d.ts +2 -0
  139. package/lib/server/handlers/claimTunnel.js +73 -0
  140. package/lib/server/handlers/completeClaimOnChain.d.ts +2 -0
  141. package/lib/server/handlers/completeClaimOnChain.js +22 -0
  142. package/lib/server/handlers/createClaimOnChain.d.ts +2 -0
  143. package/lib/server/handlers/createClaimOnChain.js +26 -0
  144. package/lib/server/handlers/createTaskOnMechain.d.ts +2 -0
  145. package/lib/server/handlers/createTaskOnMechain.js +47 -0
  146. package/lib/server/handlers/createTunnel.d.ts +2 -0
  147. package/lib/server/handlers/createTunnel.js +93 -0
  148. package/lib/server/handlers/disconnectTunnel.d.ts +2 -0
  149. package/lib/server/handlers/disconnectTunnel.js +5 -0
  150. package/lib/server/handlers/fetchCertificateBytes.d.ts +2 -0
  151. package/lib/server/handlers/fetchCertificateBytes.js +41 -0
  152. package/lib/server/handlers/index.d.ts +4 -0
  153. package/lib/server/handlers/index.js +22 -0
  154. package/lib/server/handlers/init.d.ts +2 -0
  155. package/lib/server/handlers/init.js +30 -0
  156. package/lib/server/handlers/toprf.d.ts +2 -0
  157. package/lib/server/handlers/toprf.js +16 -0
  158. package/lib/server/index.d.ts +4 -0
  159. package/lib/server/index.js +4 -0
  160. package/lib/server/provider-api.d.ts +9 -0
  161. package/lib/server/provider-api.js +98 -0
  162. package/lib/server/provider-store.d.ts +53 -0
  163. package/lib/server/provider-store.js +80 -0
  164. package/lib/server/session-api.d.ts +9 -0
  165. package/lib/server/session-api.js +95 -0
  166. package/lib/server/session-store.d.ts +14 -0
  167. package/lib/server/session-store.js +36 -0
  168. package/lib/server/socket.d.ts +13 -0
  169. package/lib/server/socket.js +109 -0
  170. package/lib/server/tunnels/make-tcp-tunnel.d.ts +22 -0
  171. package/lib/server/tunnels/make-tcp-tunnel.js +177 -0
  172. package/lib/server/utils/apm.d.ts +11 -0
  173. package/lib/server/utils/apm.js +36 -0
  174. package/lib/server/utils/assert-valid-claim-request.d.ts +31 -0
  175. package/lib/server/utils/assert-valid-claim-request.js +229 -0
  176. package/lib/server/utils/config-env.d.ts +1 -0
  177. package/lib/server/utils/config-env.js +4 -0
  178. package/lib/server/utils/dns.d.ts +1 -0
  179. package/lib/server/utils/dns.js +18 -0
  180. package/lib/server/utils/gcp-attestation.d.ts +17 -0
  181. package/lib/server/utils/gcp-attestation.js +289 -0
  182. package/lib/server/utils/generics.d.ts +22 -0
  183. package/lib/server/utils/generics.js +51 -0
  184. package/lib/server/utils/iso.d.ts +1 -0
  185. package/lib/server/utils/iso.js +256 -0
  186. package/lib/server/utils/keep-alive.d.ts +7 -0
  187. package/lib/server/utils/keep-alive.js +38 -0
  188. package/lib/server/utils/nitro-attestation.d.ts +33 -0
  189. package/lib/server/utils/nitro-attestation.js +325 -0
  190. package/lib/server/utils/process-handshake.d.ts +13 -0
  191. package/lib/server/utils/process-handshake.js +214 -0
  192. package/lib/server/utils/proxy-session.d.ts +1 -0
  193. package/lib/server/utils/proxy-session.js +6 -0
  194. package/lib/server/utils/tee-oprf-verification.d.ts +22 -0
  195. package/lib/server/utils/tee-oprf-verification.js +160 -0
  196. package/lib/server/utils/tee-transcript-reconstruction.d.ts +24 -0
  197. package/lib/server/utils/tee-transcript-reconstruction.js +187 -0
  198. package/lib/server/utils/tee-verification.d.ts +27 -0
  199. package/lib/server/utils/tee-verification.js +365 -0
  200. package/lib/server/utils/validation.d.ts +2 -0
  201. package/lib/server/utils/validation.js +38 -0
  202. package/lib/types/bgp.d.ts +11 -0
  203. package/lib/types/bgp.js +1 -0
  204. package/lib/types/claims.d.ts +73 -0
  205. package/lib/types/claims.js +1 -0
  206. package/lib/types/client.d.ts +163 -0
  207. package/lib/types/client.js +1 -0
  208. package/lib/types/general.d.ts +54 -0
  209. package/lib/types/general.js +1 -0
  210. package/lib/types/handlers.d.ts +10 -0
  211. package/lib/types/handlers.js +1 -0
  212. package/lib/types/index.d.ts +10 -0
  213. package/lib/types/index.js +10 -0
  214. package/lib/types/providers.d.ts +161 -0
  215. package/lib/types/providers.gen.d.ts +443 -0
  216. package/lib/types/providers.gen.js +10 -0
  217. package/lib/types/providers.js +1 -0
  218. package/lib/types/rpc.d.ts +35 -0
  219. package/lib/types/rpc.js +1 -0
  220. package/lib/types/signatures.d.ts +28 -0
  221. package/lib/types/signatures.js +1 -0
  222. package/lib/types/tunnel.d.ts +18 -0
  223. package/lib/types/tunnel.js +1 -0
  224. package/lib/types/zk.d.ts +28 -0
  225. package/lib/types/zk.js +1 -0
  226. package/lib/utils/auth.d.ts +8 -0
  227. package/lib/utils/auth.js +59 -0
  228. package/lib/utils/b64-json.d.ts +2 -0
  229. package/lib/utils/b64-json.js +17 -0
  230. package/lib/utils/bgp-listener.d.ts +7 -0
  231. package/lib/utils/bgp-listener.js +119 -0
  232. package/lib/utils/claims.d.ts +33 -0
  233. package/lib/utils/claims.js +101 -0
  234. package/lib/utils/env.d.ts +3 -0
  235. package/lib/utils/env.js +15 -0
  236. package/lib/utils/error.d.ts +26 -0
  237. package/lib/utils/error.js +50 -0
  238. package/lib/utils/generics.d.ts +114 -0
  239. package/lib/utils/generics.js +317 -0
  240. package/lib/utils/http-parser.d.ts +59 -0
  241. package/lib/utils/http-parser.js +246 -0
  242. package/lib/utils/index.d.ts +13 -0
  243. package/lib/utils/index.js +13 -0
  244. package/lib/utils/logger.d.ts +13 -0
  245. package/lib/utils/logger.js +91 -0
  246. package/lib/utils/prepare-packets.d.ts +16 -0
  247. package/lib/utils/prepare-packets.js +62 -0
  248. package/lib/utils/redactions.d.ts +62 -0
  249. package/lib/utils/redactions.js +148 -0
  250. package/lib/utils/retries.d.ts +12 -0
  251. package/lib/utils/retries.js +24 -0
  252. package/lib/utils/signatures/eth.d.ts +2 -0
  253. package/lib/utils/signatures/eth.js +29 -0
  254. package/lib/utils/signatures/index.d.ts +5 -0
  255. package/lib/utils/signatures/index.js +7 -0
  256. package/lib/utils/socket-base.d.ts +23 -0
  257. package/lib/utils/socket-base.js +90 -0
  258. package/lib/utils/tls.d.ts +2 -0
  259. package/{src/utils/tls.ts → lib/utils/tls.js} +28 -35
  260. package/lib/utils/ws.d.ts +7 -0
  261. package/lib/utils/ws.js +22 -0
  262. package/lib/utils/zk.d.ts +70 -0
  263. package/lib/utils/zk.js +572 -0
  264. package/package.json +19 -12
  265. package/src/avs/abis/avsDirectoryABI.ts +0 -340
  266. package/src/avs/abis/delegationABI.ts +0 -1
  267. package/src/avs/abis/registryABI.ts +0 -725
  268. package/src/avs/client/create-claim-on-avs.ts +0 -206
  269. package/src/avs/config.ts +0 -25
  270. package/src/avs/contracts/ReclaimServiceManager.ts +0 -1457
  271. package/src/avs/contracts/common.ts +0 -44
  272. package/src/avs/contracts/factories/ReclaimServiceManager__factory.ts +0 -1213
  273. package/src/avs/tests/test.operator.ts +0 -413
  274. package/src/avs/tests/utils.ts +0 -51
  275. package/src/avs/types/index.ts +0 -60
  276. package/src/avs/utils/contracts.ts +0 -66
  277. package/src/avs/utils/register.ts +0 -125
  278. package/src/avs/utils/tasks.ts +0 -76
  279. package/src/client/create-claim.ts +0 -626
  280. package/src/client/index.ts +0 -3
  281. package/src/client/tunnels/make-rpc-tcp-tunnel.ts +0 -78
  282. package/src/client/tunnels/make-rpc-tls-tunnel.ts +0 -172
  283. package/src/client/utils/attestor-pool.ts +0 -35
  284. package/src/client/utils/client-socket.ts +0 -160
  285. package/src/client/utils/message-handler.ts +0 -116
  286. package/src/config/index.ts +0 -65
  287. package/src/external-rpc/benchmark.ts +0 -102
  288. package/src/external-rpc/event-bus.ts +0 -19
  289. package/src/external-rpc/global.d.ts +0 -20
  290. package/src/external-rpc/handle-incoming-msg.ts +0 -308
  291. package/src/external-rpc/index.ts +0 -3
  292. package/src/external-rpc/jsc-polyfills/1.ts +0 -117
  293. package/src/external-rpc/jsc-polyfills/2.ts +0 -24
  294. package/src/external-rpc/jsc-polyfills/event.ts +0 -16
  295. package/src/external-rpc/jsc-polyfills/index.ts +0 -2
  296. package/src/external-rpc/jsc-polyfills/ws.ts +0 -105
  297. package/src/external-rpc/setup-browser.ts +0 -42
  298. package/src/external-rpc/setup-jsc.ts +0 -48
  299. package/src/external-rpc/types.ts +0 -289
  300. package/src/external-rpc/utils.ts +0 -126
  301. package/src/external-rpc/zk.ts +0 -79
  302. package/src/index.ts +0 -9
  303. package/src/mechain/abis/governanceABI.ts +0 -458
  304. package/src/mechain/abis/taskABI.ts +0 -509
  305. package/src/mechain/client/create-claim-on-mechain.ts +0 -52
  306. package/src/mechain/client/index.ts +0 -1
  307. package/src/mechain/index.ts +0 -2
  308. package/src/mechain/types/index.ts +0 -29
  309. package/src/proto/api.ts +0 -5285
  310. package/src/proto/tee-bundle.ts +0 -1413
  311. package/src/providers/http/index.ts +0 -873
  312. package/src/providers/http/patch-parse5-tree.ts +0 -49
  313. package/src/providers/http/utils.ts +0 -439
  314. package/src/providers/index.ts +0 -8
  315. package/src/scripts/build-browser.sh +0 -9
  316. package/src/scripts/build-browser.ts +0 -40
  317. package/src/scripts/build-jsc.ts +0 -55
  318. package/src/scripts/check-avs-registration.ts +0 -38
  319. package/src/scripts/contract-data-gen.sh +0 -8
  320. package/src/scripts/fallbacks/crypto.ts +0 -1
  321. package/src/scripts/fallbacks/empty.ts +0 -2
  322. package/src/scripts/fallbacks/re2.ts +0 -5
  323. package/src/scripts/fallbacks/snarkjs.ts +0 -5
  324. package/src/scripts/generate-certs.sh +0 -11
  325. package/src/scripts/generate-proto.sh +0 -5
  326. package/src/scripts/generate-provider-types.ts +0 -121
  327. package/src/scripts/generate-receipt.ts +0 -138
  328. package/src/scripts/generate-toprf-keys.ts +0 -30
  329. package/src/scripts/jsc-cli-rpc.ts +0 -48
  330. package/src/scripts/register-avs-operator.ts +0 -5
  331. package/src/scripts/start-server.ts +0 -17
  332. package/src/scripts/update-avs-metadata.ts +0 -26
  333. package/src/scripts/utils.ts +0 -8
  334. package/src/scripts/whitelist-operator.ts +0 -22
  335. package/src/server/create-server.ts +0 -169
  336. package/src/server/handlers/claimTeeBundle.ts +0 -308
  337. package/src/server/handlers/claimTunnel.ts +0 -106
  338. package/src/server/handlers/completeClaimOnChain.ts +0 -36
  339. package/src/server/handlers/createClaimOnChain.ts +0 -39
  340. package/src/server/handlers/createTaskOnMechain.ts +0 -80
  341. package/src/server/handlers/createTunnel.ts +0 -128
  342. package/src/server/handlers/disconnectTunnel.ts +0 -11
  343. package/src/server/handlers/fetchCertificateBytes.ts +0 -66
  344. package/src/server/handlers/index.ts +0 -24
  345. package/src/server/handlers/init.ts +0 -46
  346. package/src/server/handlers/toprf.ts +0 -25
  347. package/src/server/index.ts +0 -4
  348. package/src/server/provider-api.ts +0 -118
  349. package/src/server/provider-store.ts +0 -117
  350. package/src/server/session-api.ts +0 -115
  351. package/src/server/session-store.ts +0 -60
  352. package/src/server/socket.ts +0 -156
  353. package/src/server/tunnels/make-tcp-tunnel.ts +0 -275
  354. package/src/server/utils/apm.ts +0 -49
  355. package/src/server/utils/assert-valid-claim-request.ts +0 -375
  356. package/src/server/utils/config-env.ts +0 -6
  357. package/src/server/utils/dns.ts +0 -25
  358. package/src/server/utils/gcp-attestation.ts +0 -415
  359. package/src/server/utils/generics.ts +0 -68
  360. package/src/server/utils/iso.ts +0 -258
  361. package/src/server/utils/keep-alive.ts +0 -50
  362. package/src/server/utils/nitro-attestation.ts +0 -396
  363. package/src/server/utils/process-handshake.ts +0 -311
  364. package/src/server/utils/proxy-session.ts +0 -6
  365. package/src/server/utils/tee-oprf-verification.ts +0 -231
  366. package/src/server/utils/tee-transcript-reconstruction.ts +0 -254
  367. package/src/server/utils/tee-verification.ts +0 -513
  368. package/src/server/utils/validation.ts +0 -57
  369. package/src/tests/auth.test.ts +0 -105
  370. package/src/tests/bgp-listener.test.ts +0 -193
  371. package/src/tests/claim-creation.test.ts +0 -415
  372. package/src/tests/describe-with-server.ts +0 -94
  373. package/src/tests/gcp-attestation.test.ts +0 -206
  374. package/src/tests/http-parser.test.ts +0 -135
  375. package/src/tests/http-provider-utils.test.ts +0 -3306
  376. package/src/tests/http-provider.test.ts +0 -125
  377. package/src/tests/jsc.test_mac.ts +0 -296
  378. package/src/tests/mock-provider-server.ts +0 -106
  379. package/src/tests/mocks.ts +0 -25
  380. package/src/tests/proof_bundle.bin +0 -0
  381. package/src/tests/rpc-communication.test.ts +0 -115
  382. package/src/tests/rpc-tunnel.test.ts +0 -239
  383. package/src/tests/signatures.test.ts +0 -37
  384. package/src/tests/tcp-tunnel.test.ts +0 -154
  385. package/src/tests/tee-bundle.test.ts +0 -321
  386. package/src/tests/tee-signatures.test.ts +0 -81
  387. package/src/tests/utils.ts +0 -108
  388. package/src/tests/verification_bundle.pb +0 -0
  389. package/src/tests/verification_bundle_tee.pb +0 -0
  390. package/src/tests/zk.test.ts +0 -453
  391. package/src/types/bgp.ts +0 -17
  392. package/src/types/claims.ts +0 -79
  393. package/src/types/client.ts +0 -205
  394. package/src/types/general.ts +0 -61
  395. package/src/types/handlers.ts +0 -16
  396. package/src/types/index.ts +0 -10
  397. package/src/types/providers.gen.ts +0 -135
  398. package/src/types/providers.ts +0 -203
  399. package/src/types/rpc.ts +0 -46
  400. package/src/types/signatures.ts +0 -29
  401. package/src/types/tunnel.ts +0 -25
  402. package/src/types/zk.ts +0 -31
  403. package/src/utils/auth.ts +0 -92
  404. package/src/utils/b64-json.ts +0 -25
  405. package/src/utils/bgp-listener.ts +0 -159
  406. package/src/utils/claims.ts +0 -132
  407. package/src/utils/env.ts +0 -21
  408. package/src/utils/error.ts +0 -76
  409. package/src/utils/generics.ts +0 -429
  410. package/src/utils/http-parser.ts +0 -312
  411. package/src/utils/index.ts +0 -13
  412. package/src/utils/logger.ts +0 -114
  413. package/src/utils/prepare-packets.ts +0 -98
  414. package/src/utils/redactions.ts +0 -203
  415. package/src/utils/retries.ts +0 -41
  416. package/src/utils/signatures/eth.ts +0 -35
  417. package/src/utils/signatures/index.ts +0 -11
  418. package/src/utils/socket-base.ts +0 -132
  419. package/src/utils/ws.ts +0 -30
  420. package/src/utils/zk.ts +0 -908
@@ -1,415 +0,0 @@
1
- /**
2
- * GCP attestation validation utilities
3
- * Validates JWT tokens from Google Confidential Computing
4
- */
5
-
6
- import crypto, { X509Certificate } from 'crypto'
7
-
8
- import type { Logger } from '#src/types/general.ts'
9
-
10
- export interface GcpValidationResult {
11
- isValid: boolean
12
- errors: string[]
13
- ethAddress?: Uint8Array
14
- userDataType?: string
15
- pcr0?: string
16
- envVars?: Record<string, string> // Environment variables from JWT payload
17
- }
18
-
19
- interface JwtHeader {
20
- kid?: string
21
- alg: string
22
- x5c?: string[] // Certificate chain for PKI tokens
23
- }
24
-
25
- interface JwtPayload {
26
- iss: string
27
- exp: number
28
- iat: number
29
- aud: string
30
- eat_nonce?: string // Contains "tee_k_public_key:0x..." or "tee_t_public_key:0x..."
31
- dbgstat?: string // Debug status: "enabled" or "disabled-since-boot"
32
- // GCP Confidential Computing specific claims
33
- google?: {
34
- compute_engine?: {
35
- image_digest?: string
36
- instance_id?: string
37
- project_id?: string
38
- }
39
- }
40
- // Alternative location for image digest (Confidential Space)
41
- submods?: {
42
- container?: {
43
- image_digest?: string
44
- image_reference?: string
45
- image_id?: string
46
- restart_policy?: string
47
- args?: string[]
48
- env?: Record<string, string>
49
- }
50
- gce?: {
51
- zone?: string
52
- project_id?: string
53
- project_number?: string
54
- instance_name?: string
55
- instance_id?: string
56
- }
57
- }
58
- }
59
-
60
- interface JwkKey {
61
- kid: string
62
- n: string // modulus (base64url)
63
- e: string // exponent (base64url)
64
- kty: string
65
- alg: string
66
- use: string
67
- }
68
-
69
- interface JwksResponse {
70
- keys: JwkKey[]
71
- }
72
-
73
- // Cache for Google's public keys
74
- let gcpKeysCache: JwksResponse | null = null
75
- let gcpKeysCacheTime = 0
76
- const GCP_KEYS_CACHE_TTL = 3600000 // 1 hour in milliseconds
77
-
78
- // GCP Confidential Space Root CA
79
- const GCP_CONFIDENTIAL_SPACE_ROOT_CA = `-----BEGIN CERTIFICATE-----
80
- MIIGCDCCA/CgAwIBAgITYBvRy5g9aYYMh7tJS7pFwafL6jANBgkqhkiG9w0BAQsF
81
- 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
- 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
- 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
- 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
- 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
- BgNVBAoTCkdvb2dsZSBMTEMxFTATBgNVBAsTDEdvb2dsZSBDbG91ZDEjMCEGA1UE
87
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Mi/HiGaqOpGUqXMeQVw7phGTS3QYK8ZM65sC/QhIQzXdsiLDgFBitVnlIu3lIv6C
96
- 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
- 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
- E9O4dkFJp35WvR2gqIAkUoa+Vq1MXLFYG4imanZKH0igrIblbawRCr3Gr24FXQID
99
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
112
- uyT5CnJulxSC5CT1
113
- -----END CERTIFICATE-----`
114
-
115
- /**
116
- * Base64url decode (RFC 4648, no padding)
117
- */
118
- function base64urlDecode(input: string): Buffer {
119
- // Add padding if needed
120
- let base64 = input.replace(/-/g, '+').replace(/_/g, '/')
121
- while(base64.length % 4) {
122
- base64 += '='
123
- }
124
-
125
- return Buffer.from(base64, 'base64')
126
- }
127
-
128
- /**
129
- * Fetch Google's public keys (with caching)
130
- */
131
- async function fetchGooglePublicKeys(logger?: Logger): Promise<JwksResponse> {
132
- const now = Date.now()
133
-
134
- // Return cached keys if still valid
135
- if(gcpKeysCache && (now - gcpKeysCacheTime) < GCP_KEYS_CACHE_TTL) {
136
- if(logger) {
137
- logger.debug('Using cached Google public keys')
138
- }
139
-
140
- return gcpKeysCache
141
- }
142
-
143
- // Fetch fresh keys
144
- if(logger) {
145
- logger.info('Fetching Google public keys from https://www.googleapis.com/oauth2/v3/certs')
146
- }
147
-
148
- const response = await fetch('https://www.googleapis.com/oauth2/v3/certs')
149
- if(!response.ok) {
150
- throw new Error(`Failed to fetch Google keys: ${response.status} ${response.statusText}`)
151
- }
152
-
153
- const keys = await response.json() as JwksResponse
154
-
155
- // Update cache
156
- gcpKeysCache = keys
157
- gcpKeysCacheTime = now
158
-
159
- if(logger) {
160
- logger.info(`Fetched ${keys.keys.length} Google public keys`)
161
- }
162
-
163
- return keys
164
- }
165
-
166
- /**
167
- * Convert JWK to RSA public key
168
- */
169
- function jwkToPublicKey(jwk: JwkKey): crypto.KeyObject {
170
- // Create RSA public key from modulus and exponent
171
- return crypto.createPublicKey({
172
- key: {
173
- kty: 'RSA',
174
- n: jwk.n,
175
- e: jwk.e,
176
- },
177
- format: 'jwk'
178
- })
179
- }
180
-
181
- /**
182
- * Verify x5c certificate chain and return leaf certificate's public key
183
- */
184
- function verifyX5cChain(x5cChain: string[], logger?: Logger): crypto.KeyObject {
185
- if(!x5cChain || x5cChain.length === 0) {
186
- throw new Error('Empty x5c certificate chain')
187
- }
188
-
189
- // Parse leaf certificate (first in chain)
190
- const leafCertPem = `-----BEGIN CERTIFICATE-----\n${x5cChain[0]}\n-----END CERTIFICATE-----`
191
- const leafCert = new X509Certificate(leafCertPem)
192
-
193
- if(logger) {
194
- logger.info(`x5c leaf certificate: subject=${leafCert.subject}, issuer=${leafCert.issuer}`)
195
- }
196
-
197
- // Parse root CA
198
- const rootCert = new X509Certificate(GCP_CONFIDENTIAL_SPACE_ROOT_CA)
199
-
200
- // For chain verification with Node.js X509Certificate, we need to verify each cert in sequence
201
- // Start with leaf and work up to root
202
- let currentCert = leafCert
203
-
204
- // Verify intermediate certificates if present
205
- for(let i = 1; i < x5cChain.length; i++) {
206
- const intermediatePem = `-----BEGIN CERTIFICATE-----\n${x5cChain[i]}\n-----END CERTIFICATE-----`
207
- const intermediateCert = new X509Certificate(intermediatePem)
208
-
209
- // Verify current cert was signed by intermediate
210
- const isValid = currentCert.verify(intermediateCert.publicKey)
211
- if(!isValid) {
212
- throw new Error(`Certificate chain verification failed at level ${i}`)
213
- }
214
-
215
- if(logger) {
216
- logger.debug(`Verified cert level ${i}: ${intermediateCert.subject}`)
217
- }
218
-
219
- currentCert = intermediateCert
220
- }
221
-
222
- // Verify the top cert was signed by root CA
223
- const isRootValid = currentCert.verify(rootCert.publicKey)
224
- if(!isRootValid) {
225
- throw new Error('Certificate chain does not root to GCP Confidential Space Root CA')
226
- }
227
-
228
- if(logger) {
229
- logger.info('x5c certificate chain verified successfully')
230
- }
231
-
232
- // Return leaf certificate's public key for signature verification
233
- return leafCert.publicKey
234
- }
235
-
236
- /**
237
- * Validates GCP JWT attestation and extracts ETH address
238
- */
239
- export async function validateGcpAttestationAndExtractKey(
240
- attestationBytes: Uint8Array,
241
- logger?: Logger
242
- ): Promise<GcpValidationResult> {
243
- const errors: string[] = []
244
-
245
- try {
246
- // 1. Parse JWT structure
247
- const jwtString = Buffer.from(attestationBytes).toString('utf8')
248
- const parts = jwtString.split('.')
249
-
250
- if(parts.length !== 3) {
251
- errors.push('Invalid JWT format: expected 3 parts')
252
- return { isValid: false, errors }
253
- }
254
-
255
- const [headerB64, payloadB64, signatureB64] = parts
256
-
257
- // Decode header and payload
258
- const headerJson = base64urlDecode(headerB64).toString('utf8')
259
- const payloadJson = base64urlDecode(payloadB64).toString('utf8')
260
-
261
- const header: JwtHeader = JSON.parse(headerJson)
262
- const payload: JwtPayload = JSON.parse(payloadJson)
263
-
264
- if(logger) {
265
- logger.info(`GCP JWT header: kid=${header.kid}, alg=${header.alg}`)
266
- logger.info(`GCP JWT payload: iss=${payload.iss}, aud=${payload.aud}`)
267
- }
268
-
269
- // 2. Verify claims
270
- const now = Math.floor(Date.now() / 1000)
271
-
272
- // Check issuer - accept both Google accounts and Confidential Computing
273
- const validIssuers = [
274
- 'https://accounts.google.com',
275
- 'https://confidentialcomputing.googleapis.com'
276
- ]
277
- if(!validIssuers.includes(payload.iss)) {
278
- errors.push(`Invalid issuer: expected one of ${validIssuers.join(', ')}, got "${payload.iss}"`)
279
- }
280
-
281
- // Check expiration
282
- if(payload.exp <= now) {
283
- errors.push(`Token expired: exp=${payload.exp}, now=${now}`)
284
- }
285
-
286
- // Check issued at (allow 60 second clock skew)
287
- if(payload.iat > now + 60) {
288
- errors.push(`Token issued in future: iat=${payload.iat}, now=${now}`)
289
- }
290
-
291
- // Audience can be:
292
- // 1. Custom audience with data param: https://{ATTESTATION_AUDIENCE_DOMAIN}/attestation?data=tee_k_public_key:0x...
293
- // 2. GCP STS audience: https://sts.googleapis.com (for Confidential Space)
294
- const attestationAudienceDomain = process.env.ATTESTATION_AUDIENCE_DOMAIN || ''
295
- const hasCustomAudience = attestationAudienceDomain && payload.aud?.includes(attestationAudienceDomain)
296
- const hasGcpStsAudience = payload.aud?.includes('sts.googleapis.com')
297
-
298
- if(!hasCustomAudience && !hasGcpStsAudience) {
299
- errors.push(`Invalid audience: expected "${attestationAudienceDomain}" or "sts.googleapis.com", got "${payload.aud}"`)
300
- }
301
-
302
- if(errors.length > 0) {
303
- return { isValid: false, errors }
304
- }
305
-
306
- // 3. Get public key - either from x5c chain or JWKS
307
- let publicKey: crypto.KeyObject
308
-
309
- if(header.x5c && header.x5c.length > 0) {
310
- // PKI token with certificate chain
311
- if(logger) {
312
- logger.info(`Using x5c certificate chain (${header.x5c.length} certificates)`)
313
- }
314
-
315
- publicKey = verifyX5cChain(header.x5c, logger)
316
- } else if(header.kid) {
317
- // OIDC token with kid
318
- if(logger) {
319
- logger.info(`Using OIDC token with kid: ${header.kid}`)
320
- }
321
-
322
- // Fetch Google's public keys
323
- const jwks = await fetchGooglePublicKeys(logger)
324
-
325
- // Find matching key
326
- const jwk = jwks.keys.find(k => k.kid === header.kid)
327
- if(!jwk) {
328
- errors.push(`No public key found for kid: ${header.kid}`)
329
- return { isValid: false, errors }
330
- }
331
-
332
- publicKey = jwkToPublicKey(jwk)
333
- } else {
334
- errors.push('JWT header must contain either x5c or kid field')
335
- return { isValid: false, errors }
336
- }
337
-
338
- // 4. Verify signature
339
- const signedData = `${headerB64}.${payloadB64}`
340
- const signature = base64urlDecode(signatureB64)
341
-
342
- const verify = crypto.createVerify('RSA-SHA256')
343
- verify.update(signedData)
344
- const isSignatureValid = verify.verify(publicKey, signature)
345
-
346
- if(!isSignatureValid) {
347
- errors.push('Signature verification failed')
348
- return { isValid: false, errors }
349
- }
350
-
351
- if(logger) {
352
- logger.info('GCP JWT signature verified successfully')
353
- }
354
-
355
- // 5. Extract ETH address from eat_nonce
356
- if(!payload.eat_nonce) {
357
- errors.push('No eat_nonce field found in JWT payload')
358
- return { isValid: false, errors }
359
- }
360
-
361
- // Format: "tee_k_public_key:0x..." or "tee_t_public_key:0x..."
362
- const match = payload.eat_nonce.match(/^(tee_[kt])_public_key:0x([0-9a-fA-F]{40})$/)
363
- if(!match) {
364
- errors.push(`Invalid eat_nonce format: ${payload.eat_nonce}`)
365
- return { isValid: false, errors }
366
- }
367
-
368
- const userDataType = match[1] // "tee_k" or "tee_t"
369
- const hexAddress = match[2]
370
-
371
- const ethAddress = new Uint8Array(Buffer.from(hexAddress, 'hex'))
372
-
373
- if(logger) {
374
- logger.info(`Extracted address from eat_nonce: ${payload.eat_nonce}`)
375
- }
376
-
377
- // Extract image digest from JWT payload (GCP's equivalent to PCR0)
378
- let pcr0 = 'gcp-no-digest'
379
- if(payload.google?.compute_engine?.image_digest) {
380
- pcr0 = payload.google.compute_engine.image_digest
381
- } else if(payload.submods?.container?.image_digest) {
382
- pcr0 = payload.submods.container.image_digest
383
- }
384
-
385
- // Add debug prefix if debug mode is enabled
386
- if(payload.dbgstat === 'enabled' && pcr0.startsWith('sha256:')) {
387
- pcr0 = 'debug_' + pcr0
388
- }
389
-
390
- // Extract environment variables if present
391
- const envVars = payload.submods?.container?.env || {}
392
-
393
- if(logger) {
394
- const hexAddr = Buffer.from(ethAddress).toString('hex')
395
- logger.info(`Extracted ETH address from GCP attestation: 0x${hexAddr}, type: ${userDataType}, pcr0: ${pcr0}`)
396
- if(Object.keys(envVars).length > 0) {
397
- logger.debug(`Environment variables: ${Object.keys(envVars).join(', ')}`)
398
- }
399
- }
400
-
401
- return {
402
- isValid: true,
403
- errors: [],
404
- ethAddress,
405
- userDataType,
406
- pcr0,
407
- envVars
408
- }
409
-
410
- } catch(error) {
411
- const errorMsg = error instanceof Error ? error.message : String(error)
412
- errors.push(`GCP attestation validation error: ${errorMsg}`)
413
- return { isValid: false, errors }
414
- }
415
- }
@@ -1,68 +0,0 @@
1
- import type { IncomingMessage } from 'http'
2
-
3
- import type { ServiceSignatureType } from '#src/proto/api.ts'
4
- import { RPCMessages } from '#src/proto/api.ts'
5
- import { getEnvVariable } from '#src/utils/env.ts'
6
- import { AttestorError, strToUint8Array } from '#src/utils/index.ts'
7
- import { SIGNATURES } from '#src/utils/signatures/index.ts'
8
-
9
- const PRIVATE_KEY = getEnvVariable('PRIVATE_KEY')!
10
-
11
- /**
12
- * Sign message using the PRIVATE_KEY env var.
13
- */
14
- export function signAsAttestor(
15
- data: Uint8Array | string,
16
- scheme: ServiceSignatureType
17
- ) {
18
- const { sign } = SIGNATURES[scheme]
19
- return sign(
20
- typeof data === 'string' ? strToUint8Array(data) : data,
21
- PRIVATE_KEY
22
- )
23
- }
24
-
25
- /**
26
- * Obtain the address on chain, from the PRIVATE_KEY env var.
27
- */
28
- export function getAttestorAddress(scheme: ServiceSignatureType) {
29
- const { getAddress, getPublicKey } = SIGNATURES[scheme]
30
- const publicKey = getPublicKey(PRIVATE_KEY)
31
- return getAddress(publicKey)
32
- }
33
-
34
- /**
35
- * Nice parse JSON with a key.
36
- * If the data is empty, returns an empty object.
37
- * And if the JSON is invalid, throws a bad request error,
38
- * with the key in the error message.
39
- */
40
- export function niceParseJsonObject(data: string, key: string) {
41
- if(!data) {
42
- return {}
43
- }
44
-
45
- try {
46
- return JSON.parse(data)
47
- } catch(e) {
48
- throw AttestorError.badRequest(
49
- `Invalid JSON in ${key}: ${e.message}`,
50
- )
51
- }
52
- }
53
-
54
- /**
55
- * Extract any initial messages sent via the query string,
56
- * in the `messages` parameter.
57
- */
58
- export function getInitialMessagesFromQuery(req: IncomingMessage) {
59
- const url = new URL(req.url!, 'http://localhost')
60
- const messagesB64 = url.searchParams.get('messages')
61
- if(!messagesB64?.length) {
62
- return []
63
- }
64
-
65
- const msgsBytes = Buffer.from(messagesB64, 'base64')
66
- const msgs = RPCMessages.decode(msgsBytes)
67
- return msgs.messages
68
- }