@inco/js 0.8.0-devnet-5 → 0.9.0-devnet-test-2
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 +11 -10
- package/dist/cjs/advancedacl/session-key.js +7 -11
- package/dist/cjs/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/cjs/attestedcompute/attested-compute.js +2 -2
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +8 -8
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +6 -6
- package/dist/cjs/encryption/encryption.d.ts +10 -10
- package/dist/cjs/encryption/encryption.js +5 -5
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +270 -7
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +98 -12
- 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/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +3 -3
- package/dist/cjs/kms/quorumClient.d.ts +5 -4
- package/dist/cjs/kms/quorumClient.js +33 -30
- package/dist/cjs/lite/index.d.ts +1 -1
- package/dist/cjs/lite/index.js +15 -2
- package/dist/cjs/lite/lightning.d.ts +33 -24
- package/dist/cjs/lite/lightning.js +67 -38
- package/dist/cjs/lite/xwing.d.ts +123 -0
- package/dist/cjs/lite/xwing.js +275 -0
- package/dist/cjs/reencryption/types.d.ts +2 -2
- package/dist/esm/advancedacl/session-key.d.ts +11 -10
- package/dist/esm/advancedacl/session-key.js +7 -11
- package/dist/esm/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/esm/attestedcompute/attested-compute.js +2 -2
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +8 -8
- package/dist/esm/attesteddecrypt/attested-decrypt.js +4 -4
- package/dist/esm/encryption/encryption.d.ts +10 -10
- package/dist/esm/encryption/encryption.js +5 -5
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +270 -7
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +97 -11
- 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/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +3 -3
- package/dist/esm/kms/quorumClient.d.ts +5 -4
- package/dist/esm/kms/quorumClient.js +33 -30
- package/dist/esm/lite/index.d.ts +1 -1
- package/dist/esm/lite/index.js +2 -2
- package/dist/esm/lite/lightning.d.ts +33 -24
- package/dist/esm/lite/lightning.js +67 -38
- package/dist/esm/lite/xwing.d.ts +123 -0
- package/dist/esm/lite/xwing.js +263 -0
- package/dist/esm/reencryption/types.d.ts +2 -2
- package/dist/types/advancedacl/session-key.d.ts +11 -10
- package/dist/types/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +8 -8
- package/dist/types/encryption/encryption.d.ts +10 -10
- package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +270 -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/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +3 -3
- package/dist/types/kms/quorumClient.d.ts +5 -4
- package/dist/types/lite/index.d.ts +1 -1
- package/dist/types/lite/lightning.d.ts +33 -24
- package/dist/types/lite/xwing.d.ts +123 -0
- package/dist/types/reencryption/types.d.ts +2 -2
- package/package.json +6 -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
|
@@ -6,7 +6,7 @@ import { file_inco_kms_lite_v1_types } from "./types_pb";
|
|
|
6
6
|
/**
|
|
7
7
|
* Describes the file inco/kms/lite/v1/kms_service.proto.
|
|
8
8
|
*/
|
|
9
|
-
export const file_inco_kms_lite_v1_kms_service = /*@__PURE__*/ fileDesc("CiJpbmNvL2ttcy9saXRlL3YxL2ttc19zZXJ2aWNlLnByb3RvEhBpbmNvLmttcy5saXRlLnYxIhAKDklzUmVhZHlSZXF1ZXN0IiAKD0lzUmVhZHlSZXNwb25zZRINCgVyZWFkeRgBIAEoCCKjAQoWQXR0ZXN0ZWREZWNyeXB0UmVxdWVzdBIUCgx1c2VyX2FkZHJlc3MYASABKAkSGQoRcmVlbmNyeXB0X3B1Yl9rZXkYAiABKAwSGAoQZWlwNzEyX3NpZ25hdHVyZRgDIAEoDBI+
|
|
9
|
+
export const file_inco_kms_lite_v1_kms_service = /*@__PURE__*/ fileDesc("CiJpbmNvL2ttcy9saXRlL3YxL2ttc19zZXJ2aWNlLnByb3RvEhBpbmNvLmttcy5saXRlLnYxIhAKDklzUmVhZHlSZXF1ZXN0IiAKD0lzUmVhZHlSZXNwb25zZRINCgVyZWFkeRgBIAEoCCKjAQoWQXR0ZXN0ZWREZWNyeXB0UmVxdWVzdBIUCgx1c2VyX2FkZHJlc3MYASABKAkSGQoRcmVlbmNyeXB0X3B1Yl9rZXkYAiABKAwSGAoQZWlwNzEyX3NpZ25hdHVyZRgDIAEoDBI+ChNoYW5kbGVzX3dpdGhfcHJvb2ZzGAQgAygLMiEuaW5jby5rbXMubGl0ZS52MS5IYW5kbGVXaXRoUHJvb2YirAEKG0VMaXN0QXR0ZXN0ZWREZWNyeXB0UmVxdWVzdBIUCgx1c2VyX2FkZHJlc3MYASABKAkSGQoRcmVlbmNyeXB0X3B1Yl9rZXkYAiABKAwSGAoQZWlwNzEyX3NpZ25hdHVyZRgDIAEoDBJCChdlbGlzdF9oYW5kbGVfd2l0aF9wcm9vZhgEIAEoCzIhLmluY28ua21zLmxpdGUudjEuSGFuZGxlV2l0aFByb29mIp0BChxFTGlzdEF0dGVzdGVkRGVjcnlwdFJlc3BvbnNlEk0KHGNvbW1pdG1lbnRfcHJvb2ZfYXR0ZXN0YXRpb24YASABKAsyJy5pbmNvLmttcy5saXRlLnYxLkRlY3J5cHRpb25BdHRlc3RhdGlvbhIuCgZ2YWx1ZXMYAiADKAsyHi5pbmNvLmttcy5saXRlLnYxLkVMaXN0RWxlbWVudCIoChVBdHRlc3RlZFJldmVhbFJlcXVlc3QSDwoHaGFuZGxlcxgDIAMoCSIsChpFTGlzdEF0dGVzdGVkUmV2ZWFsUmVxdWVzdBIOCgZoYW5kbGUYAyABKAki9AEKFkF0dGVzdGVkQ29tcHV0ZVJlcXVlc3QSFAoMdXNlcl9hZGRyZXNzGAEgASgJEhkKEXJlZW5jcnlwdF9wdWJfa2V5GAIgASgMEhgKEGVpcDcxMl9zaWduYXR1cmUYAyABKAwSNQoCb3AYBCABKA4yKS5pbmNvLmttcy5saXRlLnYxLlN1cHBvcnRlZFNjYWxhckJpbmFyeU9wEhIKCmxoc19oYW5kbGUYBSABKAkSFQoNcmhzX3BsYWludGV4dBgGIAEoCRItCglhY2xfcHJvb2YYByABKAsyGi5pbmNvLmttcy5saXRlLnYxLkFDTFByb29mImMKF0F0dGVzdGVkRGVjcnlwdFJlc3BvbnNlEkgKF2RlY3J5cHRpb25fYXR0ZXN0YXRpb25zGAEgAygLMicuaW5jby5rbXMubGl0ZS52MS5EZWNyeXB0aW9uQXR0ZXN0YXRpb24iYgoWQXR0ZXN0ZWRSZXZlYWxSZXNwb25zZRJIChdkZWNyeXB0aW9uX2F0dGVzdGF0aW9ucxgBIAMoCzInLmluY28ua21zLmxpdGUudjEuRGVjcnlwdGlvbkF0dGVzdGF0aW9uIpwBChtFTGlzdEF0dGVzdGVkUmV2ZWFsUmVzcG9uc2USTQocY29tbWl0bWVudF9wcm9vZl9hdHRlc3RhdGlvbhgBIAEoCzInLmluY28ua21zLmxpdGUudjEuRGVjcnlwdGlvbkF0dGVzdGF0aW9uEi4KBnZhbHVlcxgCIAMoCzIeLmluY28ua21zLmxpdGUudjEuRUxpc3RFbGVtZW50ImIKF0F0dGVzdGVkQ29tcHV0ZVJlc3BvbnNlEkcKFmRlY3J5cHRpb25fYXR0ZXN0YXRpb24YASABKAsyJy5pbmNvLmttcy5saXRlLnYxLkRlY3J5cHRpb25BdHRlc3RhdGlvbiIaCglQbGFpbnRleHQSDQoFdmFsdWUYASABKAwiRAoMUmVlbmNyeXB0aW9uEhcKD3VzZXJfY2lwaGVydGV4dBgBIAEoDBIbChNlbmNyeXB0ZWRfc2lnbmF0dXJlGAMgASgMIqQBCgxFTGlzdEVsZW1lbnQSDQoFaW5kZXgYASABKA0SEgoKY29tbWl0bWVudBgCIAEoDBIwCglwbGFpbnRleHQYAyABKAsyGy5pbmNvLmttcy5saXRlLnYxLlBsYWludGV4dEgAEjYKDHJlZW5jcnlwdGlvbhgEIAEoCzIeLmluY28ua21zLmxpdGUudjEuUmVlbmNyeXB0aW9uSABCBwoFdmFsdWUirQEKFURlY3J5cHRpb25BdHRlc3RhdGlvbhIOCgZoYW5kbGUYASABKAkSMAoJcGxhaW50ZXh0GAIgASgLMhsuaW5jby5rbXMubGl0ZS52MS5QbGFpbnRleHRIABI2CgxyZWVuY3J5cHRpb24YAyABKAsyHi5pbmNvLmttcy5saXRlLnYxLlJlZW5jcnlwdGlvbkgAEhEKCXNpZ25hdHVyZRgEIAEoDEIHCgV2YWx1ZTL8BAoKS21zU2VydmljZRJOCgdJc1JlYWR5EiAuaW5jby5rbXMubGl0ZS52MS5Jc1JlYWR5UmVxdWVzdBohLmluY28ua21zLmxpdGUudjEuSXNSZWFkeVJlc3BvbnNlEmYKD0F0dGVzdGVkRGVjcnlwdBIoLmluY28ua21zLmxpdGUudjEuQXR0ZXN0ZWREZWNyeXB0UmVxdWVzdBopLmluY28ua21zLmxpdGUudjEuQXR0ZXN0ZWREZWNyeXB0UmVzcG9uc2USZgoPQXR0ZXN0ZWRDb21wdXRlEiguaW5jby5rbXMubGl0ZS52MS5BdHRlc3RlZENvbXB1dGVSZXF1ZXN0GikuaW5jby5rbXMubGl0ZS52MS5BdHRlc3RlZENvbXB1dGVSZXNwb25zZRJjCg5BdHRlc3RlZFJldmVhbBInLmluY28ua21zLmxpdGUudjEuQXR0ZXN0ZWRSZXZlYWxSZXF1ZXN0GiguaW5jby5rbXMubGl0ZS52MS5BdHRlc3RlZFJldmVhbFJlc3BvbnNlEnUKFEVMaXN0QXR0ZXN0ZWREZWNyeXB0Ei0uaW5jby5rbXMubGl0ZS52MS5FTGlzdEF0dGVzdGVkRGVjcnlwdFJlcXVlc3QaLi5pbmNvLmttcy5saXRlLnYxLkVMaXN0QXR0ZXN0ZWREZWNyeXB0UmVzcG9uc2UScgoTRUxpc3RBdHRlc3RlZFJldmVhbBIsLmluY28ua21zLmxpdGUudjEuRUxpc3RBdHRlc3RlZFJldmVhbFJlcXVlc3QaLS5pbmNvLmttcy5saXRlLnYxLkVMaXN0QXR0ZXN0ZWRSZXZlYWxSZXNwb25zZUI7WjlnaXRodWIuY29tL2luY28tZmhldm0vaW5jby1tb25vcmVwby9jb3ZhbGlkYXRvci9rbXMvdHlwZXNiBnByb3RvMw", [file_inco_kms_lite_v1_types]);
|
|
10
10
|
/**
|
|
11
11
|
* Describes the message inco.kms.lite.v1.IsReadyRequest.
|
|
12
12
|
* Use `create(IsReadyRequestSchema)` to create a new message.
|
|
@@ -22,46 +22,71 @@ export const IsReadyResponseSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lit
|
|
|
22
22
|
* Use `create(AttestedDecryptRequestSchema)` to create a new message.
|
|
23
23
|
*/
|
|
24
24
|
export const AttestedDecryptRequestSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 2);
|
|
25
|
+
/**
|
|
26
|
+
* Describes the message inco.kms.lite.v1.EListAttestedDecryptRequest.
|
|
27
|
+
* Use `create(EListAttestedDecryptRequestSchema)` to create a new message.
|
|
28
|
+
*/
|
|
29
|
+
export const EListAttestedDecryptRequestSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 3);
|
|
30
|
+
/**
|
|
31
|
+
* Describes the message inco.kms.lite.v1.EListAttestedDecryptResponse.
|
|
32
|
+
* Use `create(EListAttestedDecryptResponseSchema)` to create a new message.
|
|
33
|
+
*/
|
|
34
|
+
export const EListAttestedDecryptResponseSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 4);
|
|
25
35
|
/**
|
|
26
36
|
* Describes the message inco.kms.lite.v1.AttestedRevealRequest.
|
|
27
37
|
* Use `create(AttestedRevealRequestSchema)` to create a new message.
|
|
28
38
|
*/
|
|
29
|
-
export const AttestedRevealRequestSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service,
|
|
39
|
+
export const AttestedRevealRequestSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 5);
|
|
40
|
+
/**
|
|
41
|
+
* Describes the message inco.kms.lite.v1.EListAttestedRevealRequest.
|
|
42
|
+
* Use `create(EListAttestedRevealRequestSchema)` to create a new message.
|
|
43
|
+
*/
|
|
44
|
+
export const EListAttestedRevealRequestSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 6);
|
|
30
45
|
/**
|
|
31
46
|
* Describes the message inco.kms.lite.v1.AttestedComputeRequest.
|
|
32
47
|
* Use `create(AttestedComputeRequestSchema)` to create a new message.
|
|
33
48
|
*/
|
|
34
|
-
export const AttestedComputeRequestSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service,
|
|
49
|
+
export const AttestedComputeRequestSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 7);
|
|
35
50
|
/**
|
|
36
51
|
* Describes the message inco.kms.lite.v1.AttestedDecryptResponse.
|
|
37
52
|
* Use `create(AttestedDecryptResponseSchema)` to create a new message.
|
|
38
53
|
*/
|
|
39
|
-
export const AttestedDecryptResponseSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service,
|
|
54
|
+
export const AttestedDecryptResponseSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 8);
|
|
40
55
|
/**
|
|
41
56
|
* Describes the message inco.kms.lite.v1.AttestedRevealResponse.
|
|
42
57
|
* Use `create(AttestedRevealResponseSchema)` to create a new message.
|
|
43
58
|
*/
|
|
44
|
-
export const AttestedRevealResponseSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service,
|
|
59
|
+
export const AttestedRevealResponseSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 9);
|
|
60
|
+
/**
|
|
61
|
+
* Describes the message inco.kms.lite.v1.EListAttestedRevealResponse.
|
|
62
|
+
* Use `create(EListAttestedRevealResponseSchema)` to create a new message.
|
|
63
|
+
*/
|
|
64
|
+
export const EListAttestedRevealResponseSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 10);
|
|
45
65
|
/**
|
|
46
66
|
* Describes the message inco.kms.lite.v1.AttestedComputeResponse.
|
|
47
67
|
* Use `create(AttestedComputeResponseSchema)` to create a new message.
|
|
48
68
|
*/
|
|
49
|
-
export const AttestedComputeResponseSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service,
|
|
69
|
+
export const AttestedComputeResponseSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 11);
|
|
50
70
|
/**
|
|
51
71
|
* Describes the message inco.kms.lite.v1.Plaintext.
|
|
52
72
|
* Use `create(PlaintextSchema)` to create a new message.
|
|
53
73
|
*/
|
|
54
|
-
export const PlaintextSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service,
|
|
74
|
+
export const PlaintextSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 12);
|
|
55
75
|
/**
|
|
56
76
|
* Describes the message inco.kms.lite.v1.Reencryption.
|
|
57
77
|
* Use `create(ReencryptionSchema)` to create a new message.
|
|
58
78
|
*/
|
|
59
|
-
export const ReencryptionSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service,
|
|
79
|
+
export const ReencryptionSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 13);
|
|
80
|
+
/**
|
|
81
|
+
* Describes the message inco.kms.lite.v1.EListElement.
|
|
82
|
+
* Use `create(EListElementSchema)` to create a new message.
|
|
83
|
+
*/
|
|
84
|
+
export const EListElementSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 14);
|
|
60
85
|
/**
|
|
61
86
|
* Describes the message inco.kms.lite.v1.DecryptionAttestation.
|
|
62
87
|
* Use `create(DecryptionAttestationSchema)` to create a new message.
|
|
63
88
|
*/
|
|
64
|
-
export const DecryptionAttestationSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service,
|
|
89
|
+
export const DecryptionAttestationSchema = /*@__PURE__*/ messageDesc(file_inco_kms_lite_v1_kms_service, 15);
|
|
65
90
|
/**
|
|
66
91
|
* KmsService is the service for the IncoLite KMS, which will run
|
|
67
92
|
* inside the TEE.
|
|
@@ -69,4 +94,4 @@ export const DecryptionAttestationSchema = /*@__PURE__*/ messageDesc(file_inco_k
|
|
|
69
94
|
* @generated from service inco.kms.lite.v1.KmsService
|
|
70
95
|
*/
|
|
71
96
|
export const KmsService = /*@__PURE__*/ serviceDesc(file_inco_kms_lite_v1_kms_service, 0);
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia21zX3NlcnZpY2VfcGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL2VzL2luY28va21zL2xpdGUvdjEva21zX3NlcnZpY2VfcGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUVBQWlFO0FBQ2pFLG9HQUFvRztBQUNwRyxvQkFBb0I7QUFHcEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbEYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR3pEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQVksYUFBYSxDQUNyRSxRQUFRLENBQUMsNDBHQUE0MEcsRUFBRSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztBQVV4M0c7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQStCLGFBQWEsQ0FDM0UsV0FBVyxDQUFDLGlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBZ0JwRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBZ0MsYUFBYSxDQUM3RSxXQUFXLENBQUMsaUNBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUF5RXBEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUF1QyxhQUFhLENBQzNGLFdBQVcsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQXlFcEQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQTRDLGFBQWEsQ0FDckcsV0FBVyxDQUFDLGlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBMEJwRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBNkMsYUFBYSxDQUN2RyxXQUFXLENBQUMsaUNBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFpQnBEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFzQyxhQUFhLENBQ3pGLFdBQVcsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQWlCcEQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQTJDLGFBQWEsQ0FDbkcsV0FBVyxDQUFDLGlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBc0dwRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBdUMsYUFBYSxDQUMzRixXQUFXLENBQUMsaUNBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFpQnBEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUF3QyxhQUFhLENBQzdGLFdBQVcsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQWlCcEQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQXVDLGFBQWEsQ0FDM0YsV0FBVyxDQUFDLGlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBdUJwRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBNEMsYUFBYSxDQUNyRyxXQUFXLENBQUMsaUNBQWlDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFnQnJEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUF3QyxhQUFhLENBQzdGLFdBQVcsQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQWdCckQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUEwQixhQUFhLENBQ2pFLFdBQVcsQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQXVCckQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQTZCLGFBQWEsQ0FDdkUsV0FBVyxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBNENyRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBNkIsYUFBYSxDQUN2RSxXQUFXLENBQUMsaUNBQWlDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUE2RXJEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFzQyxhQUFhLENBQ3pGLFdBQVcsQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVyRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FzRWxCLGFBQWEsQ0FDaEIsV0FBVyxDQUFDLGlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFDIn0=
|
|
@@ -107,9 +107,9 @@ export type TeeKeys = Message<"inco.sealingfetcher.v1.TeeKeys"> & {
|
|
|
107
107
|
*/
|
|
108
108
|
eoaPrivkey: Uint8Array;
|
|
109
109
|
/**
|
|
110
|
-
* The Network private key that the TEE generated during the bootstrap process.
|
|
111
|
-
* This is
|
|
112
|
-
*
|
|
110
|
+
* The Network private key (X-Wing) that the TEE generated during the bootstrap process.
|
|
111
|
+
* This is a 32-byte seed used to derive the X-Wing keypair for input encryption.
|
|
112
|
+
* X-Wing is a post-quantum hybrid KEM combining ML-KEM-768 and X25519.
|
|
113
113
|
*
|
|
114
114
|
* @generated from field: bytes network_privkey = 2;
|
|
115
115
|
*/
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Address } from 'viem';
|
|
2
2
|
import type { DecryptionAttestation, EncryptedDecryptionAttestation } from '../attesteddecrypt/types.js';
|
|
3
|
-
import type {
|
|
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,9 +29,9 @@ 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
|
|
33
|
-
attestedReveal(request: AttestedRevealRequest, backoffConfig?: Partial<BackoffConfig>): Promise<(DecryptionAttestation<
|
|
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>>;
|
|
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.
|
|
36
37
|
* Returns results with both the response and signer address.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { bytesToBigInt, bytesToHex, parseHex, } from '../binary.js';
|
|
2
2
|
import { bigintToPlaintext, encryptionSchemes, } from '../encryption/encryption.js';
|
|
3
3
|
import { getHandleType } from '../handle.js';
|
|
4
|
+
import { decrypt } from '../lite/xwing.js';
|
|
4
5
|
import { retryWithBackoff } from '../retry.js';
|
|
5
6
|
import { getKmsClient } from './client.js';
|
|
6
7
|
import { executeWithThreshold } from './thresholdPromises.js';
|
|
@@ -78,7 +79,7 @@ export class KmsQuorumClient {
|
|
|
78
79
|
}
|
|
79
80
|
return new KmsQuorumClient(kmsClients, threshold);
|
|
80
81
|
}
|
|
81
|
-
async attestedDecrypt(request, backoffConfig) {
|
|
82
|
+
async attestedDecrypt(request, backoffConfig, reencryptKeypair) {
|
|
82
83
|
const thresholdResults = await this.executeKmsOperationWithThreshold(async (kms) => {
|
|
83
84
|
return await kms.client.attestedDecrypt(request);
|
|
84
85
|
}, backoffConfig);
|
|
@@ -86,10 +87,10 @@ export class KmsQuorumClient {
|
|
|
86
87
|
const thresholdResponses = thresholdResults.map((r) => r.response);
|
|
87
88
|
const signers = thresholdResults.map((r) => r.signer);
|
|
88
89
|
// Verify that responses are consistent across quorum (plaintext or ciphertext)
|
|
89
|
-
const reference = this.verifyResponseConsistency(thresholdResponses);
|
|
90
|
+
const reference = await this.verifyResponseConsistency(thresholdResponses, reencryptKeypair);
|
|
90
91
|
return this.buildAggregatedAttestations(reference, thresholdResponses, signers);
|
|
91
92
|
}
|
|
92
|
-
async attestedCompute(request, backoffConfig) {
|
|
93
|
+
async attestedCompute(request, backoffConfig, reencryptKeypair) {
|
|
93
94
|
const thresholdResults = await this.executeKmsOperationWithThreshold(async (kms) => {
|
|
94
95
|
return await kms.client.attestedCompute(request);
|
|
95
96
|
}, backoffConfig);
|
|
@@ -97,7 +98,7 @@ export class KmsQuorumClient {
|
|
|
97
98
|
const thresholdResponses = thresholdResults.map((r) => r.response);
|
|
98
99
|
const signers = thresholdResults.map((r) => r.signer);
|
|
99
100
|
// Verify that responses are consistent across quorum
|
|
100
|
-
const reference = this.verifyComputeResponseConsistency(thresholdResponses, request);
|
|
101
|
+
const reference = await this.verifyComputeResponseConsistency(thresholdResponses, request, reencryptKeypair);
|
|
101
102
|
return this.buildAggregatedComputeAttestation(reference, thresholdResponses, signers);
|
|
102
103
|
}
|
|
103
104
|
async attestedReveal(request, backoffConfig) {
|
|
@@ -107,8 +108,8 @@ export class KmsQuorumClient {
|
|
|
107
108
|
// Extract responses and signers
|
|
108
109
|
const thresholdResponses = thresholdResults.map((r) => r.response);
|
|
109
110
|
const signers = thresholdResults.map((r) => r.signer);
|
|
110
|
-
// Verify that responses are consistent across quorum (plaintext
|
|
111
|
-
const reference = this.verifyResponseConsistency(thresholdResponses);
|
|
111
|
+
// Verify that responses are consistent across quorum (plaintext only for reveal)
|
|
112
|
+
const reference = await this.verifyResponseConsistency(thresholdResponses);
|
|
112
113
|
return this.buildAggregatedAttestations(reference, thresholdResponses, signers);
|
|
113
114
|
}
|
|
114
115
|
/**
|
|
@@ -165,7 +166,7 @@ export class KmsQuorumClient {
|
|
|
165
166
|
const handle = decryptionAttestation.handle;
|
|
166
167
|
const handleType = getHandleType(handle);
|
|
167
168
|
const bigIntValue = bytesToBigInt(plaintextBytes);
|
|
168
|
-
const plaintext = bigintToPlaintext(encryptionSchemes.
|
|
169
|
+
const plaintext = bigintToPlaintext(encryptionSchemes.xwing, handleType, bigIntValue);
|
|
169
170
|
return {
|
|
170
171
|
handle,
|
|
171
172
|
plaintext,
|
|
@@ -205,7 +206,7 @@ export class KmsQuorumClient {
|
|
|
205
206
|
encryptedPlaintext: {
|
|
206
207
|
ciphertext: {
|
|
207
208
|
value: bytesToHex(ct),
|
|
208
|
-
scheme:
|
|
209
|
+
scheme: 2, // EncryptionScheme: XWING
|
|
209
210
|
type: fheType,
|
|
210
211
|
},
|
|
211
212
|
},
|
|
@@ -262,7 +263,7 @@ export class KmsQuorumClient {
|
|
|
262
263
|
encryptedPlaintext: {
|
|
263
264
|
ciphertext: {
|
|
264
265
|
value: bytesToHex(ct),
|
|
265
|
-
scheme:
|
|
266
|
+
scheme: encryptionSchemes.xwing, // EncryptionScheme: ECIES
|
|
266
267
|
type: fheType,
|
|
267
268
|
},
|
|
268
269
|
},
|
|
@@ -272,7 +273,7 @@ export class KmsQuorumClient {
|
|
|
272
273
|
}
|
|
273
274
|
throw new Error(`Unexpected attestation type: ${refAtt.value.case}, expected 'plaintext' or 'reencryption'`);
|
|
274
275
|
}
|
|
275
|
-
verifyResponseConsistency(thresholdResponses) {
|
|
276
|
+
async verifyResponseConsistency(thresholdResponses, reencryptKeypair) {
|
|
276
277
|
if (thresholdResponses.length === 0) {
|
|
277
278
|
throw new Error('No responses collected to verify');
|
|
278
279
|
}
|
|
@@ -304,7 +305,7 @@ export class KmsQuorumClient {
|
|
|
304
305
|
this.verifyPlaintextConsistency(i, reference, thresholdResponses);
|
|
305
306
|
}
|
|
306
307
|
else if (refCase === 'reencryption') {
|
|
307
|
-
this.verifyCiphertextConsistency(i, reference, thresholdResponses);
|
|
308
|
+
await this.verifyCiphertextConsistency(i, reference, thresholdResponses, reencryptKeypair);
|
|
308
309
|
}
|
|
309
310
|
else {
|
|
310
311
|
throw new Error(`Unexpected attestation type: ${refCase}, expected 'plaintext' or 'reencryption'`);
|
|
@@ -312,7 +313,7 @@ export class KmsQuorumClient {
|
|
|
312
313
|
}
|
|
313
314
|
return reference;
|
|
314
315
|
}
|
|
315
|
-
verifyComputeResponseConsistency(thresholdResponses, request) {
|
|
316
|
+
async verifyComputeResponseConsistency(thresholdResponses, request, reencryptKeypair) {
|
|
316
317
|
if (thresholdResponses.length === 0) {
|
|
317
318
|
throw new Error('No responses collected to verify');
|
|
318
319
|
}
|
|
@@ -377,7 +378,7 @@ export class KmsQuorumClient {
|
|
|
377
378
|
this.verifyPlaintextBytesConsistency(refBytes, bytes);
|
|
378
379
|
}
|
|
379
380
|
else if (refCase === 'reencryption') {
|
|
380
|
-
if (!refCt ||
|
|
381
|
+
if (!refCt || refFheType === undefined) {
|
|
381
382
|
throw new Error('No reference reencryption data to compare');
|
|
382
383
|
}
|
|
383
384
|
if (att.value.case !== 'reencryption') {
|
|
@@ -393,14 +394,15 @@ export class KmsQuorumClient {
|
|
|
393
394
|
if (fheType !== refFheType) {
|
|
394
395
|
throw new Error('FHE types differ across KMS responses');
|
|
395
396
|
}
|
|
396
|
-
// Verify
|
|
397
|
-
if (
|
|
398
|
-
throw new Error('
|
|
397
|
+
// Verify handles match
|
|
398
|
+
if (att.handle !== refAtt.handle) {
|
|
399
|
+
throw new Error('Handles differ across KMS responses');
|
|
399
400
|
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
401
|
+
// If keypair provided, decrypt and verify plaintext consistency
|
|
402
|
+
if (reencryptKeypair) {
|
|
403
|
+
const refPlaintext = await decrypt(reencryptKeypair, refCt);
|
|
404
|
+
const plaintext = await decrypt(reencryptKeypair, ct);
|
|
405
|
+
this.verifyPlaintextBytesConsistency(refPlaintext, plaintext);
|
|
404
406
|
}
|
|
405
407
|
}
|
|
406
408
|
}
|
|
@@ -411,7 +413,7 @@ export class KmsQuorumClient {
|
|
|
411
413
|
*/
|
|
412
414
|
verifyPlaintextBytesConsistency(refBytes, bytes) {
|
|
413
415
|
if (refBytes.length !== bytes.length) {
|
|
414
|
-
throw new Error('Plaintexts differ across KMS responses');
|
|
416
|
+
throw new Error('Plaintexts length differ across KMS responses');
|
|
415
417
|
}
|
|
416
418
|
for (let b = 0; b < refBytes.length; b++) {
|
|
417
419
|
if (refBytes[b] !== bytes[b]) {
|
|
@@ -434,7 +436,7 @@ export class KmsQuorumClient {
|
|
|
434
436
|
this.verifyPlaintextBytesConsistency(refBytes, bytes);
|
|
435
437
|
}
|
|
436
438
|
}
|
|
437
|
-
verifyCiphertextConsistency(index, reference, thresholdResponses) {
|
|
439
|
+
async verifyCiphertextConsistency(index, reference, thresholdResponses, reencryptKeypair) {
|
|
438
440
|
const refAtt = reference.decryptionAttestations[index];
|
|
439
441
|
if (refAtt.value?.case !== 'reencryption') {
|
|
440
442
|
throw new Error('Expected reencryption attestation');
|
|
@@ -460,16 +462,17 @@ export class KmsQuorumClient {
|
|
|
460
462
|
if (fheType !== refFheType) {
|
|
461
463
|
throw new Error('FHE types differ across KMS responses');
|
|
462
464
|
}
|
|
463
|
-
// Verify
|
|
464
|
-
if (
|
|
465
|
-
throw new Error('
|
|
465
|
+
// Verify handles match
|
|
466
|
+
if (att.handle !== refAtt.handle) {
|
|
467
|
+
throw new Error('Handles differ across KMS responses');
|
|
466
468
|
}
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
469
|
+
// If keypair provided, decrypt and verify plaintext consistency
|
|
470
|
+
if (reencryptKeypair) {
|
|
471
|
+
const refPlaintext = await decrypt(reencryptKeypair, refCt);
|
|
472
|
+
const plaintext = await decrypt(reencryptKeypair, ct);
|
|
473
|
+
this.verifyPlaintextBytesConsistency(refPlaintext, plaintext);
|
|
471
474
|
}
|
|
472
475
|
}
|
|
473
476
|
}
|
|
474
477
|
}
|
|
475
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvcnVtQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ttcy9xdW9ydW1DbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUNMLGFBQWEsRUFDYixVQUFVLEVBQ1YsUUFBUSxHQUVULE1BQU0sY0FBYyxDQUFDO0FBTXRCLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsaUJBQWlCLEdBQ2xCLE1BQU0sNkJBQTZCLENBQUM7QUFVckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBa0IsTUFBTSxhQUFhLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFPOUQsTUFBTSxPQUFPLGVBQWU7SUFDVCxJQUFJLENBQVE7SUFDWixTQUFTLENBQVM7SUFRbkMsaUJBQWlCO0lBQ2pCLFlBQ0Usa0JBQW9FLEVBQ3BFLFNBQWlCO1FBRWpCLElBQUksa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzRCxNQUFNLElBQUksS0FBSyxDQUNiLG1DQUFtQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FDL0QsQ0FBQztRQUNKLENBQUM7UUFFRCwyRkFBMkY7UUFDM0YsSUFDRSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM3QixpQkFBaUIsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFDMUMsQ0FBQztZQUNELDBCQUEwQjtZQUMxQixNQUFNLFVBQVUsR0FBRyxrQkFBaUMsQ0FBQztZ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
|
|
478
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvcnVtQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ttcy9xdW9ydW1DbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUNMLGFBQWEsRUFDYixVQUFVLEVBQ1YsUUFBUSxHQUVULE1BQU0sY0FBYyxDQUFDO0FBTXRCLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsaUJBQWlCLEdBQ2xCLE1BQU0sNkJBQTZCLENBQUM7QUFVckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQWtCLE1BQU0sYUFBYSxDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBTzlELE1BQU0sT0FBTyxlQUFlO0lBQ1QsSUFBSSxDQUFRO0lBQ1osU0FBUyxDQUFTO0lBUW5DLGlCQUFpQjtJQUNqQixZQUNFLGtCQUFvRSxFQUNwRSxTQUFpQjtRQUVqQixJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FDYixtQ0FBbUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQy9ELENBQUM7UUFDSixDQUFDO1FBRUQsMkZBQTJGO1FBQzNGLElBQ0Usa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDN0IsaUJBQWlCLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQzFDLENBQUM7WUFD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
|
package/dist/esm/lite/index.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ export type { HandleWithProof } from '../generated/es/inco/kms/lite/v1/types_pb.
|
|
|
4
4
|
export * from './attested-compute.js';
|
|
5
5
|
export * from './attested-decrypt.js';
|
|
6
6
|
export * from './deployments.js';
|
|
7
|
-
export * from './ecies.js';
|
|
8
7
|
export * from './hadu.js';
|
|
9
8
|
export * from './lightning.js';
|
|
9
|
+
export { TEST_NETWORK_SEED_KEY, TEST_NETWORK_XWING_PUBKEY, XWING_PUBLIC_KEY_SIZE, decodeXwingPrivateKey, decodeXwingPublicKey, decrypt, deriveXwingKeypairFromSeed, encodeXwingPublicKey, encrypt, generateXwingKeypair, getXwingDecryptor, getXwingEncryptor, type XwingDecryptorArgs, type XwingEncryptorArgs, type XwingKeypair, } from './xwing.js';
|
package/dist/esm/lite/index.js
CHANGED
|
@@ -2,7 +2,7 @@ export * from '../generated/abis/lightning.js';
|
|
|
2
2
|
export * from './attested-compute.js';
|
|
3
3
|
export * from './attested-decrypt.js';
|
|
4
4
|
export * from './deployments.js';
|
|
5
|
-
export * from './ecies.js';
|
|
6
5
|
export * from './hadu.js';
|
|
7
6
|
export * from './lightning.js';
|
|
8
|
-
|
|
7
|
+
export { TEST_NETWORK_SEED_KEY, TEST_NETWORK_XWING_PUBKEY, XWING_PUBLIC_KEY_SIZE, decodeXwingPrivateKey, decodeXwingPublicKey, decrypt, deriveXwingKeypairFromSeed, encodeXwingPublicKey, encrypt, generateXwingKeypair, getXwingDecryptor, getXwingEncryptor, } from './xwing.js';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdDQUFnQyxDQUFDO0FBTy9DLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsT0FBTyxFQUNMLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLDBCQUEwQixFQUMxQixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsaUJBQWlCLEdBSWxCLE1BQU0sWUFBWSxDQUFDIn0=
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { Account, Chain, GetContractReturnType, PublicClient, Transport, WalletClient } from 'viem';
|
|
2
|
+
import type { PrivateKeyAccount } from 'viem/accounts';
|
|
2
3
|
import { AllowanceVoucherWithSig } from '../advancedacl/types.js';
|
|
3
4
|
import { AttestedComputeOP } from '../attestedcompute/types.js';
|
|
4
5
|
import { DecryptionAttestation, EncryptedDecryptionAttestation } from '../attesteddecrypt/index.js';
|
|
5
6
|
import { Address, HexString } from '../binary.js';
|
|
6
|
-
import {
|
|
7
|
+
import { EncryptionScheme, SupportedFheType } from '../encryption/index.js';
|
|
7
8
|
import { incoVerifierAbi } from '../generated/abis/verifier.js';
|
|
8
9
|
import { lightningDeployments } from '../generated/lightning.js';
|
|
9
10
|
import { localNodeLightningConfig } from '../generated/local-node.js';
|
|
10
11
|
import { FheType } from '../handle.js';
|
|
11
12
|
import { LocalNodeEnv } from '../local/index.js';
|
|
12
13
|
import { BackoffConfig } from '../retry.js';
|
|
13
|
-
import {
|
|
14
|
+
import { XwingKeypair } from './xwing.js';
|
|
14
15
|
type TupleToUnion<T> = T extends readonly unknown[] ? T[number] : never;
|
|
15
16
|
type Deployment = TupleToUnion<typeof lightningDeployments>;
|
|
16
17
|
type DistributedPick<T, K> = T extends any ? Pick<T, Extract<keyof T, K>> : never;
|
|
@@ -59,10 +60,17 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
|
|
|
59
60
|
private readonly networkPubkey;
|
|
60
61
|
readonly executorAddress: Address;
|
|
61
62
|
readonly chainId: bigint;
|
|
62
|
-
private readonly ephemeralKeypair;
|
|
63
63
|
private readonly kmsQuorumClient;
|
|
64
|
-
private
|
|
64
|
+
private encryptor;
|
|
65
|
+
private encryptionScheme;
|
|
65
66
|
private constructor();
|
|
67
|
+
private getEncryptor;
|
|
68
|
+
/**
|
|
69
|
+
* Get the encryption scheme version used by this Lightning instance.
|
|
70
|
+
* Returns 1 for ECIES or 2 for X-Wing.
|
|
71
|
+
* This is a convenience method to get the encryption scheme used by this Lightning instance.
|
|
72
|
+
*/
|
|
73
|
+
getEncryptionScheme(): Promise<EncryptionScheme>;
|
|
66
74
|
/**
|
|
67
75
|
* Get a Lightning instance bound to the latest Lightning deployment for the Base Sepolia testnet.
|
|
68
76
|
*/
|
|
@@ -121,7 +129,8 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
|
|
|
121
129
|
static latest<P extends Pepper>(pepper: P, chainId: ChainId): Promise<Lightning<Deployment>>;
|
|
122
130
|
get deployment(): T;
|
|
123
131
|
/**
|
|
124
|
-
* Encrypt a value using the public
|
|
132
|
+
* Encrypt a value using the network's public key (ECIES or X-Wing).
|
|
133
|
+
* The encryption scheme is automatically detected based on the public key length.
|
|
125
134
|
*
|
|
126
135
|
* @param value a boolean or numeric value to encrypt
|
|
127
136
|
* @param accountAddress the address of the account interacting with the dapp contract, normally an Externally Owned Account (EOA)
|
|
@@ -224,13 +233,13 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
|
|
|
224
233
|
* console.log(decrypted[0].plaintext.value);
|
|
225
234
|
* ```
|
|
226
235
|
*/
|
|
227
|
-
attestedDecrypt(walletClient: WalletClient<Transport, Chain, Account>, handles: HexString[], backoffConfig?: Partial<BackoffConfig>): Promise<Array<DecryptionAttestation<
|
|
228
|
-
attestedDecrypt(walletClient: WalletClient<Transport, Chain, Account>, handles: HexString[], reencryptPubKey: Uint8Array, backoffConfig?: Partial<BackoffConfig>): Promise<Array<EncryptedDecryptionAttestation<
|
|
229
|
-
attestedDecrypt(walletClient: WalletClient<Transport, Chain, Account>, handles: HexString[], reencryptPubKey: Uint8Array, reencryptKeypair:
|
|
236
|
+
attestedDecrypt(walletClient: WalletClient<Transport, Chain, Account>, handles: HexString[], backoffConfig?: Partial<BackoffConfig>): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
|
|
237
|
+
attestedDecrypt(walletClient: WalletClient<Transport, Chain, Account>, handles: HexString[], reencryptPubKey: Uint8Array, backoffConfig?: Partial<BackoffConfig>): Promise<Array<EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
|
|
238
|
+
attestedDecrypt(walletClient: WalletClient<Transport, Chain, Account>, handles: HexString[], reencryptPubKey: Uint8Array, reencryptKeypair: XwingKeypair, backoffConfig?: Partial<BackoffConfig>): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
|
|
230
239
|
/**
|
|
231
240
|
* Requests attested decrypts using a voucher-backed session key.
|
|
232
241
|
*
|
|
233
|
-
* @param
|
|
242
|
+
* @param ephemeralAccount Session Account matching the voucher grantee.
|
|
234
243
|
* @param allowanceVoucherWithSig Signed allowance voucher.
|
|
235
244
|
* @param ethClient - A public eth client or eth wallet client used for signing the attested decrypt request
|
|
236
245
|
* @param handles Handles to decrypt.
|
|
@@ -239,7 +248,7 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
|
|
|
239
248
|
* @example Plaintext results
|
|
240
249
|
* ```ts
|
|
241
250
|
* const attestations = await lightning.attestedDecryptWithVoucher(
|
|
242
|
-
*
|
|
251
|
+
* ephemeralAccount,
|
|
243
252
|
* voucher,
|
|
244
253
|
* ethClient,
|
|
245
254
|
* [handle],
|
|
@@ -249,7 +258,7 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
|
|
|
249
258
|
* @example Reencrypt for a delegate
|
|
250
259
|
* ```ts
|
|
251
260
|
* const encrypted = await lightning.attestedDecryptWithVoucher(
|
|
252
|
-
*
|
|
261
|
+
* ephemeralAccount,
|
|
253
262
|
* voucher,
|
|
254
263
|
* ethClient,
|
|
255
264
|
* [handle],
|
|
@@ -257,9 +266,9 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
|
|
|
257
266
|
* );
|
|
258
267
|
* ```
|
|
259
268
|
*/
|
|
260
|
-
attestedDecryptWithVoucher(
|
|
261
|
-
attestedDecryptWithVoucher(
|
|
262
|
-
attestedDecryptWithVoucher(
|
|
269
|
+
attestedDecryptWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, ethClient: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account>, handles: HexString[], requesterArgData?: HexString, backoffConfig?: Partial<BackoffConfig>): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
|
|
270
|
+
attestedDecryptWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, ethClient: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account>, handles: HexString[], reencryptPubKey: Uint8Array, requesterArgData?: HexString, backoffConfig?: Partial<BackoffConfig>): Promise<Array<EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
|
|
271
|
+
attestedDecryptWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, ethClient: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account>, handles: HexString[], reencryptPubKey: Uint8Array, reencryptKeypair: XwingKeypair, requesterArgData?: HexString, backoffConfig?: Partial<BackoffConfig>): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
|
|
263
272
|
/**
|
|
264
273
|
* Get an attested compute for the given wallet client.
|
|
265
274
|
*
|
|
@@ -305,16 +314,16 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
|
|
|
305
314
|
* console.log(decrypted.plaintext.value);
|
|
306
315
|
* ```
|
|
307
316
|
*/
|
|
308
|
-
attestedCompute(walletClient: WalletClient<Transport, Chain, Account>, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, backoffConfig?: Partial<BackoffConfig>): Promise<DecryptionAttestation<
|
|
309
|
-
attestedCompute(walletClient: WalletClient<Transport, Chain, Account>, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, reencryptPubKey: Uint8Array, backoffConfig?: Partial<BackoffConfig>): Promise<EncryptedDecryptionAttestation<
|
|
310
|
-
attestedCompute(walletClient: WalletClient<Transport, Chain, Account>, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, reencryptPubKey: Uint8Array, reencryptKeypair:
|
|
317
|
+
attestedCompute(walletClient: WalletClient<Transport, Chain, Account>, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, backoffConfig?: Partial<BackoffConfig>): Promise<DecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
318
|
+
attestedCompute(walletClient: WalletClient<Transport, Chain, Account>, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, reencryptPubKey: Uint8Array, backoffConfig?: Partial<BackoffConfig>): Promise<EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
319
|
+
attestedCompute(walletClient: WalletClient<Transport, Chain, Account>, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, reencryptPubKey: Uint8Array, reencryptKeypair: XwingKeypair, backoffConfig?: Partial<BackoffConfig>): Promise<DecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
311
320
|
/**
|
|
312
321
|
* Performs attested compute via a voucher-backed session key.
|
|
313
322
|
*
|
|
314
323
|
* @example Plaintext result
|
|
315
324
|
* ```ts
|
|
316
325
|
* const attestation = await lightning.attestedComputeWithVoucher(
|
|
317
|
-
*
|
|
326
|
+
* ephemeralAccount,
|
|
318
327
|
* voucher,
|
|
319
328
|
* ethClient,
|
|
320
329
|
* lhsHandle,
|
|
@@ -326,7 +335,7 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
|
|
|
326
335
|
* @example Reencrypt for a delegate
|
|
327
336
|
* ```ts
|
|
328
337
|
* const encrypted = await lightning.attestedComputeWithVoucher(
|
|
329
|
-
*
|
|
338
|
+
* ephemeralAccount,
|
|
330
339
|
* voucher,
|
|
331
340
|
* lhsHandle,
|
|
332
341
|
* AttestedComputeSupportedOps.Eq,
|
|
@@ -339,7 +348,7 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
|
|
|
339
348
|
* @example Reencrypt and decrypt locally
|
|
340
349
|
* ```ts
|
|
341
350
|
* const decrypted = await lightning.attestedComputeWithVoucher(
|
|
342
|
-
*
|
|
351
|
+
* ephemeralAccount,
|
|
343
352
|
* voucher,
|
|
344
353
|
* lhsHandle,
|
|
345
354
|
* AttestedComputeSupportedOps.Eq,
|
|
@@ -350,9 +359,9 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
|
|
|
350
359
|
* console.log(decrypted.plaintext.value);
|
|
351
360
|
* ```
|
|
352
361
|
*/
|
|
353
|
-
attestedComputeWithVoucher(
|
|
354
|
-
attestedComputeWithVoucher(
|
|
355
|
-
attestedComputeWithVoucher(
|
|
362
|
+
attestedComputeWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, ethClient: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account>, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, requesterArgData?: HexString, backoffConfig?: Partial<BackoffConfig>): Promise<DecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
363
|
+
attestedComputeWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, ethClient: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account>, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, reencryptPubKey: Uint8Array, requesterArgData?: HexString, backoffConfig?: Partial<BackoffConfig>): Promise<EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
364
|
+
attestedComputeWithVoucher(ephemeralAccount: PrivateKeyAccount, allowanceVoucherWithSig: AllowanceVoucherWithSig, ethClient: PublicClient<Transport, Chain> | WalletClient<Transport, Chain, Account>, lhsHandle: HexString, op: AttestedComputeOP, rhsPlaintext: bigint | boolean, reencryptPubKey: Uint8Array, reencryptKeypair: XwingKeypair, requesterArgData?: HexString, backoffConfig?: Partial<BackoffConfig>): Promise<DecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
356
365
|
/**
|
|
357
366
|
* Get an decryption of publicly revealed handles.
|
|
358
367
|
*
|
|
@@ -366,7 +375,7 @@ export declare class Lightning<T extends DeploymentSlice = DeploymentSlice> {
|
|
|
366
375
|
* const { plaintext, covalidatorSignature } = response[0];
|
|
367
376
|
* ```
|
|
368
377
|
*/
|
|
369
|
-
attestedReveal(handles: HexString[], backoffConfig?: Partial<BackoffConfig>): Promise<Array<DecryptionAttestation<
|
|
378
|
+
attestedReveal(handles: HexString[], backoffConfig?: Partial<BackoffConfig>): Promise<Array<DecryptionAttestation<EncryptionScheme, SupportedFheType>>>;
|
|
370
379
|
/**
|
|
371
380
|
* Get the GRPC endpoint for the covalidator that services this deployment.
|
|
372
381
|
*/
|