@reclaimprotocol/attestor-core 4.0.3 → 5.0.1-beta.2

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 (297) hide show
  1. package/LICENSE +660 -660
  2. package/README.md +1 -2
  3. package/lib/avs/abis/avsDirectoryABI.js +341 -342
  4. package/lib/avs/abis/delegationABI.js +4 -5
  5. package/lib/avs/abis/registryABI.js +722 -723
  6. package/lib/avs/client/create-claim-on-avs.d.ts +5 -5
  7. package/lib/avs/client/create-claim-on-avs.js +160 -139
  8. package/lib/avs/config.d.ts +1 -1
  9. package/lib/avs/config.js +25 -23
  10. package/lib/avs/contracts/ReclaimServiceManager.d.ts +436 -532
  11. package/lib/avs/contracts/ReclaimServiceManager.js +0 -3
  12. package/lib/avs/contracts/common.d.ts +40 -11
  13. package/lib/avs/contracts/common.js +0 -3
  14. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +13 -11
  15. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1157 -1148
  16. package/lib/avs/contracts/factories/index.d.ts +1 -1
  17. package/lib/avs/contracts/factories/index.js +4 -9
  18. package/lib/avs/contracts/index.d.ts +3 -3
  19. package/lib/avs/contracts/index.js +6 -40
  20. package/lib/avs/types/index.d.ts +6 -6
  21. package/lib/avs/types/index.js +0 -3
  22. package/lib/avs/utils/contracts.d.ts +14 -14
  23. package/lib/avs/utils/contracts.js +50 -35
  24. package/lib/avs/utils/register.d.ts +3 -3
  25. package/lib/avs/utils/register.js +71 -79
  26. package/lib/avs/utils/tasks.d.ts +4 -4
  27. package/lib/avs/utils/tasks.js +44 -41
  28. package/lib/client/create-claim.d.ts +2 -2
  29. package/lib/client/create-claim.js +437 -400
  30. package/lib/client/index.d.ts +3 -3
  31. package/lib/client/index.js +3 -20
  32. package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +2 -2
  33. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +49 -56
  34. package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +4 -3
  35. package/lib/client/tunnels/make-rpc-tls-tunnel.js +123 -131
  36. package/lib/client/utils/attestor-pool.d.ts +3 -1
  37. package/lib/client/utils/attestor-pool.js +21 -25
  38. package/lib/client/utils/client-socket.d.ts +4 -4
  39. package/lib/client/utils/client-socket.js +114 -94
  40. package/lib/client/utils/message-handler.d.ts +2 -2
  41. package/lib/client/utils/message-handler.js +89 -86
  42. package/lib/config/index.d.ts +6 -3
  43. package/lib/config/index.js +60 -37
  44. package/lib/external-rpc/benchmark.d.ts +1 -0
  45. package/lib/external-rpc/benchmark.js +82 -0
  46. package/lib/external-rpc/event-bus.d.ts +7 -0
  47. package/lib/external-rpc/event-bus.js +17 -0
  48. package/lib/external-rpc/global.d.js +0 -0
  49. package/lib/external-rpc/handle-incoming-msg.d.ts +2 -0
  50. package/lib/external-rpc/handle-incoming-msg.js +241 -0
  51. package/lib/external-rpc/index.d.ts +3 -0
  52. package/lib/external-rpc/index.js +3 -0
  53. package/lib/external-rpc/jsc-polyfills/1.d.ts +14 -0
  54. package/lib/external-rpc/jsc-polyfills/1.js +80 -0
  55. package/lib/external-rpc/jsc-polyfills/2.js +15 -0
  56. package/lib/external-rpc/jsc-polyfills/event.d.ts +10 -0
  57. package/lib/external-rpc/jsc-polyfills/event.js +19 -0
  58. package/lib/external-rpc/jsc-polyfills/index.d.ts +2 -0
  59. package/lib/external-rpc/jsc-polyfills/index.js +2 -0
  60. package/lib/external-rpc/jsc-polyfills/ws.d.ts +21 -0
  61. package/lib/external-rpc/jsc-polyfills/ws.js +83 -0
  62. package/lib/external-rpc/setup-browser.d.ts +6 -0
  63. package/lib/external-rpc/setup-browser.js +33 -0
  64. package/lib/external-rpc/setup-jsc.d.ts +24 -0
  65. package/lib/external-rpc/setup-jsc.js +22 -0
  66. package/lib/{window-rpc → external-rpc}/types.d.ts +56 -35
  67. package/lib/external-rpc/types.js +0 -0
  68. package/lib/external-rpc/utils.d.ts +20 -0
  69. package/lib/external-rpc/utils.js +100 -0
  70. package/lib/external-rpc/zk.d.ts +14 -0
  71. package/lib/external-rpc/zk.js +58 -0
  72. package/lib/index.d.ts +8 -9
  73. package/lib/index.js +12 -49
  74. package/lib/mechain/abis/governanceABI.js +460 -461
  75. package/lib/mechain/abis/taskABI.js +505 -506
  76. package/lib/mechain/client/create-claim-on-mechain.d.ts +3 -3
  77. package/lib/mechain/client/create-claim-on-mechain.js +31 -30
  78. package/lib/mechain/client/index.d.ts +1 -1
  79. package/lib/mechain/client/index.js +1 -18
  80. package/lib/mechain/constants/index.js +8 -7
  81. package/lib/mechain/index.d.ts +2 -2
  82. package/lib/mechain/index.js +2 -19
  83. package/lib/mechain/types/index.d.ts +2 -2
  84. package/lib/mechain/types/index.js +0 -3
  85. package/lib/proto/api.d.ts +182 -39
  86. package/lib/proto/api.js +4105 -3555
  87. package/lib/proto/tee-bundle.d.ts +156 -0
  88. package/lib/proto/tee-bundle.js +1296 -0
  89. package/lib/providers/http/index.d.ts +16 -1
  90. package/lib/providers/http/index.js +603 -576
  91. package/lib/providers/http/patch-parse5-tree.d.ts +6 -0
  92. package/lib/providers/http/patch-parse5-tree.js +34 -0
  93. package/lib/providers/http/utils.d.ts +7 -4
  94. package/lib/providers/http/utils.js +240 -317
  95. package/lib/providers/index.d.ts +1 -1
  96. package/lib/providers/index.js +5 -9
  97. package/lib/scripts/check-avs-registration.d.ts +1 -1
  98. package/lib/scripts/check-avs-registration.js +24 -25
  99. package/lib/scripts/fallbacks/crypto.d.ts +1 -0
  100. package/lib/scripts/fallbacks/crypto.js +4 -0
  101. package/lib/scripts/fallbacks/empty.d.ts +3 -0
  102. package/lib/scripts/fallbacks/empty.js +4 -0
  103. package/lib/scripts/fallbacks/re2.d.ts +1 -0
  104. package/lib/scripts/fallbacks/re2.js +7 -0
  105. package/lib/scripts/fallbacks/snarkjs.d.ts +1 -0
  106. package/lib/scripts/fallbacks/snarkjs.js +10 -0
  107. package/lib/scripts/fallbacks/stwo.d.ts +6 -0
  108. package/lib/scripts/fallbacks/stwo.js +159 -0
  109. package/lib/scripts/generate-provider-types.js +92 -73
  110. package/lib/scripts/generate-receipt.d.ts +2 -2
  111. package/lib/scripts/generate-receipt.js +94 -83
  112. package/lib/scripts/generate-toprf-keys.js +17 -16
  113. package/lib/scripts/jsc-cli-rpc.d.ts +1 -0
  114. package/lib/scripts/jsc-cli-rpc.js +35 -0
  115. package/lib/scripts/register-avs-operator.d.ts +1 -1
  116. package/lib/scripts/register-avs-operator.js +3 -7
  117. package/lib/scripts/start-server.d.ts +1 -1
  118. package/lib/scripts/start-server.js +9 -11
  119. package/lib/scripts/update-avs-metadata.d.ts +1 -1
  120. package/lib/scripts/update-avs-metadata.js +17 -19
  121. package/lib/scripts/utils.js +8 -9
  122. package/lib/scripts/whitelist-operator.d.ts +1 -1
  123. package/lib/scripts/whitelist-operator.js +13 -15
  124. package/lib/server/create-server.d.ts +3 -2
  125. package/lib/server/create-server.js +98 -85
  126. package/lib/server/handlers/claimTeeBundle.d.ts +6 -0
  127. package/lib/server/handlers/claimTeeBundle.js +232 -0
  128. package/lib/server/handlers/claimTunnel.d.ts +1 -1
  129. package/lib/server/handlers/claimTunnel.js +75 -73
  130. package/lib/server/handlers/completeClaimOnChain.d.ts +1 -1
  131. package/lib/server/handlers/completeClaimOnChain.js +27 -26
  132. package/lib/server/handlers/createClaimOnChain.d.ts +1 -1
  133. package/lib/server/handlers/createClaimOnChain.js +30 -29
  134. package/lib/server/handlers/createTaskOnMechain.d.ts +1 -1
  135. package/lib/server/handlers/createTaskOnMechain.js +54 -49
  136. package/lib/server/handlers/createTunnel.d.ts +1 -1
  137. package/lib/server/handlers/createTunnel.js +91 -94
  138. package/lib/server/handlers/disconnectTunnel.d.ts +1 -1
  139. package/lib/server/handlers/disconnectTunnel.js +6 -8
  140. package/lib/server/handlers/fetchCertificateBytes.d.ts +2 -0
  141. package/lib/server/handlers/fetchCertificateBytes.js +57 -0
  142. package/lib/server/handlers/index.d.ts +1 -1
  143. package/lib/server/handlers/index.js +24 -21
  144. package/lib/server/handlers/init.d.ts +1 -1
  145. package/lib/server/handlers/init.js +31 -34
  146. package/lib/server/handlers/toprf.d.ts +1 -1
  147. package/lib/server/handlers/toprf.js +17 -19
  148. package/lib/server/index.d.ts +4 -4
  149. package/lib/server/index.js +4 -21
  150. package/lib/server/socket.d.ts +7 -7
  151. package/lib/server/socket.js +104 -106
  152. package/lib/server/tunnels/make-tcp-tunnel.d.ts +5 -3
  153. package/lib/server/tunnels/make-tcp-tunnel.js +189 -162
  154. package/lib/server/utils/apm.d.ts +1 -1
  155. package/lib/server/utils/apm.js +26 -40
  156. package/lib/server/utils/assert-valid-claim-request.d.ts +6 -5
  157. package/lib/server/utils/assert-valid-claim-request.js +339 -185
  158. package/lib/server/utils/config-env.js +4 -7
  159. package/lib/server/utils/dns.js +18 -16
  160. package/lib/server/utils/gcp-attestation.d.ts +17 -0
  161. package/lib/server/utils/gcp-attestation.js +237 -0
  162. package/lib/server/utils/generics.d.ts +3 -3
  163. package/lib/server/utils/generics.js +37 -51
  164. package/lib/server/utils/iso.js +255 -256
  165. package/lib/server/utils/keep-alive.d.ts +2 -2
  166. package/lib/server/utils/keep-alive.js +36 -40
  167. package/lib/server/utils/nitro-attestation.d.ts +33 -0
  168. package/lib/server/utils/nitro-attestation.js +249 -0
  169. package/lib/server/utils/oprf-raw.d.ts +21 -0
  170. package/lib/server/utils/oprf-raw.js +61 -0
  171. package/lib/server/utils/process-handshake.d.ts +3 -3
  172. package/lib/server/utils/process-handshake.js +217 -175
  173. package/lib/server/utils/proxy-session.d.ts +1 -0
  174. package/lib/server/utils/proxy-session.js +6 -0
  175. package/lib/server/utils/tee-oprf-mpc-verification.d.ts +16 -0
  176. package/lib/server/utils/tee-oprf-mpc-verification.js +86 -0
  177. package/lib/server/utils/tee-oprf-verification.d.ts +24 -0
  178. package/lib/server/utils/tee-oprf-verification.js +151 -0
  179. package/lib/server/utils/tee-transcript-reconstruction.d.ts +24 -0
  180. package/lib/server/utils/tee-transcript-reconstruction.js +140 -0
  181. package/lib/server/utils/tee-verification.d.ts +28 -0
  182. package/lib/server/utils/tee-verification.js +358 -0
  183. package/lib/{utils → server/utils}/validation.d.ts +1 -1
  184. package/lib/server/utils/validation.js +45 -0
  185. package/lib/types/bgp.js +0 -3
  186. package/lib/types/claims.d.ts +7 -10
  187. package/lib/types/claims.js +0 -3
  188. package/lib/types/client.d.ts +5 -5
  189. package/lib/types/client.js +0 -3
  190. package/lib/types/general.d.ts +29 -4
  191. package/lib/types/general.js +0 -3
  192. package/lib/types/handlers.d.ts +3 -3
  193. package/lib/types/handlers.js +0 -3
  194. package/lib/types/index.d.ts +10 -10
  195. package/lib/types/index.js +10 -27
  196. package/lib/types/providers.d.ts +15 -4
  197. package/lib/types/providers.gen.d.ts +15 -1
  198. package/lib/types/providers.gen.js +15 -13
  199. package/lib/types/providers.js +0 -3
  200. package/lib/types/rpc.d.ts +2 -2
  201. package/lib/types/rpc.js +0 -3
  202. package/lib/types/signatures.js +0 -3
  203. package/lib/types/tunnel.d.ts +2 -2
  204. package/lib/types/tunnel.js +0 -3
  205. package/lib/types/zk.d.ts +17 -2
  206. package/lib/types/zk.js +0 -3
  207. package/lib/utils/auth.d.ts +2 -1
  208. package/lib/utils/auth.js +66 -59
  209. package/lib/utils/b64-json.js +13 -19
  210. package/lib/utils/bgp-listener.d.ts +1 -1
  211. package/lib/utils/bgp-listener.js +111 -114
  212. package/lib/utils/claims.d.ts +3 -3
  213. package/lib/utils/claims.js +78 -101
  214. package/lib/utils/env.js +15 -16
  215. package/lib/utils/error.d.ts +6 -7
  216. package/lib/utils/error.js +50 -39
  217. package/lib/utils/generics.d.ts +15 -13
  218. package/lib/utils/generics.js +217 -297
  219. package/lib/utils/http-parser.d.ts +1 -1
  220. package/lib/utils/http-parser.js +186 -237
  221. package/lib/utils/index.d.ts +13 -12
  222. package/lib/utils/index.js +13 -29
  223. package/lib/utils/logger.d.ts +1 -1
  224. package/lib/utils/logger.js +69 -87
  225. package/lib/utils/prepare-packets.d.ts +3 -3
  226. package/lib/utils/prepare-packets.js +66 -58
  227. package/lib/utils/redactions.d.ts +20 -1
  228. package/lib/utils/redactions.js +116 -129
  229. package/lib/utils/retries.d.ts +1 -1
  230. package/lib/utils/retries.js +24 -26
  231. package/lib/utils/signatures/eth.d.ts +1 -1
  232. package/lib/utils/signatures/eth.js +28 -30
  233. package/lib/utils/signatures/index.d.ts +3 -3
  234. package/lib/utils/signatures/index.js +11 -10
  235. package/lib/utils/socket-base.d.ts +6 -5
  236. package/lib/utils/socket-base.js +89 -88
  237. package/lib/utils/tls.d.ts +1 -1
  238. package/lib/utils/tls.js +54 -28
  239. package/lib/utils/ws.d.ts +1 -6
  240. package/lib/utils/ws.js +17 -33
  241. package/lib/utils/zk.d.ts +28 -12
  242. package/lib/utils/zk.js +587 -406
  243. package/package.json +72 -60
  244. package/lib/avs/tests/test.operator.d.ts +0 -11
  245. package/lib/avs/tests/test.operator.js +0 -313
  246. package/lib/avs/tests/utils.d.ts +0 -2
  247. package/lib/avs/tests/utils.js +0 -50
  248. package/lib/scripts/verify-root-ca.d.ts +0 -1
  249. package/lib/scripts/verify-root-ca.js +0 -51
  250. package/lib/tests/describe-with-server.d.ts +0 -20
  251. package/lib/tests/describe-with-server.js +0 -64
  252. package/lib/tests/mock-provider-server.d.ts +0 -13
  253. package/lib/tests/mock-provider-server.js +0 -65
  254. package/lib/tests/mocks.d.ts +0 -4
  255. package/lib/tests/mocks.js +0 -23
  256. package/lib/tests/test.auth.js +0 -75
  257. package/lib/tests/test.bgp-listener.js +0 -169
  258. package/lib/tests/test.claim-creation.js +0 -280
  259. package/lib/tests/test.http-parser.d.ts +0 -1
  260. package/lib/tests/test.http-parser.js +0 -120
  261. package/lib/tests/test.http-provider-utils.js +0 -2416
  262. package/lib/tests/test.http-provider.d.ts +0 -1
  263. package/lib/tests/test.http-provider.js +0 -114
  264. package/lib/tests/test.rpc-communication.d.ts +0 -1
  265. package/lib/tests/test.rpc-communication.js +0 -64
  266. package/lib/tests/test.rpc-tunnel.d.ts +0 -1
  267. package/lib/tests/test.rpc-tunnel.js +0 -172
  268. package/lib/tests/test.signatures.d.ts +0 -1
  269. package/lib/tests/test.signatures.js +0 -24
  270. package/lib/tests/test.tcp-tunnel.d.ts +0 -1
  271. package/lib/tests/test.tcp-tunnel.js +0 -64
  272. package/lib/tests/test.zk.d.ts +0 -1
  273. package/lib/tests/test.zk.js +0 -337
  274. package/lib/tests/utils.d.ts +0 -18
  275. package/lib/tests/utils.js +0 -64
  276. package/lib/utils/atomic-operations.d.ts +0 -24
  277. package/lib/utils/atomic-operations.js +0 -65
  278. package/lib/utils/benchmark.d.ts +0 -1
  279. package/lib/utils/benchmark.js +0 -70
  280. package/lib/utils/connection-state-machine.d.ts +0 -43
  281. package/lib/utils/connection-state-machine.js +0 -129
  282. package/lib/utils/resource-monitor.d.ts +0 -61
  283. package/lib/utils/resource-monitor.js +0 -107
  284. package/lib/utils/validation.js +0 -46
  285. package/lib/window-rpc/index.d.ts +0 -3
  286. package/lib/window-rpc/index.js +0 -20
  287. package/lib/window-rpc/setup-window-rpc.d.ts +0 -5
  288. package/lib/window-rpc/setup-window-rpc.js +0 -291
  289. package/lib/window-rpc/types.js +0 -3
  290. package/lib/window-rpc/utils.d.ts +0 -14
  291. package/lib/window-rpc/utils.js +0 -102
  292. package/lib/window-rpc/window-rpc-zk.d.ts +0 -15
  293. package/lib/window-rpc/window-rpc-zk.js +0 -85
  294. /package/lib/{tests/test.auth.d.ts → external-rpc/jsc-polyfills/2.d.ts} +0 -0
  295. /package/lib/{tests/test.bgp-listener.d.ts → scripts/build-browser.d.ts} +0 -0
  296. /package/lib/{tests/test.claim-creation.d.ts → scripts/build-jsc.d.ts} +0 -0
  297. /package/lib/{tests/test.http-provider-utils.d.ts → scripts/build-lib.d.ts} +0 -0
@@ -1,200 +1,354 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assertValidClaimRequest = assertValidClaimRequest;
4
- exports.assertValidProviderTranscript = assertValidProviderTranscript;
5
- exports.assertTranscriptsMatch = assertTranscriptsMatch;
6
- exports.decryptTranscript = decryptTranscript;
7
- exports.getWithoutHeader = getWithoutHeader;
8
- const tls_1 = require("@reclaimprotocol/tls");
9
- const api_1 = require("../../proto/api");
10
- const providers_1 = require("../../providers");
11
- const generics_1 = require("../../server/utils/generics");
12
- const process_handshake_1 = require("../../server/utils/process-handshake");
13
- const utils_1 = require("../../utils");
14
- const signatures_1 = require("../../utils/signatures");
15
- /**
16
- * Asserts that the claim request is valid.
17
- *
18
- * 1. We begin by verifying the signature of the claim request.
19
- * 2. Next, we produce the transcript of the TLS exchange
20
- * from the proofs provided by the client.
21
- * 3. We then pull the provider the client is trying to claim
22
- * from
23
- * 4. We then use the provider's verification function to verify
24
- * whether the claim is valid.
25
- *
26
- * If any of these steps fail, we throw an error.
27
- */
1
+ import { areUint8ArraysEqual, concatenateUint8Arrays } from "@reclaimprotocol/tls";
2
+ import { ClaimTunnelRequest, TranscriptMessageSenderType } from "../../proto/api.js";
3
+ import { providers } from "../../providers/index.js";
4
+ import { niceParseJsonObject } from "../../server/utils/generics.js";
5
+ import { computeOPRFRaw } from "../../server/utils/oprf-raw.js";
6
+ import { processHandshake } from "../../server/utils/process-handshake.js";
7
+ import { assertValidateProviderParams } from "../../server/utils/validation.js";
8
+ import {
9
+ AttestorError,
10
+ binaryHashToStr,
11
+ canonicalStringify,
12
+ decryptDirect,
13
+ extractApplicationDataFromTranscript,
14
+ hashProviderParams,
15
+ SIGNATURES,
16
+ verifyZkPacket
17
+ } from "../../utils/index.js";
18
+ import { getEngineString } from "../../utils/zk.js";
28
19
  async function assertValidClaimRequest(request, metadata, logger) {
29
- var _a;
30
- const { data, signatures: { requestSignature } = {}, zkEngine, fixedServerIV, fixedClientIV } = request;
31
- if (!data) {
32
- throw new utils_1.AttestorError('ERROR_INVALID_CLAIM', 'No info provided on claim request');
33
- }
34
- if (!(requestSignature === null || requestSignature === void 0 ? void 0 : requestSignature.length)) {
35
- throw new utils_1.AttestorError('ERROR_INVALID_CLAIM', 'No signature provided on claim request');
36
- }
37
- // verify request signature
38
- const serialisedReq = api_1.ClaimTunnelRequest
39
- .encode({ ...request, signatures: undefined })
40
- .finish();
41
- const { verify: verifySig } = signatures_1.SIGNATURES[metadata.signatureType];
42
- const verified = await verifySig(serialisedReq, requestSignature, data.owner);
43
- if (!verified) {
44
- throw new utils_1.AttestorError('ERROR_INVALID_CLAIM', 'Invalid signature on claim request');
45
- }
46
- const receipt = await decryptTranscript(request.transcript, logger, zkEngine === api_1.ZKProofEngine.ZK_ENGINE_GNARK ? 'gnark' : 'snarkjs', fixedServerIV, fixedClientIV);
47
- const reqHost = (_a = request.request) === null || _a === void 0 ? void 0 : _a.host;
48
- if (receipt.hostname !== reqHost) {
49
- throw new Error(`Expected server name ${reqHost}, got ${receipt.hostname}`);
50
- }
51
- // get all application data messages
52
- const applData = (0, utils_1.extractApplicationDataFromTranscript)(receipt);
53
- const newData = await assertValidProviderTranscript(applData, data, logger, { version: metadata.clientVersion });
54
- if (newData !== data) {
55
- logger.info({ newData }, 'updated claim info');
56
- }
57
- return newData;
20
+ const {
21
+ data,
22
+ signatures: { requestSignature } = {},
23
+ zkEngine,
24
+ fixedServerIV,
25
+ fixedClientIV
26
+ } = request;
27
+ if (!data) {
28
+ throw new AttestorError(
29
+ "ERROR_INVALID_CLAIM",
30
+ "No info provided on claim request"
31
+ );
32
+ }
33
+ if (!requestSignature?.length) {
34
+ throw new AttestorError(
35
+ "ERROR_INVALID_CLAIM",
36
+ "No signature provided on claim request"
37
+ );
38
+ }
39
+ const serialisedReq = ClaimTunnelRequest.encode({ ...request, signatures: void 0 }).finish();
40
+ const { verify: verifySig } = SIGNATURES[metadata.signatureType];
41
+ const verified = await verifySig(serialisedReq, requestSignature, data.owner);
42
+ if (!verified) {
43
+ throw new AttestorError(
44
+ "ERROR_INVALID_CLAIM",
45
+ "Invalid signature on claim request"
46
+ );
47
+ }
48
+ const receipt = await decryptTranscript(
49
+ request.transcript,
50
+ logger,
51
+ getEngineString(zkEngine),
52
+ fixedServerIV,
53
+ fixedClientIV
54
+ );
55
+ const reqHost = request.request?.host;
56
+ if (receipt.hostname !== reqHost) {
57
+ throw new Error(
58
+ `Expected server name ${reqHost}, got ${receipt.hostname}`
59
+ );
60
+ }
61
+ const applData = extractApplicationDataFromTranscript(receipt);
62
+ const newData = await assertValidProviderTranscript(
63
+ applData,
64
+ data,
65
+ logger,
66
+ { version: metadata.clientVersion },
67
+ receipt.oprfRawReplacements
68
+ );
69
+ if (newData !== data) {
70
+ logger.info({ newData }, "updated claim info");
71
+ }
72
+ return newData;
58
73
  }
59
- /**
60
- * Verify that the transcript contains a valid claim
61
- * for the provider.
62
- */
63
- async function assertValidProviderTranscript(applData, info, logger, providerCtx) {
64
- var _a;
65
- const providerName = info.provider;
66
- const provider = providers_1.providers[providerName];
67
- if (!provider) {
68
- throw new utils_1.AttestorError('ERROR_INVALID_CLAIM', `Unsupported provider: ${providerName}`);
69
- }
70
- const params = (0, generics_1.niceParseJsonObject)(info.parameters, 'params');
71
- const ctx = (0, generics_1.niceParseJsonObject)(info.context, 'context');
72
- (0, utils_1.assertValidateProviderParams)(providerName, params);
73
- const rslt = await provider.assertValidProviderReceipt({
74
- receipt: applData,
75
- params,
76
- logger,
77
- ctx: providerCtx
78
- });
79
- ctx.providerHash = (0, utils_1.hashProviderParams)(params);
80
- const extractedParameters = (rslt === null || rslt === void 0 ? void 0 : rslt.extractedParameters) || {};
81
- if (Object.keys(extractedParameters).length) {
82
- ctx.extractedParameters = extractedParameters;
74
+ async function assertValidProviderTranscript(applData, info, logger, providerCtx, oprfRawReplacements) {
75
+ const providerName = info.provider;
76
+ const provider = providers[providerName];
77
+ if (!provider) {
78
+ throw new AttestorError(
79
+ "ERROR_INVALID_CLAIM",
80
+ `Unsupported provider: ${providerName}`
81
+ );
82
+ }
83
+ let params = niceParseJsonObject(info.parameters, "params");
84
+ const ctx = niceParseJsonObject(info.context, "context");
85
+ if (oprfRawReplacements?.length) {
86
+ let strParams = canonicalStringify(params) ?? "{}";
87
+ for (const { originalText, nullifierText } of oprfRawReplacements) {
88
+ strParams = strParams.replaceAll(originalText, nullifierText);
83
89
  }
84
- info.context = (_a = (0, utils_1.canonicalStringify)(ctx)) !== null && _a !== void 0 ? _a : '';
85
- return info;
90
+ params = JSON.parse(strParams);
91
+ info.parameters = strParams;
92
+ logger.debug(
93
+ { replacements: oprfRawReplacements.length },
94
+ "applied oprf-raw parameter replacements"
95
+ );
96
+ }
97
+ assertValidateProviderParams(providerName, params);
98
+ const rslt = await provider.assertValidProviderReceipt({
99
+ receipt: applData,
100
+ params,
101
+ logger,
102
+ ctx: providerCtx
103
+ });
104
+ ctx.providerHash = hashProviderParams(params);
105
+ const extractedParameters = rslt?.extractedParameters || {};
106
+ if (Object.keys(extractedParameters).length) {
107
+ ctx.extractedParameters = extractedParameters;
108
+ }
109
+ info.context = canonicalStringify(ctx) ?? "";
110
+ return info;
86
111
  }
87
- /**
88
- * Verify that the transcript provided by the client
89
- * matches the transcript of the tunnel, the server
90
- * has created.
91
- */
92
112
  function assertTranscriptsMatch(clientTranscript, tunnelTranscript) {
93
- const clientSends = (0, tls_1.concatenateUint8Arrays)(clientTranscript
94
- .filter(m => m.sender === api_1.TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT)
95
- .map(m => m.message));
96
- const tunnelSends = (0, tls_1.concatenateUint8Arrays)(tunnelTranscript
97
- .filter(m => m.sender === 'client')
98
- .map(m => m.message));
99
- if (!(0, tls_1.areUint8ArraysEqual)(clientSends, tunnelSends)) {
100
- throw utils_1.AttestorError.badRequest('Outgoing messages from client do not match the tunnel transcript');
101
- }
102
- const clientRecvs = (0, tls_1.concatenateUint8Arrays)(clientTranscript
103
- .filter(m => m.sender === api_1.TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER)
104
- .map(m => m.message));
105
- const tunnelRecvs = (0, tls_1.concatenateUint8Arrays)(tunnelTranscript
106
- .filter(m => m.sender === 'server')
107
- .map(m => m.message))
108
- // We only need to compare the first N messages
109
- // that the client claims to have received
110
- // the rest are not relevant -- so even if they're
111
- // not present in the tunnel transcript, it's fine
112
- .slice(0, clientRecvs.length);
113
- if (!(0, tls_1.areUint8ArraysEqual)(clientRecvs, tunnelRecvs)) {
114
- throw utils_1.AttestorError.badRequest('Incoming messages from server do not match the tunnel transcript');
115
- }
113
+ const clientSends = concatenateUint8Arrays(
114
+ clientTranscript.filter((m) => m.sender === TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT).map((m) => m.message)
115
+ );
116
+ const tunnelSends = concatenateUint8Arrays(
117
+ tunnelTranscript.filter((m) => m.sender === "client").map((m) => m.message)
118
+ );
119
+ if (!areUint8ArraysEqual(clientSends, tunnelSends)) {
120
+ throw AttestorError.badRequest(
121
+ "Outgoing messages from client do not match the tunnel transcript"
122
+ );
123
+ }
124
+ const clientRecvs = concatenateUint8Arrays(
125
+ clientTranscript.filter((m) => m.sender === TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER).map((m) => m.message)
126
+ );
127
+ const tunnelRecvs = concatenateUint8Arrays(
128
+ tunnelTranscript.filter((m) => m.sender === "server").map((m) => m.message)
129
+ ).slice(0, clientRecvs.length);
130
+ if (!areUint8ArraysEqual(clientRecvs, tunnelRecvs)) {
131
+ throw AttestorError.badRequest(
132
+ "Incoming messages from server do not match the tunnel transcript"
133
+ );
134
+ }
116
135
  }
117
136
  async function decryptTranscript(transcript, logger, zkEngine, serverIV, clientIV) {
118
- const { tlsVersion, cipherSuite, hostname, nextMsgIndex } = await (0, process_handshake_1.processHandshake)(transcript, logger);
119
- let clientRecordNumber = tlsVersion === 'TLS1_3' ? -1 : 0; // TLS 1.3 has already one record encrypted at this point
120
- let serverRecordNumber = clientRecordNumber;
121
- transcript = transcript.slice(nextMsgIndex);
122
- const decryptedTranscript = [];
123
- for (const [i, { sender, message, reveal: { zkReveal, directReveal } = {} }] of transcript.entries()) {
124
- //start with first message after last handshake message
125
- await getDecryptedMessage(sender, message, directReveal, zkReveal, i);
137
+ const {
138
+ tlsVersion,
139
+ cipherSuite,
140
+ hostname,
141
+ nextMsgIndex
142
+ } = await processHandshake(transcript, logger);
143
+ let clientRecordNumber = tlsVersion === "TLS1_3" ? -1 : 0;
144
+ let serverRecordNumber = clientRecordNumber;
145
+ transcript = transcript.slice(nextMsgIndex);
146
+ const overshotMap = {};
147
+ const decryptedTranscript = [];
148
+ const oprfRawReplacements = [];
149
+ const pendingOprfRaw = {};
150
+ for (const [i, {
151
+ sender,
152
+ message,
153
+ reveal: { zkReveal, directReveal } = {}
154
+ }] of transcript.entries()) {
155
+ try {
156
+ await decryptMessage(sender, message, directReveal, zkReveal, i);
157
+ } catch (error) {
158
+ const err = new AttestorError(
159
+ "ERROR_INVALID_CLAIM",
160
+ `error in handling packet at idx ${i}: ${error}`,
161
+ { packetIdx: i, error }
162
+ );
163
+ if (error.stack) {
164
+ err.stack = error.stack;
165
+ }
166
+ throw err;
126
167
  }
127
- return {
128
- transcript: decryptedTranscript,
129
- hostname: hostname,
130
- tlsVersion: tlsVersion,
131
- };
132
- async function getDecryptedMessage(sender, message, directReveal, zkReveal, i) {
133
- var _a, _b;
134
- try {
135
- const isServer = sender === api_1.TranscriptMessageSenderType
136
- .TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER;
137
- const recordHeader = message.slice(0, 5);
138
- const content = getWithoutHeader(message);
139
- if (isServer) {
140
- serverRecordNumber++;
141
- }
142
- else {
143
- clientRecordNumber++;
144
- }
145
- let redacted = true;
146
- let plaintext = undefined;
147
- let plaintextLength;
148
- if ((_a = directReveal === null || directReveal === void 0 ? void 0 : directReveal.key) === null || _a === void 0 ? void 0 : _a.length) {
149
- const result = await (0, utils_1.decryptDirect)(directReveal, cipherSuite, recordHeader, tlsVersion, content);
150
- plaintext = result.plaintext;
151
- redacted = false;
152
- plaintextLength = plaintext.length;
153
- }
154
- else if ((_b = zkReveal === null || zkReveal === void 0 ? void 0 : zkReveal.proofs) === null || _b === void 0 ? void 0 : _b.length) {
155
- const result = await (0, utils_1.verifyZkPacket)({
156
- ciphertext: content,
157
- zkReveal,
158
- logger,
159
- cipherSuite,
160
- zkEngine: zkEngine,
161
- iv: sender === api_1.TranscriptMessageSenderType
162
- .TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER
163
- ? serverIV
164
- : clientIV,
165
- recordNumber: isServer
166
- ? serverRecordNumber
167
- : clientRecordNumber
168
- });
169
- plaintext = result.redactedPlaintext;
170
- redacted = false;
171
- plaintextLength = plaintext.length;
172
- }
173
- else {
174
- plaintext = content;
175
- plaintextLength = plaintext.length;
168
+ }
169
+ const remainingPending = Object.keys(pendingOprfRaw);
170
+ if (remainingPending.length) {
171
+ throw new AttestorError(
172
+ "ERROR_INVALID_CLAIM",
173
+ `oprf-raw cross-block markers incomplete: pending for packets ${remainingPending.join(", ")}`
174
+ );
175
+ }
176
+ return {
177
+ transcript: decryptedTranscript,
178
+ hostname,
179
+ tlsVersion,
180
+ oprfRawReplacements: oprfRawReplacements.length ? oprfRawReplacements : void 0
181
+ };
182
+ async function decryptMessage(sender, message, directReveal, zkReveal, i) {
183
+ const isServer = sender === TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER;
184
+ const recordHeader = message.slice(0, 5);
185
+ const content = getWithoutHeader(message);
186
+ if (isServer) {
187
+ serverRecordNumber++;
188
+ } else {
189
+ clientRecordNumber++;
190
+ }
191
+ let redacted = true;
192
+ let plaintext = void 0;
193
+ let plaintextLength;
194
+ if (directReveal?.key?.length) {
195
+ const result = await decryptDirect(
196
+ directReveal,
197
+ cipherSuite,
198
+ recordHeader,
199
+ tlsVersion,
200
+ content
201
+ );
202
+ plaintext = result.plaintext;
203
+ redacted = false;
204
+ plaintextLength = plaintext.length;
205
+ } else if (zkReveal?.proofs?.length) {
206
+ const iv = sender === TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_SERVER ? serverIV : clientIV;
207
+ const recordNumber = isServer ? serverRecordNumber : clientRecordNumber;
208
+ const result = await verifyZkPacket(
209
+ {
210
+ ciphertext: content,
211
+ zkReveal,
212
+ iv,
213
+ recordNumber,
214
+ toprfOvershotNullifier: overshotMap[i]?.data,
215
+ getNextPacket(overshot) {
216
+ const nextIdx = transcript.findIndex((t, j) => t.sender === sender && j > i);
217
+ if (nextIdx < 0) {
218
+ return;
176
219
  }
177
- decryptedTranscript.push({
178
- sender: sender === api_1.TranscriptMessageSenderType
179
- .TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT
180
- ? 'client'
181
- : 'server',
182
- redacted,
183
- message: plaintext,
184
- recordHeader,
185
- plaintextLength,
186
- });
220
+ overshotMap[nextIdx] = { data: overshot };
221
+ return getWithoutHeader(transcript[nextIdx].message);
222
+ },
223
+ logger,
224
+ cipherSuite,
225
+ zkEngine
226
+ }
227
+ );
228
+ plaintext = result.redactedPlaintext;
229
+ const pendingForThis = pendingOprfRaw[i];
230
+ if (pendingForThis && zkReveal?.overshotOprfRawLength) {
231
+ const overshootLen = zkReveal.overshotOprfRawLength;
232
+ const overshootData = plaintext.slice(0, overshootLen);
233
+ const fullData = concatenateUint8Arrays([
234
+ pendingForThis.partialData,
235
+ overshootData
236
+ ]);
237
+ const expectedLen = pendingForThis.dataLocation.length;
238
+ if (fullData.length !== expectedLen) {
239
+ throw new AttestorError(
240
+ "ERROR_INVALID_CLAIM",
241
+ `oprf-raw cross-block length mismatch: got ${fullData.length}, expected ${expectedLen}`
242
+ );
243
+ }
244
+ const oprfResults = await computeOPRFRaw(
245
+ fullData,
246
+ [{ dataLocation: { fromIndex: 0, length: fullData.length } }],
247
+ logger
248
+ );
249
+ if (oprfResults.length) {
250
+ const { nullifier } = oprfResults[0];
251
+ const originalText = new TextDecoder().decode(fullData);
252
+ const nullifierStr = binaryHashToStr(nullifier, fullData.length);
253
+ oprfRawReplacements.push({ originalText, nullifierText: nullifierStr });
254
+ const nullifierBytes = new TextEncoder().encode(nullifierStr);
255
+ const overshootNullifier = nullifierBytes.slice(pendingForThis.partialData.length);
256
+ plaintext.set(overshootNullifier, 0);
257
+ const prevPkt = decryptedTranscript[pendingForThis.originPktIdx];
258
+ if (prevPkt) {
259
+ const firstPartNullifier = nullifierBytes.slice(0, pendingForThis.partialData.length);
260
+ prevPkt.message.set(firstPartNullifier, pendingForThis.dataLocation.fromIndex);
261
+ }
262
+ }
263
+ delete pendingOprfRaw[i];
264
+ }
265
+ if (result.oprfRawMarkers?.length) {
266
+ const { markersThisPacket, pendingMarker } = separateOprfRawMarkers(
267
+ result.oprfRawMarkers,
268
+ plaintext.length,
269
+ () => transcript.findIndex((t, j) => t.sender === sender && j > i),
270
+ decryptedTranscript.length,
271
+ logger
272
+ );
273
+ if (pendingMarker) {
274
+ pendingMarker.pending.partialData.set(
275
+ plaintext.slice(pendingMarker.pending.dataLocation.fromIndex)
276
+ );
277
+ pendingOprfRaw[pendingMarker.nextIdx] = pendingMarker.pending;
187
278
  }
188
- catch (error) {
189
- throw new utils_1.AttestorError('ERROR_INVALID_CLAIM', `error in handling packet at idx ${i}: ${error}`, {
190
- packetIdx: i,
191
- error: error,
192
- });
279
+ if (markersThisPacket.length) {
280
+ const pt = plaintext;
281
+ const oprfResults = await computeOPRFRaw(pt, markersThisPacket, logger);
282
+ const originalTexts = oprfResults.map(({ dataLocation }) => new TextDecoder().decode(
283
+ pt.slice(dataLocation.fromIndex, dataLocation.fromIndex + dataLocation.length)
284
+ ));
285
+ for (const [idx, { dataLocation, nullifier }] of oprfResults.entries()) {
286
+ const originalText = originalTexts[idx];
287
+ const nullifierStr = binaryHashToStr(nullifier, dataLocation.length);
288
+ oprfRawReplacements.push({ originalText, nullifierText: nullifierStr });
289
+ const nullifierBytes = new TextEncoder().encode(nullifierStr);
290
+ pt.set(nullifierBytes, dataLocation.fromIndex);
291
+ }
193
292
  }
293
+ }
294
+ redacted = false;
295
+ plaintextLength = plaintext.length;
296
+ } else {
297
+ plaintext = content;
298
+ plaintextLength = plaintext.length;
194
299
  }
300
+ decryptedTranscript.push({
301
+ sender: sender === TranscriptMessageSenderType.TRANSCRIPT_MESSAGE_SENDER_TYPE_CLIENT ? "client" : "server",
302
+ redacted,
303
+ message: plaintext,
304
+ recordHeader,
305
+ plaintextLength
306
+ });
307
+ }
195
308
  }
196
309
  function getWithoutHeader(message) {
197
- // strip the record header (xx 03 03 xx xx)
198
- return message.slice(5);
310
+ return message.slice(5);
311
+ }
312
+ function separateOprfRawMarkers(markers, plaintextLength, findNextPacketIdx, currentTranscriptLength, logger) {
313
+ const markersThisPacket = [];
314
+ let pendingMarker;
315
+ for (const marker of markers) {
316
+ const dataLocation = marker.dataLocation;
317
+ if (!dataLocation) {
318
+ continue;
319
+ }
320
+ const { fromIndex, length } = dataLocation;
321
+ const endInPacket = fromIndex + length;
322
+ if (endInPacket <= plaintextLength) {
323
+ markersThisPacket.push({ dataLocation });
324
+ continue;
325
+ }
326
+ const nextIdx = findNextPacketIdx();
327
+ if (nextIdx < 0) {
328
+ throw new AttestorError(
329
+ "ERROR_INVALID_CLAIM",
330
+ "oprf-raw marker spans packets but no next packet found"
331
+ );
332
+ }
333
+ pendingMarker = {
334
+ nextIdx,
335
+ pending: {
336
+ partialData: new Uint8Array(plaintextLength - fromIndex),
337
+ dataLocation: { fromIndex, length },
338
+ originPktIdx: currentTranscriptLength
339
+ }
340
+ };
341
+ logger.debug(
342
+ { fromIndex, length, partialLen: plaintextLength - fromIndex, nextIdx },
343
+ "oprf-raw marker spans packets, storing partial data"
344
+ );
345
+ }
346
+ return { markersThisPacket, pendingMarker };
199
347
  }
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LXZhbGlkLWNsYWltLXJlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3V0aWxzL2Fzc2VydC12YWxpZC1jbGFpbS1yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBK0NBLDBEQW9FQztBQU1ELHNFQXFDQztBQU9ELHdEQTJDQztBQUVELDhDQTZHQztBQUVELDRDQUdDO0FBcFVELDhDQUc2QjtBQUU3Qix1Q0FRc0I7QUFDdEIsNkNBQXlDO0FBQ3pDLHdEQUErRDtBQUMvRCwwRUFBcUU7QUFTckUscUNBTWtCO0FBQ2xCLHFEQUFpRDtBQUVqRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSSxLQUFLLFVBQVUsdUJBQXVCLENBQzVDLE9BQTJCLEVBQzNCLFFBQXFCLEVBQ3JCLE1BQWM7O0lBRWQsTUFBTSxFQUNMLElBQUksRUFDSixVQUFVLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsRUFDckMsUUFBUSxFQUNSLGFBQWEsRUFDYixhQUFhLEVBQ2IsR0FBRyxPQUFPLENBQUE7SUFDWCxJQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixNQUFNLElBQUkscUJBQWEsQ0FDdEIscUJBQXFCLEVBQ3JCLG1DQUFtQyxDQUNuQyxDQUFBO0lBQ0YsQ0FBQztJQUVELElBQUcsQ0FBQyxDQUFBLGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixDQUFFLE1BQU0sQ0FBQSxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLHFCQUFhLENBQ3RCLHFCQUFxQixFQUNyQix3Q0FBd0MsQ0FDeEMsQ0FBQTtJQUNGLENBQUM7SUFFRCwyQkFBMkI7SUFDM0IsTUFBTSxhQUFhLEdBQUcsd0JBQWtCO1NBQ3RDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQztTQUM3QyxNQUFNLEVBQUUsQ0FBQTtJQUNWLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsdUJBQVUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDaEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQy9CLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FDVixDQUFBO0lBQ0QsSUFBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLHFCQUFhLENBQ3RCLHFCQUFxQixFQUNyQixvQ0FBb0MsQ0FDcEMsQ0FBQTtJQUNGLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGlCQUFpQixDQUN0QyxPQUFPLENBQUMsVUFBVSxFQUNsQixNQUFNLEVBQ04sUUFBUSxLQUFLLG1CQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDaEUsYUFBYSxFQUNiLGFBQWEsQ0FDYixDQUFBO0lBQ0QsTUFBTSxPQUFPLEdBQUcsTUFBQSxPQUFPLENBQUMsT0FBTywwQ0FBRSxJQUFJLENBQUE7SUFDckMsSUFBRyxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQ2Qsd0JBQXdCLE9BQU8sU0FBUyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQzFELENBQUE7SUFDRixDQUFDO0lBR0Qsb0NBQW9DO0lBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUEsNENBQW9DLEVBQUMsT0FBTyxDQUFDLENBQUE7SUFDOUQsTUFBTSxPQUFPLEdBQUcsTUFBTSw2QkFBNkIsQ0FDbEQsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUMzRCxDQUFBO0lBQ0QsSUFBRyxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLG9CQUFvQixDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFBO0FBQ2YsQ0FBQztBQUVEOzs7R0FHRztBQUNJLEtBQUssVUFBVSw2QkFBNkIsQ0FDbEQsUUFBZ0MsRUFDaEMsSUFBTyxFQUNQLE1BQWMsRUFDZCxXQUF3Qjs7SUFFeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQXdCLENBQUE7SUFDbEQsTUFBTSxRQUFRLEdBQUcscUJBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUN4QyxJQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUkscUJBQWEsQ0FDdEIscUJBQXFCLEVBQ3JCLHlCQUF5QixZQUFZLEVBQUUsQ0FDdkMsQ0FBQTtJQUNGLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDhCQUFtQixFQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDN0QsTUFBTSxHQUFHLEdBQUcsSUFBQSw4QkFBbUIsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBRXhELElBQUEsb0NBQTRCLEVBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRWxELE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLDBCQUEwQixDQUFDO1FBQ3RELE9BQU8sRUFBRSxRQUFRO1FBQ2pCLE1BQU07UUFDTixNQUFNO1FBQ04sR0FBRyxFQUFFLFdBQVc7S0FDaEIsQ0FBQyxDQUFBO0lBRUYsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFBLDBCQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTdDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsbUJBQW1CLEtBQUksRUFBRSxDQUFBO0lBQzNELElBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzVDLEdBQUcsQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQTtJQUM5QyxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFBLElBQUEsMEJBQWtCLEVBQUMsR0FBRyxDQUFDLG1DQUFJLEVBQUUsQ0FBQTtJQUU1QyxPQUFPLElBQUksQ0FBQTtBQUNaLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQ3JDLGdCQUFrRCxFQUNsRCxnQkFBbUQ7SUFFbkQsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBc0IsRUFDekMsZ0JBQWdCO1NBQ2QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxpQ0FBMkIsQ0FBQyxxQ0FBcUMsQ0FBQztTQUMzRixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQ3JCLENBQUE7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFzQixFQUN6QyxnQkFBZ0I7U0FDZCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQztTQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQ3JCLENBQUE7SUFFRCxJQUFHLENBQUMsSUFBQSx5QkFBbUIsRUFBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxNQUFNLHFCQUFhLENBQUMsVUFBVSxDQUM3QixrRUFBa0UsQ0FDbEUsQ0FBQTtJQUNGLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFzQixFQUN6QyxnQkFBZ0I7U0FDZCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLGlDQUEyQixDQUFDLHFDQUFxQyxDQUFDO1NBQzNGLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FDckIsQ0FBQTtJQUVELE1BQU0sV0FBVyxHQUFHLElBQUEsNEJBQXNCLEVBQ3pDLGdCQUFnQjtTQUNkLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDO1NBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FDckI7UUFDQSwrQ0FBK0M7UUFDL0MsMENBQTBDO1FBQzFDLGtEQUFrRDtRQUNsRCxrREFBa0Q7U0FDakQsS0FBSyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDOUIsSUFBRyxDQUFDLElBQUEseUJBQW1CLEVBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDbkQsTUFBTSxxQkFBYSxDQUFDLFVBQVUsQ0FDN0Isa0VBQWtFLENBQ2xFLENBQUE7SUFDRixDQUFDO0FBQ0YsQ0FBQztBQUVNLEtBQUssVUFBVSxpQkFBaUIsQ0FDdEMsVUFBNEMsRUFDNUMsTUFBYyxFQUNkLFFBQWtCLEVBQ2xCLFFBQW9CLEVBQ3BCLFFBQW9CO0lBR3BCLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsR0FBRyxNQUFNLElBQUEsb0NBQWdCLEVBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRXRHLElBQUksa0JBQWtCLEdBQUcsVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLHlEQUF5RDtJQUNuSCxJQUFJLGtCQUFrQixHQUFHLGtCQUFrQixDQUFBO0lBRTNDLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBRTNDLE1BQU0sbUJBQW1CLEdBQWtDLEVBQUUsQ0FBQTtJQUU3RCxLQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFDYixNQUFNLEVBQ04sT0FBTyxFQUNQLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEVBQ3ZDLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUM1Qix1REFBdUQ7UUFDdkQsTUFBTSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDdEUsQ0FBQztJQUVELE9BQU87UUFDTixVQUFVLEVBQUUsbUJBQW1CO1FBQy9CLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLFVBQVUsRUFBRSxVQUFVO0tBQ3RCLENBQUE7SUFFRCxLQUFLLFVBQVUsbUJBQW1CLENBQ2pDLE1BQW1DLEVBQ25DLE9BQW1CLEVBQ25CLFlBQTZDLEVBQzdDLFFBQXFDLEVBQ3JDLENBQVM7O1FBRVQsSUFBSSxDQUFDO1lBQ0osTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLGlDQUEyQjtpQkFDckQscUNBQXFDLENBQUE7WUFDdkMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDeEMsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDekMsSUFBRyxRQUFRLEVBQUUsQ0FBQztnQkFDYixrQkFBa0IsRUFBRSxDQUFBO1lBQ3JCLENBQUM7aUJBQU0sQ0FBQztnQkFDUCxrQkFBa0IsRUFBRSxDQUFBO1lBQ3JCLENBQUM7WUFFRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUE7WUFDbkIsSUFBSSxTQUFTLEdBQTJCLFNBQVMsQ0FBQTtZQUNqRCxJQUFJLGVBQXVCLENBQUE7WUFFM0IsSUFBRyxNQUFBLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxHQUFHLDBDQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEscUJBQWEsRUFDakMsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQ3ZDLFVBQVUsRUFBRSxPQUFPLENBQ25CLENBQUE7Z0JBQ0QsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUE7Z0JBQzVCLFFBQVEsR0FBRyxLQUFLLENBQUE7Z0JBQ2hCLGVBQWUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFBO1lBQ25DLENBQUM7aUJBQU0sSUFBRyxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxNQUFNLDBDQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsc0JBQWMsRUFDbEM7b0JBQ0MsVUFBVSxFQUFFLE9BQU87b0JBQ25CLFFBQVE7b0JBQ1IsTUFBTTtvQkFDTixXQUFXO29CQUNYLFFBQVEsRUFBRSxRQUFRO29CQUNsQixFQUFFLEVBQUUsTUFBTSxLQUFLLGlDQUEyQjt5QkFDeEMscUNBQXFDO3dCQUN0QyxDQUFDLENBQUMsUUFBUTt3QkFDVixDQUFDLENBQUMsUUFBUTtvQkFDWCxZQUFZLEVBQUUsUUFBUTt3QkFDckIsQ0FBQyxDQUFDLGtCQUFrQjt3QkFDcEIsQ0FBQyxDQUFDLGtCQUFrQjtpQkFDckIsQ0FDRCxDQUFBO2dCQUNELFNBQVMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUE7Z0JBQ3BDLFFBQVEsR0FBRyxLQUFLLENBQUE7Z0JBQ2hCLGVBQWUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFBO1lBQ25DLENBQUM7aUJBQU0sQ0FBQztnQkFDUCxTQUFTLEdBQUcsT0FBTyxDQUFBO2dCQUNuQixlQUFlLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQTtZQUNuQyxDQUFDO1lBRUQsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUN4QixNQUFNLEVBQUUsTUFBTSxLQUFLLGlDQUEyQjtxQkFDNUMscUNBQXFDO29CQUN0QyxDQUFDLENBQUMsUUFBUTtvQkFDVixDQUFDLENBQUMsUUFBUTtnQkFDWCxRQUFRO2dCQUNSLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixZQUFZO2dCQUNaLGVBQWU7YUFDZixDQUFDLENBQUE7UUFFSCxDQUFDO1FBQUMsT0FBTSxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxxQkFBYSxDQUN0QixxQkFBcUIsRUFDckIsbUNBQW1DLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFDaEQ7Z0JBQ0MsU0FBUyxFQUFFLENBQUM7Z0JBQ1osS0FBSyxFQUFFLEtBQUs7YUFDWixDQUNELENBQUE7UUFDRixDQUFDO0lBQ0YsQ0FBQztBQUNGLENBQUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxPQUFtQjtJQUNuRCwyQ0FBMkM7SUFDM0MsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3hCLENBQUMifQ==
348
+ export {
349
+ assertTranscriptsMatch,
350
+ assertValidClaimRequest,
351
+ assertValidProviderTranscript,
352
+ decryptTranscript,
353
+ getWithoutHeader
354
+ };
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const dotenv_1 = require("dotenv");
4
- const env_1 = require("../../utils/env");
5
- const nodeEnv = (0, env_1.getEnvVariable)('NODE_ENV') || 'development';
6
- (0, dotenv_1.config)({ path: `.env.${nodeEnv}` });
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWVudi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMvY29uZmlnLWVudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUErQjtBQUMvQix1Q0FBOEM7QUFFOUMsTUFBTSxPQUFPLEdBQUcsSUFBQSxvQkFBYyxFQUFDLFVBQVUsQ0FBQyxJQUFJLGFBQWEsQ0FBQTtBQUMzRCxJQUFBLGVBQU0sRUFBQyxFQUFFLElBQUksRUFBRSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQSJ9
1
+ import { config } from "dotenv";
2
+ import { getEnvVariable } from "../../utils/env.js";
3
+ const nodeEnv = getEnvVariable("NODE_ENV") || "development";
4
+ config({ path: `.env.${nodeEnv}` });
@@ -1,22 +1,24 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveHostnames = resolveHostnames;
4
- const dns_1 = require("dns");
5
- const config_1 = require("../../config");
1
+ import { resolve, setServers } from "dns";
2
+ import { DNS_SERVERS } from "../../config/index.js";
6
3
  setDnsServers();
7
4
  async function resolveHostnames(hostname) {
8
- return new Promise((_resolve, reject) => {
9
- (0, dns_1.resolve)(hostname, (err, addresses) => {
10
- if (err) {
11
- reject(new Error(`Could not resolve hostname: ${hostname}, ${err.message}`));
12
- }
13
- else {
14
- _resolve(addresses);
15
- }
16
- });
5
+ return new Promise((_resolve, reject) => {
6
+ resolve(hostname, (err, addresses) => {
7
+ if (err) {
8
+ reject(
9
+ new Error(
10
+ `Could not resolve hostname: ${hostname}, ${err.message}`
11
+ )
12
+ );
13
+ } else {
14
+ _resolve(addresses);
15
+ }
17
16
  });
17
+ });
18
18
  }
19
19
  function setDnsServers() {
20
- (0, dns_1.setServers)(config_1.DNS_SERVERS);
20
+ setServers(DNS_SERVERS);
21
21
  }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZlci91dGlscy9kbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFLQSw0Q0FjQztBQW5CRCw2QkFBeUM7QUFDekMsdUNBQXdDO0FBRXhDLGFBQWEsRUFBRSxDQUFBO0FBRVIsS0FBSyxVQUFVLGdCQUFnQixDQUFDLFFBQWdCO0lBQ3RELE9BQU8sSUFBSSxPQUFPLENBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDakQsSUFBQSxhQUFPLEVBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQ3BDLElBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxDQUNMLElBQUksS0FBSyxDQUNSLCtCQUErQixRQUFRLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUN6RCxDQUNELENBQUE7WUFDRixDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3BCLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNyQixJQUFBLGdCQUFVLEVBQUMsb0JBQVcsQ0FBQyxDQUFBO0FBQ3hCLENBQUMifQ==
22
+ export {
23
+ resolveHostnames
24
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * GCP attestation validation utilities
3
+ * Validates JWT tokens from Google Confidential Computing
4
+ */
5
+ import type { Logger } from '#src/types/general.ts';
6
+ export interface GcpValidationResult {
7
+ isValid: boolean;
8
+ errors: string[];
9
+ ethAddress?: Uint8Array;
10
+ userDataType?: string;
11
+ pcr0?: string;
12
+ envVars?: Record<string, string>;
13
+ }
14
+ /**
15
+ * Validates GCP JWT attestation and extracts ETH address
16
+ */
17
+ export declare function validateGcpAttestationAndExtractKey(attestationBytes: Uint8Array, logger?: Logger): Promise<GcpValidationResult>;