@inco/js 0.6.9 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/dist/cjs/advancedacl/session-key.d.ts +39 -26
- package/dist/cjs/advancedacl/session-key.js +53 -136
- package/dist/cjs/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/cjs/attestedcompute/attested-compute.js +5 -35
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +36 -21
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +107 -108
- package/dist/cjs/attesteddecrypt/types.d.ts +4 -4
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +15 -1
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +1 -1
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +13 -5
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +3 -4
- package/dist/cjs/generated/lightning.d.ts +40 -0
- package/dist/cjs/generated/lightning.js +43 -1
- package/dist/cjs/generated/local-node.d.ts +11 -7
- package/dist/cjs/generated/local-node.js +28 -8
- package/dist/cjs/kms/client.d.ts +8 -4
- package/dist/cjs/kms/client.js +9 -4
- package/dist/cjs/kms/quorumClient.d.ts +58 -0
- package/dist/cjs/kms/quorumClient.js +378 -0
- package/dist/cjs/kms/thresholdPromises.d.ts +7 -0
- package/dist/cjs/kms/thresholdPromises.js +52 -0
- package/dist/cjs/lite/ecies.d.ts +2 -0
- package/dist/cjs/lite/ecies.js +5 -2
- package/dist/cjs/lite/index.d.ts +0 -1
- package/dist/cjs/lite/index.js +1 -2
- package/dist/cjs/lite/lightning.d.ts +110 -74
- package/dist/cjs/lite/lightning.js +272 -127
- package/dist/cjs/local/local-node.d.ts +1 -2
- package/dist/cjs/local/local-node.js +2 -3
- package/dist/cjs/test/mocks.d.ts +3 -0
- package/dist/cjs/test/mocks.js +19 -1
- package/dist/cjs/viem.d.ts +2 -4
- package/dist/cjs/viem.js +6 -2
- package/dist/esm/advancedacl/session-key.d.ts +39 -26
- package/dist/esm/advancedacl/session-key.js +44 -126
- package/dist/esm/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/esm/attestedcompute/attested-compute.js +6 -36
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +36 -21
- package/dist/esm/attesteddecrypt/attested-decrypt.js +106 -108
- package/dist/esm/attesteddecrypt/types.d.ts +4 -4
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +15 -1
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +1 -1
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +13 -5
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +2 -3
- package/dist/esm/generated/lightning.d.ts +40 -0
- package/dist/esm/generated/lightning.js +43 -1
- package/dist/esm/generated/local-node.d.ts +11 -7
- package/dist/esm/generated/local-node.js +28 -8
- package/dist/esm/kms/client.d.ts +8 -4
- package/dist/esm/kms/client.js +8 -4
- package/dist/esm/kms/quorumClient.d.ts +58 -0
- package/dist/esm/kms/quorumClient.js +374 -0
- package/dist/esm/kms/thresholdPromises.d.ts +7 -0
- package/dist/esm/kms/thresholdPromises.js +49 -0
- package/dist/esm/lite/ecies.d.ts +2 -0
- package/dist/esm/lite/ecies.js +4 -2
- package/dist/esm/lite/index.d.ts +0 -1
- package/dist/esm/lite/index.js +1 -2
- package/dist/esm/lite/lightning.d.ts +110 -74
- package/dist/esm/lite/lightning.js +276 -131
- package/dist/esm/local/local-node.d.ts +1 -2
- package/dist/esm/local/local-node.js +2 -3
- package/dist/esm/test/mocks.d.ts +3 -0
- package/dist/esm/test/mocks.js +17 -1
- package/dist/esm/viem.d.ts +2 -4
- package/dist/esm/viem.js +6 -2
- package/dist/types/advancedacl/session-key.d.ts +39 -26
- package/dist/types/attestedcompute/attested-compute.d.ts +6 -6
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +36 -21
- package/dist/types/attesteddecrypt/types.d.ts +4 -4
- package/dist/types/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +15 -1
- package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +13 -5
- package/dist/types/generated/lightning.d.ts +40 -0
- package/dist/types/generated/local-node.d.ts +11 -7
- package/dist/types/kms/client.d.ts +8 -4
- package/dist/types/kms/quorumClient.d.ts +58 -0
- package/dist/types/kms/thresholdPromises.d.ts +7 -0
- package/dist/types/lite/ecies.d.ts +2 -0
- package/dist/types/lite/index.d.ts +0 -1
- package/dist/types/lite/lightning.d.ts +110 -74
- package/dist/types/local/local-node.d.ts +1 -2
- package/dist/types/test/mocks.d.ts +3 -0
- package/dist/types/viem.d.ts +2 -4
- package/package.json +6 -3
- package/dist/cjs/attestedreveal/attested-reveal.d.ts +0 -21
- package/dist/cjs/attestedreveal/attested-reveal.js +0 -69
- package/dist/cjs/attestedreveal/index.d.ts +0 -1
- package/dist/cjs/attestedreveal/index.js +0 -18
- package/dist/cjs/attestedreveal/types.d.ts +0 -7
- package/dist/cjs/attestedreveal/types.js +0 -16
- package/dist/cjs/generated/es/cosmos_proto/cosmos_pb.d.ts +0 -174
- package/dist/cjs/generated/es/cosmos_proto/cosmos_pb.js +0 -118
- package/dist/cjs/generated/es/inco/fhe/v1/types_pb.d.ts +0 -419
- package/dist/cjs/generated/es/inco/fhe/v1/types_pb.js +0 -136
- package/dist/cjs/lite/reencrypt.d.ts +0 -21
- package/dist/cjs/lite/reencrypt.js +0 -141
- package/dist/esm/attestedreveal/attested-reveal.d.ts +0 -21
- package/dist/esm/attestedreveal/attested-reveal.js +0 -66
- package/dist/esm/attestedreveal/index.d.ts +0 -1
- package/dist/esm/attestedreveal/index.js +0 -2
- package/dist/esm/attestedreveal/types.d.ts +0 -7
- package/dist/esm/attestedreveal/types.js +0 -12
- package/dist/esm/generated/es/cosmos_proto/cosmos_pb.d.ts +0 -174
- package/dist/esm/generated/es/cosmos_proto/cosmos_pb.js +0 -115
- package/dist/esm/generated/es/inco/fhe/v1/types_pb.d.ts +0 -419
- package/dist/esm/generated/es/inco/fhe/v1/types_pb.js +0 -133
- package/dist/esm/lite/reencrypt.d.ts +0 -21
- package/dist/esm/lite/reencrypt.js +0 -131
- package/dist/types/attestedreveal/attested-reveal.d.ts +0 -21
- package/dist/types/attestedreveal/index.d.ts +0 -1
- package/dist/types/attestedreveal/types.d.ts +0 -7
- package/dist/types/generated/es/cosmos_proto/cosmos_pb.d.ts +0 -174
- package/dist/types/generated/es/inco/fhe/v1/types_pb.d.ts +0 -419
- package/dist/types/lite/reencrypt.d.ts +0 -21
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KmsQuorumClient = void 0;
|
|
4
|
+
const binary_js_1 = require("../binary.js");
|
|
5
|
+
const encryption_js_1 = require("../encryption/encryption.js");
|
|
6
|
+
const handle_js_1 = require("../handle.js");
|
|
7
|
+
const retry_js_1 = require("../retry.js");
|
|
8
|
+
const client_js_1 = require("./client.js");
|
|
9
|
+
const thresholdPromises_js_1 = require("./thresholdPromises.js");
|
|
10
|
+
class KmsQuorumClient {
|
|
11
|
+
kmss;
|
|
12
|
+
threshold;
|
|
13
|
+
// Implementation
|
|
14
|
+
constructor(attestersOrClients, threshold) {
|
|
15
|
+
if (attestersOrClients.length === 0) {
|
|
16
|
+
throw new Error('At least one attester or KMS client is required');
|
|
17
|
+
}
|
|
18
|
+
if (threshold < 1 || threshold > attestersOrClients.length) {
|
|
19
|
+
throw new Error(`Threshold must be between 1 and ${attestersOrClients.length}`);
|
|
20
|
+
}
|
|
21
|
+
// Check if first element is a KmsClient (has attestedDecrypt method) or an attester object
|
|
22
|
+
if (attestersOrClients.length > 0 &&
|
|
23
|
+
'attestedDecrypt' in attestersOrClients[0]) {
|
|
24
|
+
// Handle KmsClient[] case
|
|
25
|
+
const kmsClients = attestersOrClients;
|
|
26
|
+
this.kmss = kmsClients.map((client) => ({
|
|
27
|
+
client,
|
|
28
|
+
signer: client.signerAddress,
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// Handle { url: string; signer: Address }[] case
|
|
33
|
+
const attesters = attestersOrClients;
|
|
34
|
+
this.kmss = attesters.map((attester) => {
|
|
35
|
+
return {
|
|
36
|
+
client: (0, client_js_1.getKmsClient)(attester.url, attester.signer),
|
|
37
|
+
signer: attester.signer,
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
this.threshold = threshold;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Creates a KmsQuorumClient from an array of URLs.
|
|
45
|
+
* Requires signer addresses and threshold to be explicitly provided.
|
|
46
|
+
*
|
|
47
|
+
* @param urls - Array of KMS endpoint URLs
|
|
48
|
+
* @param signers - Array of signer addresses, must match the length of URLs
|
|
49
|
+
* @param threshold - Number of successful responses required (must be between 1 and urls.length)
|
|
50
|
+
* @throws {Error} If URLs array is empty, signers length doesn't match URLs length, or threshold is invalid
|
|
51
|
+
*/
|
|
52
|
+
static fromUrls(urls, signers, threshold) {
|
|
53
|
+
if (urls.length === 0) {
|
|
54
|
+
throw new Error('At least one URL is required');
|
|
55
|
+
}
|
|
56
|
+
if (signers.length !== urls.length) {
|
|
57
|
+
throw new Error(`Signers array length (${signers.length}) must match URLs array length (${urls.length})`);
|
|
58
|
+
}
|
|
59
|
+
if (threshold < 1 || threshold > urls.length) {
|
|
60
|
+
throw new Error(`Threshold must be between 1 and ${urls.length} (number of URLs)`);
|
|
61
|
+
}
|
|
62
|
+
const attesters = urls.map((url, index) => {
|
|
63
|
+
return { url, signer: signers[index] };
|
|
64
|
+
});
|
|
65
|
+
return new KmsQuorumClient(attesters, threshold);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Creates a KmsQuorumClient from an array of KmsClient instances.
|
|
69
|
+
* Each KmsClient must have a signerAddress property.
|
|
70
|
+
*
|
|
71
|
+
* @param kmsClients - Array of KMS client instances
|
|
72
|
+
* @param threshold - Number of successful responses required (must be between 1 and kmsClients.length)
|
|
73
|
+
* @throws {Error} If KMS clients array is empty or threshold is invalid
|
|
74
|
+
*/
|
|
75
|
+
static fromKmsClients(kmsClients, threshold) {
|
|
76
|
+
if (kmsClients.length === 0) {
|
|
77
|
+
throw new Error('At least one KMS client is required');
|
|
78
|
+
}
|
|
79
|
+
if (threshold < 1 || threshold > kmsClients.length) {
|
|
80
|
+
throw new Error(`Threshold must be between 1 and ${kmsClients.length} (number of KMS clients)`);
|
|
81
|
+
}
|
|
82
|
+
return new KmsQuorumClient(kmsClients, threshold);
|
|
83
|
+
}
|
|
84
|
+
async attestedDecrypt(request, backoffConfig) {
|
|
85
|
+
const thresholdResults = await this.executeKmsOperationWithThreshold(async (kms) => {
|
|
86
|
+
return await kms.client.attestedDecrypt(request);
|
|
87
|
+
}, backoffConfig);
|
|
88
|
+
// Extract responses and signers
|
|
89
|
+
const thresholdResponses = thresholdResults.map((r) => r.response);
|
|
90
|
+
const signers = thresholdResults.map((r) => r.signer);
|
|
91
|
+
// Verify that responses are consistent across quorum (plaintext or ciphertext)
|
|
92
|
+
const reference = this.verifyResponseConsistency(thresholdResponses);
|
|
93
|
+
return this.buildAggregatedAttestations(reference, thresholdResponses, signers);
|
|
94
|
+
}
|
|
95
|
+
async attestedCompute(request, backoffConfig) {
|
|
96
|
+
const thresholdResults = await this.executeKmsOperationWithThreshold(async (kms) => {
|
|
97
|
+
return await kms.client.attestedCompute(request);
|
|
98
|
+
}, backoffConfig);
|
|
99
|
+
// Extract responses and signers
|
|
100
|
+
const thresholdResponses = thresholdResults.map((r) => r.response);
|
|
101
|
+
const signers = thresholdResults.map((r) => r.signer);
|
|
102
|
+
// Verify that responses are consistent across quorum
|
|
103
|
+
const reference = this.verifyComputeResponseConsistency(thresholdResponses);
|
|
104
|
+
return this.buildAggregatedComputeAttestation(reference, thresholdResponses, signers);
|
|
105
|
+
}
|
|
106
|
+
async attestedReveal(request, backoffConfig) {
|
|
107
|
+
const thresholdResults = await this.executeKmsOperationWithThreshold(async (kms) => {
|
|
108
|
+
return await kms.client.attestedReveal(request);
|
|
109
|
+
}, backoffConfig);
|
|
110
|
+
// Extract responses and signers
|
|
111
|
+
const thresholdResponses = thresholdResults.map((r) => r.response);
|
|
112
|
+
const signers = thresholdResults.map((r) => r.signer);
|
|
113
|
+
// Verify that responses are consistent across quorum (plaintext or ciphertext)
|
|
114
|
+
const reference = this.verifyResponseConsistency(thresholdResponses);
|
|
115
|
+
return this.buildAggregatedAttestations(reference, thresholdResponses, signers);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Generic method to execute a KMS operation across all clients with retry and threshold logic.
|
|
119
|
+
* Returns results with both the response and signer address.
|
|
120
|
+
*/
|
|
121
|
+
async executeKmsOperationWithThreshold(operation, backoffConfig) {
|
|
122
|
+
// Create promises for all KMS clients, tracking signer addresses
|
|
123
|
+
// Each client call is wrapped with retry logic
|
|
124
|
+
const promises = this.kmss.map(async (kms, index) => {
|
|
125
|
+
try {
|
|
126
|
+
const response = await (0, retry_js_1.retryWithBackoff)(async () => {
|
|
127
|
+
return await operation(kms);
|
|
128
|
+
}, backoffConfig);
|
|
129
|
+
return { response, signer: kms.signer };
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
throw new Error(`KMS client ${index} failed: ${error}`);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
return await (0, thresholdPromises_js_1.executeWithThreshold)(promises, this.threshold);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Collects signatures from responses and sorts them by signer address (ascending).
|
|
139
|
+
* This is required by SignatureVerifier.
|
|
140
|
+
*/
|
|
141
|
+
collectAndSortSignatures(signatures, signers) {
|
|
142
|
+
const signaturesWithSigners = signatures.map((signature, idx) => ({
|
|
143
|
+
signature,
|
|
144
|
+
signer: signers[idx],
|
|
145
|
+
}));
|
|
146
|
+
// Sort by signer address in ascending order (as required by SignatureVerifier)
|
|
147
|
+
signaturesWithSigners.sort((a, b) => {
|
|
148
|
+
const aBigInt = BigInt(a.signer);
|
|
149
|
+
const bBigInt = BigInt(b.signer);
|
|
150
|
+
if (aBigInt < bBigInt)
|
|
151
|
+
return -1;
|
|
152
|
+
if (aBigInt > bBigInt)
|
|
153
|
+
return 1;
|
|
154
|
+
return 0;
|
|
155
|
+
});
|
|
156
|
+
// Extract sorted signatures
|
|
157
|
+
return signaturesWithSigners.map((item) => item.signature);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Builds a plaintext attestation from a DecryptionAttestation proto message.
|
|
161
|
+
*/
|
|
162
|
+
buildPlaintextAttestation(decryptionAttestation, covalidatorSignatures) {
|
|
163
|
+
if (!decryptionAttestation.value ||
|
|
164
|
+
decryptionAttestation.value.case !== 'plaintext') {
|
|
165
|
+
throw new Error('Expected plaintext attestation');
|
|
166
|
+
}
|
|
167
|
+
const plaintextBytes = decryptionAttestation.value.value.value;
|
|
168
|
+
const handle = decryptionAttestation.handle;
|
|
169
|
+
const handleType = (0, handle_js_1.getHandleType)(handle);
|
|
170
|
+
const bigIntValue = (0, binary_js_1.bytesToBigInt)(plaintextBytes);
|
|
171
|
+
const plaintext = (0, encryption_js_1.bigintToPlaintext)(encryption_js_1.encryptionSchemes.ecies, handleType, bigIntValue);
|
|
172
|
+
return {
|
|
173
|
+
handle,
|
|
174
|
+
plaintext,
|
|
175
|
+
covalidatorSignatures,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
buildAggregatedAttestations(reference, thresholdResponses, signers) {
|
|
179
|
+
const attestationCount = reference.decryptionAttestations.length;
|
|
180
|
+
return new Array(attestationCount).fill(undefined).map((_, i) => {
|
|
181
|
+
const refAtt = reference.decryptionAttestations[i];
|
|
182
|
+
if (!refAtt.value) {
|
|
183
|
+
throw new Error('No value in attestation');
|
|
184
|
+
}
|
|
185
|
+
// Collect signatures and sort by signer address
|
|
186
|
+
const signatures = thresholdResponses.map((resp) => resp.decryptionAttestations[i].signature);
|
|
187
|
+
const covalidatorSignatures = this.collectAndSortSignatures(signatures, signers);
|
|
188
|
+
if (refAtt.value.case === 'plaintext') {
|
|
189
|
+
return this.buildPlaintextAttestation(refAtt, covalidatorSignatures);
|
|
190
|
+
}
|
|
191
|
+
else if (refAtt.value.case === 'reencryption') {
|
|
192
|
+
const reencryption = refAtt.value.value;
|
|
193
|
+
const ct = reencryption.userCiphertext;
|
|
194
|
+
const fheType = (0, handle_js_1.getHandleType)((0, binary_js_1.parseHex)(reencryption.handle));
|
|
195
|
+
return {
|
|
196
|
+
handle: refAtt.handle,
|
|
197
|
+
encryptedPlaintext: {
|
|
198
|
+
ciphertext: {
|
|
199
|
+
value: (0, binary_js_1.bytesToHex)(ct),
|
|
200
|
+
scheme: 1, // EciesScheme
|
|
201
|
+
type: fheType,
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
covalidatorSignatures,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
throw new Error(`Unexpected attestation type: ${refAtt.value.case}, expected 'plaintext' or 'reencryption'`);
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
buildAggregatedComputeAttestation(reference, thresholdResponses, signers) {
|
|
213
|
+
const refAtt = reference.decryptionAttestation;
|
|
214
|
+
if (!refAtt) {
|
|
215
|
+
throw new Error('No decryption attestation in reference response');
|
|
216
|
+
}
|
|
217
|
+
if (!refAtt.value) {
|
|
218
|
+
throw new Error('No value in reference attestation');
|
|
219
|
+
}
|
|
220
|
+
if (refAtt.value.case !== 'plaintext') {
|
|
221
|
+
throw new Error(`Unexpected attestation type: ${refAtt.value.case}, expected 'plaintext'`);
|
|
222
|
+
}
|
|
223
|
+
// Collect signatures and sort by signer address
|
|
224
|
+
// We know all responses have decryption attestations from verifyComputeResponseConsistency
|
|
225
|
+
const signatures = [];
|
|
226
|
+
for (const resp of thresholdResponses) {
|
|
227
|
+
const att = resp.decryptionAttestation;
|
|
228
|
+
if (att) {
|
|
229
|
+
signatures.push(att.signature);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const covalidatorSignatures = this.collectAndSortSignatures(signatures, signers);
|
|
233
|
+
return this.buildPlaintextAttestation(refAtt, covalidatorSignatures);
|
|
234
|
+
}
|
|
235
|
+
verifyResponseConsistency(thresholdResponses) {
|
|
236
|
+
if (thresholdResponses.length === 0) {
|
|
237
|
+
throw new Error('No responses collected to verify');
|
|
238
|
+
}
|
|
239
|
+
const reference = thresholdResponses[0];
|
|
240
|
+
for (let r = 1; r < thresholdResponses.length; r++) {
|
|
241
|
+
if (thresholdResponses[r].decryptionAttestations.length !==
|
|
242
|
+
reference.decryptionAttestations.length) {
|
|
243
|
+
throw new Error('Inconsistent number of decryption attestations across KMS responses');
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
for (let i = 0; i < reference.decryptionAttestations.length; i++) {
|
|
247
|
+
const refAtt = reference.decryptionAttestations[i];
|
|
248
|
+
if (!refAtt.value) {
|
|
249
|
+
throw new Error('No value in reference attestation');
|
|
250
|
+
}
|
|
251
|
+
const refCase = refAtt.value.case;
|
|
252
|
+
// Verify that all responses have the same case (plaintext or reencryption)
|
|
253
|
+
for (let r = 1; r < thresholdResponses.length; r++) {
|
|
254
|
+
const att = thresholdResponses[r].decryptionAttestations[i];
|
|
255
|
+
if (!att.value) {
|
|
256
|
+
throw new Error('No value in attestation');
|
|
257
|
+
}
|
|
258
|
+
if (att.value.case !== refCase) {
|
|
259
|
+
throw new Error(`Inconsistent attestation types: reference has '${refCase}' but response ${r} has '${att.value.case}'`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Verify consistency based on the case
|
|
263
|
+
if (refCase === 'plaintext') {
|
|
264
|
+
this.verifyPlaintextConsistency(i, reference, thresholdResponses);
|
|
265
|
+
}
|
|
266
|
+
else if (refCase === 'reencryption') {
|
|
267
|
+
this.verifyCiphertextConsistency(i, reference, thresholdResponses);
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
throw new Error(`Unexpected attestation type: ${refCase}, expected 'plaintext' or 'reencryption'`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return reference;
|
|
274
|
+
}
|
|
275
|
+
verifyComputeResponseConsistency(thresholdResponses) {
|
|
276
|
+
if (thresholdResponses.length === 0) {
|
|
277
|
+
throw new Error('No responses collected to verify');
|
|
278
|
+
}
|
|
279
|
+
const reference = thresholdResponses[0];
|
|
280
|
+
const refAtt = reference.decryptionAttestation;
|
|
281
|
+
if (!refAtt) {
|
|
282
|
+
throw new Error('No decryption attestation in reference response');
|
|
283
|
+
}
|
|
284
|
+
if (!refAtt.value) {
|
|
285
|
+
throw new Error('No value in reference attestation');
|
|
286
|
+
}
|
|
287
|
+
if (refAtt.value.case !== 'plaintext') {
|
|
288
|
+
throw new Error(`Unexpected attestation type: ${refAtt.value.case}, expected 'plaintext'`);
|
|
289
|
+
}
|
|
290
|
+
// Verify that all responses have a decryption attestation
|
|
291
|
+
for (let r = 1; r < thresholdResponses.length; r++) {
|
|
292
|
+
const att = thresholdResponses[r].decryptionAttestation;
|
|
293
|
+
if (!att) {
|
|
294
|
+
throw new Error('No decryption attestation in response');
|
|
295
|
+
}
|
|
296
|
+
if (!att.value) {
|
|
297
|
+
throw new Error('No value in attestation');
|
|
298
|
+
}
|
|
299
|
+
if (att.value.case !== 'plaintext') {
|
|
300
|
+
throw new Error('Expected plaintext attestation but received non-plaintext');
|
|
301
|
+
}
|
|
302
|
+
// Verify handles match
|
|
303
|
+
if (att.handle !== refAtt.handle) {
|
|
304
|
+
throw new Error('Handles differ across KMS responses');
|
|
305
|
+
}
|
|
306
|
+
// Verify plaintext values match
|
|
307
|
+
this.verifyPlaintextBytesConsistency(refAtt.value.value.value, att.value.value.value);
|
|
308
|
+
}
|
|
309
|
+
return reference;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Verifies that two plaintext byte arrays are identical.
|
|
313
|
+
*/
|
|
314
|
+
verifyPlaintextBytesConsistency(refBytes, bytes) {
|
|
315
|
+
if (refBytes.length !== bytes.length) {
|
|
316
|
+
throw new Error('Plaintexts differ across KMS responses');
|
|
317
|
+
}
|
|
318
|
+
for (let b = 0; b < refBytes.length; b++) {
|
|
319
|
+
if (refBytes[b] !== bytes[b]) {
|
|
320
|
+
throw new Error('Plaintexts differ across KMS responses');
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
verifyPlaintextConsistency(index, reference, thresholdResponses) {
|
|
325
|
+
const refAtt = reference.decryptionAttestations[index];
|
|
326
|
+
if (refAtt.value?.case !== 'plaintext') {
|
|
327
|
+
throw new Error('Expected plaintext attestation');
|
|
328
|
+
}
|
|
329
|
+
const refBytes = refAtt.value.value.value;
|
|
330
|
+
for (let r = 1; r < thresholdResponses.length; r++) {
|
|
331
|
+
const att = thresholdResponses[r].decryptionAttestations[index];
|
|
332
|
+
if (att.value?.case !== 'plaintext') {
|
|
333
|
+
throw new Error('Expected plaintext attestation but received non-plaintext');
|
|
334
|
+
}
|
|
335
|
+
const bytes = att.value.value.value;
|
|
336
|
+
this.verifyPlaintextBytesConsistency(refBytes, bytes);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
verifyCiphertextConsistency(index, reference, thresholdResponses) {
|
|
340
|
+
const refAtt = reference.decryptionAttestations[index];
|
|
341
|
+
if (refAtt.value?.case !== 'reencryption') {
|
|
342
|
+
throw new Error('Expected reencryption attestation');
|
|
343
|
+
}
|
|
344
|
+
const refReencryption = refAtt.value.value;
|
|
345
|
+
const refCt = refReencryption.userCiphertext;
|
|
346
|
+
if (!refCt) {
|
|
347
|
+
throw new Error('No ciphertext in reference reencryption');
|
|
348
|
+
}
|
|
349
|
+
const refFheType = (0, handle_js_1.getHandleType)((0, binary_js_1.parseHex)(refReencryption.handle));
|
|
350
|
+
for (let r = 1; r < thresholdResponses.length; r++) {
|
|
351
|
+
const att = thresholdResponses[r].decryptionAttestations[index];
|
|
352
|
+
if (att.value?.case !== 'reencryption') {
|
|
353
|
+
throw new Error('Expected reencryption attestation but received non-reencryption');
|
|
354
|
+
}
|
|
355
|
+
const reencryption = att.value.value;
|
|
356
|
+
const ct = reencryption.userCiphertext;
|
|
357
|
+
if (!ct) {
|
|
358
|
+
throw new Error('No ciphertext in reencryption');
|
|
359
|
+
}
|
|
360
|
+
const fheType = (0, handle_js_1.getHandleType)((0, binary_js_1.parseHex)(reencryption.handle));
|
|
361
|
+
// Verify FHE type matches
|
|
362
|
+
if (fheType !== refFheType) {
|
|
363
|
+
throw new Error('FHE types differ across KMS responses');
|
|
364
|
+
}
|
|
365
|
+
// Verify ciphertext bytes match
|
|
366
|
+
if (refCt.length !== ct.length) {
|
|
367
|
+
throw new Error('Ciphertexts differ across KMS responses');
|
|
368
|
+
}
|
|
369
|
+
for (let b = 0; b < refCt.length; b++) {
|
|
370
|
+
if (refCt[b] !== ct[b]) {
|
|
371
|
+
throw new Error('Ciphertexts differ across KMS responses');
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
exports.KmsQuorumClient = KmsQuorumClient;
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvcnVtQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ttcy9xdW9ydW1DbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsNENBS3NCO0FBTXRCLCtEQUdxQztBQVVyQyw0Q0FBNkM7QUFFN0MsMENBQStDO0FBQy9DLDJDQUEyRDtBQUMzRCxpRUFBOEQ7QUFPOUQsTUFBYSxlQUFlO0lBQ1QsSUFBSSxDQUFRO0lBQ1osU0FBUyxDQUFTO0lBUW5DLGlCQUFpQjtJQUNqQixZQUNFLGtCQUFvRSxFQUNwRSxTQUFpQjtRQUVqQixJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FDYixtQ0FBbUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQy9ELENBQUM7UUFDSixDQUFDO1FBRUQsMkZBQTJGO1FBQzNGLElBQ0Usa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDN0IsaUJBQWlCLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQzFDLENBQUM7WUFDRCwwQkFBMEI7WUFDMUIsTUFBTSxVQUFVLEdBQUcsa0JBQWlDLENBQUM7WUFDckQsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNO2dCQUNOLE1BQU0sRUFBRSxNQUFNLENBQUMsYUFBYTthQUM3QixDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ04saURBQWlEO1lBQ2pELE1BQU0sU0FBUyxHQUFHLGtCQUdmLENBQUM7WUFDSixJQUFJLENB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
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Executes promises and returns results as soon as threshold is reached
|
|
3
|
+
* @param promises Array of promises to execute
|
|
4
|
+
* @param threshold Number of successful responses needed
|
|
5
|
+
* @returns Promise that resolves with threshold number of results
|
|
6
|
+
*/
|
|
7
|
+
export declare function executeWithThreshold<T>(promises: Promise<T>[], threshold: number): Promise<T[]>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executeWithThreshold = executeWithThreshold;
|
|
4
|
+
/**
|
|
5
|
+
* Executes promises and returns results as soon as threshold is reached
|
|
6
|
+
* @param promises Array of promises to execute
|
|
7
|
+
* @param threshold Number of successful responses needed
|
|
8
|
+
* @returns Promise that resolves with threshold number of results
|
|
9
|
+
*/
|
|
10
|
+
async function executeWithThreshold(promises, threshold) {
|
|
11
|
+
if (threshold < 0) {
|
|
12
|
+
throw new Error('Threshold cannot be negative');
|
|
13
|
+
}
|
|
14
|
+
// If threshold is 0, resolve immediately.
|
|
15
|
+
if (threshold === 0) {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
if (promises.length === 0 && threshold > 0) {
|
|
19
|
+
throw new Error('Cannot reach positive threshold with no promises');
|
|
20
|
+
}
|
|
21
|
+
if (threshold > promises.length) {
|
|
22
|
+
throw new Error(`Threshold ${threshold} exceeds number of promises ${promises.length}`);
|
|
23
|
+
}
|
|
24
|
+
const results = [];
|
|
25
|
+
let failures = 0;
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
promises.forEach((promise) => {
|
|
28
|
+
promise
|
|
29
|
+
.then((response) => {
|
|
30
|
+
if (results.length < threshold) {
|
|
31
|
+
results.push(response);
|
|
32
|
+
if (results.length === threshold) {
|
|
33
|
+
resolve(results);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
})
|
|
37
|
+
.catch((error) => {
|
|
38
|
+
console.error(`Error executing promise: ${error}`);
|
|
39
|
+
failures++;
|
|
40
|
+
// Check if we can still reach the threshold
|
|
41
|
+
// We need (threshold - results.length) more successes
|
|
42
|
+
// from (promises.length - results.length - failures) remaining promises
|
|
43
|
+
const remainingPromises = promises.length - results.length - failures;
|
|
44
|
+
const neededSuccesses = threshold - results.length;
|
|
45
|
+
if (remainingPromises < neededSuccesses) {
|
|
46
|
+
reject(new Error(`Cannot reach threshold of ${threshold} responses. Failed clients exceed limit.`));
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZXNob2xkUHJvbWlzZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMva21zL3RocmVzaG9sZFByb21pc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsb0RBb0RDO0FBMUREOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLG9CQUFvQixDQUN4QyxRQUFzQixFQUN0QixTQUFpQjtJQUVqQixJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELDBDQUEwQztJQUMxQyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNwQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLGFBQWEsU0FBUywrQkFBK0IsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUN2RSxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFRLEVBQUUsQ0FBQztJQUN4QixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFakIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDM0IsT0FBTztpQkFDSixJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO29CQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2QixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQ2pDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDbkIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQ25ELFFBQVEsRUFBRSxDQUFDO2dCQUNYLDRDQUE0QztnQkFDNUMsc0RBQXNEO2dCQUN0RCx3RUFBd0U7Z0JBQ3hFLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztnQkFDdEUsTUFBTSxlQUFlLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ25ELElBQUksaUJBQWlCLEdBQUcsZUFBZSxFQUFFLENBQUM7b0JBQ3hDLE1BQU0sQ0FDSixJQUFJLEtBQUssQ0FDUCw2QkFBNkIsU0FBUywwQ0FBMEMsQ0FDakYsQ0FDRixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=
|
package/dist/cjs/lite/ecies.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as ellipticPkg from 'elliptic';
|
|
2
2
|
import { Decryptor, EciesScheme, Encryptor } from '../encryption/encryption.js';
|
|
3
3
|
import { PubKeyEncodable } from '../reencryption/index.js';
|
|
4
|
+
export declare const TEST_ECIES_PUB_KEY = "0x02516bda9e68a1c3dce74dc1b6ed7d91a91d51c1e1933947f06331cef59631e9eb";
|
|
5
|
+
export declare const TEST_ECIES_PRIVATE_KEY = "0x384a707568ab63ad2ad9f10135faa0699801db3174f33f7846badc11affb8f57";
|
|
4
6
|
export interface Secp256k1Keypair extends PubKeyEncodable {
|
|
5
7
|
scheme: EciesScheme;
|
|
6
8
|
kp: ellipticPkg.ec.KeyPair;
|
package/dist/cjs/lite/ecies.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TEST_ECIES_PRIVATE_KEY = exports.TEST_ECIES_PUB_KEY = void 0;
|
|
3
4
|
exports.toSecp256k1Keypair = toSecp256k1Keypair;
|
|
4
5
|
exports.generateSecp256k1Keypair = generateSecp256k1Keypair;
|
|
5
6
|
exports.encodeSecp256k1PublicKey = encodeSecp256k1PublicKey;
|
|
@@ -17,6 +18,8 @@ const handle_js_1 = require("../handle.js");
|
|
|
17
18
|
const schema_js_1 = require("../schema.js");
|
|
18
19
|
const hadu_js_1 = require("./hadu.js");
|
|
19
20
|
const secp256k1 = new ellipticPkg.ec('secp256k1');
|
|
21
|
+
exports.TEST_ECIES_PUB_KEY = '0x02516bda9e68a1c3dce74dc1b6ed7d91a91d51c1e1933947f06331cef59631e9eb';
|
|
22
|
+
exports.TEST_ECIES_PRIVATE_KEY = '0x384a707568ab63ad2ad9f10135faa0699801db3174f33f7846badc11affb8f57';
|
|
20
23
|
// Convert an ec.KeyPair from the 'elliptic' package (assumed to have geen generated
|
|
21
24
|
// with the secp256k1 curve) to our Secp256k1Keypair type.
|
|
22
25
|
function toSecp256k1Keypair(kp) {
|
|
@@ -120,7 +123,7 @@ async function decrypt(privKeyA, ciphertext) {
|
|
|
120
123
|
}
|
|
121
124
|
function getEciesDecryptor({ privKeyA, }) {
|
|
122
125
|
const privKeyABuffer = privKeyA.kp.getPrivate().toArrayLike(Buffer, 'be', 32);
|
|
123
|
-
return async ({ scheme,
|
|
126
|
+
return async ({ scheme, value, }) => {
|
|
124
127
|
if (scheme !== encryption_js_1.encryptionSchemes.ecies) {
|
|
125
128
|
throw new Error(`Ciphertext with scheme ${(0, encryption_js_1.getEncryptionSchemeName)(scheme)} cannot be decrypted with ECIES`);
|
|
126
129
|
}
|
|
@@ -143,4 +146,4 @@ function getEciesDecryptor({ privKeyA, }) {
|
|
|
143
146
|
return (0, encryption_js_1.bytesToPlaintext)(computable.value.value, encryption_js_1.encryptionSchemes.ecies, typ);
|
|
144
147
|
};
|
|
145
148
|
}
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS9lY2llcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF3Q0EsZ0RBVUM7QUFHRCw0REFFQztBQUdELDREQUVDO0FBR0QsNERBSUM7QUFzQkQsOERBSUM7QUFNRCwwQkFhQztBQU9ELDhDQStDQztBQUtELDBCQU9DO0FBTUQsOENBMkNDO0FBbk9ELDJDQUE4RTtBQUM5RSx3Q0FBd0M7QUFDeEMsNENBQXlFO0FBQ3pFLCtEQWNxQztBQUNyQyw0Q0FBK0Q7QUFFL0QsNENBQXFDO0FBQ3JDLHVDQUFxRDtBQUVyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFckMsUUFBQSxrQkFBa0IsR0FDN0Isc0VBQXNFLENBQUM7QUFDNUQsUUFBQSxzQkFBc0IsR0FDakMsb0VBQW9FLENBQUM7QUFVdkUsb0ZBQW9GO0FBQ3BGLDBEQUEwRDtBQUMxRCxTQUFnQixrQkFBa0IsQ0FDaEMsRUFBMEI7SUFFMUIsT0FBTztRQUNMLE1BQU0sRUFBRSxpQ0FBaUIsQ0FBQyxLQUFLO1FBQy9CLEVBQUU7UUFDRixlQUFlO1lBQ2IsT0FBTyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxTQUFnQix3QkFBd0I7SUFDdEMsT0FBTyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLFNBQWdCLHdCQUF3QixDQUFDLEdBQW9CO0lBQzNELE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQztB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
|
package/dist/cjs/lite/index.d.ts
CHANGED
package/dist/cjs/lite/index.js
CHANGED
|
@@ -21,5 +21,4 @@ __exportStar(require("./deployments.js"), exports);
|
|
|
21
21
|
__exportStar(require("./ecies.js"), exports);
|
|
22
22
|
__exportStar(require("./hadu.js"), exports);
|
|
23
23
|
__exportStar(require("./lightning.js"), exports);
|
|
24
|
-
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUVBQStDO0FBTy9DLHdEQUFzQztBQUN0Qyx3REFBc0M7QUFDdEMsbURBQWlDO0FBQ2pDLDZDQUEyQjtBQUMzQiw0Q0FBMEI7QUFDMUIsaURBQStCO0FBQy9CLGlEQUErQiJ9
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUVBQStDO0FBTy9DLHdEQUFzQztBQUN0Qyx3REFBc0M7QUFDdEMsbURBQWlDO0FBQ2pDLDZDQUEyQjtBQUMzQiw0Q0FBMEI7QUFDMUIsaURBQStCIn0=
|