@reclaimprotocol/attestor-core 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/README.md +39 -0
  2. package/lib/avs/abis/avsDirectoryABI.d.ts +60 -0
  3. package/lib/avs/abis/avsDirectoryABI.js +344 -0
  4. package/lib/avs/abis/delegationABI.d.ts +126 -0
  5. package/lib/avs/abis/delegationABI.js +5 -0
  6. package/lib/avs/abis/registryABI.d.ts +136 -0
  7. package/lib/avs/abis/registryABI.js +729 -0
  8. package/lib/avs/client/create-claim-on-avs.d.ts +10 -0
  9. package/lib/avs/client/create-claim-on-avs.js +147 -0
  10. package/lib/avs/config.d.ts +7 -0
  11. package/lib/avs/config.js +24 -0
  12. package/lib/avs/contracts/ReclaimServiceManager.d.ts +697 -0
  13. package/lib/avs/contracts/ReclaimServiceManager.js +3 -0
  14. package/lib/avs/contracts/common.d.ts +21 -0
  15. package/lib/avs/contracts/common.js +3 -0
  16. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +888 -0
  17. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1174 -0
  18. package/lib/avs/contracts/factories/index.d.ts +1 -0
  19. package/lib/avs/contracts/factories/index.js +9 -0
  20. package/lib/avs/contracts/index.d.ts +3 -0
  21. package/lib/avs/contracts/index.js +30 -0
  22. package/lib/avs/tests/test.operator.d.ts +11 -0
  23. package/lib/avs/tests/test.operator.js +313 -0
  24. package/lib/avs/tests/utils.d.ts +2 -0
  25. package/lib/avs/tests/utils.js +50 -0
  26. package/lib/avs/types/index.d.ts +55 -0
  27. package/lib/avs/types/index.js +3 -0
  28. package/lib/avs/utils/contracts.d.ts +21 -0
  29. package/lib/avs/utils/contracts.js +38 -0
  30. package/lib/avs/utils/register.d.ts +27 -0
  31. package/lib/avs/utils/register.js +76 -0
  32. package/lib/avs/utils/tasks.d.ts +22 -0
  33. package/lib/avs/utils/tasks.js +45 -0
  34. package/lib/client/create-claim.d.ts +5 -0
  35. package/lib/client/create-claim.js +357 -0
  36. package/lib/client/index.d.ts +3 -0
  37. package/lib/client/index.js +20 -0
  38. package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +16 -0
  39. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +60 -0
  40. package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +25 -0
  41. package/lib/client/tunnels/make-rpc-tls-tunnel.js +135 -0
  42. package/lib/client/utils/attestor-pool.d.ts +6 -0
  43. package/lib/client/utils/attestor-pool.js +28 -0
  44. package/lib/client/utils/client-socket.d.ts +9 -0
  45. package/lib/client/utils/client-socket.js +77 -0
  46. package/lib/client/utils/message-handler.d.ts +4 -0
  47. package/lib/client/utils/message-handler.js +93 -0
  48. package/lib/config/index.d.ts +23 -0
  49. package/lib/config/index.js +35 -0
  50. package/lib/index.d.ts +9 -0
  51. package/lib/index.js +39 -0
  52. package/lib/proto/api.d.ts +414 -0
  53. package/lib/proto/api.js +2756 -0
  54. package/lib/providers/http/index.d.ts +3 -0
  55. package/lib/providers/http/index.js +472 -0
  56. package/lib/providers/http/utils.d.ts +44 -0
  57. package/lib/providers/http/utils.js +302 -0
  58. package/lib/providers/index.d.ts +4 -0
  59. package/lib/providers/index.js +11 -0
  60. package/lib/scripts/check-avs-registration.d.ts +1 -0
  61. package/lib/scripts/check-avs-registration.js +28 -0
  62. package/lib/scripts/generate-provider-types.d.ts +5 -0
  63. package/lib/scripts/generate-provider-types.js +82 -0
  64. package/lib/scripts/generate-receipt.d.ts +9 -0
  65. package/lib/scripts/generate-receipt.js +93 -0
  66. package/lib/scripts/register-avs-operator.d.ts +1 -0
  67. package/lib/scripts/register-avs-operator.js +6 -0
  68. package/lib/scripts/start-server.d.ts +1 -0
  69. package/lib/scripts/start-server.js +6 -0
  70. package/lib/scripts/verify-root-ca.d.ts +1 -0
  71. package/lib/scripts/verify-root-ca.js +51 -0
  72. package/lib/server/create-server.d.ts +7 -0
  73. package/lib/server/create-server.js +85 -0
  74. package/lib/server/handlers/claimTunnel.d.ts +2 -0
  75. package/lib/server/handlers/claimTunnel.js +55 -0
  76. package/lib/server/handlers/completeClaimOnChain.d.ts +2 -0
  77. package/lib/server/handlers/completeClaimOnChain.js +28 -0
  78. package/lib/server/handlers/createClaimOnChain.d.ts +2 -0
  79. package/lib/server/handlers/createClaimOnChain.js +31 -0
  80. package/lib/server/handlers/createTunnel.d.ts +2 -0
  81. package/lib/server/handlers/createTunnel.js +65 -0
  82. package/lib/server/handlers/disconnectTunnel.d.ts +2 -0
  83. package/lib/server/handlers/disconnectTunnel.js +10 -0
  84. package/lib/server/handlers/index.d.ts +4 -0
  85. package/lib/server/handlers/index.js +18 -0
  86. package/lib/server/handlers/init.d.ts +2 -0
  87. package/lib/server/handlers/init.js +21 -0
  88. package/lib/server/index.d.ts +4 -0
  89. package/lib/server/index.js +21 -0
  90. package/lib/server/socket.d.ts +11 -0
  91. package/lib/server/socket.js +95 -0
  92. package/lib/server/tunnels/make-tcp-tunnel.d.ts +20 -0
  93. package/lib/server/tunnels/make-tcp-tunnel.js +182 -0
  94. package/lib/server/utils/apm.d.ts +11 -0
  95. package/lib/server/utils/apm.js +39 -0
  96. package/lib/server/utils/assert-valid-claim-request.d.ts +29 -0
  97. package/lib/server/utils/assert-valid-claim-request.js +189 -0
  98. package/lib/server/utils/config-env.d.ts +1 -0
  99. package/lib/server/utils/config-env.js +7 -0
  100. package/lib/server/utils/generics.d.ts +22 -0
  101. package/lib/server/utils/generics.js +59 -0
  102. package/lib/server/utils/iso.d.ts +1 -0
  103. package/lib/server/utils/iso.js +260 -0
  104. package/lib/server/utils/keep-alive.d.ts +7 -0
  105. package/lib/server/utils/keep-alive.js +42 -0
  106. package/lib/server/utils/process-handshake.d.ts +13 -0
  107. package/lib/server/utils/process-handshake.js +179 -0
  108. package/lib/server/utils/verify-server-certificates.d.ts +7 -0
  109. package/lib/server/utils/verify-server-certificates.js +102 -0
  110. package/lib/tests/describe-with-server.d.ts +21 -0
  111. package/lib/tests/describe-with-server.js +67 -0
  112. package/lib/tests/mock-provider-server.d.ts +13 -0
  113. package/lib/tests/mock-provider-server.js +65 -0
  114. package/lib/tests/mocks.d.ts +4 -0
  115. package/lib/tests/mocks.js +23 -0
  116. package/lib/tests/test.claim-creation.d.ts +1 -0
  117. package/lib/tests/test.claim-creation.js +187 -0
  118. package/lib/tests/test.http-parser.d.ts +1 -0
  119. package/lib/tests/test.http-parser.js +118 -0
  120. package/lib/tests/test.http-provider-utils.d.ts +1 -0
  121. package/lib/tests/test.http-provider-utils.js +1932 -0
  122. package/lib/tests/test.http-provider.d.ts +1 -0
  123. package/lib/tests/test.http-provider.js +43 -0
  124. package/lib/tests/test.rpc-communication.d.ts +1 -0
  125. package/lib/tests/test.rpc-communication.js +64 -0
  126. package/lib/tests/test.rpc-tunnel.d.ts +1 -0
  127. package/lib/tests/test.rpc-tunnel.js +168 -0
  128. package/lib/tests/test.signatures.d.ts +1 -0
  129. package/lib/tests/test.signatures.js +24 -0
  130. package/lib/tests/test.tcp-tunnel.d.ts +1 -0
  131. package/lib/tests/test.tcp-tunnel.js +64 -0
  132. package/lib/tests/test.zk.d.ts +1 -0
  133. package/lib/tests/test.zk.js +169 -0
  134. package/lib/tests/utils.d.ts +12 -0
  135. package/lib/tests/utils.js +49 -0
  136. package/lib/types/claims.d.ts +64 -0
  137. package/lib/types/claims.js +3 -0
  138. package/lib/types/client.d.ts +136 -0
  139. package/lib/types/client.js +3 -0
  140. package/lib/types/general.d.ts +39 -0
  141. package/lib/types/general.js +3 -0
  142. package/lib/types/handlers.d.ts +10 -0
  143. package/lib/types/handlers.js +3 -0
  144. package/lib/types/index.d.ts +9 -0
  145. package/lib/types/index.js +26 -0
  146. package/lib/types/providers.d.ts +135 -0
  147. package/lib/types/providers.gen.d.ts +414 -0
  148. package/lib/types/providers.gen.js +14 -0
  149. package/lib/types/providers.js +3 -0
  150. package/lib/types/rpc.d.ts +35 -0
  151. package/lib/types/rpc.js +3 -0
  152. package/lib/types/signatures.d.ts +28 -0
  153. package/lib/types/signatures.js +3 -0
  154. package/lib/types/tunnel.d.ts +18 -0
  155. package/lib/types/tunnel.js +3 -0
  156. package/lib/types/zk.d.ts +16 -0
  157. package/lib/types/zk.js +3 -0
  158. package/lib/utils/benchmark.d.ts +1 -0
  159. package/lib/utils/benchmark.js +70 -0
  160. package/lib/utils/claims.d.ts +33 -0
  161. package/lib/utils/claims.js +112 -0
  162. package/lib/utils/env.d.ts +3 -0
  163. package/lib/utils/env.js +20 -0
  164. package/lib/utils/error.d.ts +27 -0
  165. package/lib/utils/error.js +43 -0
  166. package/lib/utils/generics.d.ts +112 -0
  167. package/lib/utils/generics.js +348 -0
  168. package/lib/utils/http-parser.d.ts +55 -0
  169. package/lib/utils/http-parser.js +249 -0
  170. package/lib/utils/index.d.ts +10 -0
  171. package/lib/utils/index.js +27 -0
  172. package/lib/utils/logger.d.ts +13 -0
  173. package/lib/utils/logger.js +100 -0
  174. package/lib/utils/prepare-packets.d.ts +16 -0
  175. package/lib/utils/prepare-packets.js +61 -0
  176. package/lib/utils/redactions.d.ts +41 -0
  177. package/lib/utils/redactions.js +111 -0
  178. package/lib/utils/retries.d.ts +12 -0
  179. package/lib/utils/retries.js +28 -0
  180. package/lib/utils/signatures/eth.d.ts +2 -0
  181. package/lib/utils/signatures/eth.js +33 -0
  182. package/lib/utils/signatures/index.d.ts +5 -0
  183. package/lib/utils/signatures/index.js +11 -0
  184. package/lib/utils/socket-base.d.ts +21 -0
  185. package/lib/utils/socket-base.js +89 -0
  186. package/lib/utils/tls.d.ts +2 -0
  187. package/lib/utils/tls.js +32 -0
  188. package/lib/utils/validation.d.ts +2 -0
  189. package/lib/utils/validation.js +46 -0
  190. package/lib/utils/ws.d.ts +12 -0
  191. package/lib/utils/ws.js +21 -0
  192. package/lib/utils/zk.d.ts +50 -0
  193. package/lib/utils/zk.js +282 -0
  194. package/lib/window-rpc/index.d.ts +3 -0
  195. package/lib/window-rpc/index.js +20 -0
  196. package/lib/window-rpc/setup-window-rpc.d.ts +5 -0
  197. package/lib/window-rpc/setup-window-rpc.js +239 -0
  198. package/lib/window-rpc/types.d.ts +184 -0
  199. package/lib/window-rpc/types.js +3 -0
  200. package/lib/window-rpc/utils.d.ts +13 -0
  201. package/lib/window-rpc/utils.js +76 -0
  202. package/lib/window-rpc/window-rpc-zk.d.ts +11 -0
  203. package/lib/window-rpc/window-rpc-zk.js +72 -0
  204. package/package.json +117 -0
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDefaultTlsOptions = getDefaultTlsOptions;
4
+ const tls_1 = require("@reclaimprotocol/tls");
5
+ const env_1 = require("src/utils/env");
6
+ // we only support the following cipher suites
7
+ // for ZK proof generation
8
+ const ZK_CIPHER_SUITES = [
9
+ // chacha-20
10
+ 'TLS_CHACHA20_POLY1305_SHA256',
11
+ 'TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256',
12
+ 'TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256',
13
+ // aes-256
14
+ 'TLS_AES_256_GCM_SHA384',
15
+ 'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384',
16
+ 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384',
17
+ // aes-128
18
+ 'TLS_AES_128_GCM_SHA256',
19
+ 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256',
20
+ 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256',
21
+ ];
22
+ const NAMED_CURVE_LIST = (0, env_1.detectEnvironment)() === 'node'
23
+ ? tls_1.SUPPORTED_NAMED_CURVES
24
+ // X25519 is not supported in the browser
25
+ : tls_1.SUPPORTED_NAMED_CURVES.filter(c => c !== 'X25519');
26
+ function getDefaultTlsOptions() {
27
+ return {
28
+ cipherSuites: ZK_CIPHER_SUITES,
29
+ namedCurves: NAMED_CURVE_LIST,
30
+ };
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3Rscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXlCQSxvREFLQztBQTlCRCw4Q0FBZ0c7QUFDaEcsdUNBQWlEO0FBRWpELDhDQUE4QztBQUM5QywwQkFBMEI7QUFDMUIsTUFBTSxnQkFBZ0IsR0FBa0I7SUFDdkMsWUFBWTtJQUNaLDhCQUE4QjtJQUM5Qiw2Q0FBNkM7SUFDN0MsK0NBQStDO0lBQy9DLFVBQVU7SUFDVix3QkFBd0I7SUFDeEIseUNBQXlDO0lBQ3pDLHVDQUF1QztJQUN2QyxVQUFVO0lBQ1Ysd0JBQXdCO0lBQ3hCLHlDQUF5QztJQUN6Qyx1Q0FBdUM7Q0FDdkMsQ0FBQTtBQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSx1QkFBaUIsR0FBRSxLQUFLLE1BQU07SUFDdEQsQ0FBQyxDQUFDLDRCQUFzQjtJQUN4Qix5Q0FBeUM7SUFDekMsQ0FBQyxDQUFDLDRCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQTtBQUVyRCxTQUFnQixvQkFBb0I7SUFDbkMsT0FBTztRQUNOLFlBQVksRUFBRSxnQkFBZ0I7UUFDOUIsV0FBVyxFQUFFLGdCQUFnQjtLQUM3QixDQUFBO0FBQ0YsQ0FBQyJ9
@@ -0,0 +1,2 @@
1
+ import { ProviderName, ProviderParams } from 'src/types';
2
+ export declare function assertValidateProviderParams<T extends ProviderName>(name: T, params: unknown): asserts params is ProviderParams<T>;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.assertValidateProviderParams = assertValidateProviderParams;
7
+ const ajv_1 = __importDefault(require("ajv"));
8
+ const providers_gen_1 = require("src/types/providers.gen");
9
+ const error_1 = require("src/utils/error");
10
+ const PROVIDER_VALIDATOR_MAP = {};
11
+ const AJV = new ajv_1.default({
12
+ allErrors: true,
13
+ strict: true,
14
+ strictRequired: false,
15
+ formats: {
16
+ binary(data) {
17
+ return data instanceof Uint8Array
18
+ || (typeof Buffer !== 'undefined'
19
+ && Buffer.isBuffer(data));
20
+ },
21
+ url(data) {
22
+ try {
23
+ new URL(data);
24
+ return true;
25
+ }
26
+ catch (_a) {
27
+ return false;
28
+ }
29
+ }
30
+ }
31
+ });
32
+ function assertValidateProviderParams(name, params) {
33
+ var _a;
34
+ let validate = PROVIDER_VALIDATOR_MAP[name];
35
+ if (!validate) {
36
+ const schema = (_a = providers_gen_1.PROVIDER_SCHEMAS[name]) === null || _a === void 0 ? void 0 : _a.parameters;
37
+ if (!schema) {
38
+ throw new error_1.AttestorError('ERROR_BAD_REQUEST', `Invalid provider name "${name}"`);
39
+ }
40
+ validate = AJV.compile(schema);
41
+ }
42
+ if (!validate(params)) {
43
+ throw new error_1.AttestorError('ERROR_BAD_REQUEST', 'Params validation failed', { errors: JSON.stringify(validate.errors) });
44
+ }
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBOEJBLG9FQXdCQztBQXRERCw4Q0FBMkM7QUFFM0MsMkRBQTBEO0FBQzFELDJDQUErQztBQUUvQyxNQUFNLHNCQUFzQixHQUErQyxFQUFFLENBQUE7QUFFN0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxhQUFHLENBQUM7SUFDbkIsU0FBUyxFQUFFLElBQUk7SUFDZixNQUFNLEVBQUUsSUFBSTtJQUNaLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLE9BQU8sRUFBRTtRQUNSLE1BQU0sQ0FBQyxJQUFhO1lBQ25CLE9BQU8sSUFBSSxZQUFZLFVBQVU7bUJBQzdCLENBQ0YsT0FBTyxNQUFNLEtBQUssV0FBVzt1QkFDMUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDeEIsQ0FBQTtRQUNILENBQUM7UUFDRCxHQUFHLENBQUMsSUFBYTtZQUNoQixJQUFJLENBQUM7Z0JBQ0osSUFBSSxHQUFHLENBQUMsSUFBYyxDQUFDLENBQUE7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFBO1lBQ1osQ0FBQztZQUFDLFdBQUssQ0FBQztnQkFDUCxPQUFPLEtBQUssQ0FBQTtZQUNiLENBQUM7UUFDRixDQUFDO0tBQ0Q7Q0FDRCxDQUFDLENBQUE7QUFFRixTQUFnQiw0QkFBNEIsQ0FDM0MsSUFBTyxFQUNQLE1BQWU7O0lBRWYsSUFBSSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDM0MsSUFBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxNQUFNLEdBQUcsTUFBQSxnQ0FBZ0IsQ0FBQyxJQUFJLENBQUMsMENBQUUsVUFBVSxDQUFBO1FBQ2pELElBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxxQkFBYSxDQUN0QixtQkFBbUIsRUFDbkIsMEJBQTBCLElBQUksR0FBRyxDQUNqQyxDQUFBO1FBQ0YsQ0FBQztRQUVELFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxJQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDdEIsTUFBTSxJQUFJLHFCQUFhLENBQ3RCLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDM0MsQ0FBQTtJQUNGLENBQUM7QUFDRixDQUFDIn0=
@@ -0,0 +1,12 @@
1
+ import { AnyWebSocketConstructor } from 'src/types';
2
+ /**
3
+ * Default WebSocket implementation, uses `ws` package
4
+ * for Node.js and the native WebSocket for the browser & other
5
+ * environments.
6
+ */
7
+ export declare let Websocket: AnyWebSocketConstructor;
8
+ /**
9
+ * Replace the default WebSocket implementation utilised
10
+ * by the Attestor client.
11
+ */
12
+ export declare function setWebsocket(ws: AnyWebSocketConstructor): void;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Websocket = void 0;
4
+ exports.setWebsocket = setWebsocket;
5
+ const env_1 = require("src/utils/env");
6
+ /**
7
+ * Default WebSocket implementation, uses `ws` package
8
+ * for Node.js and the native WebSocket for the browser & other
9
+ * environments.
10
+ */
11
+ exports.Websocket = ((0, env_1.detectEnvironment)() === 'node'
12
+ ? require('ws').WebSocket
13
+ : WebSocket);
14
+ /**
15
+ * Replace the default WebSocket implementation utilised
16
+ * by the Attestor client.
17
+ */
18
+ function setWebsocket(ws) {
19
+ exports.Websocket = ws;
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBa0JBLG9DQUVDO0FBbkJELHVDQUFpRDtBQUVqRDs7OztHQUlHO0FBQ1EsUUFBQSxTQUFTLEdBQTRCLENBQy9DLElBQUEsdUJBQWlCLEdBQUUsS0FBSyxNQUFNO0lBQzdCLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUztJQUN6QixDQUFDLENBQUMsU0FBUyxDQUNaLENBQUE7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixZQUFZLENBQUMsRUFBMkI7SUFDdkQsaUJBQVMsR0FBRyxFQUFFLENBQUE7QUFDZixDQUFDIn0=
@@ -0,0 +1,50 @@
1
+ import { EncryptionAlgorithm, PrivateInput, PublicInput, ZKOperator } from '@reclaimprotocol/circom-symmetric-crypto';
2
+ import { CipherSuite } from '@reclaimprotocol/tls';
3
+ import { MessageReveal_MessageRevealZk as ZKReveal, MessageReveal_ZKProof as ZKProof } from 'src/proto/api';
4
+ import { CompleteTLSPacket, Logger, PrepareZKProofsBaseOpts, ZKEngine, ZKOperators, ZKRevealInfo } from 'src/types';
5
+ type PrepareZKProofsOpts = {
6
+ logger?: Logger;
7
+ cipherSuite: CipherSuite;
8
+ } & PrepareZKProofsBaseOpts;
9
+ type ZKVerifyOpts = {
10
+ cipherSuite: CipherSuite;
11
+ ciphertext: Uint8Array;
12
+ zkReveal: ZKReveal;
13
+ logger?: Logger;
14
+ /** get ZK operator for specified algorithm */
15
+ zkOperators?: ZKOperators;
16
+ zkEngine?: ZKEngine;
17
+ iv: Uint8Array;
18
+ recordNumber: number;
19
+ };
20
+ type ZKProofToGenerate = {
21
+ startIdx: number;
22
+ redactedPlaintext: Uint8Array;
23
+ privateInput: PrivateInput;
24
+ publicInput: PublicInput;
25
+ };
26
+ type ZKPacketToProve = {
27
+ onGeneratedProofs(proofs: ZKProof[]): void;
28
+ algorithm: EncryptionAlgorithm;
29
+ proofsToGenerate: ZKProofToGenerate[];
30
+ iv: Uint8Array;
31
+ };
32
+ export declare function makeZkProofGenerator({ zkOperators, logger, zkProofConcurrency, maxZkChunks, cipherSuite, zkEngine }: PrepareZKProofsOpts): Promise<{
33
+ /**
34
+ * Adds the given packet to the list of packets to
35
+ * generate ZK proofs for.
36
+ *
37
+ * Call `generateProofs()` to finally generate the proofs
38
+ */
39
+ addPacketToProve(packet: CompleteTLSPacket, reveal: ZKRevealInfo, onGeneratedProofs: ZKPacketToProve["onGeneratedProofs"]): Promise<void>;
40
+ getTotalChunksToProve(): number;
41
+ generateProofs(onChunkDone?: () => void): Promise<void>;
42
+ }>;
43
+ /**
44
+ * Verify the given ZK proof
45
+ */
46
+ export declare function verifyZkPacket({ cipherSuite, ciphertext, zkReveal, zkOperators, logger, zkEngine, iv, recordNumber }: ZKVerifyOpts): Promise<{
47
+ redactedPlaintext: Uint8Array;
48
+ }>;
49
+ export declare function makeDefaultZkOperator(algorithm: EncryptionAlgorithm, zkEngine: ZKEngine, logger: Logger): Promise<ZKOperator>;
50
+ export {};
@@ -0,0 +1,282 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeZkProofGenerator = makeZkProofGenerator;
4
+ exports.verifyZkPacket = verifyZkPacket;
5
+ exports.makeDefaultZkOperator = makeDefaultZkOperator;
6
+ const circom_symmetric_crypto_1 = require("@reclaimprotocol/circom-symmetric-crypto");
7
+ const gnark_1 = require("@reclaimprotocol/circom-symmetric-crypto/lib/gnark");
8
+ const tls_1 = require("@reclaimprotocol/tls");
9
+ const config_1 = require("src/config");
10
+ const env_1 = require("src/utils/env");
11
+ const error_1 = require("src/utils/error");
12
+ const generics_1 = require("src/utils/generics");
13
+ const logger_1 = require("src/utils/logger");
14
+ const redactions_1 = require("src/utils/redactions");
15
+ const retries_1 = require("src/utils/retries");
16
+ const ZK_CONCURRENCY = +((0, env_1.getEnvVariable)('ZK_CONCURRENCY')
17
+ || config_1.DEFAULT_ZK_CONCURRENCY);
18
+ async function makeZkProofGenerator({ zkOperators, logger = logger_1.logger, zkProofConcurrency = ZK_CONCURRENCY, maxZkChunks = config_1.MAX_ZK_CHUNKS, cipherSuite, zkEngine = 'snarkJS' }) {
19
+ const { default: PQueue } = await import('p-queue');
20
+ const zkQueue = new PQueue({
21
+ concurrency: zkProofConcurrency,
22
+ autoStart: true,
23
+ });
24
+ const packetsToProve = [];
25
+ logger = (logger || logger_1.logger).child({ module: 'zk', zkEngine: zkEngine });
26
+ let zkChunksToProve = 0;
27
+ return {
28
+ /**
29
+ * Adds the given packet to the list of packets to
30
+ * generate ZK proofs for.
31
+ *
32
+ * Call `generateProofs()` to finally generate the proofs
33
+ */
34
+ async addPacketToProve(packet, reveal, onGeneratedProofs) {
35
+ if (packet.type === 'plaintext') {
36
+ throw new Error('Cannot generate proof for plaintext');
37
+ }
38
+ const alg = (0, generics_1.getZkAlgorithmForCipherSuite)(cipherSuite);
39
+ const chunkSizeBytes = getChunkSizeBytes(alg);
40
+ const { redactedPlaintext } = reveal;
41
+ const key = await tls_1.crypto.exportKey(packet.encKey);
42
+ const iv = packet.iv;
43
+ const ciphertext = (0, generics_1.getPureCiphertext)(packet.ciphertext, cipherSuite);
44
+ const chunks = Math.ceil(ciphertext.length / chunkSizeBytes);
45
+ const packetToProve = {
46
+ onGeneratedProofs,
47
+ algorithm: alg,
48
+ proofsToGenerate: [],
49
+ iv: packet.fixedIv
50
+ };
51
+ for (let i = 0; i < chunks; i++) {
52
+ const proof = getProofGenerationParamsForChunk(alg, {
53
+ key,
54
+ iv,
55
+ ciphertext,
56
+ redactedPlaintext,
57
+ offsetChunks: i,
58
+ });
59
+ if (!proof) {
60
+ continue;
61
+ }
62
+ packetToProve.proofsToGenerate.push(proof);
63
+ zkChunksToProve += 1;
64
+ if (zkChunksToProve > maxZkChunks) {
65
+ throw new Error(`Too many chunks to prove: ${zkChunksToProve} > ${maxZkChunks}`);
66
+ }
67
+ }
68
+ packetsToProve.push(packetToProve);
69
+ },
70
+ getTotalChunksToProve() {
71
+ return zkChunksToProve;
72
+ },
73
+ async generateProofs(onChunkDone) {
74
+ var _a;
75
+ if (!packetsToProve.length) {
76
+ return;
77
+ }
78
+ const start = Date.now();
79
+ const tasks = [];
80
+ for (const { onGeneratedProofs, algorithm, proofsToGenerate } of packetsToProve) {
81
+ const proofs = [];
82
+ let proofsLeft = proofsToGenerate.length;
83
+ for (const proofToGen of proofsToGenerate) {
84
+ tasks.push(zkQueue.add(async () => {
85
+ const proof = await generateProofForChunk(algorithm, proofToGen);
86
+ onChunkDone === null || onChunkDone === void 0 ? void 0 : onChunkDone();
87
+ proofs.push(proof);
88
+ proofsLeft -= 1;
89
+ if (proofsLeft === 0) {
90
+ onGeneratedProofs(proofs);
91
+ }
92
+ }, { throwOnTimeout: true }));
93
+ }
94
+ }
95
+ await Promise.all(tasks);
96
+ logger === null || logger === void 0 ? void 0 : logger.info({
97
+ durationMs: Date.now() - start,
98
+ chunks: zkChunksToProve,
99
+ }, 'generated ZK proofs');
100
+ // reset the packets to prove
101
+ packetsToProve.splice(0, packetsToProve.length);
102
+ zkChunksToProve = 0;
103
+ // release ZK resources to free up memory
104
+ const alg = (0, generics_1.getZkAlgorithmForCipherSuite)(cipherSuite);
105
+ const zkOperator = await getZkOperatorForAlgorithm(alg);
106
+ (_a = zkOperator.release) === null || _a === void 0 ? void 0 : _a.call(zkOperator);
107
+ },
108
+ };
109
+ async function generateProofForChunk(algorithm, { startIdx, redactedPlaintext, privateInput, publicInput }) {
110
+ const operator = await getZkOperatorForAlgorithm(algorithm);
111
+ const proof = await (0, circom_symmetric_crypto_1.generateProof)({
112
+ algorithm,
113
+ privateInput,
114
+ publicInput,
115
+ operator,
116
+ logger
117
+ });
118
+ logger === null || logger === void 0 ? void 0 : logger.debug({ startIdx }, 'generated proof for chunk');
119
+ return {
120
+ proofJson: proof.proofJson,
121
+ decryptedRedactedCiphertext: proof.plaintext,
122
+ redactedPlaintext,
123
+ startIdx
124
+ };
125
+ }
126
+ async function getZkOperatorForAlgorithm(algorithm) {
127
+ return (zkOperators === null || zkOperators === void 0 ? void 0 : zkOperators[algorithm])
128
+ || await makeDefaultZkOperator(algorithm, zkEngine, logger);
129
+ }
130
+ }
131
+ /**
132
+ * Verify the given ZK proof
133
+ */
134
+ async function verifyZkPacket({ cipherSuite, ciphertext, zkReveal, zkOperators, logger = logger_1.logger, zkEngine = 'snarkJS', iv, recordNumber }) {
135
+ if (!zkReveal) {
136
+ throw new Error('No ZK reveal');
137
+ }
138
+ const { proofs } = zkReveal;
139
+ const algorithm = (0, generics_1.getZkAlgorithmForCipherSuite)(cipherSuite);
140
+ const operator = (zkOperators === null || zkOperators === void 0 ? void 0 : zkOperators[algorithm])
141
+ || await makeDefaultZkOperator(algorithm, zkEngine, logger);
142
+ const recordIV = (0, generics_1.getRecordIV)(ciphertext, cipherSuite);
143
+ ciphertext = (0, generics_1.getPureCiphertext)(ciphertext, cipherSuite);
144
+ /**
145
+ * to verify if the user has given us the correct redacted plaintext,
146
+ * and isn't providing plaintext that they haven't proven they have
147
+ * we start with a fully redacted plaintext, and then replace the
148
+ * redacted parts with the plaintext that the user has provided
149
+ * in the proofs
150
+ */
151
+ const realRedactedPlaintext = new Uint8Array(ciphertext.length).fill(redactions_1.REDACTION_CHAR_CODE);
152
+ const alg = (0, generics_1.getZkAlgorithmForCipherSuite)(cipherSuite);
153
+ const chunkSizeBytes = getChunkSizeBytes(alg);
154
+ const { blocksPerChunk } = circom_symmetric_crypto_1.CONFIG[algorithm];
155
+ await Promise.all(proofs.map(async ({ proofJson, decryptedRedactedCiphertext, redactedPlaintext, startIdx }, i) => {
156
+ // get the ciphertext chunk we received from the server
157
+ // the ZK library, will verify that the decrypted redacted
158
+ // ciphertext matches the ciphertext received from the server
159
+ const ciphertextChunk = ciphertext.slice(startIdx, startIdx + redactedPlaintext.length);
160
+ // redact ciphertext if plaintext is redacted
161
+ // to prepare for decryption in ZK circuit
162
+ // the ZK circuit will take in the redacted ciphertext,
163
+ // which shall produce the redacted plaintext
164
+ for (let i = 0; i < ciphertextChunk.length; i++) {
165
+ if (redactedPlaintext[i] === redactions_1.REDACTION_CHAR_CODE) {
166
+ ciphertextChunk[i] = redactions_1.REDACTION_CHAR_CODE;
167
+ }
168
+ }
169
+ if (!(0, redactions_1.isRedactionCongruent)(redactedPlaintext, decryptedRedactedCiphertext)) {
170
+ throw new Error(`redacted ciphertext (${i}) not congruent`);
171
+ }
172
+ const chunkIndex = startIdx / chunkSizeBytes * blocksPerChunk;
173
+ let nonce = (0, tls_1.concatenateUint8Arrays)([iv, recordIV]);
174
+ if (!recordIV.length) {
175
+ nonce = (0, tls_1.generateIV)(nonce, recordNumber);
176
+ }
177
+ await (0, circom_symmetric_crypto_1.verifyProof)({
178
+ proof: {
179
+ algorithm,
180
+ proofJson,
181
+ plaintext: decryptedRedactedCiphertext,
182
+ },
183
+ publicInput: { ciphertext: ciphertextChunk, iv: nonce, offset: chunkIndex },
184
+ operator,
185
+ logger,
186
+ });
187
+ logger === null || logger === void 0 ? void 0 : logger.debug({ startIdx, endIdx: startIdx + redactedPlaintext.length }, 'verified proof');
188
+ realRedactedPlaintext.set(redactedPlaintext, startIdx);
189
+ }));
190
+ return { redactedPlaintext: realRedactedPlaintext };
191
+ }
192
+ function getChunkSizeBytes(alg) {
193
+ const { chunkSize, bitsPerWord } = circom_symmetric_crypto_1.CONFIG[alg];
194
+ return chunkSize * bitsPerWord / 8;
195
+ }
196
+ const zkEngines = {};
197
+ const operatorMakers = {
198
+ 'snarkJS': snarkJSOperator,
199
+ 'gnark': gnark_1.makeLocalGnarkZkOperator
200
+ };
201
+ function makeDefaultZkOperator(algorithm, zkEngine, logger) {
202
+ const engine = zkEngine || 'snarkJS';
203
+ let zkOperators = zkEngines[engine];
204
+ if (!zkOperators) {
205
+ zkEngines[engine] = {};
206
+ zkOperators = zkEngines[engine];
207
+ }
208
+ if (!zkOperators[algorithm]) {
209
+ zkOperators[algorithm] = operatorMakers[engine](algorithm, logger);
210
+ }
211
+ return zkOperators[algorithm];
212
+ }
213
+ function snarkJSOperator(algorithm, logger) {
214
+ const isNode = (0, env_1.detectEnvironment)() === 'node';
215
+ const opType = isNode ? 'local' : 'remote';
216
+ logger === null || logger === void 0 ? void 0 : logger.info({
217
+ type: opType,
218
+ algorithm
219
+ }, 'fetching zk operator');
220
+ if (isNode) {
221
+ return (0, circom_symmetric_crypto_1.makeLocalSnarkJsZkOperator)(algorithm);
222
+ }
223
+ else {
224
+ const { zkeyUrl, circuitWasmUrl } = config_1.DEFAULT_REMOTE_ZK_PARAMS;
225
+ const operator = makeRemoteSnarkJsZkOperator(zkeyUrl.replace('{algorithm}', algorithm), circuitWasmUrl.replace('{algorithm}', algorithm), logger);
226
+ return Promise.resolve(operator);
227
+ }
228
+ }
229
+ function makeRemoteSnarkJsZkOperator(zkeyUrl, wasmUrl, logger) {
230
+ return (0, circom_symmetric_crypto_1.makeSnarkJsZKOperator)({
231
+ getCircuitWasm: () => fetchArrayBuffer('wasm', wasmUrl),
232
+ getZkey: () => (fetchArrayBuffer('zkey', zkeyUrl)
233
+ .then(data => ({ data }))),
234
+ });
235
+ async function fetchArrayBuffer(type, url) {
236
+ const res = await (0, retries_1.executeWithRetries)(async () => {
237
+ const res = await fetch(url);
238
+ if (!res.ok) {
239
+ throw new error_1.AttestorError('ERROR_NETWORK_ERROR', `${type} fetch failed with code: ${res.status}`, { url, status: res.status });
240
+ }
241
+ return await res.arrayBuffer();
242
+ }, {
243
+ logger: logger.child({ type }),
244
+ maxRetries: 3,
245
+ shouldRetry(error) {
246
+ // network errors are TypeErrors
247
+ // in fetch
248
+ // https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API#concepts_and_usage
249
+ return error instanceof TypeError;
250
+ },
251
+ });
252
+ return new Uint8Array(res);
253
+ }
254
+ }
255
+ function getProofGenerationParamsForChunk(algorithm, { key, iv, ciphertext, redactedPlaintext, offsetChunks, }) {
256
+ const chunkSize = getChunkSizeBytes(algorithm);
257
+ const startIdx = offsetChunks * chunkSize;
258
+ const endIdx = (offsetChunks + 1) * chunkSize;
259
+ const ciphertextChunk = ciphertext
260
+ .slice(startIdx, endIdx);
261
+ const plaintextChunk = redactedPlaintext
262
+ .slice(startIdx, endIdx);
263
+ if ((0, redactions_1.isFullyRedacted)(plaintextChunk)) {
264
+ return;
265
+ }
266
+ // redact ciphertext if plaintext is redacted
267
+ // to prepare for decryption in ZK circuit
268
+ // the ZK circuit will take in the redacted ciphertext,
269
+ // which shall produce the redacted plaintext
270
+ for (let i = 0; i < ciphertextChunk.length; i++) {
271
+ if (plaintextChunk[i] === redactions_1.REDACTION_CHAR_CODE) {
272
+ ciphertextChunk[i] = redactions_1.REDACTION_CHAR_CODE;
273
+ }
274
+ }
275
+ return {
276
+ startIdx,
277
+ redactedPlaintext: plaintextChunk,
278
+ privateInput: { key },
279
+ publicInput: { ciphertext: ciphertextChunk, iv, offset: offsetChunks }
280
+ };
281
+ }
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvemsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFzRUEsb0RBMEtDO0FBS0Qsd0NBc0dDO0FBb0JELHNEQWtCQztBQWpZRCxzRkFTaUQ7QUFDakQsOEVBQTZGO0FBQzdGLDhDQUE4RjtBQUM5Rix1Q0FBNEY7QUFHNUYsdUNBQWlFO0FBQ2pFLDJDQUErQztBQUMvQyxpREFBaUc7QUFDakcsNkNBQW1EO0FBQ25ELHFEQUFpRztBQUNqRywrQ0FBc0Q7QUE2Q3RELE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FDdkIsSUFBQSxvQkFBYyxFQUFDLGdCQUFnQixDQUFDO09BQzdCLCtCQUFzQixDQUN6QixDQUFBO0FBRU0sS0FBSyxVQUFVLG9CQUFvQixDQUN6QyxFQUNDLFdBQVcsRUFDWCxNQUFNLEdBQUcsZUFBTSxFQUNmLGtCQUFrQixHQUFHLGNBQWMsRUFDbkMsV0FBVyxHQUFHLHNCQUFhLEVBQzNCLFdBQVcsRUFDWCxRQUFRLEdBQUcsU0FBUyxFQUNDO0lBR3RCLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUM7UUFDMUIsV0FBVyxFQUFFLGtCQUFrQjtRQUMvQixTQUFTLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQTtJQUVGLE1BQU0sY0FBYyxHQUFzQixFQUFFLENBQUE7SUFFNUMsTUFBTSxHQUFHLENBQUMsTUFBTSxJQUFJLGVBQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDdkUsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFBO0lBRXZCLE9BQU87UUFDTjs7Ozs7V0FLRztRQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FDckIsTUFBeUIsRUFDekIs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
@@ -0,0 +1,3 @@
1
+ export * from './types';
2
+ export * from './setup-window-rpc';
3
+ export * from './utils';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./setup-window-rpc"), exports);
19
+ __exportStar(require("./utils"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2luZG93LXJwYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMENBQXVCO0FBQ3ZCLHFEQUFrQztBQUNsQywwQ0FBdUIifQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Sets up the current window to listen for RPC requests
3
+ * from React Native or other windows
4
+ */
5
+ export declare function setupWindowRpc(): void;