@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,258 +0,0 @@
1
-
2
- const countries = {
3
- AF: 'Afghanistan',
4
- AX: 'Åland Islands',
5
- AL: 'Albania',
6
- DZ: 'Algeria',
7
- AS: 'American Samoa',
8
- AD: 'Andorra',
9
- AO: 'Angola',
10
- AI: 'Anguilla',
11
- AQ: 'Antarctica',
12
- AG: 'Antigua and Barbuda',
13
- AR: 'Argentina',
14
- AM: 'Armenia',
15
- AW: 'Aruba',
16
- AU: 'Australia',
17
- AT: 'Austria',
18
- AZ: 'Azerbaijan',
19
- BS: 'Bahamas',
20
- BH: 'Bahrain',
21
- BD: 'Bangladesh',
22
- BB: 'Barbados',
23
- BY: 'Belarus',
24
- BE: 'Belgium',
25
- BZ: 'Belize',
26
- BJ: 'Benin',
27
- BM: 'Bermuda',
28
- BT: 'Bhutan',
29
- BO: 'Bolivia, Plurinational State of',
30
- BQ: 'Bonaire, Sint Eustatius and Saba',
31
- BA: 'Bosnia and Herzegovina',
32
- BW: 'Botswana',
33
- BV: 'Bouvet Island',
34
- BR: 'Brazil',
35
- IO: 'British Indian Ocean Territory',
36
- BN: 'Brunei Darussalam',
37
- BG: 'Bulgaria',
38
- BF: 'Burkina Faso',
39
- BI: 'Burundi',
40
- KH: 'Cambodia',
41
- CM: 'Cameroon',
42
- CA: 'Canada',
43
- CV: 'Cape Verde',
44
- KY: 'Cayman Islands',
45
- CF: 'Central African Republic',
46
- TD: 'Chad',
47
- CL: 'Chile',
48
- CN: 'China',
49
- CX: 'Christmas Island',
50
- CC: 'Cocos (Keeling) Islands',
51
- CO: 'Colombia',
52
- KM: 'Comoros',
53
- CG: 'Congo',
54
- CD: 'Congo, the Democratic Republic of the',
55
- CK: 'Cook Islands',
56
- CR: 'Costa Rica',
57
- CI: "Côte d'Ivoire",
58
- HR: 'Croatia',
59
- CU: 'Cuba',
60
- CW: 'Curaçao',
61
- CY: 'Cyprus',
62
- CZ: 'Czech Republic',
63
- DK: 'Denmark',
64
- DJ: 'Djibouti',
65
- DM: 'Dominica',
66
- DO: 'Dominican Republic',
67
- EC: 'Ecuador',
68
- EG: 'Egypt',
69
- SV: 'El Salvador',
70
- GQ: 'Equatorial Guinea',
71
- ER: 'Eritrea',
72
- EE: 'Estonia',
73
- ET: 'Ethiopia',
74
- FK: 'Falkland Islands (Malvinas)',
75
- FO: 'Faroe Islands',
76
- FJ: 'Fiji',
77
- FI: 'Finland',
78
- FR: 'France',
79
- GF: 'French Guiana',
80
- PF: 'French Polynesia',
81
- TF: 'French Southern Territories',
82
- GA: 'Gabon',
83
- GM: 'Gambia',
84
- GE: 'Georgia',
85
- DE: 'Germany',
86
- GH: 'Ghana',
87
- GI: 'Gibraltar',
88
- GR: 'Greece',
89
- GL: 'Greenland',
90
- GD: 'Grenada',
91
- GP: 'Guadeloupe',
92
- GU: 'Guam',
93
- GT: 'Guatemala',
94
- GG: 'Guernsey',
95
- GN: 'Guinea',
96
- GW: 'Guinea-Bissau',
97
- GY: 'Guyana',
98
- HT: 'Haiti',
99
- HM: 'Heard Island and McDonald Mcdonald Islands',
100
- VA: 'Holy See (Vatican City State)',
101
- HN: 'Honduras',
102
- HK: 'Hong Kong',
103
- HU: 'Hungary',
104
- IS: 'Iceland',
105
- IN: 'India',
106
- ID: 'Indonesia',
107
- IR: 'Iran, Islamic Republic of',
108
- IQ: 'Iraq',
109
- IE: 'Ireland',
110
- IM: 'Isle of Man',
111
- IL: 'Israel',
112
- IT: 'Italy',
113
- JM: 'Jamaica',
114
- JP: 'Japan',
115
- JE: 'Jersey',
116
- JO: 'Jordan',
117
- KZ: 'Kazakhstan',
118
- KE: 'Kenya',
119
- KI: 'Kiribati',
120
- XK: 'Kosovo',
121
- KP: "Korea, Democratic People's Republic of",
122
- KR: 'Korea, Republic of',
123
- KW: 'Kuwait',
124
- KG: 'Kyrgyzstan',
125
- LA: "Lao People's Democratic Republic",
126
- LV: 'Latvia',
127
- LB: 'Lebanon',
128
- LS: 'Lesotho',
129
- LR: 'Liberia',
130
- LY: 'Libya',
131
- LI: 'Liechtenstein',
132
- LT: 'Lithuania',
133
- LU: 'Luxembourg',
134
- MO: 'Macao',
135
- MK: 'North Macedonia',
136
- MG: 'Madagascar',
137
- MW: 'Malawi',
138
- MY: 'Malaysia',
139
- MV: 'Maldives',
140
- ML: 'Mali',
141
- MT: 'Malta',
142
- MH: 'Marshall Islands',
143
- MQ: 'Martinique',
144
- MR: 'Mauritania',
145
- MU: 'Mauritius',
146
- YT: 'Mayotte',
147
- MX: 'Mexico',
148
- FM: 'Micronesia, Federated States of',
149
- MD: 'Moldova, Republic of',
150
- MC: 'Monaco',
151
- MN: 'Mongolia',
152
- ME: 'Montenegro',
153
- MS: 'Montserrat',
154
- MA: 'Morocco',
155
- MZ: 'Mozambique',
156
- MM: 'Myanmar',
157
- NA: 'Namibia',
158
- NR: 'Nauru',
159
- NP: 'Nepal',
160
- NL: 'Netherlands',
161
- AN: 'Netherlands Antilles',
162
- NC: 'New Caledonia',
163
- NZ: 'New Zealand',
164
- NI: 'Nicaragua',
165
- NE: 'Niger',
166
- NG: 'Nigeria',
167
- NU: 'Niue',
168
- NF: 'Norfolk Island',
169
- MP: 'Northern Mariana Islands',
170
- NO: 'Norway',
171
- OM: 'Oman',
172
- PK: 'Pakistan',
173
- PW: 'Palau',
174
- PS: 'Palestine, State of',
175
- PA: 'Panama',
176
- PG: 'Papua New Guinea',
177
- PY: 'Paraguay',
178
- PE: 'Peru',
179
- PH: 'Philippines',
180
- PN: 'Pitcairn',
181
- PL: 'Poland',
182
- PT: 'Portugal',
183
- PR: 'Puerto Rico',
184
- QA: 'Qatar',
185
- RE: 'Réunion',
186
- RO: 'Romania',
187
- RU: 'Russian Federation',
188
- RW: 'Rwanda',
189
- BL: 'Saint Barthélemy',
190
- SH: 'Saint Helena, Ascension and Tristan da Cunha',
191
- KN: 'Saint Kitts and Nevis',
192
- LC: 'Saint Lucia',
193
- MF: 'Saint Martin (French part)',
194
- PM: 'Saint Pierre and Miquelon',
195
- VC: 'Saint Vincent and the Grenadines',
196
- WS: 'Samoa',
197
- SM: 'San Marino',
198
- ST: 'Sao Tome and Principe',
199
- SA: 'Saudi Arabia',
200
- SN: 'Senegal',
201
- RS: 'Serbia',
202
- SC: 'Seychelles',
203
- SL: 'Sierra Leone',
204
- SG: 'Singapore',
205
- SX: 'Sint Maarten (Dutch part)',
206
- SK: 'Slovakia',
207
- SI: 'Slovenia',
208
- SB: 'Solomon Islands',
209
- SO: 'Somalia',
210
- ZA: 'South Africa',
211
- GS: 'South Georgia and the South Sandwich Islands',
212
- SS: 'South Sudan',
213
- ES: 'Spain',
214
- LK: 'Sri Lanka',
215
- SD: 'Sudan',
216
- SR: 'Suriname',
217
- SJ: 'Svalbard and Jan Mayen',
218
- SZ: 'Swaziland',
219
- SE: 'Sweden',
220
- CH: 'Switzerland',
221
- SY: 'Syrian Arab Republic',
222
- TW: 'Taiwan, Province of China',
223
- TJ: 'Tajikistan',
224
- TZ: 'Tanzania, United Republic of',
225
- TH: 'Thailand',
226
- TL: 'Timor-Leste',
227
- TG: 'Togo',
228
- TK: 'Tokelau',
229
- TO: 'Tonga',
230
- TT: 'Trinidad and Tobago',
231
- TN: 'Tunisia',
232
- TR: 'Turkey',
233
- TM: 'Turkmenistan',
234
- TC: 'Turks and Caicos Islands',
235
- TV: 'Tuvalu',
236
- UG: 'Uganda',
237
- UA: 'Ukraine',
238
- AE: 'United Arab Emirates',
239
- GB: 'United Kingdom',
240
- US: 'United States',
241
- UM: 'United States Minor Outlying Islands',
242
- UY: 'Uruguay',
243
- UZ: 'Uzbekistan',
244
- VU: 'Vanuatu',
245
- VE: 'Venezuela, Bolivarian Republic of',
246
- VN: 'Viet Nam',
247
- VG: 'Virgin Islands, British',
248
- VI: 'Virgin Islands, U.S.',
249
- WF: 'Wallis and Futuna',
250
- EH: 'Western Sahara',
251
- YE: 'Yemen',
252
- ZM: 'Zambia',
253
- ZW: 'Zimbabwe'
254
- }
255
-
256
- export function isValidCountryCode(countryCode: string): boolean {
257
- return (countryCode.toUpperCase() in countries)
258
- }
@@ -1,50 +0,0 @@
1
- import type { Logger } from 'pino'
2
- import type { WebSocket } from 'ws'
3
-
4
- import { MAX_NO_DATA_INTERVAL_MS, PING_INTERVAL_MS } from '#src/config/index.ts'
5
-
6
- /**
7
- * Adds a keep-alive mechanism to the WebSocket
8
- * client
9
- */
10
- export function addKeepAlive(ws: WebSocket, logger: Logger) {
11
- let sendTimeout: NodeJS.Timeout
12
- let killTimeout: NodeJS.Timeout
13
-
14
- ws.on('message', () => {
15
- logger.trace('data recv, resetting timer')
16
- resetTimer()
17
- })
18
- ws.on('pong', () => {
19
- logger.trace('pong received, resetting timer')
20
- resetTimer()
21
- })
22
-
23
- ws.on('error', cleanup)
24
- ws.on('close', cleanup)
25
-
26
- function resetTimer() {
27
- cleanup()
28
- resetSendTimeout()
29
-
30
- killTimeout = setTimeout(() => {
31
- logger.warn(
32
- 'no data received in a while, closing connection'
33
- )
34
- ws.close()
35
- }, MAX_NO_DATA_INTERVAL_MS)
36
- }
37
-
38
- function resetSendTimeout() {
39
- // reset ping
40
- sendTimeout = setTimeout(() => {
41
- ws.ping()
42
- resetSendTimeout()
43
- }, PING_INTERVAL_MS)
44
- }
45
-
46
- function cleanup() {
47
- clearTimeout(killTimeout)
48
- clearTimeout(sendTimeout)
49
- }
50
- }
@@ -1,396 +0,0 @@
1
- /**
2
- * Working Nitro Attestation validation utilities
3
- */
4
-
5
- import { AsnParser } from '@peculiar/asn1-schema'
6
- import { SubjectPublicKeyInfo } from '@peculiar/asn1-x509'
7
- import { Crypto } from '@peculiar/webcrypto'
8
- import { X509Certificate, X509ChainBuilder } from '@peculiar/x509'
9
- import { sign } from 'cose-js'
10
-
11
- // Nitro-specific types
12
- export interface AttestationDocument {
13
- module_id: string
14
- digest: string
15
- timestamp: bigint
16
- pcrs: { [key: number]: Buffer }
17
- certificate: Buffer
18
- cabundle: Buffer[]
19
- public_key?: Buffer
20
- user_data?: Buffer
21
- nonce?: Buffer
22
- }
23
-
24
- export interface NitroValidationResult {
25
- isValid: boolean
26
- errors: string[]
27
- warnings: string[]
28
- userDataType?: 'tee_k' | 'tee_t'
29
- ethAddress?: string
30
- pcr0: string
31
- }
32
-
33
- export interface AddressExtractionResult {
34
- teeType: 'tee_k' | 'tee_t'
35
- ethAddress?: string
36
- pcr0: string
37
- }
38
-
39
- // Helper function to dynamically import cbor-x
40
- async function getCborDecode() {
41
- const { decode } = await import('cbor-x')
42
- return decode
43
- }
44
-
45
- // AWS Nitro root certificate (from nitrite)
46
- const AWS_NITRO_ROOT_CERT = `-----BEGIN CERTIFICATE-----
47
- MIICETCCAZagAwIBAgIRAPkxdWgbkK/hHUbMtOTn+FYwCgYIKoZIzj0EAwMwSTEL
48
- MAkGA1UEBhMCVVMxDzANBgNVBAoMBkFtYXpvbjEMMAoGA1UECwwDQVdTMRswGQYD
49
- VQQDDBJhd3Mubml0cm8tZW5jbGF2ZXMwHhcNMTkxMDI4MTMyODA1WhcNNDkxMDI4
50
- MTQyODA1WjBJMQswCQYDVQQGEwJVUzEPMA0GA1UECgwGQW1hem9uMQwwCgYDVQQL
51
- DANBV1MxGzAZBgNVBAMMEmF3cy5uaXRyby1lbmNsYXZlczB2MBAGByqGSM49AgEG
52
- BSuBBAAiA2IABPwCVOumCMHzaHDimtqQvkY4MpJzbolL//Zy2YlES1BR5TSksfbb
53
- 48C8WBoyt7F2Bw7eEtaaP+ohG2bnUs990d0JX28TcPQXCEPZ3BABIeTPYwEoCWZE
54
- h8l5YoQwTcU/9KNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUkCW1DdkF
55
- R+eWw5b6cp3PmanfS5YwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2kAMGYC
56
- MQCjfy+Rocm9Xue4YnwWmNJVA44fA0P5W2OpYow9OYCVRaEevL8uO1XYru5xtMPW
57
- rfMCMQCi85sWBbJwKKXdS6BptQFuZbT73o/gBh1qUxl/nNr12UO8Yfwr6wPLb+6N
58
- IwLz3/Y=
59
- -----END CERTIFICATE-----`
60
-
61
- // Expected PCR values (replace with actual values)
62
- // const EXPECTED_PCRS = {
63
- // //0: Buffer.from('000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 'hex'),
64
- // }
65
- //
66
- // // Secure buffer comparison to prevent timing attacks
67
- // function secureBufferCompare(a: Buffer, b: Buffer): boolean {
68
- // if(a.length !== b.length) {
69
- // return false
70
- // }
71
- //
72
- // let result = 0
73
- // for(const [i, element] of a.entries()) {
74
- // result |= element ^ b[i]
75
- // }
76
- //
77
- // return result === 0
78
- // }
79
-
80
- // Enhanced certificate chain validation
81
- async function validateCertificateChain(
82
- targetCert: X509Certificate,
83
- intermediateCerts: X509Certificate[],
84
- rootCert: X509Certificate,
85
- crypto: Crypto
86
- ): Promise<{ isValid: boolean, errors: string[], chain: X509Certificate[] }> {
87
- const errors: string[] = []
88
-
89
- try {
90
- // Validate root certificate is self-signed and trusted
91
- const rootSubject = rootCert.subject
92
- const rootIssuer = rootCert.issuer
93
-
94
- if(rootSubject !== rootIssuer) {
95
- errors.push('Root certificate is not self-signed')
96
- }
97
-
98
- // Verify root certificate signature (self-verification)
99
- try {
100
- const isRootValid = await rootCert.verify(undefined, crypto)
101
- if(!isRootValid) {
102
- errors.push('Root certificate signature verification failed')
103
- }
104
- } catch(error) {
105
- errors.push(`Root certificate verification failed: ${(error as Error).message}`)
106
- }
107
-
108
- // Build the certificate chain
109
- const chainBuilder = new X509ChainBuilder({
110
- certificates: [rootCert, ...intermediateCerts]
111
- })
112
-
113
- let chain: X509Certificate[]
114
- try {
115
- chain = await chainBuilder.build(targetCert, crypto)
116
- } catch(error) {
117
- errors.push(`Certificate chain building failed: ${(error as Error).message}`)
118
- return { isValid: false, errors, chain: [] }
119
- }
120
-
121
- if(!chain || chain.length === 0) {
122
- errors.push('No valid certificate chain could be built')
123
- return { isValid: false, errors, chain: [] }
124
- }
125
-
126
- // Validate each certificate in the chain
127
- const now = new Date()
128
- for(let i = 0; i < chain.length; i++) {
129
- const cert = chain[i]
130
-
131
- // Check expiration dates
132
- if(now < cert.notBefore) {
133
- errors.push(`Certificate ${i} (${cert.subject}) is not yet valid`)
134
- }
135
-
136
- if(now > cert.notAfter) {
137
- errors.push(`Certificate ${i} (${cert.subject}) has expired`)
138
- }
139
-
140
- // Verify each certificate's signature (except root which is self-signed)
141
- if(i < chain.length - 1) {
142
- try {
143
- const issuer = chain[i + 1]
144
- const isValid = await cert.verify(issuer, crypto)
145
- // eslint-disable-next-line max-depth
146
- if(!isValid) {
147
- errors.push(`Certificate ${i} signature verification failed`)
148
- }
149
- } catch(error) {
150
- errors.push(`Certificate ${i} verification failed: ${(error as Error).message}`)
151
- }
152
- }
153
- }
154
-
155
- return {
156
- isValid: errors.length === 0,
157
- errors,
158
- chain
159
- }
160
- } catch(error) {
161
- errors.push(`Certificate chain validation error: ${(error as Error).message}`)
162
- return { isValid: false, errors, chain: [] }
163
- }
164
- }
165
-
166
- /**
167
- * Extract public key from user_data field in attestation document
168
- */
169
- function extractPublicKeyFromUserData(userDataBuffer: Buffer): AddressExtractionResult | null {
170
- try {
171
- const userDataString = userDataBuffer.toString('utf-8')
172
-
173
- // Parse new format: "tee_k_public_key:0xETH_ADDRESS" or "tee_t_public_key:0xETH_ADDRESS"
174
- const teeKMatch = userDataString.match(/^tee_k_public_key:(0x[0-9a-fA-F]{40})$/)
175
- const teeTMatch = userDataString.match(/^tee_t_public_key:(0x[0-9a-fA-F]{40})$/)
176
-
177
- if(teeKMatch) {
178
- return {
179
- teeType: 'tee_k',
180
- ethAddress: teeKMatch[1], // Store the full ETH address with 0x prefix
181
- pcr0: ''
182
- }
183
- }
184
-
185
- if(teeTMatch) {
186
- return {
187
- teeType: 'tee_t',
188
- ethAddress: teeTMatch[1], // Store the full ETH address with 0x prefix
189
- pcr0: ''
190
- }
191
- }
192
-
193
- return null
194
- } catch(error) {
195
- return null
196
- }
197
- }
198
-
199
- /**
200
- * Working validation function copied from nitroattestor
201
- */
202
- export async function validateNitroAttestationAndExtractKey(
203
- attestationBytes: Uint8Array
204
- ): Promise<NitroValidationResult> {
205
- const errors: string[] = []
206
- const warnings: string[] = []
207
-
208
- try {
209
- // Set up WebCrypto
210
- const crypto = new Crypto()
211
-
212
- // Decode CBOR - use exact same approach as working nitroattestor
213
- const decode = await getCborDecode()
214
- let decoded: any
215
- try {
216
- decoded = decode(Buffer.from(attestationBytes))
217
- } catch(error) {
218
- errors.push(`CBOR decoding failed: ${(error as Error).message}`)
219
- return { isValid: false, errors, warnings, pcr0: '' }
220
- }
221
-
222
- // Extract COSE_Sign1 structure
223
- if(!Array.isArray(decoded) || decoded.length < 4) {
224
- errors.push('Invalid COSE_Sign1 structure: expected array with 4 elements')
225
- return { isValid: false, errors, warnings, pcr0: '' }
226
- }
227
-
228
- const [, , payload] = decoded
229
-
230
- // Validate payload exists and is not empty
231
- if(!payload || payload.length === 0) {
232
- errors.push('Empty or missing payload in COSE_Sign1 structure')
233
- return { isValid: false, errors, warnings, pcr0: '' }
234
- }
235
-
236
- // Decode payload - use exact same approach as working code
237
- let doc: AttestationDocument
238
- try {
239
- doc = decode(payload) as AttestationDocument
240
- } catch(error) {
241
- errors.push(`Payload decoding failed: ${(error as Error).message}`)
242
- return { isValid: false, errors, warnings, pcr0: '' }
243
- }
244
-
245
- // Validate mandatory fields with strict type checking
246
- if(doc.module_id.length === 0) {
247
- errors.push('Missing or invalid module_id')
248
- }
249
-
250
- if(doc.digest.length === 0) {
251
- errors.push('Missing or invalid digest')
252
- }
253
-
254
- if(!doc.pcrs || typeof doc.pcrs !== 'object') {
255
- errors.push('Missing or invalid pcrs')
256
- }
257
-
258
- if(!Buffer.isBuffer(doc.certificate) || doc.certificate.length === 0) {
259
- errors.push('Missing or invalid certificate')
260
- }
261
-
262
- if(!Array.isArray(doc.cabundle) || doc.cabundle.length === 0) {
263
- errors.push('Missing or invalid cabundle')
264
- }
265
-
266
- // Early return if basic validation fails
267
- if(errors.length > 0) {
268
- return { isValid: false, errors, warnings, pcr0: '' }
269
- }
270
-
271
- const pcr0 = doc.pcrs[0].toString('hex')
272
-
273
- // Validate PCRs with secure comparison
274
- // for(const [index, expected] of Object.entries(EXPECTED_PCRS)) {
275
- // const pcrIndex = parseInt(index)
276
- // const actualPcr = doc.pcrs[pcrIndex]
277
- //
278
- // if(!Buffer.isBuffer(actualPcr)) {
279
- // errors.push(`PCR${index} is not a Buffer`)
280
- // continue
281
- // }
282
- //
283
- // if(!secureBufferCompare(expected, actualPcr)) {
284
- // errors.push(`PCR${index} mismatch`)
285
- // }
286
- // }
287
-
288
- // Parse certificates with better error handling
289
- const intermediateCerts: X509Certificate[] = []
290
- for(let i = 0; i < doc.cabundle.length; i++) {
291
- try {
292
- const cert = new X509Certificate(doc.cabundle[i].toString('base64'))
293
- intermediateCerts.push(cert)
294
- } catch(error) {
295
- errors.push(`Failed to parse cabundle certificate ${i}: ${(error as Error).message}`)
296
- }
297
- }
298
-
299
- // Parse target certificate
300
- let targetCert: X509Certificate
301
- try {
302
- targetCert = new X509Certificate(doc.certificate.toString('base64'))
303
- } catch(error) {
304
- errors.push(`Failed to parse target certificate: ${(error as Error).message}`)
305
- return { isValid: false, errors, warnings, pcr0: '' }
306
- }
307
-
308
- // Parse root certificate
309
- let rootCert: X509Certificate
310
- try {
311
- rootCert = new X509Certificate(AWS_NITRO_ROOT_CERT)
312
- } catch(error) {
313
- errors.push(`Failed to parse AWS Nitro root certificate: ${(error as Error).message}`)
314
- return { isValid: false, errors, warnings, pcr0: '' }
315
- }
316
-
317
- // Enhanced certificate chain validation
318
- const chainResult = await validateCertificateChain(targetCert, intermediateCerts, rootCert, crypto)
319
- if(!chainResult.isValid) {
320
- errors.push(...chainResult.errors)
321
- return { isValid: false, errors, warnings, pcr0: '' }
322
- }
323
-
324
- // Parse and validate public key
325
- let publicKeyRaw: Buffer
326
- try {
327
- publicKeyRaw = Buffer.from(targetCert.publicKey.rawData)
328
- } catch(error) {
329
- errors.push(`Failed to extract public key: ${(error as Error).message}`)
330
- return { isValid: false, errors, warnings, pcr0: '' }
331
- }
332
-
333
- // Validate public key format (P-384 ECDSA)
334
- if(publicKeyRaw.length !== 120 || publicKeyRaw[0] !== 0x30) {
335
- errors.push(`Invalid public key format: expected 120-byte DER-encoded key, got ${publicKeyRaw.length} bytes`)
336
- return { isValid: false, errors, warnings, pcr0: '' }
337
- }
338
-
339
- let spki: SubjectPublicKeyInfo
340
- try {
341
- spki = AsnParser.parse(publicKeyRaw, SubjectPublicKeyInfo)
342
- } catch(error) {
343
- errors.push(`Failed to parse SubjectPublicKeyInfo: ${(error as Error).message}`)
344
- return { isValid: false, errors, warnings, pcr0: '' }
345
- }
346
-
347
- const ecPoint = Buffer.from(spki.subjectPublicKey)
348
- if(ecPoint.length !== 97 || ecPoint[0] !== 0x04) {
349
- errors.push('Invalid EC point: expected 97-byte uncompressed P-384 key')
350
- return { isValid: false, errors, warnings, pcr0: '' }
351
- }
352
-
353
- const x = ecPoint.subarray(1, 49) // 48-byte x coordinate
354
- const y = ecPoint.subarray(49, 97) // 48-byte y coordinate
355
-
356
- // Validate ECDSA signature using cose-js
357
- try {
358
- const verifier = {
359
- key: {
360
- x: x,
361
- y: y,
362
- },
363
- }
364
- const options = { defaultType: 18 } // cose.sign.Sign1Tag
365
- await sign.verify(Buffer.from(attestationBytes), verifier, options)
366
- } catch(error) {
367
- errors.push(`COSE signature verification failed: ${(error as Error).message}`)
368
- return { isValid: false, errors, warnings, pcr0: '' }
369
- }
370
-
371
- // Extract public key from user_data if present
372
- let userDataType: 'tee_k' | 'tee_t' | undefined
373
- let ethAddress: string | undefined
374
-
375
- if(doc.user_data) {
376
- const keyInfo = extractPublicKeyFromUserData(doc.user_data)
377
- if(keyInfo) {
378
- userDataType = keyInfo.teeType
379
- ethAddress = keyInfo.ethAddress
380
- }
381
- }
382
-
383
- return {
384
- isValid: errors.length === 0,
385
- errors,
386
- warnings,
387
- userDataType,
388
- ethAddress,
389
- pcr0: pcr0
390
- }
391
-
392
- } catch(error) {
393
- errors.push(`Unexpected error during validation: ${(error as Error).message}`)
394
- return { isValid: false, errors, warnings, pcr0: '' }
395
- }
396
- }