@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.
- package/dist/cjs/advancedacl/session-key.d.ts +10 -9
- package/dist/cjs/advancedacl/session-key.js +7 -8
- package/dist/cjs/attestedcompute/attested-compute.d.ts +2 -2
- package/dist/cjs/attestedcompute/attested-compute.js +2 -2
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +3 -3
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +5 -5
- package/dist/cjs/encryption/encryption.d.ts +8 -10
- package/dist/cjs/encryption/encryption.js +2 -5
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +234 -7
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +86 -10
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +0 -6
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +2 -8
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +213 -0
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +36 -11
- package/dist/cjs/kms/quorumClient.d.ts +3 -2
- package/dist/cjs/kms/quorumClient.js +30 -27
- package/dist/cjs/lite/index.d.ts +1 -2
- package/dist/cjs/lite/index.js +5 -18
- package/dist/cjs/lite/lightning.d.ts +16 -16
- package/dist/cjs/lite/lightning.js +28 -39
- package/dist/cjs/lite/xwing.d.ts +5 -1
- package/dist/cjs/lite/xwing.js +10 -5
- package/dist/cjs/reencryption/types.d.ts +2 -2
- package/dist/esm/advancedacl/session-key.d.ts +10 -9
- package/dist/esm/advancedacl/session-key.js +7 -8
- package/dist/esm/attestedcompute/attested-compute.d.ts +2 -2
- package/dist/esm/attestedcompute/attested-compute.js +2 -2
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +3 -3
- package/dist/esm/attesteddecrypt/attested-decrypt.js +3 -3
- package/dist/esm/encryption/encryption.d.ts +8 -10
- package/dist/esm/encryption/encryption.js +2 -5
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +234 -7
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +85 -9
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +0 -6
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +2 -8
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +213 -0
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +35 -10
- package/dist/esm/kms/quorumClient.d.ts +3 -2
- package/dist/esm/kms/quorumClient.js +30 -27
- package/dist/esm/lite/index.d.ts +1 -2
- package/dist/esm/lite/index.js +2 -5
- package/dist/esm/lite/lightning.d.ts +16 -16
- package/dist/esm/lite/lightning.js +29 -40
- package/dist/esm/lite/xwing.d.ts +5 -1
- package/dist/esm/lite/xwing.js +9 -4
- package/dist/esm/reencryption/types.d.ts +2 -2
- package/dist/types/advancedacl/session-key.d.ts +10 -9
- package/dist/types/attestedcompute/attested-compute.d.ts +2 -2
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +3 -3
- package/dist/types/encryption/encryption.d.ts +8 -10
- package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +234 -7
- package/dist/types/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +0 -6
- package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +213 -0
- package/dist/types/kms/quorumClient.d.ts +3 -2
- package/dist/types/lite/index.d.ts +1 -2
- package/dist/types/lite/lightning.d.ts +16 -16
- package/dist/types/lite/xwing.d.ts +5 -1
- package/dist/types/reencryption/types.d.ts +2 -2
- package/package.json +3 -6
- package/dist/cjs/lite/ecies.d.ts +0 -26
- package/dist/cjs/lite/ecies.js +0 -146
- package/dist/esm/lite/ecies.d.ts +0 -26
- package/dist/esm/lite/ecies.js +0 -134
- 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+
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
32
|
-
attestedCompute(request: AttestedComputeRequest, backoffConfig?: Partial<BackoffConfig
|
|
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
|
|
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 ||
|
|
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
|
|
400
|
-
if (
|
|
401
|
-
throw new Error('
|
|
400
|
+
// Verify handles match
|
|
401
|
+
if (att.handle !== refAtt.handle) {
|
|
402
|
+
throw new Error('Handles differ across KMS responses');
|
|
402
403
|
}
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
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
|
|
467
|
-
if (
|
|
468
|
-
throw new Error('
|
|
468
|
+
// Verify handles match
|
|
469
|
+
if (att.handle !== refAtt.handle) {
|
|
470
|
+
throw new Error('Handles differ across KMS responses');
|
|
469
471
|
}
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
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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
|