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

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 (131) hide show
  1. package/browser/resources/attestor-browser.min.mjs +4512 -0
  2. package/lib/external-rpc/index.js +10399 -3
  3. package/lib/index.js +8323 -10
  4. package/package.json +9 -4
  5. package/lib/avs/abis/avsDirectoryABI.js +0 -343
  6. package/lib/avs/abis/delegationABI.js +0 -4
  7. package/lib/avs/abis/registryABI.js +0 -728
  8. package/lib/avs/client/create-claim-on-avs.js +0 -168
  9. package/lib/avs/config.js +0 -26
  10. package/lib/avs/contracts/ReclaimServiceManager.js +0 -0
  11. package/lib/avs/contracts/common.js +0 -0
  12. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +0 -1183
  13. package/lib/avs/contracts/factories/index.js +0 -4
  14. package/lib/avs/contracts/index.js +0 -6
  15. package/lib/avs/types/index.js +0 -0
  16. package/lib/avs/utils/contracts.js +0 -53
  17. package/lib/avs/utils/register.js +0 -74
  18. package/lib/avs/utils/tasks.js +0 -48
  19. package/lib/client/create-claim.js +0 -461
  20. package/lib/client/index.js +0 -3
  21. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +0 -53
  22. package/lib/client/tunnels/make-rpc-tls-tunnel.js +0 -127
  23. package/lib/client/utils/attestor-pool.js +0 -24
  24. package/lib/client/utils/client-socket.js +0 -120
  25. package/lib/client/utils/message-handler.js +0 -97
  26. package/lib/config/index.js +0 -62
  27. package/lib/external-rpc/benchmark.js +0 -82
  28. package/lib/external-rpc/event-bus.js +0 -17
  29. package/lib/external-rpc/global.d.js +0 -0
  30. package/lib/external-rpc/handle-incoming-msg.js +0 -241
  31. package/lib/external-rpc/jsc-polyfills/1.js +0 -80
  32. package/lib/external-rpc/jsc-polyfills/2.js +0 -15
  33. package/lib/external-rpc/jsc-polyfills/event.js +0 -19
  34. package/lib/external-rpc/jsc-polyfills/index.js +0 -2
  35. package/lib/external-rpc/jsc-polyfills/ws.js +0 -83
  36. package/lib/external-rpc/setup-browser.js +0 -33
  37. package/lib/external-rpc/setup-jsc.js +0 -22
  38. package/lib/external-rpc/types.js +0 -0
  39. package/lib/external-rpc/utils.js +0 -100
  40. package/lib/external-rpc/zk.js +0 -58
  41. package/lib/mechain/abis/governanceABI.js +0 -461
  42. package/lib/mechain/abis/taskABI.js +0 -512
  43. package/lib/mechain/client/create-claim-on-mechain.js +0 -33
  44. package/lib/mechain/client/index.js +0 -1
  45. package/lib/mechain/constants/index.js +0 -8
  46. package/lib/mechain/index.js +0 -2
  47. package/lib/mechain/types/index.js +0 -0
  48. package/lib/proto/api.js +0 -4250
  49. package/lib/proto/tee-bundle.js +0 -1296
  50. package/lib/providers/http/index.js +0 -640
  51. package/lib/providers/http/patch-parse5-tree.js +0 -34
  52. package/lib/providers/http/utils.js +0 -283
  53. package/lib/providers/index.js +0 -7
  54. package/lib/scripts/check-avs-registration.js +0 -28
  55. package/lib/scripts/fallbacks/crypto.js +0 -4
  56. package/lib/scripts/fallbacks/empty.js +0 -4
  57. package/lib/scripts/fallbacks/re2.js +0 -7
  58. package/lib/scripts/fallbacks/snarkjs.js +0 -10
  59. package/lib/scripts/fallbacks/stwo.js +0 -159
  60. package/lib/scripts/generate-provider-types.js +0 -101
  61. package/lib/scripts/generate-receipt.js +0 -101
  62. package/lib/scripts/generate-toprf-keys.js +0 -24
  63. package/lib/scripts/jsc-cli-rpc.js +0 -35
  64. package/lib/scripts/register-avs-operator.js +0 -3
  65. package/lib/scripts/start-server.js +0 -11
  66. package/lib/scripts/update-avs-metadata.js +0 -20
  67. package/lib/scripts/utils.js +0 -10
  68. package/lib/scripts/whitelist-operator.js +0 -16
  69. package/lib/server/create-server.js +0 -105
  70. package/lib/server/handlers/claimTeeBundle.js +0 -232
  71. package/lib/server/handlers/claimTunnel.js +0 -80
  72. package/lib/server/handlers/completeClaimOnChain.js +0 -29
  73. package/lib/server/handlers/createClaimOnChain.js +0 -32
  74. package/lib/server/handlers/createTaskOnMechain.js +0 -57
  75. package/lib/server/handlers/createTunnel.js +0 -98
  76. package/lib/server/handlers/disconnectTunnel.js +0 -8
  77. package/lib/server/handlers/fetchCertificateBytes.js +0 -57
  78. package/lib/server/handlers/index.js +0 -25
  79. package/lib/server/handlers/init.js +0 -33
  80. package/lib/server/handlers/toprf.js +0 -19
  81. package/lib/server/index.js +0 -4
  82. package/lib/server/socket.js +0 -112
  83. package/lib/server/tunnels/make-tcp-tunnel.js +0 -202
  84. package/lib/server/utils/apm.js +0 -29
  85. package/lib/server/utils/assert-valid-claim-request.js +0 -354
  86. package/lib/server/utils/config-env.js +0 -4
  87. package/lib/server/utils/dns.js +0 -24
  88. package/lib/server/utils/gcp-attestation.js +0 -237
  89. package/lib/server/utils/generics.js +0 -45
  90. package/lib/server/utils/iso.js +0 -259
  91. package/lib/server/utils/keep-alive.js +0 -38
  92. package/lib/server/utils/nitro-attestation.js +0 -249
  93. package/lib/server/utils/oprf-raw.js +0 -61
  94. package/lib/server/utils/process-handshake.js +0 -233
  95. package/lib/server/utils/proxy-session.js +0 -6
  96. package/lib/server/utils/tee-oprf-mpc-verification.js +0 -86
  97. package/lib/server/utils/tee-oprf-verification.js +0 -151
  98. package/lib/server/utils/tee-transcript-reconstruction.js +0 -140
  99. package/lib/server/utils/tee-verification.js +0 -358
  100. package/lib/server/utils/validation.js +0 -45
  101. package/lib/types/bgp.js +0 -0
  102. package/lib/types/claims.js +0 -0
  103. package/lib/types/client.js +0 -0
  104. package/lib/types/general.js +0 -0
  105. package/lib/types/handlers.js +0 -0
  106. package/lib/types/index.js +0 -10
  107. package/lib/types/providers.gen.js +0 -16
  108. package/lib/types/providers.js +0 -0
  109. package/lib/types/rpc.js +0 -0
  110. package/lib/types/signatures.js +0 -0
  111. package/lib/types/tunnel.js +0 -0
  112. package/lib/types/zk.js +0 -0
  113. package/lib/utils/auth.js +0 -71
  114. package/lib/utils/b64-json.js +0 -17
  115. package/lib/utils/bgp-listener.js +0 -123
  116. package/lib/utils/claims.js +0 -89
  117. package/lib/utils/env.js +0 -19
  118. package/lib/utils/error.js +0 -54
  119. package/lib/utils/generics.js +0 -268
  120. package/lib/utils/http-parser.js +0 -201
  121. package/lib/utils/index.js +0 -13
  122. package/lib/utils/logger.js +0 -82
  123. package/lib/utils/prepare-packets.js +0 -69
  124. package/lib/utils/redactions.js +0 -135
  125. package/lib/utils/retries.js +0 -26
  126. package/lib/utils/signatures/eth.js +0 -31
  127. package/lib/utils/signatures/index.js +0 -12
  128. package/lib/utils/socket-base.js +0 -96
  129. package/lib/utils/tls.js +0 -58
  130. package/lib/utils/ws.js +0 -22
  131. package/lib/utils/zk.js +0 -625
@@ -1,4 +0,0 @@
1
- import { ReclaimServiceManager__factory } from "./ReclaimServiceManager__factory.js";
2
- export {
3
- ReclaimServiceManager__factory
4
- };
@@ -1,6 +0,0 @@
1
- import * as factories from "./factories/index.js";
2
- import { ReclaimServiceManager__factory } from "./factories/ReclaimServiceManager__factory.js";
3
- export {
4
- ReclaimServiceManager__factory,
5
- factories
6
- };
File without changes
@@ -1,53 +0,0 @@
1
- import { Contract, JsonRpcProvider, Wallet } from "ethers";
2
- import { avsDirectoryABI } from "../../avs/abis/avsDirectoryABI.js";
3
- import { delegationABI } from "../../avs/abis/delegationABI.js";
4
- import { registryABI } from "../../avs/abis/registryABI.js";
5
- import { CHAIN_CONFIGS, PRIVATE_KEY, SELECTED_CHAIN_ID } from "../../avs/config.js";
6
- import { ReclaimServiceManager__factory } from "../../avs/contracts/index.js";
7
- const configs = {};
8
- function getContracts(chainId = SELECTED_CHAIN_ID) {
9
- const config = CHAIN_CONFIGS[chainId];
10
- if (!config) {
11
- throw new Error(`No config found for chain ID: ${chainId}`);
12
- }
13
- configs[chainId] ||= initialiseContracts(config);
14
- return configs[chainId];
15
- }
16
- function initialiseContracts({
17
- rpcUrl,
18
- stakeRegistryAddress,
19
- avsDirectoryAddress,
20
- contractAddress,
21
- delegationManagerAddress
22
- }, privateKey = PRIVATE_KEY) {
23
- const provider = new JsonRpcProvider(rpcUrl);
24
- const wallet = privateKey ? new Wallet(privateKey, provider) : void 0;
25
- return {
26
- provider,
27
- wallet,
28
- delegationManager: new Contract(
29
- delegationManagerAddress,
30
- delegationABI,
31
- wallet || provider
32
- ),
33
- // eslint-disable-next-line camelcase
34
- contract: ReclaimServiceManager__factory.connect(
35
- contractAddress,
36
- wallet || provider
37
- ),
38
- registryContract: new Contract(
39
- stakeRegistryAddress,
40
- registryABI,
41
- wallet || provider
42
- ),
43
- avsDirectory: new Contract(
44
- avsDirectoryAddress,
45
- avsDirectoryABI,
46
- wallet || provider
47
- )
48
- };
49
- }
50
- export {
51
- getContracts,
52
- initialiseContracts
53
- };
@@ -1,74 +0,0 @@
1
- import { hexlify, randomBytes, SigningKey } from "ethers";
2
- import { RECLAIM_PUBLIC_URL, SELECTED_CHAIN_ID } from "../../avs/config.js";
3
- import { getContracts } from "../../avs/utils/contracts.js";
4
- import { logger as LOGGER } from "../../utils/index.js";
5
- async function registerOperator({
6
- logger = LOGGER,
7
- chainId = SELECTED_CHAIN_ID,
8
- wallet = getContracts(chainId).wallet,
9
- reclaimRpcUrl = RECLAIM_PUBLIC_URL
10
- } = {}) {
11
- const contracts = getContracts(chainId);
12
- const delegationManager = contracts.delegationManager.connect(wallet);
13
- const avsDirectory = contracts.avsDirectory.connect(wallet);
14
- const contract = contracts.contract.connect(wallet);
15
- const registryContract = contracts.registryContract.connect(wallet);
16
- const addr = wallet.address;
17
- try {
18
- const tx1 = await delegationManager.registerAsOperator({
19
- earningsReceiver: addr,
20
- delegationApprover: "0x0000000000000000000000000000000000000000",
21
- stakerOptOutWindowBlocks: 0
22
- }, "");
23
- await tx1.wait();
24
- logger.info("operator registered on DM successfully");
25
- } catch (err) {
26
- if (!err.message.includes("operator has already registered")) {
27
- throw err;
28
- }
29
- logger.info("Operator already registered on EL");
30
- }
31
- const salt = hexlify(randomBytes(32));
32
- const expiry = Math.floor(Date.now() / 1e3) + 3600;
33
- const operatorSignature = {
34
- expiry,
35
- salt,
36
- signature: ""
37
- };
38
- const contractAddress = await contract.getAddress();
39
- const digestHash = await avsDirectory.calculateOperatorAVSRegistrationDigestHash(
40
- addr,
41
- contractAddress,
42
- salt,
43
- expiry
44
- );
45
- const signingKey = new SigningKey(
46
- wallet.privateKey
47
- );
48
- const signature = signingKey.sign(digestHash);
49
- operatorSignature.signature = signature.serialized;
50
- logger.info("operator signature generated successfully");
51
- if (!await registryContract.operatorRegistered(addr)) {
52
- const tx2 = await registryContract.registerOperatorWithSignature(addr, operatorSignature);
53
- await tx2.wait();
54
- logger.info("operator registered on AVS successfully");
55
- } else {
56
- logger.info("Operator already registered on AVS");
57
- }
58
- const existingMetadata = await contract.getMetadataForOperator(addr).catch((err) => {
59
- if (err.message.includes("Operator not found")) {
60
- return void 0;
61
- }
62
- throw err;
63
- });
64
- const metadata = { addr, url: reclaimRpcUrl };
65
- if (existingMetadata?.addr === metadata.addr && existingMetadata?.url === metadata.url) {
66
- logger.info("operator metadata already up to date");
67
- return;
68
- }
69
- await contract.updateOperatorMetadata(metadata);
70
- logger.info({ metadata }, "operator metadata updated successfully");
71
- }
72
- export {
73
- registerOperator
74
- };
@@ -1,48 +0,0 @@
1
- import { EventLog, getBytes } from "ethers";
2
- import { getContracts } from "../../avs/utils/contracts.js";
3
- async function createNewClaimRequestOnChain({
4
- request,
5
- payer,
6
- chainId,
7
- ...rest
8
- }) {
9
- const contracts = getContracts(chainId);
10
- const contract = contracts.contract.connect(payer);
11
- const ownerAddress = typeof rest.owner === "string" ? rest.owner : rest.owner.address;
12
- const fullRequest = {
13
- ...request,
14
- owner: ownerAddress
15
- };
16
- const signature = await getSignature();
17
- const task = await contract.createNewTask(fullRequest, signature || "0x00");
18
- const rslt = await task.wait();
19
- const logs = rslt?.logs ?? [];
20
- const eventLogs = logs.filter((log) => log instanceof EventLog);
21
- const ev = eventLogs[0];
22
- const arg = ev?.args;
23
- return { task: arg, tx: rslt };
24
- function getSignature() {
25
- if (ownerAddress.toLowerCase() === payer.address.toLowerCase()) {
26
- return;
27
- }
28
- if ("requestSignature" in rest) {
29
- return rest.requestSignature;
30
- }
31
- if (typeof rest.owner !== "object") {
32
- throw new Error(
33
- "Owner wallet must be provided or requestSignature must be provided"
34
- );
35
- }
36
- return signClaimRequest(fullRequest, rest.owner, chainId);
37
- }
38
- }
39
- async function signClaimRequest(request, owner, chainId) {
40
- const contract = getContracts(chainId).contract;
41
- const encoded = await contract.encodeClaimRequest(request);
42
- const strSig = await owner.signMessage(getBytes(encoded));
43
- return getBytes(strSig);
44
- }
45
- export {
46
- createNewClaimRequestOnChain,
47
- signClaimRequest
48
- };
@@ -1,461 +0,0 @@
1
- import { asciiToUint8Array } from "@reclaimprotocol/tls";
2
- import { makeRpcTlsTunnel } from "../client/tunnels/make-rpc-tls-tunnel.js";
3
- import { getAttestorClientFromPool } from "../client/utils/attestor-pool.js";
4
- import { DEFAULT_HTTPS_PORT, PROVIDER_CTX, TOPRF_DOMAIN_SEPARATOR } from "../config/index.js";
5
- import { ClaimTunnelRequest } from "../proto/api.js";
6
- import { providers } from "../providers/index.js";
7
- import {
8
- AttestorError,
9
- binaryHashToStr,
10
- canonicalStringify,
11
- generateTunnelId,
12
- getBlocksToReveal,
13
- getEngineProto,
14
- getProviderValue,
15
- isApplicationData,
16
- logger as LOGGER,
17
- makeDefaultOPRFOperator,
18
- makeHttpResponseParser,
19
- preparePacketsForReveal,
20
- redactSlices,
21
- uint8ArrayToStr,
22
- unixTimestampSeconds
23
- } from "../utils/index.js";
24
- import { executeWithRetries } from "../utils/retries.js";
25
- import { SIGNATURES } from "../utils/signatures/index.js";
26
- import { getDefaultTlsOptions } from "../utils/tls.js";
27
- function createClaimOnAttestor({
28
- logger: _logger,
29
- maxRetries = 3,
30
- ...opts
31
- }) {
32
- const logger = _logger || ("logger" in opts.client ? opts.client.logger : LOGGER);
33
- return executeWithRetries(
34
- (attempt) => _createClaimOnAttestor({
35
- ...opts,
36
- logger: attempt ? logger.child({ attempt }) : logger
37
- }),
38
- { maxRetries, logger, shouldRetry }
39
- );
40
- }
41
- function shouldRetry(err) {
42
- if (err instanceof TypeError) {
43
- return false;
44
- }
45
- if (err?.message?.includes("stream ended before")) {
46
- return true;
47
- }
48
- return err instanceof AttestorError && err.code !== "ERROR_INVALID_CLAIM" && err.code !== "ERROR_BAD_REQUEST" && err.code !== "ERROR_AUTHENTICATION_FAILED" && err.code !== "ERROR_TOPRF_OUT_OF_BOUNDS";
49
- }
50
- async function _createClaimOnAttestor({
51
- name,
52
- params,
53
- secretParams,
54
- context,
55
- onStep,
56
- ownerPrivateKey,
57
- client: clientInit,
58
- logger = LOGGER,
59
- timestampS,
60
- updateProviderParams,
61
- updateParametersFromOprfData = true,
62
- ...zkOpts
63
- }) {
64
- const provider = providers[name];
65
- const hostPort = getProviderValue(params, provider.hostPort, secretParams);
66
- const geoLocation = getProviderValue(params, provider.geoLocation, secretParams);
67
- const proxySessionId = getProviderValue(params, provider.proxySessionId, secretParams);
68
- const providerTlsOpts = getProviderValue(
69
- params,
70
- provider.additionalClientOptions
71
- );
72
- const tlsOpts = {
73
- ...getDefaultTlsOptions(),
74
- fetchCertificateBytes: fetchCertificateBytesFromAttestor,
75
- ...providerTlsOpts
76
- };
77
- const { zkEngine = "snarkjs" } = zkOpts;
78
- let redactionMode = getProviderValue(params, provider.writeRedactionMode);
79
- const [host, port] = hostPort.split(":");
80
- const resParser = makeHttpResponseParser();
81
- let client;
82
- let lastMsgRevealed = false;
83
- const revealMap = /* @__PURE__ */ new Map();
84
- onStep?.({ name: "connecting" });
85
- let endedHttpRequest;
86
- const createTunnelReq = {
87
- host,
88
- port: port ? +port : DEFAULT_HTTPS_PORT,
89
- geoLocation,
90
- proxySessionId,
91
- id: generateTunnelId()
92
- };
93
- logger = logger.child({ tunnelId: createTunnelReq.id });
94
- const authRequest = "authRequest" in clientInit ? typeof clientInit.authRequest === "function" ? await clientInit.authRequest() : clientInit.authRequest : void 0;
95
- const tunnel = await makeRpcTlsTunnel({
96
- tlsOpts,
97
- connect: (connectMsgs) => {
98
- let created = false;
99
- if ("metadata" in clientInit) {
100
- client = clientInit;
101
- } else {
102
- client = getAttestorClientFromPool(
103
- clientInit.url,
104
- () => {
105
- created = true;
106
- return {
107
- authRequest,
108
- initMessages: connectMsgs,
109
- logger
110
- };
111
- }
112
- );
113
- }
114
- if (!created) {
115
- client.waitForInit().then(() => client.sendMessage(...connectMsgs)).catch((err) => {
116
- logger.error(
117
- { err },
118
- "error in sending init msgs"
119
- );
120
- });
121
- }
122
- return client;
123
- },
124
- logger,
125
- request: createTunnelReq,
126
- onMessage(data) {
127
- logger.debug({ bytes: data.length }, "recv data from server");
128
- resParser.onChunk(data);
129
- if (resParser.res.complete) {
130
- logger?.debug("got complete HTTP response from server");
131
- setTimeout(() => {
132
- endedHttpRequest?.();
133
- }, 100);
134
- }
135
- },
136
- onClose(err) {
137
- const level = err ? "error" : "debug";
138
- logger?.[level]({ err }, "tls session ended");
139
- endedHttpRequest?.(err);
140
- try {
141
- resParser.streamEnded();
142
- } catch {
143
- }
144
- }
145
- });
146
- const {
147
- version: tlsVersion,
148
- cipherSuite
149
- } = tunnel.tls.getMetadata();
150
- if (tlsVersion === "TLS1_2" && redactionMode !== "zk") {
151
- redactionMode = "zk";
152
- logger.info("TLS1.2 detected, defaulting to zk redaction mode");
153
- }
154
- const {
155
- redactions,
156
- data: requestStr
157
- } = provider.createRequest(
158
- // @ts-ignore
159
- secretParams,
160
- params,
161
- logger
162
- );
163
- const requestData = typeof requestStr === "string" ? asciiToUint8Array(requestStr) : requestStr;
164
- logger.debug(
165
- { redactions: redactions.length },
166
- "generated request"
167
- );
168
- const waitForAllData = new Promise(
169
- (resolve, reject) => {
170
- endedHttpRequest = (err) => err ? reject(err) : resolve();
171
- }
172
- );
173
- onStep?.({ name: "sending-request-data" });
174
- try {
175
- if (redactionMode === "zk") {
176
- await writeRedactedZk();
177
- } else {
178
- await writeRedactedWithKeyUpdate();
179
- }
180
- logger.info("wrote request to server");
181
- } catch (err) {
182
- logger.error(
183
- { err },
184
- "session errored during write, waiting for stream end"
185
- );
186
- }
187
- onStep?.({ name: "waiting-for-response" });
188
- await waitForAllData;
189
- await tunnel.close();
190
- logger.info("session closed, processing response");
191
- if (updateProviderParams) {
192
- const { params: updatedParms, secretParams: updatedSecretParms } = await updateProviderParams(tunnel.transcript, tlsVersion ?? "TLS1_2");
193
- params = { ...params, ...updatedParms };
194
- secretParams = { ...secretParams, ...updatedSecretParms };
195
- }
196
- const signatureAlg = SIGNATURES[client.metadata.signatureType];
197
- let serverIV;
198
- let clientIV;
199
- const [serverBlock] = getLastBlocks("server", 1);
200
- if (serverBlock?.message.type === "ciphertext") {
201
- serverIV = serverBlock.message.fixedIv;
202
- }
203
- const [clientBlock] = getLastBlocks("client", 1);
204
- if (clientBlock?.message.type === "ciphertext") {
205
- clientIV = clientBlock.message.fixedIv;
206
- }
207
- const transcript = await generateTranscript();
208
- const claimTunnelReq = ClaimTunnelRequest.create({
209
- request: createTunnelReq,
210
- data: {
211
- provider: name,
212
- parameters: canonicalStringify(params),
213
- context: canonicalStringify(context),
214
- timestampS: timestampS ?? unixTimestampSeconds(),
215
- owner: getAddress()
216
- },
217
- transcript,
218
- zkEngine: getEngineProto(zkEngine),
219
- fixedServerIV: serverIV,
220
- fixedClientIV: clientIV
221
- });
222
- onStep?.({ name: "waiting-for-verification" });
223
- const claimTunnelBytes = ClaimTunnelRequest.encode(claimTunnelReq).finish();
224
- const requestSignature = await signatureAlg.sign(claimTunnelBytes, ownerPrivateKey);
225
- claimTunnelReq.signatures = { requestSignature };
226
- const result = await client.rpc("claimTunnel", claimTunnelReq);
227
- logger.info({ success: !!result.claim }, "recv claim response");
228
- return result;
229
- async function fetchCertificateBytesFromAttestor(url) {
230
- if (!client) {
231
- throw new Error("attestor client not initialized");
232
- }
233
- const result2 = await client.rpc("fetchCertificateBytes", { url });
234
- return result2.bytes;
235
- }
236
- async function writeRedactedWithKeyUpdate() {
237
- let currentIndex = 0;
238
- for (const section of redactions) {
239
- const block2 = requestData.slice(currentIndex, section.fromIndex);
240
- if (block2.length) {
241
- await writeWithReveal(block2, true);
242
- }
243
- const redacted = requestData.slice(section.fromIndex, section.toIndex);
244
- await writeWithReveal(redacted, false);
245
- currentIndex = section.toIndex;
246
- }
247
- const lastBlockStart = redactions?.[redactions.length - 1]?.toIndex || 0;
248
- const block = requestData.slice(lastBlockStart);
249
- if (block.length) {
250
- await writeWithReveal(block, true);
251
- }
252
- }
253
- async function writeRedactedZk() {
254
- let blocksWritten = tunnel.transcript.length;
255
- await tunnel.tls.write(requestData);
256
- blocksWritten = tunnel.transcript.length - blocksWritten;
257
- setRevealOfLastSentBlocks(
258
- {
259
- type: "zk",
260
- redactedPlaintext: redactSlices(requestData, redactions)
261
- },
262
- blocksWritten
263
- );
264
- }
265
- async function writeWithReveal(data, reveal) {
266
- if (reveal !== lastMsgRevealed) {
267
- await tunnel.tls.updateTrafficKeys();
268
- }
269
- let blocksWritten = tunnel.transcript.length;
270
- await tunnel.write(data);
271
- blocksWritten = tunnel.transcript.length - blocksWritten;
272
- setRevealOfLastSentBlocks(reveal ? { type: "complete" } : void 0, blocksWritten);
273
- lastMsgRevealed = reveal;
274
- }
275
- function setRevealOfLastSentBlocks(reveal, nBlocks = 1) {
276
- const lastBlocks = getLastBlocks("client", nBlocks);
277
- if (!lastBlocks.length) {
278
- return;
279
- }
280
- for (const block of lastBlocks) {
281
- setRevealOfMessage(block.message, reveal);
282
- }
283
- }
284
- function getLastBlocks(sender, nBlocks) {
285
- const lastBlocks = [];
286
- for (let i = tunnel.transcript.length - 1; i >= 0; i--) {
287
- const block = tunnel.transcript[i];
288
- if (block.sender === sender) {
289
- lastBlocks.push(block);
290
- if (lastBlocks.length === nBlocks) {
291
- break;
292
- }
293
- }
294
- }
295
- return lastBlocks;
296
- }
297
- async function generateTranscript() {
298
- await addServerSideReveals();
299
- const startMs = Date.now();
300
- const revealedMessages = await preparePacketsForReveal(
301
- tunnel.transcript,
302
- revealMap,
303
- {
304
- logger,
305
- cipherSuite,
306
- onZkProgress(done, total) {
307
- const timeSinceStartMs = Date.now() - startMs;
308
- const timePerBlockMs = timeSinceStartMs / done;
309
- const timeLeftMs = timePerBlockMs * (total - done);
310
- onStep?.({
311
- name: "generating-zk-proofs",
312
- proofsDone: done,
313
- proofsTotal: total,
314
- approxTimeLeftS: Math.round(timeLeftMs / 1e3)
315
- });
316
- },
317
- ...zkOpts
318
- }
319
- );
320
- return revealedMessages;
321
- }
322
- async function addServerSideReveals() {
323
- const allPackets = tunnel.transcript;
324
- let serverPacketsToReveal = "all";
325
- const packets = [];
326
- const serverBlocks = [];
327
- for (const b of allPackets) {
328
- if (b.message.type !== "ciphertext" || !isApplicationData(b.message, tlsVersion)) {
329
- continue;
330
- }
331
- const plaintext = tlsVersion === "TLS1_3" ? b.message.plaintext.slice(0, -1) : b.message.plaintext;
332
- packets.push({
333
- message: plaintext,
334
- sender: b.sender
335
- });
336
- if (b.sender === "server") {
337
- serverBlocks.push({
338
- plaintext,
339
- message: b.message
340
- });
341
- }
342
- }
343
- if (provider.getResponseRedactions) {
344
- serverPacketsToReveal = await getBlocksToReveal(
345
- serverBlocks,
346
- (total) => provider.getResponseRedactions({
347
- response: total,
348
- params,
349
- logger,
350
- ctx: PROVIDER_CTX
351
- }),
352
- performOprf
353
- );
354
- }
355
- const revealedPackets = packets.filter((p) => p.sender === "client");
356
- if (serverPacketsToReveal === "all") {
357
- for (const { message, sender } of allPackets) {
358
- if (sender === "server") {
359
- setRevealOfMessage(message, { type: "complete" });
360
- }
361
- }
362
- revealedPackets.push(...packets.filter((p) => p.sender === "server"));
363
- } else {
364
- for (const {
365
- block,
366
- redactedPlaintext,
367
- overshotToprfFromPrevBlock,
368
- toprfs,
369
- oprfRawMarkers
370
- } of serverPacketsToReveal) {
371
- setRevealOfMessage(block.message, {
372
- type: "zk",
373
- redactedPlaintext,
374
- toprfs,
375
- oprfRawMarkers,
376
- overshotToprfFromPrevBlock
377
- });
378
- revealedPackets.push(
379
- { sender: "server", message: redactedPlaintext }
380
- );
381
- if (updateParametersFromOprfData && toprfs) {
382
- let strParams = canonicalStringify(params);
383
- for (const toprf of toprfs) {
384
- const ogText = uint8ArrayToStr(toprf.plaintext);
385
- const hashedText = binaryHashToStr(
386
- toprf.nullifier,
387
- toprf.dataLocation.length
388
- );
389
- strParams = strParams.replaceAll(ogText, hashedText);
390
- }
391
- params = JSON.parse(strParams);
392
- }
393
- }
394
- }
395
- await provider.assertValidProviderReceipt({
396
- receipt: revealedPackets,
397
- params: {
398
- ...params,
399
- // provide secret params for proper
400
- // request body validation
401
- secretParams
402
- },
403
- logger,
404
- ctx: PROVIDER_CTX
405
- });
406
- for (const p of allPackets) {
407
- if (p.message.type !== "ciphertext") {
408
- continue;
409
- }
410
- if (isApplicationData(p.message, tlsVersion)) {
411
- break;
412
- }
413
- setRevealOfMessage(p.message, { type: "complete" });
414
- }
415
- }
416
- async function performOprf(plaintext) {
417
- logger.info({ length: plaintext.length }, "generating OPRF...");
418
- const oprfOperator = zkOpts.oprfOperators?.["chacha20"] || makeDefaultOPRFOperator(
419
- "chacha20",
420
- zkEngine,
421
- logger
422
- );
423
- const reqData = await oprfOperator.generateOPRFRequestData(
424
- plaintext,
425
- TOPRF_DOMAIN_SEPARATOR,
426
- logger
427
- );
428
- const res = await client.rpc("toprf", {
429
- maskedData: reqData.maskedData,
430
- engine: getEngineProto(zkEngine)
431
- });
432
- const nullifier = await oprfOperator.finaliseOPRF(
433
- client.initResponse.toprfPublicKey,
434
- reqData,
435
- [res]
436
- );
437
- const data = {
438
- nullifier,
439
- responses: [res],
440
- mask: reqData.mask,
441
- dataLocation: void 0,
442
- plaintext
443
- };
444
- return data;
445
- }
446
- function setRevealOfMessage(message, reveal) {
447
- if (reveal) {
448
- revealMap.set(message, reveal);
449
- return;
450
- }
451
- revealMap.delete(message);
452
- }
453
- function getAddress() {
454
- const { getAddress: getAddress2, getPublicKey } = signatureAlg;
455
- const pubKey = getPublicKey(ownerPrivateKey);
456
- return getAddress2(pubKey);
457
- }
458
- }
459
- export {
460
- createClaimOnAttestor
461
- };
@@ -1,3 +0,0 @@
1
- export * from "./create-claim.js";
2
- export * from "./utils/attestor-pool.js";
3
- export * from "./utils/client-socket.js";