@inco/js 0.8.0-devnet-6 → 0.9.0-devnet-test-3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/cjs/advancedacl/session-key.d.ts +10 -9
  2. package/dist/cjs/advancedacl/session-key.js +7 -8
  3. package/dist/cjs/attestedcompute/attested-compute.d.ts +2 -2
  4. package/dist/cjs/attestedcompute/attested-compute.js +2 -2
  5. package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +3 -3
  6. package/dist/cjs/attesteddecrypt/attested-decrypt.js +5 -5
  7. package/dist/cjs/encryption/encryption.d.ts +8 -10
  8. package/dist/cjs/encryption/encryption.js +2 -5
  9. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +234 -7
  10. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +86 -10
  11. package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +0 -6
  12. package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +2 -8
  13. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +213 -0
  14. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +36 -11
  15. package/dist/cjs/kms/quorumClient.d.ts +3 -2
  16. package/dist/cjs/kms/quorumClient.js +30 -27
  17. package/dist/cjs/lite/index.d.ts +1 -2
  18. package/dist/cjs/lite/index.js +5 -18
  19. package/dist/cjs/lite/lightning.d.ts +16 -16
  20. package/dist/cjs/lite/lightning.js +28 -39
  21. package/dist/cjs/lite/xwing.d.ts +5 -1
  22. package/dist/cjs/lite/xwing.js +10 -5
  23. package/dist/cjs/reencryption/types.d.ts +2 -2
  24. package/dist/esm/advancedacl/session-key.d.ts +10 -9
  25. package/dist/esm/advancedacl/session-key.js +7 -8
  26. package/dist/esm/attestedcompute/attested-compute.d.ts +2 -2
  27. package/dist/esm/attestedcompute/attested-compute.js +2 -2
  28. package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +3 -3
  29. package/dist/esm/attesteddecrypt/attested-decrypt.js +3 -3
  30. package/dist/esm/encryption/encryption.d.ts +8 -10
  31. package/dist/esm/encryption/encryption.js +2 -5
  32. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +234 -7
  33. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +85 -9
  34. package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +0 -6
  35. package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +2 -8
  36. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +213 -0
  37. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +35 -10
  38. package/dist/esm/kms/quorumClient.d.ts +3 -2
  39. package/dist/esm/kms/quorumClient.js +30 -27
  40. package/dist/esm/lite/index.d.ts +1 -2
  41. package/dist/esm/lite/index.js +2 -5
  42. package/dist/esm/lite/lightning.d.ts +16 -16
  43. package/dist/esm/lite/lightning.js +29 -40
  44. package/dist/esm/lite/xwing.d.ts +5 -1
  45. package/dist/esm/lite/xwing.js +9 -4
  46. package/dist/esm/reencryption/types.d.ts +2 -2
  47. package/dist/types/advancedacl/session-key.d.ts +10 -9
  48. package/dist/types/attestedcompute/attested-compute.d.ts +2 -2
  49. package/dist/types/attesteddecrypt/attested-decrypt.d.ts +3 -3
  50. package/dist/types/encryption/encryption.d.ts +8 -10
  51. package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +234 -7
  52. package/dist/types/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +0 -6
  53. package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +213 -0
  54. package/dist/types/kms/quorumClient.d.ts +3 -2
  55. package/dist/types/lite/index.d.ts +1 -2
  56. package/dist/types/lite/lightning.d.ts +16 -16
  57. package/dist/types/lite/xwing.d.ts +5 -1
  58. package/dist/types/reencryption/types.d.ts +2 -2
  59. package/package.json +3 -6
  60. package/dist/cjs/lite/ecies.d.ts +0 -26
  61. package/dist/cjs/lite/ecies.js +0 -146
  62. package/dist/esm/lite/ecies.d.ts +0 -26
  63. package/dist/esm/lite/ecies.js +0 -134
  64. package/dist/types/lite/ecies.d.ts +0 -26
@@ -106,6 +106,105 @@ export type AttestedDecryptRequest = Message<"inco.kms.lite.v1.AttestedDecryptRe
106
106
  * Use `create(AttestedDecryptRequestSchema)` to create a new message.
107
107
  */
108
108
  export declare const AttestedDecryptRequestSchema: GenMessage<AttestedDecryptRequest>;
109
+ /**
110
+ * EListAttestedDecryptRequest is the request type for the KmsService/EListAttestedDecrypt RPC method.
111
+ *
112
+ * @generated from message inco.kms.lite.v1.EListAttestedDecryptRequest
113
+ */
114
+ export type EListAttestedDecryptRequest = Message<"inco.kms.lite.v1.EListAttestedDecryptRequest"> & {
115
+ /**
116
+ * user_address is the Ethereum address of the user who requested the
117
+ * decryption, prefixed with 0x.
118
+ *
119
+ * @generated from field: string user_address = 1;
120
+ */
121
+ userAddress: string;
122
+ /**
123
+ * reencrypt_pub_key is the encoding of the user's public
124
+ * encryption key (secp256k1) used to reencrypt the result for.
125
+ * It is encoded in its 33-byte compressed format.
126
+ * If empty, the KMS will return plaintext decryption instead of reencryption.
127
+ *
128
+ * @generated from field: bytes reencrypt_pub_key = 2;
129
+ */
130
+ reencryptPubKey: Uint8Array;
131
+ /**
132
+ * eip712_signature is an EIP-712 signature of the following EIP-712 typed data by
133
+ * `user_address` (note that we only give a JSON representation for the sake of
134
+ * readability, but the actual signed data is defined in the EIP-712 spec) where:
135
+ * handles - list of 0x prefixed handles to decrypt
136
+ * publicKey - 0x prefixed reencrypt_pub_key (if any). "0x" otherwise if empty.
137
+ *
138
+ * ```json
139
+ * {
140
+ * "types": {
141
+ * "EIP712Domain": [
142
+ * { "name": "name", "type": "string" },
143
+ * { "name": "version", "type": "string" },
144
+ * { "name": "chainId", "type": "uint256" }
145
+ * ],
146
+ * "AttestedDecryptRequest": [
147
+ * { "name": "handles", "type": "bytes32[]" },
148
+ * { "name": "publicKey", "type": "bytes" },
149
+ * ]
150
+ * },
151
+ * "primaryType": "AttestedDecryptRequest",
152
+ * "domain": {
153
+ * "name": "IncoAttestedDecrypt",
154
+ * "version": "1",
155
+ * "chainId": "<host_chain_id>",
156
+ * },
157
+ * "message": {
158
+ * "handles": ["<handle1>", "<handle2>", ...],
159
+ * "publicKey": "0x<reencrypt_pub_key>"
160
+ * }
161
+ * }
162
+ * ```
163
+ *
164
+ * @generated from field: bytes eip712_signature = 3;
165
+ */
166
+ eip712Signature: Uint8Array;
167
+ /**
168
+ * handle_with_proof is the handle of an elist ciphertext with proof to decrypt.
169
+ * Either the user_address or sharer must have ACL access to the elist handle for the attested
170
+ * decryption to succeed.
171
+ *
172
+ * @generated from field: inco.kms.lite.v1.HandleWithProof elist_handle_with_proof = 4;
173
+ */
174
+ elistHandleWithProof?: HandleWithProof;
175
+ };
176
+ /**
177
+ * Describes the message inco.kms.lite.v1.EListAttestedDecryptRequest.
178
+ * Use `create(EListAttestedDecryptRequestSchema)` to create a new message.
179
+ */
180
+ export declare const EListAttestedDecryptRequestSchema: GenMessage<EListAttestedDecryptRequest>;
181
+ /**
182
+ * EListAttestedDecryptResponse is the response type for the KmsService/EListAttestedDecryptResponse RPC method.
183
+ *
184
+ * @generated from message inco.kms.lite.v1.EListAttestedDecryptResponse
185
+ */
186
+ export type EListAttestedDecryptResponse = Message<"inco.kms.lite.v1.EListAttestedDecryptResponse"> & {
187
+ /**
188
+ * commitment_proof_attestation is the signed commitment_proof of the decrypted elist values and their corresponding commitments.
189
+ * commitment_proof = hash(concat([
190
+ * hash(concat([commitment1, v1])),
191
+ * ...]))
192
+ *
193
+ * @generated from field: inco.kms.lite.v1.DecryptionAttestation commitment_proof_attestation = 1;
194
+ */
195
+ commitmentProofAttestation?: DecryptionAttestation;
196
+ /**
197
+ * values is the list of decrypted elist values.
198
+ *
199
+ * @generated from field: repeated inco.kms.lite.v1.EListElement values = 2;
200
+ */
201
+ values: EListElement[];
202
+ };
203
+ /**
204
+ * Describes the message inco.kms.lite.v1.EListAttestedDecryptResponse.
205
+ * Use `create(EListAttestedDecryptResponseSchema)` to create a new message.
206
+ */
207
+ export declare const EListAttestedDecryptResponseSchema: GenMessage<EListAttestedDecryptResponse>;
109
208
  /**
110
209
  * AttestedRevealRequest is the request type for the KmsService/AttestedReveal RPC method.
111
210
  *
@@ -125,6 +224,25 @@ export type AttestedRevealRequest = Message<"inco.kms.lite.v1.AttestedRevealRequ
125
224
  * Use `create(AttestedRevealRequestSchema)` to create a new message.
126
225
  */
127
226
  export declare const AttestedRevealRequestSchema: GenMessage<AttestedRevealRequest>;
227
+ /**
228
+ * EListAttestedRevealRequest is the request type for the KmsService/EListAttestedReveal RPC method.
229
+ *
230
+ * @generated from message inco.kms.lite.v1.EListAttestedRevealRequest
231
+ */
232
+ export type EListAttestedRevealRequest = Message<"inco.kms.lite.v1.EListAttestedRevealRequest"> & {
233
+ /**
234
+ * handle is the handle of the elist ciphertext to decrypt.
235
+ * The handle must have been revealed beforehand with the on-chain .reveal() call.
236
+ *
237
+ * @generated from field: string handle = 3;
238
+ */
239
+ handle: string;
240
+ };
241
+ /**
242
+ * Describes the message inco.kms.lite.v1.EListAttestedRevealRequest.
243
+ * Use `create(EListAttestedRevealRequestSchema)` to create a new message.
244
+ */
245
+ export declare const EListAttestedRevealRequestSchema: GenMessage<EListAttestedRevealRequest>;
128
246
  /**
129
247
  * AttestedComputeRequest is the request type for the KmsService/AttestedDecrypt RPC method.
130
248
  *
@@ -261,6 +379,30 @@ export type AttestedRevealResponse = Message<"inco.kms.lite.v1.AttestedRevealRes
261
379
  * Use `create(AttestedRevealResponseSchema)` to create a new message.
262
380
  */
263
381
  export declare const AttestedRevealResponseSchema: GenMessage<AttestedRevealResponse>;
382
+ /**
383
+ * EListAttestedRevealResponse is the response type for the KmsService/EListAttestedReveal RPC method.
384
+ *
385
+ * @generated from message inco.kms.lite.v1.EListAttestedRevealResponse
386
+ */
387
+ export type EListAttestedRevealResponse = Message<"inco.kms.lite.v1.EListAttestedRevealResponse"> & {
388
+ /**
389
+ * commitment_proof_attestation is the signed commitment_proof of the concatenation of the hashes of individual elist values.
390
+ *
391
+ * @generated from field: inco.kms.lite.v1.DecryptionAttestation commitment_proof_attestation = 1;
392
+ */
393
+ commitmentProofAttestation?: DecryptionAttestation;
394
+ /**
395
+ * values is the list of decrypted elist values.
396
+ *
397
+ * @generated from field: repeated inco.kms.lite.v1.EListElement values = 2;
398
+ */
399
+ values: EListElement[];
400
+ };
401
+ /**
402
+ * Describes the message inco.kms.lite.v1.EListAttestedRevealResponse.
403
+ * Use `create(EListAttestedRevealResponseSchema)` to create a new message.
404
+ */
405
+ export declare const EListAttestedRevealResponseSchema: GenMessage<EListAttestedRevealResponse>;
264
406
  /**
265
407
  * AttestedComputeResponse is the response type for the KmsService/AttestedCompute RPC method.
266
408
  *
@@ -321,6 +463,53 @@ export type Reencryption = Message<"inco.kms.lite.v1.Reencryption"> & {
321
463
  * Use `create(ReencryptionSchema)` to create a new message.
322
464
  */
323
465
  export declare const ReencryptionSchema: GenMessage<Reencryption>;
466
+ /**
467
+ * EListElement contains the decryptions/reencryptions for elist element.
468
+ *
469
+ * @generated from message inco.kms.lite.v1.EListElement
470
+ */
471
+ export type EListElement = Message<"inco.kms.lite.v1.EListElement"> & {
472
+ /**
473
+ * index is the index of the element in the elist.
474
+ *
475
+ * @generated from field: uint32 index = 1;
476
+ */
477
+ index: number;
478
+ /**
479
+ * commitment is the random commitment applied to the element when calculating elist commitment_proof.
480
+ *
481
+ * @generated from field: bytes commitment = 2;
482
+ */
483
+ commitment: Uint8Array;
484
+ /**
485
+ * @generated from oneof inco.kms.lite.v1.EListElement.value
486
+ */
487
+ value: {
488
+ /**
489
+ * Returns plaintext if reencrypt_pub_key was empty in the request
490
+ *
491
+ * @generated from field: inco.kms.lite.v1.Plaintext plaintext = 3;
492
+ */
493
+ value: Plaintext;
494
+ case: "plaintext";
495
+ } | {
496
+ /**
497
+ * Returns encrypted ciphertext if reencrypt_pub_key was set in the request
498
+ *
499
+ * @generated from field: inco.kms.lite.v1.Reencryption reencryption = 4;
500
+ */
501
+ value: Reencryption;
502
+ case: "reencryption";
503
+ } | {
504
+ case: undefined;
505
+ value?: undefined;
506
+ };
507
+ };
508
+ /**
509
+ * Describes the message inco.kms.lite.v1.EListElement.
510
+ * Use `create(EListElementSchema)` to create a new message.
511
+ */
512
+ export declare const EListElementSchema: GenMessage<EListElement>;
324
513
  /**
325
514
  * DecryptionAttestation contains the attestation for the decryption of a single handle.
326
515
  *
@@ -453,4 +642,28 @@ export declare const KmsService: GenService<{
453
642
  input: typeof AttestedRevealRequestSchema;
454
643
  output: typeof AttestedRevealResponseSchema;
455
644
  };
645
+ /**
646
+ * EListAttestedDecrypt decrypts a single elist ciphertext and provides an attestation
647
+ * that the decryption was performed correctly.
648
+ * Can optionally reencrypt the result of the decryption to a desired public key.
649
+ *
650
+ * @generated from rpc inco.kms.lite.v1.KmsService.EListAttestedDecrypt
651
+ */
652
+ eListAttestedDecrypt: {
653
+ methodKind: "unary";
654
+ input: typeof EListAttestedDecryptRequestSchema;
655
+ output: typeof EListAttestedDecryptResponseSchema;
656
+ };
657
+ /**
658
+ * EListAttestedReveal decrypts a single elist ciphertext and provides an attestation
659
+ * that the decryption was performed correctly.
660
+ * Doesn't require authentication if the handle is publicly revealed with the on-chain .reveal() call beforehand.
661
+ *
662
+ * @generated from rpc inco.kms.lite.v1.KmsService.EListAttestedReveal
663
+ */
664
+ eListAttestedReveal: {
665
+ methodKind: "unary";
666
+ input: typeof EListAttestedRevealRequestSchema;
667
+ output: typeof EListAttestedRevealResponseSchema;
668
+ };
456
669
  }>;
@@ -3,13 +3,13 @@
3
3
  // @generated from file inco/kms/lite/v1/kms_service.proto (package inco.kms.lite.v1, syntax proto3)
4
4
  /* eslint-disable */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.KmsService = exports.DecryptionAttestationSchema = exports.ReencryptionSchema = exports.PlaintextSchema = exports.AttestedComputeResponseSchema = exports.AttestedRevealResponseSchema = exports.AttestedDecryptResponseSchema = exports.AttestedComputeRequestSchema = exports.AttestedRevealRequestSchema = exports.AttestedDecryptRequestSchema = exports.IsReadyResponseSchema = exports.IsReadyRequestSchema = exports.file_inco_kms_lite_v1_kms_service = void 0;
6
+ exports.KmsService = exports.DecryptionAttestationSchema = exports.EListElementSchema = exports.ReencryptionSchema = exports.PlaintextSchema = exports.AttestedComputeResponseSchema = exports.EListAttestedRevealResponseSchema = exports.AttestedRevealResponseSchema = exports.AttestedDecryptResponseSchema = exports.AttestedComputeRequestSchema = exports.EListAttestedRevealRequestSchema = exports.AttestedRevealRequestSchema = exports.EListAttestedDecryptResponseSchema = exports.EListAttestedDecryptRequestSchema = exports.AttestedDecryptRequestSchema = exports.IsReadyResponseSchema = exports.IsReadyRequestSchema = exports.file_inco_kms_lite_v1_kms_service = void 0;
7
7
  const codegenv2_1 = require("@bufbuild/protobuf/codegenv2");
8
8
  const types_pb_1 = require("./types_pb");
9
9
  /**
10
10
  * Describes the file inco/kms/lite/v1/kms_service.proto.
11
11
  */
12
- exports.file_inco_kms_lite_v1_kms_service = (0, codegenv2_1.fileDesc)("CiJpbmNvL2ttcy9saXRlL3YxL2ttc19zZXJ2aWNlLnByb3RvEhBpbmNvLmttcy5saXRlLnYxIhAKDklzUmVhZHlSZXF1ZXN0IiAKD0lzUmVhZHlSZXNwb25zZRINCgVyZWFkeRgBIAEoCCKjAQoWQXR0ZXN0ZWREZWNyeXB0UmVxdWVzdBIUCgx1c2VyX2FkZHJlc3MYASABKAkSGQoRcmVlbmNyeXB0X3B1Yl9rZXkYAiABKAwSGAoQZWlwNzEyX3NpZ25hdHVyZRgDIAEoDBI+ChNoYW5kbGVzX3dpdGhfcHJvb2ZzGAQgAygLMiEuaW5jby5rbXMubGl0ZS52MS5IYW5kbGVXaXRoUHJvb2YiKAoVQXR0ZXN0ZWRSZXZlYWxSZXF1ZXN0Eg8KB2hhbmRsZXMYAyADKAki9AEKFkF0dGVzdGVkQ29tcHV0ZVJlcXVlc3QSFAoMdXNlcl9hZGRyZXNzGAEgASgJEhkKEXJlZW5jcnlwdF9wdWJfa2V5GAIgASgMEhgKEGVpcDcxMl9zaWduYXR1cmUYAyABKAwSNQoCb3AYBCABKA4yKS5pbmNvLmttcy5saXRlLnYxLlN1cHBvcnRlZFNjYWxhckJpbmFyeU9wEhIKCmxoc19oYW5kbGUYBSABKAkSFQoNcmhzX3BsYWludGV4dBgGIAEoCRItCglhY2xfcHJvb2YYByABKAsyGi5pbmNvLmttcy5saXRlLnYxLkFDTFByb29mImMKF0F0dGVzdGVkRGVjcnlwdFJlc3BvbnNlEkgKF2RlY3J5cHRpb25fYXR0ZXN0YXRpb25zGAEgAygLMicuaW5jby5rbXMubGl0ZS52MS5EZWNyeXB0aW9uQXR0ZXN0YXRpb24iYgoWQXR0ZXN0ZWRSZXZlYWxSZXNwb25zZRJIChdkZWNyeXB0aW9uX2F0dGVzdGF0aW9ucxgBIAMoCzInLmluY28ua21zLmxpdGUudjEuRGVjcnlwdGlvbkF0dGVzdGF0aW9uImIKF0F0dGVzdGVkQ29tcHV0ZVJlc3BvbnNlEkcKFmRlY3J5cHRpb25fYXR0ZXN0YXRpb24YASABKAsyJy5pbmNvLmttcy5saXRlLnYxLkRlY3J5cHRpb25BdHRlc3RhdGlvbiIaCglQbGFpbnRleHQSDQoFdmFsdWUYASABKAwiRAoMUmVlbmNyeXB0aW9uEhcKD3VzZXJfY2lwaGVydGV4dBgBIAEoDBIbChNlbmNyeXB0ZWRfc2lnbmF0dXJlGAMgASgMIq0BChVEZWNyeXB0aW9uQXR0ZXN0YXRpb24SDgoGaGFuZGxlGAEgASgJEjAKCXBsYWludGV4dBgCIAEoCzIbLmluY28ua21zLmxpdGUudjEuUGxhaW50ZXh0SAASNgoMcmVlbmNyeXB0aW9uGAMgASgLMh4uaW5jby5rbXMubGl0ZS52MS5SZWVuY3J5cHRpb25IABIRCglzaWduYXR1cmUYBCABKAxCBwoFdmFsdWUykQMKCkttc1NlcnZpY2USTgoHSXNSZWFkeRIgLmluY28ua21zLmxpdGUudjEuSXNSZWFkeVJlcXVlc3QaIS5pbmNvLmttcy5saXRlLnYxLklzUmVhZHlSZXNwb25zZRJmCg9BdHRlc3RlZERlY3J5cHQSKC5pbmNvLmttcy5saXRlLnYxLkF0dGVzdGVkRGVjcnlwdFJlcXVlc3QaKS5pbmNvLmttcy5saXRlLnYxLkF0dGVzdGVkRGVjcnlwdFJlc3BvbnNlEmYKD0F0dGVzdGVkQ29tcHV0ZRIoLmluY28ua21zLmxpdGUudjEuQXR0ZXN0ZWRDb21wdXRlUmVxdWVzdBopLmluY28ua21zLmxpdGUudjEuQXR0ZXN0ZWRDb21wdXRlUmVzcG9uc2USYwoOQXR0ZXN0ZWRSZXZlYWwSJy5pbmNvLmttcy5saXRlLnYxLkF0dGVzdGVkUmV2ZWFsUmVxdWVzdBooLmluY28ua21zLmxpdGUudjEuQXR0ZXN0ZWRSZXZlYWxSZXNwb25zZUI7WjlnaXRodWIuY29tL2luY28tZmhldm0vaW5jby1tb25vcmVwby9jb3ZhbGlkYXRvci9rbXMvdHlwZXNiBnByb3RvMw", [types_pb_1.file_inco_kms_lite_v1_types]);
12
+ exports.file_inco_kms_lite_v1_kms_service = (0, codegenv2_1.fileDesc)("CiJpbmNvL2ttcy9saXRlL3YxL2ttc19zZXJ2aWNlLnByb3RvEhBpbmNvLmttcy5saXRlLnYxIhAKDklzUmVhZHlSZXF1ZXN0IiAKD0lzUmVhZHlSZXNwb25zZRINCgVyZWFkeRgBIAEoCCKjAQoWQXR0ZXN0ZWREZWNyeXB0UmVxdWVzdBIUCgx1c2VyX2FkZHJlc3MYASABKAkSGQoRcmVlbmNyeXB0X3B1Yl9rZXkYAiABKAwSGAoQZWlwNzEyX3NpZ25hdHVyZRgDIAEoDBI+ChNoYW5kbGVzX3dpdGhfcHJvb2ZzGAQgAygLMiEuaW5jby5rbXMubGl0ZS52MS5IYW5kbGVXaXRoUHJvb2YirAEKG0VMaXN0QXR0ZXN0ZWREZWNyeXB0UmVxdWVzdBIUCgx1c2VyX2FkZHJlc3MYASABKAkSGQoRcmVlbmNyeXB0X3B1Yl9rZXkYAiABKAwSGAoQZWlwNzEyX3NpZ25hdHVyZRgDIAEoDBJCChdlbGlzdF9oYW5kbGVfd2l0aF9wcm9vZhgEIAEoCzIhLmluY28ua21zLmxpdGUudjEuSGFuZGxlV2l0aFByb29mIp0BChxFTGlzdEF0dGVzdGVkRGVjcnlwdFJlc3BvbnNlEk0KHGNvbW1pdG1lbnRfcHJvb2ZfYXR0ZXN0YXRpb24YASABKAsyJy5pbmNvLmttcy5saXRlLnYxLkRlY3J5cHRpb25BdHRlc3RhdGlvbhIuCgZ2YWx1ZXMYAiADKAsyHi5pbmNvLmttcy5saXRlLnYxLkVMaXN0RWxlbWVudCIoChVBdHRlc3RlZFJldmVhbFJlcXVlc3QSDwoHaGFuZGxlcxgDIAMoCSIsChpFTGlzdEF0dGVzdGVkUmV2ZWFsUmVxdWVzdBIOCgZoYW5kbGUYAyABKAki9AEKFkF0dGVzdGVkQ29tcHV0ZVJlcXVlc3QSFAoMdXNlcl9hZGRyZXNzGAEgASgJEhkKEXJlZW5jcnlwdF9wdWJfa2V5GAIgASgMEhgKEGVpcDcxMl9zaWduYXR1cmUYAyABKAwSNQoCb3AYBCABKA4yKS5pbmNvLmttcy5saXRlLnYxLlN1cHBvcnRlZFNjYWxhckJpbmFyeU9wEhIKCmxoc19oYW5kbGUYBSABKAkSFQoNcmhzX3BsYWludGV4dBgGIAEoCRItCglhY2xfcHJvb2YYByABKAsyGi5pbmNvLmttcy5saXRlLnYxLkFDTFByb29mImMKF0F0dGVzdGVkRGVjcnlwdFJlc3BvbnNlEkgKF2RlY3J5cHRpb25fYXR0ZXN0YXRpb25zGAEgAygLMicuaW5jby5rbXMubGl0ZS52MS5EZWNyeXB0aW9uQXR0ZXN0YXRpb24iYgoWQXR0ZXN0ZWRSZXZlYWxSZXNwb25zZRJIChdkZWNyeXB0aW9uX2F0dGVzdGF0aW9ucxgBIAMoCzInLmluY28ua21zLmxpdGUudjEuRGVjcnlwdGlvbkF0dGVzdGF0aW9uIpwBChtFTGlzdEF0dGVzdGVkUmV2ZWFsUmVzcG9uc2USTQocY29tbWl0bWVudF9wcm9vZl9hdHRlc3RhdGlvbhgBIAEoCzInLmluY28ua21zLmxpdGUudjEuRGVjcnlwdGlvbkF0dGVzdGF0aW9uEi4KBnZhbHVlcxgCIAMoCzIeLmluY28ua21zLmxpdGUudjEuRUxpc3RFbGVtZW50ImIKF0F0dGVzdGVkQ29tcHV0ZVJlc3BvbnNlEkcKFmRlY3J5cHRpb25fYXR0ZXN0YXRpb24YASABKAsyJy5pbmNvLmttcy5saXRlLnYxLkRlY3J5cHRpb25BdHRlc3RhdGlvbiIaCglQbGFpbnRleHQSDQoFdmFsdWUYASABKAwiRAoMUmVlbmNyeXB0aW9uEhcKD3VzZXJfY2lwaGVydGV4dBgBIAEoDBIbChNlbmNyeXB0ZWRfc2lnbmF0dXJlGAMgASgMIqQBCgxFTGlzdEVsZW1lbnQSDQoFaW5kZXgYASABKA0SEgoKY29tbWl0bWVudBgCIAEoDBIwCglwbGFpbnRleHQYAyABKAsyGy5pbmNvLmttcy5saXRlLnYxLlBsYWludGV4dEgAEjYKDHJlZW5jcnlwdGlvbhgEIAEoCzIeLmluY28ua21zLmxpdGUudjEuUmVlbmNyeXB0aW9uSABCBwoFdmFsdWUirQEKFURlY3J5cHRpb25BdHRlc3RhdGlvbhIOCgZoYW5kbGUYASABKAkSMAoJcGxhaW50ZXh0GAIgASgLMhsuaW5jby5rbXMubGl0ZS52MS5QbGFpbnRleHRIABI2CgxyZWVuY3J5cHRpb24YAyABKAsyHi5pbmNvLmttcy5saXRlLnYxLlJlZW5jcnlwdGlvbkgAEhEKCXNpZ25hdHVyZRgEIAEoDEIHCgV2YWx1ZTL8BAoKS21zU2VydmljZRJOCgdJc1JlYWR5EiAuaW5jby5rbXMubGl0ZS52MS5Jc1JlYWR5UmVxdWVzdBohLmluY28ua21zLmxpdGUudjEuSXNSZWFkeVJlc3BvbnNlEmYKD0F0dGVzdGVkRGVjcnlwdBIoLmluY28ua21zLmxpdGUudjEuQXR0ZXN0ZWREZWNyeXB0UmVxdWVzdBopLmluY28ua21zLmxpdGUudjEuQXR0ZXN0ZWREZWNyeXB0UmVzcG9uc2USZgoPQXR0ZXN0ZWRDb21wdXRlEiguaW5jby5rbXMubGl0ZS52MS5BdHRlc3RlZENvbXB1dGVSZXF1ZXN0GikuaW5jby5rbXMubGl0ZS52MS5BdHRlc3RlZENvbXB1dGVSZXNwb25zZRJjCg5BdHRlc3RlZFJldmVhbBInLmluY28ua21zLmxpdGUudjEuQXR0ZXN0ZWRSZXZlYWxSZXF1ZXN0GiguaW5jby5rbXMubGl0ZS52MS5BdHRlc3RlZFJldmVhbFJlc3BvbnNlEnUKFEVMaXN0QXR0ZXN0ZWREZWNyeXB0Ei0uaW5jby5rbXMubGl0ZS52MS5FTGlzdEF0dGVzdGVkRGVjcnlwdFJlcXVlc3QaLi5pbmNvLmttcy5saXRlLnYxLkVMaXN0QXR0ZXN0ZWREZWNyeXB0UmVzcG9uc2UScgoTRUxpc3RBdHRlc3RlZFJldmVhbBIsLmluY28ua21zLmxpdGUudjEuRUxpc3RBdHRlc3RlZFJldmVhbFJlcXVlc3QaLS5pbmNvLmttcy5saXRlLnYxLkVMaXN0QXR0ZXN0ZWRSZXZlYWxSZXNwb25zZUI7WjlnaXRodWIuY29tL2luY28tZmhldm0vaW5jby1tb25vcmVwby9jb3ZhbGlkYXRvci9rbXMvdHlwZXNiBnByb3RvMw", [types_pb_1.file_inco_kms_lite_v1_types]);
13
13
  /**
14
14
  * Describes the message inco.kms.lite.v1.IsReadyRequest.
15
15
  * Use `create(IsReadyRequestSchema)` to create a new message.
@@ -25,46 +25,71 @@ exports.IsReadyResponseSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_k
25
25
  * Use `create(AttestedDecryptRequestSchema)` to create a new message.
26
26
  */
27
27
  exports.AttestedDecryptRequestSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 2);
28
+ /**
29
+ * Describes the message inco.kms.lite.v1.EListAttestedDecryptRequest.
30
+ * Use `create(EListAttestedDecryptRequestSchema)` to create a new message.
31
+ */
32
+ exports.EListAttestedDecryptRequestSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 3);
33
+ /**
34
+ * Describes the message inco.kms.lite.v1.EListAttestedDecryptResponse.
35
+ * Use `create(EListAttestedDecryptResponseSchema)` to create a new message.
36
+ */
37
+ exports.EListAttestedDecryptResponseSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 4);
28
38
  /**
29
39
  * Describes the message inco.kms.lite.v1.AttestedRevealRequest.
30
40
  * Use `create(AttestedRevealRequestSchema)` to create a new message.
31
41
  */
32
- exports.AttestedRevealRequestSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 3);
42
+ exports.AttestedRevealRequestSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 5);
43
+ /**
44
+ * Describes the message inco.kms.lite.v1.EListAttestedRevealRequest.
45
+ * Use `create(EListAttestedRevealRequestSchema)` to create a new message.
46
+ */
47
+ exports.EListAttestedRevealRequestSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 6);
33
48
  /**
34
49
  * Describes the message inco.kms.lite.v1.AttestedComputeRequest.
35
50
  * Use `create(AttestedComputeRequestSchema)` to create a new message.
36
51
  */
37
- exports.AttestedComputeRequestSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 4);
52
+ exports.AttestedComputeRequestSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 7);
38
53
  /**
39
54
  * Describes the message inco.kms.lite.v1.AttestedDecryptResponse.
40
55
  * Use `create(AttestedDecryptResponseSchema)` to create a new message.
41
56
  */
42
- exports.AttestedDecryptResponseSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 5);
57
+ exports.AttestedDecryptResponseSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 8);
43
58
  /**
44
59
  * Describes the message inco.kms.lite.v1.AttestedRevealResponse.
45
60
  * Use `create(AttestedRevealResponseSchema)` to create a new message.
46
61
  */
47
- exports.AttestedRevealResponseSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 6);
62
+ exports.AttestedRevealResponseSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 9);
63
+ /**
64
+ * Describes the message inco.kms.lite.v1.EListAttestedRevealResponse.
65
+ * Use `create(EListAttestedRevealResponseSchema)` to create a new message.
66
+ */
67
+ exports.EListAttestedRevealResponseSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 10);
48
68
  /**
49
69
  * Describes the message inco.kms.lite.v1.AttestedComputeResponse.
50
70
  * Use `create(AttestedComputeResponseSchema)` to create a new message.
51
71
  */
52
- exports.AttestedComputeResponseSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 7);
72
+ exports.AttestedComputeResponseSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 11);
53
73
  /**
54
74
  * Describes the message inco.kms.lite.v1.Plaintext.
55
75
  * Use `create(PlaintextSchema)` to create a new message.
56
76
  */
57
- exports.PlaintextSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 8);
77
+ exports.PlaintextSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 12);
58
78
  /**
59
79
  * Describes the message inco.kms.lite.v1.Reencryption.
60
80
  * Use `create(ReencryptionSchema)` to create a new message.
61
81
  */
62
- exports.ReencryptionSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 9);
82
+ exports.ReencryptionSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 13);
83
+ /**
84
+ * Describes the message inco.kms.lite.v1.EListElement.
85
+ * Use `create(EListElementSchema)` to create a new message.
86
+ */
87
+ exports.EListElementSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 14);
63
88
  /**
64
89
  * Describes the message inco.kms.lite.v1.DecryptionAttestation.
65
90
  * Use `create(DecryptionAttestationSchema)` to create a new message.
66
91
  */
67
- exports.DecryptionAttestationSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 10);
92
+ exports.DecryptionAttestationSchema = (0, codegenv2_1.messageDesc)(exports.file_inco_kms_lite_v1_kms_service, 15);
68
93
  /**
69
94
  * KmsService is the service for the IncoLite KMS, which will run
70
95
  * inside the TEE.
@@ -72,4 +97,4 @@ exports.DecryptionAttestationSchema = (0, codegenv2_1.messageDesc)(exports.file_
72
97
  * @generated from service inco.kms.lite.v1.KmsService
73
98
  */
74
99
  exports.KmsService = (0, codegenv2_1.serviceDesc)(exports.file_inco_kms_lite_v1_kms_service, 0);
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia21zX3NlcnZpY2VfcGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL2VzL2luY28va21zL2xpdGUvdjEva21zX3NlcnZpY2VfcGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGlFQUFpRTtBQUNqRSxvR0FBb0c7QUFDcEcsb0JBQW9COzs7QUFHcEIsNERBQWtGO0FBRWxGLHlDQUF5RDtBQUd6RDs7R0FFRztBQUNVLFFBQUEsaUNBQWlDLEdBQzVDLElBQUEsb0JBQVEsRUFBQyxvbUVBQW9tRSxFQUFFLENBQUMsc0NBQTJCLENBQUMsQ0FBQyxDQUFDO0FBVWhwRTs7O0dBR0c7QUFDVSxRQUFBLG9CQUFvQixHQUMvQixJQUFBLHVCQUFXLEVBQUMseUNBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFnQnBEOzs7R0FHRztBQUNVLFFBQUEscUJBQXFCLEdBQ2hDLElBQUEsdUJBQVcsRUFBQyx5Q0FBaUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQXlFcEQ7OztHQUdHO0FBQ1UsUUFBQSw0QkFBNEIsR0FDdkMsSUFBQSx1QkFBVyxFQUFDLHlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBaUJwRDs7O0dBR0c7QUFDVSxRQUFBLDJCQUEyQixHQUN0QyxJQUFBLHVCQUFXLEVBQUMseUNBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFzR3BEOzs7R0FHRztBQUNVLFFBQUEsNEJBQTRCLEdBQ3ZDLElBQUEsdUJBQVcsRUFBQyx5Q0FBaUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQWlCcEQ7OztHQUdHO0FBQ1UsUUFBQSw2QkFBNkIsR0FDeEMsSUFBQSx1QkFBVyxFQUFDLHlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBaUJwRDs7O0dBR0c7QUFDVSxRQUFBLDRCQUE0QixHQUN2QyxJQUFBLHVCQUFXLEVBQUMseUNBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFnQnBEOzs7R0FHRztBQUNVLFFBQUEsNkJBQTZCLEdBQ3hDLElBQUEsdUJBQVcsRUFBQyx5Q0FBaUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQWdCcEQ7OztHQUdHO0FBQ1UsUUFBQSxlQUFlLEdBQzFCLElBQUEsdUJBQVcsRUFBQyx5Q0FBaUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQXVCcEQ7OztHQUdHO0FBQ1UsUUFBQSxrQkFBa0IsR0FDN0IsSUFBQSx1QkFBVyxFQUFDLHlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBNkVwRDs7O0dBR0c7QUFDVSxRQUFBLDJCQUEyQixHQUN0QyxJQUFBLHVCQUFXLEVBQUMseUNBQWlDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFckQ7Ozs7O0dBS0c7QUFDVSxRQUFBLFVBQVUsR0ErQ3JCLElBQUEsdUJBQVcsRUFBQyx5Q0FBaUMsRUFBRSxDQUFDLENBQUMsQ0FBQyJ9
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia21zX3NlcnZpY2VfcGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL2VzL2luY28va21zL2xpdGUvdjEva21zX3NlcnZpY2VfcGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGlFQUFpRTtBQUNqRSxvR0FBb0c7QUFDcEcsb0JBQW9COzs7QUFHcEIsNERBQWtGO0FBRWxGLHlDQUF5RDtBQUd6RDs7R0FFRztBQUNVLFFBQUEsaUNBQWlDLEdBQzVDLElBQUEsb0JBQVEsRUFBQyw0MEdBQTQwRyxFQUFFLENBQUMsc0NBQTJCLENBQUMsQ0FBQyxDQUFDO0FBVXgzRzs7O0dBR0c7QUFDVSxRQUFBLG9CQUFvQixHQUMvQixJQUFBLHVCQUFXLEVBQUMseUNBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFnQnBEOzs7R0FHRztBQUNVLFFBQUEscUJBQXFCLEdBQ2hDLElBQUEsdUJBQVcsRUFBQyx5Q0FBaUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQXlFcEQ7OztHQUdHO0FBQ1UsUUFBQSw0QkFBNEIsR0FDdkMsSUFBQSx1QkFBVyxFQUFDLHlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBeUVwRDs7O0dBR0c7QUFDVSxRQUFBLGlDQUFpQyxHQUM1QyxJQUFBLHVCQUFXLEVBQUMseUNBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUEwQnBEOzs7R0FHRztBQUNVLFFBQUEsa0NBQWtDLEdBQzdDLElBQUEsdUJBQVcsRUFBQyx5Q0FBaUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQWlCcEQ7OztHQUdHO0FBQ1UsUUFBQSwyQkFBMkIsR0FDdEMsSUFBQSx1QkFBVyxFQUFDLHlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBaUJwRDs7O0dBR0c7QUFDVSxRQUFBLGdDQUFnQyxHQUMzQyxJQUFBLHVCQUFXLEVBQUMseUNBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFzR3BEOzs7R0FHRztBQUNVLFFBQUEsNEJBQTRCLEdBQ3ZDLElBQUEsdUJBQVcsRUFBQyx5Q0FBaUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQWlCcEQ7OztHQUdHO0FBQ1UsUUFBQSw2QkFBNkIsR0FDeEMsSUFBQSx1QkFBVyxFQUFDLHlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBaUJwRDs7O0dBR0c7QUFDVSxRQUFBLDRCQUE0QixHQUN2QyxJQUFBLHVCQUFXLEVBQUMseUNBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUF1QnBEOzs7R0FHRztBQUNVLFFBQUEsaUNBQWlDLEdBQzVDLElBQUEsdUJBQVcsRUFBQyx5Q0FBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQWdCckQ7OztHQUdHO0FBQ1UsUUFBQSw2QkFBNkIsR0FDeEMsSUFBQSx1QkFBVyxFQUFDLHlDQUFpQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBZ0JyRDs7O0dBR0c7QUFDVSxRQUFBLGVBQWUsR0FDMUIsSUFBQSx1QkFBVyxFQUFDLHlDQUFpQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBdUJyRDs7O0dBR0c7QUFDVSxRQUFBLGtCQUFrQixHQUM3QixJQUFBLHVCQUFXLEVBQUMseUNBQWlDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUE0Q3JEOzs7R0FHRztBQUNVLFFBQUEsa0JBQWtCLEdBQzdCLElBQUEsdUJBQVcsRUFBQyx5Q0FBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQTZFckQ7OztHQUdHO0FBQ1UsUUFBQSwyQkFBMkIsR0FDdEMsSUFBQSx1QkFBVyxFQUFDLHlDQUFpQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRXJEOzs7OztHQUtHO0FBQ1UsUUFBQSxVQUFVLEdBdUVyQixJQUFBLHVCQUFXLEVBQUMseUNBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUMifQ==
@@ -2,6 +2,7 @@ import type { Address } from 'viem';
2
2
  import type { DecryptionAttestation, EncryptedDecryptionAttestation } from '../attesteddecrypt/types.js';
3
3
  import type { EncryptionScheme, SupportedFheType } from '../encryption/encryption.js';
4
4
  import type { AttestedComputeRequest, AttestedDecryptRequest, AttestedRevealRequest } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
5
+ import type { XwingKeypair } from '../lite/index.js';
5
6
  import type { BackoffConfig } from '../retry.js';
6
7
  import { type KmsClient } from './client.js';
7
8
  export declare class KmsQuorumClient {
@@ -28,8 +29,8 @@ export declare class KmsQuorumClient {
28
29
  * @throws {Error} If KMS clients array is empty or threshold is invalid
29
30
  */
30
31
  static fromKmsClients(kmsClients: KmsClient[], threshold: number): KmsQuorumClient;
31
- attestedDecrypt(request: AttestedDecryptRequest, backoffConfig?: Partial<BackoffConfig>): Promise<(DecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>)[]>;
32
- attestedCompute(request: AttestedComputeRequest, backoffConfig?: Partial<BackoffConfig>): Promise<DecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
32
+ attestedDecrypt(request: AttestedDecryptRequest, backoffConfig?: Partial<BackoffConfig>, reencryptKeypair?: XwingKeypair): Promise<(DecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>)[]>;
33
+ attestedCompute(request: AttestedComputeRequest, backoffConfig?: Partial<BackoffConfig>, reencryptKeypair?: XwingKeypair): Promise<DecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
33
34
  attestedReveal(request: AttestedRevealRequest, backoffConfig?: Partial<BackoffConfig>): Promise<(DecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>)[]>;
34
35
  /**
35
36
  * Generic method to execute a KMS operation across all clients with retry and threshold logic.
@@ -4,6 +4,7 @@ exports.KmsQuorumClient = void 0;
4
4
  const binary_js_1 = require("../binary.js");
5
5
  const encryption_js_1 = require("../encryption/encryption.js");
6
6
  const handle_js_1 = require("../handle.js");
7
+ const xwing_js_1 = require("../lite/xwing.js");
7
8
  const retry_js_1 = require("../retry.js");
8
9
  const client_js_1 = require("./client.js");
9
10
  const thresholdPromises_js_1 = require("./thresholdPromises.js");
@@ -81,7 +82,7 @@ class KmsQuorumClient {
81
82
  }
82
83
  return new KmsQuorumClient(kmsClients, threshold);
83
84
  }
84
- async attestedDecrypt(request, backoffConfig) {
85
+ async attestedDecrypt(request, backoffConfig, reencryptKeypair) {
85
86
  const thresholdResults = await this.executeKmsOperationWithThreshold(async (kms) => {
86
87
  return await kms.client.attestedDecrypt(request);
87
88
  }, backoffConfig);
@@ -89,10 +90,10 @@ class KmsQuorumClient {
89
90
  const thresholdResponses = thresholdResults.map((r) => r.response);
90
91
  const signers = thresholdResults.map((r) => r.signer);
91
92
  // Verify that responses are consistent across quorum (plaintext or ciphertext)
92
- const reference = this.verifyResponseConsistency(thresholdResponses);
93
+ const reference = await this.verifyResponseConsistency(thresholdResponses, reencryptKeypair);
93
94
  return this.buildAggregatedAttestations(reference, thresholdResponses, signers);
94
95
  }
95
- async attestedCompute(request, backoffConfig) {
96
+ async attestedCompute(request, backoffConfig, reencryptKeypair) {
96
97
  const thresholdResults = await this.executeKmsOperationWithThreshold(async (kms) => {
97
98
  return await kms.client.attestedCompute(request);
98
99
  }, backoffConfig);
@@ -100,7 +101,7 @@ class KmsQuorumClient {
100
101
  const thresholdResponses = thresholdResults.map((r) => r.response);
101
102
  const signers = thresholdResults.map((r) => r.signer);
102
103
  // Verify that responses are consistent across quorum
103
- const reference = this.verifyComputeResponseConsistency(thresholdResponses, request);
104
+ const reference = await this.verifyComputeResponseConsistency(thresholdResponses, request, reencryptKeypair);
104
105
  return this.buildAggregatedComputeAttestation(reference, thresholdResponses, signers);
105
106
  }
106
107
  async attestedReveal(request, backoffConfig) {
@@ -110,8 +111,8 @@ class KmsQuorumClient {
110
111
  // Extract responses and signers
111
112
  const thresholdResponses = thresholdResults.map((r) => r.response);
112
113
  const signers = thresholdResults.map((r) => r.signer);
113
- // Verify that responses are consistent across quorum (plaintext or ciphertext)
114
- const reference = this.verifyResponseConsistency(thresholdResponses);
114
+ // Verify that responses are consistent across quorum (plaintext only for reveal)
115
+ const reference = await this.verifyResponseConsistency(thresholdResponses);
115
116
  return this.buildAggregatedAttestations(reference, thresholdResponses, signers);
116
117
  }
117
118
  /**
@@ -275,7 +276,7 @@ class KmsQuorumClient {
275
276
  }
276
277
  throw new Error(`Unexpected attestation type: ${refAtt.value.case}, expected 'plaintext' or 'reencryption'`);
277
278
  }
278
- verifyResponseConsistency(thresholdResponses) {
279
+ async verifyResponseConsistency(thresholdResponses, reencryptKeypair) {
279
280
  if (thresholdResponses.length === 0) {
280
281
  throw new Error('No responses collected to verify');
281
282
  }
@@ -307,7 +308,7 @@ class KmsQuorumClient {
307
308
  this.verifyPlaintextConsistency(i, reference, thresholdResponses);
308
309
  }
309
310
  else if (refCase === 'reencryption') {
310
- this.verifyCiphertextConsistency(i, reference, thresholdResponses);
311
+ await this.verifyCiphertextConsistency(i, reference, thresholdResponses, reencryptKeypair);
311
312
  }
312
313
  else {
313
314
  throw new Error(`Unexpected attestation type: ${refCase}, expected 'plaintext' or 'reencryption'`);
@@ -315,7 +316,7 @@ class KmsQuorumClient {
315
316
  }
316
317
  return reference;
317
318
  }
318
- verifyComputeResponseConsistency(thresholdResponses, request) {
319
+ async verifyComputeResponseConsistency(thresholdResponses, request, reencryptKeypair) {
319
320
  if (thresholdResponses.length === 0) {
320
321
  throw new Error('No responses collected to verify');
321
322
  }
@@ -380,7 +381,7 @@ class KmsQuorumClient {
380
381
  this.verifyPlaintextBytesConsistency(refBytes, bytes);
381
382
  }
382
383
  else if (refCase === 'reencryption') {
383
- if (!refCt || !refFheType) {
384
+ if (!refCt || refFheType === undefined) {
384
385
  throw new Error('No reference reencryption data to compare');
385
386
  }
386
387
  if (att.value.case !== 'reencryption') {
@@ -396,14 +397,15 @@ class KmsQuorumClient {
396
397
  if (fheType !== refFheType) {
397
398
  throw new Error('FHE types differ across KMS responses');
398
399
  }
399
- // Verify ciphertext bytes match
400
- if (refCt.length !== ct.length) {
401
- throw new Error('Ciphertexts differ across KMS responses');
400
+ // Verify handles match
401
+ if (att.handle !== refAtt.handle) {
402
+ throw new Error('Handles differ across KMS responses');
402
403
  }
403
- for (let b = 0; b < refCt.length; b++) {
404
- if (refCt[b] !== ct[b]) {
405
- throw new Error('Ciphertexts differ across KMS responses');
406
- }
404
+ // If keypair provided, decrypt and verify plaintext consistency
405
+ if (reencryptKeypair) {
406
+ const refPlaintext = await (0, xwing_js_1.decrypt)(reencryptKeypair, refCt);
407
+ const plaintext = await (0, xwing_js_1.decrypt)(reencryptKeypair, ct);
408
+ this.verifyPlaintextBytesConsistency(refPlaintext, plaintext);
407
409
  }
408
410
  }
409
411
  }
@@ -414,7 +416,7 @@ class KmsQuorumClient {
414
416
  */
415
417
  verifyPlaintextBytesConsistency(refBytes, bytes) {
416
418
  if (refBytes.length !== bytes.length) {
417
- throw new Error('Plaintexts differ across KMS responses');
419
+ throw new Error('Plaintexts length differ across KMS responses');
418
420
  }
419
421
  for (let b = 0; b < refBytes.length; b++) {
420
422
  if (refBytes[b] !== bytes[b]) {
@@ -437,7 +439,7 @@ class KmsQuorumClient {
437
439
  this.verifyPlaintextBytesConsistency(refBytes, bytes);
438
440
  }
439
441
  }
440
- verifyCiphertextConsistency(index, reference, thresholdResponses) {
442
+ async verifyCiphertextConsistency(index, reference, thresholdResponses, reencryptKeypair) {
441
443
  const refAtt = reference.decryptionAttestations[index];
442
444
  if (refAtt.value?.case !== 'reencryption') {
443
445
  throw new Error('Expected reencryption attestation');
@@ -463,17 +465,18 @@ class KmsQuorumClient {
463
465
  if (fheType !== refFheType) {
464
466
  throw new Error('FHE types differ across KMS responses');
465
467
  }
466
- // Verify ciphertext bytes match
467
- if (refCt.length !== ct.length) {
468
- throw new Error('Ciphertexts differ across KMS responses');
468
+ // Verify handles match
469
+ if (att.handle !== refAtt.handle) {
470
+ throw new Error('Handles differ across KMS responses');
469
471
  }
470
- for (let b = 0; b < refCt.length; b++) {
471
- if (refCt[b] !== ct[b]) {
472
- throw new Error('Ciphertexts differ across KMS responses');
473
- }
472
+ // If keypair provided, decrypt and verify plaintext consistency
473
+ if (reencryptKeypair) {
474
+ const refPlaintext = await (0, xwing_js_1.decrypt)(reencryptKeypair, refCt);
475
+ const plaintext = await (0, xwing_js_1.decrypt)(reencryptKeypair, ct);
476
+ this.verifyPlaintextBytesConsistency(refPlaintext, plaintext);
474
477
  }
475
478
  }
476
479
  }
477
480
  }
478
481
  exports.KmsQuorumClient = KmsQuorumClient;
479
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvcnVtQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ttcy9xdW9ydW1DbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsNENBS3NCO0FBTXRCLCtEQUdxQztBQVVyQyw0Q0FBNkM7QUFFN0MsMENBQStDO0FBQy9DLDJDQUEyRDtBQUMzRCxpRUFBOEQ7QUFPOUQsTUFBYSxlQUFlO0lBQ1QsSUFBSSxDQUFRO0lBQ1osU0FBUyxDQUFTO0lBUW5DLGlCQUFpQjtJQUNqQixZQUNFLGtCQUFvRSxFQUNwRSxTQUFpQjtRQUVqQixJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FDYixtQ0FBbUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQy9ELENBQUM7UUFDSixDQUFDO1FBRUQsMkZBQTJGO1FBQzNGLElBQ0Usa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDN0IsaUJBQWlCLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQzFDLENBQUM7WUFDRCwwQkFBMEI7WUFDMUIsTUFBTSxVQUFVLEdBQUcsa0JBQWlDLENBQUM7WUFDckQsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNO2dCQUNOLE1BQU0sRUFBRSxNQUFNLENBQUMsYUFBYTthQUM3QixDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ04saURBQWlEO1lBQ2pELE1BQU0sU0FBUyxHQUFHLGtCQUdmLENBQUM7WUFDSixJQUFJLENB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
482
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvcnVtQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ttcy9xdW9ydW1DbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsNENBS3NCO0FBTXRCLCtEQUdxQztBQVVyQyw0Q0FBNkM7QUFFN0MsK0NBQTJDO0FBRTNDLDBDQUErQztBQUMvQywyQ0FBMkQ7QUFDM0QsaUVBQThEO0FBTzlELE1BQWEsZUFBZTtJQUNULElBQUksQ0FBUTtJQUNaLFNBQVMsQ0FBUztJQVFuQyxpQkFBaUI7SUFDakIsWUFDRSxrQkFBb0UsRUFDcEUsU0FBaUI7UUFFakIsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFFRCxJQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksU0FBUyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNELE1BQU0sSUFBSSxLQUFLLENBQ2IsbUNBQW1DLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUMvRCxDQUFDO1FBQ0osQ0FBQztRQUVELDJGQUEyRjtRQUMzRixJQUNFLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzdCLGlCQUFpQixJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUMxQyxDQUFDO1lBQ0QsMEJBQTBCO1lBQzFCLE1BQU0sVUFBVSxHQUFHLGtCQUFpQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdEMsTUFBTTtnQkFDTixNQUFNLEVBQUUsTUFBTSxDQUFDLGFBQWE7YUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDO2FBQU0sQ0FBQztZQUNOLGlEQUFpRDtZQUNqRCxNQUFNLFNBQVMsR0FBRyxrQkFHZixDQUFD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