@inco/js 0.6.8 → 0.6.9

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 (88) hide show
  1. package/dist/cjs/advancedacl/session-key.d.ts +8 -1
  2. package/dist/cjs/advancedacl/session-key.js +55 -21
  3. package/dist/cjs/attestedcompute/attested-compute.js +11 -4
  4. package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +38 -1
  5. package/dist/cjs/attesteddecrypt/attested-decrypt.js +49 -6
  6. package/dist/cjs/attesteddecrypt/types.d.ts +6 -1
  7. package/dist/cjs/attesteddecrypt/types.js +1 -1
  8. package/dist/cjs/attestedreveal/attested-reveal.js +9 -7
  9. package/dist/cjs/encryption/encryption.d.ts +8 -10
  10. package/dist/cjs/encryption/encryption.js +6 -6
  11. package/dist/cjs/generated/abis/add-two.d.ts +1 -1
  12. package/dist/cjs/generated/abis/add-two.js +1 -1
  13. package/dist/cjs/generated/abis/lightning-preview.d.ts +40 -0
  14. package/dist/cjs/generated/abis/lightning-preview.js +29 -1
  15. package/dist/cjs/generated/abis/lightning.d.ts +1 -1
  16. package/dist/cjs/generated/abis/lightning.js +1 -1
  17. package/dist/cjs/generated/abis/verifier.d.ts +126 -67
  18. package/dist/cjs/generated/abis/verifier.js +108 -54
  19. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +76 -129
  20. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +20 -25
  21. package/dist/cjs/generated/lightning.d.ts +0 -32
  22. package/dist/cjs/generated/lightning.js +1 -33
  23. package/dist/cjs/generated/local-node.d.ts +1 -5
  24. package/dist/cjs/generated/local-node.js +2 -6
  25. package/dist/cjs/lite/deployments.d.ts +20 -2
  26. package/dist/cjs/lite/deployments.js +1 -1
  27. package/dist/cjs/lite/index.d.ts +1 -1
  28. package/dist/cjs/lite/index.js +1 -1
  29. package/dist/cjs/lite/lightning.d.ts +24 -12
  30. package/dist/cjs/lite/lightning.js +62 -26
  31. package/dist/cjs/lite/reencrypt.d.ts +5 -7
  32. package/dist/cjs/lite/reencrypt.js +68 -58
  33. package/dist/cjs/test/mocks.d.ts +12 -0
  34. package/dist/cjs/test/mocks.js +27 -0
  35. package/dist/cjs/viem.d.ts +1 -1
  36. package/dist/esm/advancedacl/session-key.d.ts +8 -1
  37. package/dist/esm/advancedacl/session-key.js +58 -24
  38. package/dist/esm/attestedcompute/attested-compute.js +11 -4
  39. package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +38 -1
  40. package/dist/esm/attesteddecrypt/attested-decrypt.js +51 -8
  41. package/dist/esm/attesteddecrypt/types.d.ts +6 -1
  42. package/dist/esm/attesteddecrypt/types.js +1 -1
  43. package/dist/esm/attestedreveal/attested-reveal.js +9 -7
  44. package/dist/esm/encryption/encryption.d.ts +8 -10
  45. package/dist/esm/encryption/encryption.js +6 -6
  46. package/dist/esm/generated/abis/add-two.d.ts +1 -1
  47. package/dist/esm/generated/abis/add-two.js +1 -1
  48. package/dist/esm/generated/abis/lightning-preview.d.ts +40 -0
  49. package/dist/esm/generated/abis/lightning-preview.js +29 -1
  50. package/dist/esm/generated/abis/lightning.d.ts +1 -1
  51. package/dist/esm/generated/abis/lightning.js +1 -1
  52. package/dist/esm/generated/abis/verifier.d.ts +126 -67
  53. package/dist/esm/generated/abis/verifier.js +108 -54
  54. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +76 -129
  55. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +19 -24
  56. package/dist/esm/generated/lightning.d.ts +0 -32
  57. package/dist/esm/generated/lightning.js +1 -33
  58. package/dist/esm/generated/local-node.d.ts +1 -5
  59. package/dist/esm/generated/local-node.js +2 -6
  60. package/dist/esm/lite/deployments.d.ts +20 -2
  61. package/dist/esm/lite/deployments.js +1 -1
  62. package/dist/esm/lite/index.d.ts +1 -1
  63. package/dist/esm/lite/index.js +1 -1
  64. package/dist/esm/lite/lightning.d.ts +24 -12
  65. package/dist/esm/lite/lightning.js +59 -23
  66. package/dist/esm/lite/reencrypt.d.ts +5 -7
  67. package/dist/esm/lite/reencrypt.js +67 -58
  68. package/dist/esm/test/mocks.d.ts +12 -0
  69. package/dist/esm/test/mocks.js +23 -0
  70. package/dist/esm/viem.d.ts +1 -1
  71. package/dist/types/advancedacl/session-key.d.ts +8 -1
  72. package/dist/types/attesteddecrypt/attested-decrypt.d.ts +38 -1
  73. package/dist/types/attesteddecrypt/types.d.ts +6 -1
  74. package/dist/types/encryption/encryption.d.ts +8 -10
  75. package/dist/types/generated/abis/add-two.d.ts +1 -1
  76. package/dist/types/generated/abis/lightning-preview.d.ts +40 -0
  77. package/dist/types/generated/abis/lightning.d.ts +1 -1
  78. package/dist/types/generated/abis/verifier.d.ts +126 -67
  79. package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +76 -129
  80. package/dist/types/generated/lightning.d.ts +0 -32
  81. package/dist/types/generated/local-node.d.ts +1 -5
  82. package/dist/types/lite/deployments.d.ts +20 -2
  83. package/dist/types/lite/index.d.ts +1 -1
  84. package/dist/types/lite/lightning.d.ts +24 -12
  85. package/dist/types/lite/reencrypt.d.ts +5 -7
  86. package/dist/types/test/mocks.d.ts +12 -0
  87. package/dist/types/viem.d.ts +1 -1
  88. package/package.json +2 -2
@@ -7,9 +7,12 @@ const chains_1 = require("viem/chains");
7
7
  const session_key_js_1 = require("../advancedacl/session-key.js");
8
8
  const attested_compute_js_1 = require("../attestedcompute/attested-compute.js");
9
9
  const attested_decrypt_js_1 = require("../attesteddecrypt/attested-decrypt.js");
10
+ const attested_reveal_js_1 = require("../attestedreveal/attested-reveal.js");
10
11
  const binary_js_1 = require("../binary.js");
11
12
  const index_js_1 = require("../encryption/index.js");
12
- const lightning_js_1 = require("../generated/lightning.js");
13
+ const lightning_js_1 = require("../generated/abis/lightning.js");
14
+ const verifier_js_1 = require("../generated/abis/verifier.js");
15
+ const lightning_js_2 = require("../generated/lightning.js");
13
16
  const local_node_js_1 = require("../generated/local-node.js");
14
17
  const handle_js_1 = require("../handle.js");
15
18
  const index_js_2 = require("../local/index.js");
@@ -25,29 +28,22 @@ class Lightning {
25
28
  _deployment;
26
29
  covalidatorUrl;
27
30
  executorAddress;
28
- eciesPublicKey;
29
31
  chainId;
30
- encryptor;
31
32
  ephemeralKeypair;
32
33
  kmsClient;
33
34
  constructor(_deployment, covalidatorUrl) {
34
35
  this._deployment = _deployment;
35
36
  this.covalidatorUrl = covalidatorUrl;
36
37
  this.executorAddress = (0, binary_js_1.parseAddress)(_deployment.executorAddress);
37
- this.eciesPublicKey = (0, schema_js_1.parse)(binary_js_1.HexString, _deployment.eciesPublicKey);
38
38
  this.chainId = BigInt(_deployment.chainId);
39
39
  this.ephemeralKeypair = (0, ecies_js_1.generateSecp256k1Keypair)();
40
40
  this.kmsClient = (0, reencrypt_js_1.getKmsClient)(covalidatorUrl);
41
- this.encryptor = (0, ecies_js_1.getEciesEncryptor)({
42
- pubKeyA: (0, ecies_js_1.decodeSecp256k1PublicKey)((0, viem_1.hexToBytes)((0, schema_js_1.parse)(binary_js_1.HexString, _deployment.eciesPublicKey))),
43
- privKeyB: this.ephemeralKeypair,
44
- });
45
41
  }
46
42
  /**
47
43
  * Get a Lightning instance bound to the latest Lightning deployment for the Base Sepolia testnet.
48
44
  */
49
- static baseSepoliaTestnet() {
50
- return Lightning.latest('testnet', chains_1.baseSepolia.id);
45
+ static async baseSepoliaTestnet() {
46
+ return await Lightning.latest('testnet', chains_1.baseSepolia.id);
51
47
  }
52
48
  /**
53
49
  * Get a Lightning instance bound to our canonical Anvil-based test node and test Covalidator node
@@ -64,15 +60,15 @@ class Lightning {
64
60
  * corresponding Pepper.
65
61
  *
66
62
  */
67
- static localNode(env) {
63
+ static async localNode(env) {
68
64
  if (!env) {
69
- return Lightning.custom(local_node_js_1.localNodeLightningConfig[DefaultPepper]);
65
+ return await Lightning.custom(local_node_js_1.localNodeLightningConfig[DefaultPepper]);
70
66
  }
71
67
  if (typeof env === 'string') {
72
- return Lightning.custom(local_node_js_1.localNodeLightningConfig[env]);
68
+ return await Lightning.custom(local_node_js_1.localNodeLightningConfig[env]);
73
69
  }
74
70
  const conf = local_node_js_1.localNodeLightningConfig[DefaultPepper];
75
- return Lightning.custom({
71
+ return await Lightning.custom({
76
72
  // We assume that we always run a local node as the default anvil node
77
73
  chainId: env.COVALIDATOR_HOST_CHAIN_ID
78
74
  ? Number(env.COVALIDATOR_HOST_CHAIN_ID)
@@ -83,7 +79,6 @@ class Lightning {
83
79
  'http://localhost:8545',
84
80
  // These variables vary per environment
85
81
  executorAddress: env.EXECUTOR_ADDRESS,
86
- eciesPublicKey: env.ECIES_PUBLIC_KEY,
87
82
  senderPrivateKey: env.SENDER_PRIVATE_KEY,
88
83
  });
89
84
  }
@@ -95,17 +90,17 @@ class Lightning {
95
90
  static async localNodeFromEnv(filePath) {
96
91
  const buf = filePath ? await fs.readFile(filePath) : undefined;
97
92
  const env = (0, index_js_2.parseLocalEnv)(buf);
98
- return Lightning.localNode(env);
93
+ return await Lightning.localNode(env);
99
94
  }
100
95
  /**
101
96
  * Get a Lightning deployment by name or executor address on a particular chain.
102
97
  *
103
98
  * @param id this is an object containing either the pair of name and chainId or the executorAddress and chainId
104
99
  */
105
- static at(id) {
100
+ static async at(id) {
106
101
  const deployment = this.isIdByName(id)
107
- ? lightning_js_1.lightningDeployments.find((d) => d.name === id.name && d.chainId === id.chainId)
108
- : lightning_js_1.lightningDeployments.find((d) => d.executorAddress === id.executorAddress &&
102
+ ? lightning_js_2.lightningDeployments.find((d) => d.name === id.name && d.chainId === id.chainId)
103
+ : lightning_js_2.lightningDeployments.find((d) => d.executorAddress === id.executorAddress &&
109
104
  d.chainId === id.chainId);
110
105
  if (!deployment) {
111
106
  throw new Error(`No deployment found for ${JSON.stringify(id)}`);
@@ -118,9 +113,23 @@ class Lightning {
118
113
  * @param config this is an object containing the executorAddress, eciesPublicKey, chainId and covalidatorUrl.
119
114
  * additional fields past will be made available as part of the `deployment` property.
120
115
  */
121
- static custom(config) {
116
+ static async custom(config) {
122
117
  return new Lightning(config, config.covalidatorUrl);
123
118
  }
119
+ static async getEciesPublicKey(client, executorAddress) {
120
+ const incoLightningContract = (0, viem_1.getContract)({
121
+ abi: lightning_js_1.incoLightningAbi,
122
+ address: executorAddress,
123
+ client,
124
+ });
125
+ const incoVerifierAddress = await incoLightningContract.read.incoVerifier();
126
+ const incoVerifier = (0, viem_1.getContract)({
127
+ abi: verifier_js_1.incoVerifierAbi,
128
+ address: incoVerifierAddress,
129
+ client,
130
+ });
131
+ return await incoVerifier.read.eciesPubkey();
132
+ }
124
133
  /**
125
134
  * Get the latest deployment for a given pepper, which usually denotes a family of deployments distinct from their
126
135
  * version such as 'devnet', 'testnet', 'mainnet', etc.
@@ -130,7 +139,7 @@ class Lightning {
130
139
  */
131
140
  static latestDeployment(pepper, chainId) {
132
141
  // Deployments are sorted so we are guaranteed to get the latest first
133
- const latestByPepper = lightning_js_1.lightningDeployments.find((d) => d.pepper === pepper && d.chainId === chainId);
142
+ const latestByPepper = lightning_js_2.lightningDeployments.find((d) => d.pepper === pepper && d.chainId === chainId);
134
143
  if (!latestByPepper) {
135
144
  // This should not actually happen provided this file compiles since we are extracting the available peppers
136
145
  // from the const itself
@@ -146,8 +155,8 @@ class Lightning {
146
155
  * @param pepper the pepper to use to filter the deployments
147
156
  * @param chainId the chainId to use to filter the deployments
148
157
  */
149
- static latest(pepper, chainId) {
150
- return Lightning.at(Lightning.latestDeployment(pepper, chainId));
158
+ static async latest(pepper, chainId) {
159
+ return await Lightning.at(Lightning.latestDeployment(pepper, chainId));
151
160
  }
152
161
  /*
153
162
  * Get the latest deployment for a given pepper, which usually denotes a family of deployments distinct from their
@@ -163,8 +172,8 @@ class Lightning {
163
172
  * @param accountAddress the address of the account interacting with the dapp contract, normally an Externally Owned Account (EOA)
164
173
  * @param dappAddress the address of the dapp contract that interacts with the Inco Lightning contract or library
165
174
  */
166
- async encrypt(value, { accountAddress, dappAddress }) {
167
- const { ciphertext } = await this.encryptor({
175
+ async encrypt(value, { accountAddress, dappAddress }, encryptor) {
176
+ const { ciphertext } = await encryptor({
168
177
  plaintext: Lightning.plaintextFromValue(value),
169
178
  context: {
170
179
  hostChainId: this.chainId,
@@ -190,6 +199,12 @@ class Lightning {
190
199
  ephemeralKeypair: this.ephemeralKeypair,
191
200
  });
192
201
  }
202
+ getEncryptor(eciesPubkey) {
203
+ return (0, ecies_js_1.getEciesEncryptor)({
204
+ pubKeyA: (0, ecies_js_1.decodeSecp256k1PublicKey)((0, viem_1.hexToBytes)((0, schema_js_1.parse)(binary_js_1.HexString, eciesPubkey))),
205
+ privKeyB: this.ephemeralKeypair,
206
+ });
207
+ }
193
208
  /**
194
209
  * Grants a session key allowance voucher for secure reencryption operations.
195
210
  *
@@ -322,6 +337,27 @@ class Lightning {
322
337
  backoffConfig,
323
338
  });
324
339
  }
340
+ /**
341
+ * Get an decryption of publicly revealed handles.
342
+ *
343
+ * @param handles - The handles to decrypt
344
+ * @param backoffConfig - The backoff configuration for the attested decrypt request
345
+ * @returns The decryption attestations
346
+ *
347
+ * @example
348
+ * ```typescript
349
+ * const response = await lightning.attestedReveal([handle1, handle2]);
350
+ * const { plaintext, covalidatorSignature } = response[0];
351
+ * ```
352
+ */
353
+ attestedReveal(handles, backoffConfig) {
354
+ return (0, attested_reveal_js_1.attestedReveal)({
355
+ handles,
356
+ backoffConfig,
357
+ chainId: Number(this.chainId),
358
+ kmsConnectRpcEndpointOrClient: this.kmsClient,
359
+ });
360
+ }
325
361
  /**
326
362
  * Get the GRPC endpoint for the covalidator that services this deployment.
327
363
  */
@@ -353,4 +389,4 @@ class Lightning {
353
389
  }
354
390
  }
355
391
  exports.Lightning = Lightning;
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvbGlnaHRuaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGtDQUFrQztBQUNsQywrQkFBMkU7QUFDM0Usd0NBQTBDO0FBQzFDLGtFQU11QztBQUV2QyxnRkFBeUU7QUFFekUsZ0ZBQXlFO0FBRXpFLDRDQUFnRTtBQUVoRSxxREFNZ0M7QUFFaEMsNERBQWlFO0FBQ2pFLDhEQUFzRTtBQUN0RSw0Q0FBMkM7QUFDM0MsZ0RBQWdFO0FBR2hFLDRDQUFxQztBQUNyQyx5Q0FLb0I7QUFDcEIsaURBQW1FO0FBNkJuRSxNQUFNLGFBQWEsR0FBb0IsU0FBUyxDQUFDO0FBMkJqRDs7O0dBR0c7QUFDSCxNQUFhLFNBQVM7SUFVRDtJQUNEO0lBVkYsZUFBZSxDQUFVO0lBQ3pCLGNBQWMsQ0FBWTtJQUMxQixPQUFPLENBQVM7SUFFZixTQUFTLENBQXlCO0lBQ2xDLGdCQUFnQixDQUFtQjtJQUNuQyxTQUFTLENBQTRCO0lBRXRELFlBQ21CLFdBQWMsRUFDZixjQUFzQjtRQURyQixnQkFBVyxHQUFYLFdBQVcsQ0FBRztRQUNmLG1CQUFjLEdBQWQsY0FBYyxDQUFRO1FBRXRDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBQSx3QkFBWSxFQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUEsaUJBQUssRUFBQyxxQkFBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUEsbUNBQXdCLEdBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUEsMkJBQVksRUFBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FB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
392
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvbGlnaHRuaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGtDQUFrQztBQUNsQywrQkFRYztBQUNkLHdDQUEwQztBQUMxQyxrRUFNdUM7QUFFdkMsZ0ZBQXlFO0FBRXpFLGdGQUF5RTtBQUV6RSw2RUFBc0U7QUFDdEUsNENBQWdFO0FBRWhFLHFEQU1nQztBQUNoQyxpRUFBa0U7QUFDbEUsK0RBQWdFO0FBRWhFLDREQUFpRTtBQUNqRSw4REFBc0U7QUFDdEUsNENBQTJDO0FBQzNDLGdEQUFnRTtBQUdoRSw0Q0FBcUM7QUFDckMseUNBS29CO0FBQ3BCLGlEQUFtRTtBQTZCbkUsTUFBTSxhQUFhLEdBQW9CLFNBQVMsQ0FBQztBQXlCakQ7OztHQUdHO0FBQ0gsTUFBYSxTQUFTO0lBUUQ7SUFDRDtJQVJGLGVBQWUsQ0FBVTtJQUN6QixPQUFPLENBQVM7SUFFZixnQkFBZ0IsQ0FBbUI7SUFDbkMsU0FBUyxDQUE0QjtJQUV0RCxZQUNtQixXQUFjLEVBQ2YsY0FBc0I7UUFEckIsZ0JBQVcsR0FBWCxXQUFXLENBQUc7UUFDZixtQkFBYyxHQUFkLGNBQWMsQ0FBUTtRQUV0QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUEsd0JBQVksRUFBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFBLG1DQUF3QixHQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFBLDJCQUFZLEVBQUMsY0FBYyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7UUFDN0IsT0FBTyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FB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
@@ -1,10 +1,9 @@
1
1
  import { Client } from '@connectrpc/connect';
2
- import { Account, Chain, Hex, Transport, WalletClient } from 'viem';
2
+ import { Account, Chain, Transport, WalletClient } from 'viem';
3
3
  import { SupportedChain } from '../chain.js';
4
4
  import { EciesScheme, PlaintextOf, SupportedFheType } from '../encryption/encryption.js';
5
- import { KmsService, ReencryptResponse } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
5
+ import { AttestedDecryptResponse, DecryptionAttestation as DecryptionAttestationProto, KmsService } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
6
6
  import { Handle } from '../handle.js';
7
- import type { EIP712 } from '../reencryption/eip712.js';
8
7
  import type { Reencryptor, ReencryptorArgs } from '../reencryption/types.js';
9
8
  import { Secp256k1Keypair } from './ecies.js';
10
9
  export interface IncoLiteReencryptorArgs extends ReencryptorArgs {
@@ -12,12 +11,11 @@ export interface IncoLiteReencryptorArgs extends ReencryptorArgs {
12
11
  kmsConnectRpcEndpointOrClient?: string | Client<typeof KmsService>;
13
12
  ephemeralKeypair?: Secp256k1Keypair;
14
13
  }
15
- export declare function reencryptEIP712(chainId: bigint, ephemeralPubKey: Uint8Array): EIP712<{
16
- publicKey: Hex;
17
- }>;
18
14
  export declare function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chainId, walletClient, ephemeralKeypair, }: IncoLiteReencryptorArgs): Promise<Reencryptor<EciesScheme>>;
19
15
  export declare function getKmsClient(kmsConnectRpcEndpointOrClient: string | Client<typeof KmsService>): Client<typeof KmsService>;
20
- export declare function decryptGrpcResponse<T extends SupportedFheType>(response: ReencryptResponse, ephemeralKeypair: Secp256k1Keypair, handle: Handle): Promise<PlaintextOf<1, T>>;
16
+ export declare function decryptGrpcResponse<T extends SupportedFheType>(response: AttestedDecryptResponse, ephemeralKeypair: Secp256k1Keypair, handle: Handle): Promise<PlaintextOf<1, T>>;
17
+ export declare function decryptGrpcDecryptionAttestation(attestation: DecryptionAttestationProto, reencryptKeypair: Secp256k1Keypair): Promise<DecryptionAttestationProto>;
18
+ export declare function decryptGrpcDecryptResponse(response: AttestedDecryptResponse, reencryptKeypair: Secp256k1Keypair): Promise<AttestedDecryptResponse>;
21
19
  export declare function defaultCovalidatorGrpc(chain: SupportedChain): string;
22
20
  export declare function lightningDevnetCovalidatorGrpc(chain: SupportedChain): string;
23
21
  export declare function lightningTestnetCovalidatorGrpc(chain: SupportedChain): string;
@@ -1,46 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.reencryptEIP712 = reencryptEIP712;
4
3
  exports.incoLiteReencryptor = incoLiteReencryptor;
5
4
  exports.getKmsClient = getKmsClient;
6
5
  exports.decryptGrpcResponse = decryptGrpcResponse;
6
+ exports.decryptGrpcDecryptionAttestation = decryptGrpcDecryptionAttestation;
7
+ exports.decryptGrpcDecryptResponse = decryptGrpcDecryptResponse;
7
8
  exports.defaultCovalidatorGrpc = defaultCovalidatorGrpc;
8
9
  exports.lightningDevnetCovalidatorGrpc = lightningDevnetCovalidatorGrpc;
9
10
  exports.lightningTestnetCovalidatorGrpc = lightningTestnetCovalidatorGrpc;
10
11
  const protobuf_1 = require("@bufbuild/protobuf");
11
12
  const connect_1 = require("@connectrpc/connect");
12
13
  const connect_web_1 = require("@connectrpc/connect-web");
13
- const viem_1 = require("viem");
14
+ const attested_decrypt_js_1 = require("../attesteddecrypt/attested-decrypt.js");
14
15
  const binary_js_1 = require("../binary.js");
15
16
  const chain_js_1 = require("../chain.js");
16
17
  const encryption_js_1 = require("../encryption/encryption.js");
17
18
  const kms_service_pb_js_1 = require("../generated/es/inco/kms/lite/v1/kms_service_pb.js");
18
- const types_pb_js_1 = require("../generated/es/inco/kms/lite/v1/types_pb.js");
19
19
  const handle_js_1 = require("../handle.js");
20
- const eip712_js_1 = require("../reencryption/eip712.js");
21
- const retry_js_1 = require("../retry.js");
22
20
  const ecies_js_1 = require("./ecies.js");
23
- // The domain constants used for basic reencrypts.
24
- // Note: for advanced ACL, since the signature is checked on-chain, the domain
25
- // and version must match the ones used in the contract. For basic ones, we use
26
- // a domain different than the one used on-chain
27
- const BASIC_REENCRYPT_DOMAIN = {
28
- name: 'IncoReencryption',
29
- version: '0.1.0',
30
- };
31
- // Create an EIP712 payload for the Inco Lite basic reencrypt.
32
- function reencryptEIP712(chainId, ephemeralPubKey) {
33
- return (0, eip712_js_1.createEIP712Payload)({
34
- chainId,
35
- primaryType: 'ReencryptionRequest',
36
- primaryTypeFields: [{ name: 'publicKey', type: 'bytes' }],
37
- message: {
38
- publicKey: (0, viem_1.bytesToHex)(ephemeralPubKey),
39
- },
40
- domainName: BASIC_REENCRYPT_DOMAIN.name,
41
- domainVersion: BASIC_REENCRYPT_DOMAIN.version,
42
- });
43
- }
44
21
  // Returns the Inco Lite Reencryptor, which can reencrypt a handle using the
45
22
  // Basic ACL.
46
23
  async function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chainId, walletClient, ephemeralKeypair, }) {
@@ -49,40 +26,21 @@ async function incoLiteReencryptor({ kmsConnectRpcEndpointOrClient, chainId, wal
49
26
  if (!ephemeralKeypair) {
50
27
  ephemeralKeypair = await (0, ecies_js_1.generateSecp256k1Keypair)();
51
28
  }
52
- // Sign the EIP712 attesting that the user has access to the private key
53
- // corresponding to the ephemeral public key.
54
- const eip712Payload = reencryptEIP712(chainId, ephemeralKeypair.encodePublicKey());
55
- // Using browser extensions, this step will prompt the user to sign the
56
- // payload.
57
- const eip712Signature = await walletClient.signTypedData(eip712Payload);
58
29
  return async function reencrypt({ handle }, backoffConfig) {
59
30
  const ephemeralPubKey = ephemeralKeypair.encodePublicKey();
60
- const reencryptRequest = (0, protobuf_1.create)(kms_service_pb_js_1.ReencryptRequestSchema, {
61
- userAddress: walletClient.account.address,
62
- ephemeralPubKey,
63
- eip712Signature: (0, viem_1.hexToBytes)(eip712Signature),
64
- handlesWithProofs: [
65
- (0, protobuf_1.create)(types_pb_js_1.HandleWithProofSchema, {
66
- handle,
67
- aclProof: {
68
- proof: {
69
- case: 'incoLiteBasicAclProof',
70
- value: {},
71
- },
72
- },
73
- }),
74
- ],
31
+ const response = await (0, attested_decrypt_js_1.attestedDecrypt)({
32
+ chainId: (0, chain_js_1.getSupportedChain)(chainId).id,
33
+ walletClient,
34
+ kmsConnectRpcEndpointOrClient: kmsClient,
35
+ handles: [handle],
36
+ backoffConfig,
37
+ reencryptPubKey: ephemeralPubKey,
38
+ reencryptKeypair: ephemeralKeypair,
75
39
  });
76
- try {
77
- return await (0, retry_js_1.retryWithBackoff)(async () => {
78
- const response = await kmsClient.reencrypt(reencryptRequest);
79
- return decryptGrpcResponse(response, ephemeralKeypair, handle);
80
- }, backoffConfig);
81
- }
82
- catch (error) {
83
- console.log(error);
84
- throw error;
40
+ if (response.length !== 1) {
41
+ throw new Error(`Expected 1 result, got ${response.length}`);
85
42
  }
43
+ return response[0].plaintext;
86
44
  };
87
45
  }
88
46
  // Helper function to get a KMS client from a string or a Client instance.
@@ -99,7 +57,18 @@ function getKmsClient(kmsConnectRpcEndpointOrClient) {
99
57
  // Even though the proto specifies a list of ciphertexts, our JS SDK
100
58
  // currently only supports a single ciphertext.
101
59
  async function decryptGrpcResponse(response, ephemeralKeypair, handle) {
102
- const reencryptedCt = response.payload?.userCiphertexts[0];
60
+ if (response.decryptionAttestations.length === 0) {
61
+ throw new Error('No decryption attestations in the response');
62
+ }
63
+ const att = response.decryptionAttestations[0];
64
+ if (att.value === undefined) {
65
+ throw new Error('No value in attestation');
66
+ }
67
+ if (att.value.case !== 'reencryption') {
68
+ throw new Error(`Unexpected attestation type: ${att.value.case}, expected 'reencryption'`);
69
+ }
70
+ const reencryption = att.value.value;
71
+ const reencryptedCt = reencryption.userCiphertext;
103
72
  if (!reencryptedCt) {
104
73
  throw new Error('No reencrypted ciphertext in the response');
105
74
  }
@@ -107,6 +76,47 @@ async function decryptGrpcResponse(response, ephemeralKeypair, handle) {
107
76
  const plaintext = (0, binary_js_1.bytesToBigInt)(plaintextBytes);
108
77
  return (0, encryption_js_1.bigintToPlaintext)(encryption_js_1.encryptionSchemes.ecies, (0, handle_js_1.getHandleType)(handle), plaintext);
109
78
  }
79
+ // A helper function that takes in a DecryptionAttestation message containing reencryption,
80
+ // decrypts it using the provided reencryptKeypair, and returns a DecryptionAttestation message containing a plaintext.
81
+ async function decryptGrpcDecryptionAttestation(attestation, reencryptKeypair) {
82
+ if (attestation.value === undefined) {
83
+ throw new Error('No value in attestation');
84
+ }
85
+ if (attestation.value.case !== 'reencryption') {
86
+ return Promise.resolve(attestation);
87
+ }
88
+ const reencryption = attestation.value.value;
89
+ const reencryptedCt = reencryption.userCiphertext;
90
+ if (!reencryptedCt) {
91
+ throw new Error('No reencrypted ciphertext in the response');
92
+ }
93
+ const plaintextBytes = await (0, ecies_js_1.decrypt)(reencryptKeypair, reencryptedCt.ciphertext);
94
+ return (0, protobuf_1.create)(kms_service_pb_js_1.DecryptionAttestationSchema, {
95
+ handle: attestation.handle,
96
+ value: {
97
+ case: 'plaintext',
98
+ value: (0, protobuf_1.create)(kms_service_pb_js_1.PlaintextSchema, {
99
+ value: plaintextBytes,
100
+ }),
101
+ },
102
+ signature: attestation.signature,
103
+ });
104
+ }
105
+ // A helper function that takes in an AttestedDecryptResponse message containing reencryption attestations,
106
+ // decrypts them using the provided reencryptKeypair, and returns an AttestedDecryptResponse message containing plaintext attestations.
107
+ async function decryptGrpcDecryptResponse(response, reencryptKeypair) {
108
+ if (response.decryptionAttestations.length === 0) {
109
+ throw new Error('No decryption attestations in the response');
110
+ }
111
+ // For each attestation in the response, decrypt it
112
+ const decryptedAttestations = await Promise.all(response.decryptionAttestations.map(async (attestation) => {
113
+ return await decryptGrpcDecryptionAttestation(attestation, reencryptKeypair);
114
+ }));
115
+ // Return new response with decrypted attestations
116
+ return (0, protobuf_1.create)(kms_service_pb_js_1.AttestedDecryptResponseSchema, {
117
+ decryptionAttestations: decryptedAttestations,
118
+ });
119
+ }
110
120
  // Helper function to return the default gRPC endpoint for the covalidator.
111
121
  // Currently, this returns the covalidator for the Inco Lightning public testnet.
112
122
  function defaultCovalidatorGrpc(chain) {
@@ -128,4 +138,4 @@ function camelToDashCase(str) {
128
138
  function getCovalidatorGrpcHelper(chain, network, cluster) {
129
139
  return `https://grpc.${camelToDashCase(chain.name)}.${cluster}.${network}.inco.org`;
130
140
  }
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVlbmNyeXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvcmVlbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBcUVBLDBDQWNDO0FBSUQsa0RBeURDO0FBR0Qsb0NBV0M7QUFLRCxrREFvQkM7QUFJRCx3REFFQztBQUdELHdFQUVDO0FBR0QsMEVBRUM7QUF2TUQsaURBQTRDO0FBQzVDLGlEQUEyRDtBQUMzRCx5REFBaUU7QUFDakUsK0JBUWM7QUFDZCw0Q0FBNkM7QUFDN0MsMENBQWdFO0FBQ2hFLCtEQU1xQztBQUNyQywwRkFLNEQ7QUFDNUQsOEVBQXFGO0FBQ3JGLDRDQUFxRDtBQUVyRCx5REFBZ0U7QUFPaEUsMENBQStDO0FBQy9DLHlDQUlvQjtBQWlCcEIsa0RBQWtEO0FBQ2xELDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsZ0RBQWdEO0FBQ2hELE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IsSUFBSSxFQUFFLGtCQUFrQjtJQUN4QixPQUFPLEVBQUUsT0FBTztDQUNqQixDQUFDO0FBRUYsOERBQThEO0FBQzlELFNBQWdCLGVBQWUsQ0FDN0IsT0FBZSxFQUNmLGVBQTJCO0lBRTNCLE9BQU8sSUFBQSwrQkFBbUIsRUFBQztRQUN6QixPQUFPO1FBQ1AsV0FBVyxFQUFFLHFCQUFxQjtRQUNsQyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDekQsT0FBTyxFQUFFO1lBQ1AsU0FBUyxFQUFFLElBQUEsaUJBQVUsRUFBQyxlQUFlLENBQUM7U0FDdkM7UUFDRCxVQUFVLEVBQUUsc0JBQXNCLENBQUMsSUFBSTtRQUN2QyxhQUFhLEVBQUUsc0JBQXNCLENBQUMsT0FBTztLQUM5QyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLGFBQWE7QUFDTixLQUFLLFVBQVUsbUJBQW1CLENBQUMsRUFDeEMsNkJBQTZC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
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVlbmNyeXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpdGUvcmVlbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBcURBLGtEQW9DQztBQUdELG9DQVdDO0FBS0Qsa0RBb0NDO0FBSUQsNEVBaUNDO0FBSUQsZ0VBcUJDO0FBSUQsd0RBRUM7QUFHRCx3RUFFQztBQUdELDBFQUVDO0FBOU5ELGlEQUE0QztBQUM1QyxpREFBMkQ7QUFDM0QseURBQWlFO0FBRWpFLGdGQUF5RTtBQUN6RSw0Q0FBd0Q7QUFDeEQsMENBQWdFO0FBQ2hFLCtEQU1xQztBQUNyQywwRkFRNEQ7QUFDNUQsNENBQXFEO0FBT3JELHlDQUlvQjtBQWlCcEIsNEVBQTRFO0FBQzVFLGFBQWE7QUFDTixLQUFLLFVBQVUsbUJBQW1CLENBQUMsRUFDeEMsNkJBQTZCLEVBQzdCLE9BQU8sRUFDUCxZQUFZLEVBQ1osZ0JBQWdCLEdBQ1E7SUFDeEIsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUM1Qiw2QkFBNkI7UUFDM0Isc0JBQXNCLENBQUMsSUFBQSw0QkFBaUIsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUNyRCxDQUFDO0lBQ0YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdEIsZ0JBQWdCLEdBQUcsTUFBTSxJQUFBLG1DQUF3QixHQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELE9BQU8sS0FBSyxVQUFVLFNBQVMsQ0FDN0IsRUFBRSxNQUFNLEVBQW1DLEVBQzNDLGFBQXNDO1FBRXRDLE1BQU0sZUFBZSxHQUFHLGdCQUFpQixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTVELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxxQ0FBZSxFQUFDO1lBQ3JDLE9BQU8sRUFBRSxJQUFBLDRCQUFpQixFQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7WUFDdEMsWUFBWTtZQUNaLDZCQUE2QixFQUFFLFNBQVM7WUFDeEMsT0FBTyxFQUFFLENBQUMsTUFBbUIsQ0FB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
@@ -0,0 +1,12 @@
1
+ import { Account, Chain, Transport, WalletClient } from 'viem';
2
+ import { vi } from 'vitest';
3
+ import { KmsClient } from '../kms/client.js';
4
+ interface MinimalKmsClient {
5
+ attestedCompute: ReturnType<typeof vi.fn>;
6
+ attestedDecrypt: ReturnType<typeof vi.fn>;
7
+ key: ReturnType<typeof vi.fn>;
8
+ reencrypt: ReturnType<typeof vi.fn>;
9
+ }
10
+ export declare function createMockKmsClient(): MinimalKmsClient & KmsClient;
11
+ export declare function createTestWalletClient(): WalletClient<Transport, Chain, Account>;
12
+ export {};
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMockKmsClient = createMockKmsClient;
4
+ exports.createTestWalletClient = createTestWalletClient;
5
+ const viem_1 = require("viem");
6
+ const accounts_1 = require("viem/accounts");
7
+ const chains_1 = require("viem/chains");
8
+ const vitest_1 = require("vitest");
9
+ // Create a mock that satisfies our minimal interface
10
+ function createMockKmsClient() {
11
+ return {
12
+ attestedCompute: vitest_1.vi.fn(),
13
+ attestedDecrypt: vitest_1.vi.fn(),
14
+ key: vitest_1.vi.fn(),
15
+ reencrypt: vitest_1.vi.fn(),
16
+ };
17
+ }
18
+ // Create a real wallet client for testing
19
+ function createTestWalletClient() {
20
+ const account = (0, accounts_1.privateKeyToAccount)((0, accounts_1.generatePrivateKey)());
21
+ return (0, viem_1.createWalletClient)({
22
+ chain: chains_1.sepolia, // Arbitrary chain, not relevant to test
23
+ transport: (0, viem_1.http)('UNUSED IN TEST'),
24
+ account,
25
+ });
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC9tb2Nrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXVCQSxrREFPQztBQUdELHdEQVdDO0FBNUNELCtCQU9jO0FBQ2QsNENBQXdFO0FBQ3hFLHdDQUFzQztBQUN0QyxtQ0FBNEI7QUFZNUIscURBQXFEO0FBQ3JELFNBQWdCLG1CQUFtQjtJQUNqQyxPQUFPO1FBQ0wsZUFBZSxFQUFFLFdBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsZUFBZSxFQUFFLFdBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsR0FBRyxFQUFFLFdBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDWixTQUFTLEVBQUUsV0FBRSxDQUFDLEVBQUUsRUFBRTtLQUNhLENBQUM7QUFDcEMsQ0FBQztBQUVELDBDQUEwQztBQUMxQyxTQUFnQixzQkFBc0I7SUFLcEMsTUFBTSxPQUFPLEdBQUcsSUFBQSw4QkFBbUIsRUFBQyxJQUFBLDZCQUFrQixHQUFFLENBQUMsQ0FBQztJQUMxRCxPQUFPLElBQUEseUJBQWtCLEVBQUM7UUFDeEIsS0FBSyxFQUFFLGdCQUFPLEVBQUUsd0NBQXdDO1FBQ3hELFNBQVMsRUFBRSxJQUFBLFdBQUksRUFBQyxnQkFBZ0IsQ0FBQztRQUNqQyxPQUFPO0tBQ1IsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
@@ -30,7 +30,7 @@ export declare const chains: {
30
30
  experimental_preconfirmationTime?: number | undefined | undefined;
31
31
  rpcUrls: {
32
32
  readonly default: {
33
- readonly http: readonly ["https://sepolia.drpc.org"];
33
+ readonly http: readonly ["https://11155111.rpc.thirdweb.com"];
34
34
  };
35
35
  };
36
36
  sourceId?: number | undefined | undefined;
@@ -29,6 +29,11 @@ export interface SessionKeyReencryptorArgs {
29
29
  kmsConnectRpcEndpointOrClient: string | Client<typeof KmsService>;
30
30
  allowanceVoucherWithSig: AllowanceVoucherWithSig;
31
31
  }
32
+ /**
33
+ * The sessionKeyReencryptor function is a reencryptor that uses a session key
34
+ * to reencrypt data.
35
+ *
36
+ */
32
37
  export declare function sessionKeyReencryptor({ chainId, kmsConnectRpcEndpointOrClient, ephemeralKeypair, allowanceVoucherWithSig, }: SessionKeyReencryptorArgs): Promise<(<T extends SupportedFheType>({ handle, }: ReencryptFnArgs<EciesScheme, T>) => Promise<import("../encryption/encryption.js").PlaintextOf<1, 0 | 5 | 7 | 8>>)>;
33
38
  export declare function updateActiveVouchersSessionNonce(incoLiteAddress: Address, sharerWalletClient: WalletClient<Transport, Chain, Account>): Promise<`0x${string}`>;
34
39
  export interface SessionKeyAttestedComputeArgs {
@@ -53,5 +58,7 @@ export interface SessionKeyAttestedDecryptArgs {
53
58
  allowanceVoucherWithSig: AllowanceVoucherWithSig;
54
59
  handles: HexString[];
55
60
  backoffConfig?: Partial<BackoffConfig> | undefined;
61
+ reencryptPubKey?: Uint8Array;
62
+ reencryptKeypair?: Secp256k1Keypair;
56
63
  }
57
- export declare function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpointOrClient, handles, ephemeralKeypair, allowanceVoucherWithSig, backoffConfig, }: SessionKeyAttestedDecryptArgs): Promise<Array<DecryptionAttestation<EciesScheme, SupportedFheType>>>;
64
+ export declare function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpointOrClient, handles, ephemeralKeypair, allowanceVoucherWithSig, backoffConfig, reencryptPubKey, reencryptKeypair, }: SessionKeyAttestedDecryptArgs): Promise<Array<DecryptionAttestation<EciesScheme, SupportedFheType>>>;