@inco/js 0.8.0-devnet-13 → 0.8.0-devnet-22
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 +18 -76
- package/dist/cjs/advancedacl/session-key.d.ts +1 -1
- package/dist/cjs/advancedacl/session-key.js +3 -2
- package/dist/cjs/attestedcompute/attested-compute.js +5 -2
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +5 -1
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +14 -4
- package/dist/cjs/binary.d.ts +2 -4
- package/dist/cjs/binary.js +11 -6
- package/dist/cjs/encryption/index.d.ts +1 -1
- package/dist/cjs/encryption/index.js +17 -16
- package/dist/cjs/generated/abis/lightning.d.ts +70 -17
- package/dist/cjs/generated/abis/lightning.js +44 -19
- package/dist/cjs/generated/abis/test-elist.d.ts +10 -2
- package/dist/cjs/generated/abis/test-elist.js +8 -3
- package/dist/cjs/generated/abis/verifier.d.ts +78 -4
- package/dist/cjs/generated/abis/verifier.js +49 -4
- package/dist/cjs/generated/lightning.d.ts +60 -0
- package/dist/cjs/generated/lightning.js +64 -1
- package/dist/cjs/generated/local-node.d.ts +4 -4
- package/dist/cjs/generated/local-node.js +4 -4
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +11 -2
- package/dist/cjs/kms/quorumClient.d.ts +5 -13
- package/dist/cjs/kms/quorumClient.js +74 -259
- package/dist/cjs/kms/quorumConsistency.d.ts +58 -0
- package/dist/cjs/kms/quorumConsistency.js +200 -0
- package/dist/cjs/kms/signatureVerification.d.ts +35 -0
- package/dist/cjs/kms/signatureVerification.js +88 -0
- package/dist/cjs/kms/thresholdPromises.d.ts +4 -3
- package/dist/cjs/kms/thresholdPromises.js +25 -15
- package/dist/cjs/lite/hadu.d.ts +1 -1
- package/dist/cjs/lite/hadu.js +3 -3
- package/dist/cjs/lite/index.d.ts +0 -2
- package/dist/cjs/lite/index.js +1 -15
- package/dist/cjs/lite/lightning.d.ts +1 -1
- package/dist/cjs/lite/lightning.js +14 -33
- package/dist/esm/advancedacl/session-key.d.ts +1 -1
- package/dist/esm/advancedacl/session-key.js +3 -2
- package/dist/esm/attestedcompute/attested-compute.js +6 -3
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +5 -1
- package/dist/esm/attesteddecrypt/attested-decrypt.js +15 -5
- package/dist/esm/binary.d.ts +2 -4
- package/dist/esm/binary.js +11 -6
- package/dist/esm/encryption/index.d.ts +1 -1
- package/dist/esm/encryption/index.js +2 -2
- package/dist/esm/generated/abis/lightning.d.ts +70 -17
- package/dist/esm/generated/abis/lightning.js +44 -19
- package/dist/esm/generated/abis/test-elist.d.ts +10 -2
- package/dist/esm/generated/abis/test-elist.js +8 -3
- package/dist/esm/generated/abis/verifier.d.ts +78 -4
- package/dist/esm/generated/abis/verifier.js +49 -4
- package/dist/esm/generated/lightning.d.ts +60 -0
- package/dist/esm/generated/lightning.js +64 -1
- package/dist/esm/generated/local-node.d.ts +4 -4
- package/dist/esm/generated/local-node.js +4 -4
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/kms/quorumClient.d.ts +5 -13
- package/dist/esm/kms/quorumClient.js +74 -259
- package/dist/esm/kms/quorumConsistency.d.ts +58 -0
- package/dist/esm/kms/quorumConsistency.js +193 -0
- package/dist/esm/kms/signatureVerification.d.ts +35 -0
- package/dist/esm/kms/signatureVerification.js +84 -0
- package/dist/esm/kms/thresholdPromises.d.ts +4 -3
- package/dist/esm/kms/thresholdPromises.js +25 -15
- package/dist/esm/lite/hadu.d.ts +1 -1
- package/dist/esm/lite/hadu.js +2 -2
- package/dist/esm/lite/index.d.ts +0 -2
- package/dist/esm/lite/index.js +1 -3
- package/dist/esm/lite/lightning.d.ts +1 -1
- package/dist/esm/lite/lightning.js +8 -27
- package/dist/types/advancedacl/session-key.d.ts +1 -1
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +5 -1
- package/dist/types/binary.d.ts +2 -4
- package/dist/types/encryption/index.d.ts +1 -1
- package/dist/types/generated/abis/lightning.d.ts +70 -17
- package/dist/types/generated/abis/test-elist.d.ts +10 -2
- package/dist/types/generated/abis/verifier.d.ts +78 -4
- package/dist/types/generated/lightning.d.ts +60 -0
- package/dist/types/generated/local-node.d.ts +4 -4
- package/dist/types/index.d.ts +1 -1
- package/dist/types/kms/quorumClient.d.ts +5 -13
- package/dist/types/kms/quorumConsistency.d.ts +58 -0
- package/dist/types/kms/signatureVerification.d.ts +35 -0
- package/dist/types/kms/thresholdPromises.d.ts +4 -3
- package/dist/types/lite/hadu.d.ts +1 -1
- package/dist/types/lite/index.d.ts +0 -2
- package/dist/types/lite/lightning.d.ts +1 -1
- package/package.json +12 -12
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Address } from 'viem';
|
|
2
|
+
import type { AttestedComputeRequest, AttestedComputeResponse, AttestedDecryptResponse, AttestedRevealResponse, DecryptionAttestation as ProtoDecryptionAttestation } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
|
|
3
|
+
import type { XwingKeypair } from '../lite/xwing.js';
|
|
4
|
+
/**
|
|
5
|
+
* Computes a canonical key for a single attestation.
|
|
6
|
+
* For plaintext/reencryption+keypair, the key is handle:hex(value).
|
|
7
|
+
* For reencryption without a keypair (XWing ciphertexts are non-deterministic),
|
|
8
|
+
* falls back to handle:op-type as a structural stand-in.
|
|
9
|
+
*/
|
|
10
|
+
export declare function computeAttestationKey(att: ProtoDecryptionAttestation, reencryptKeypair?: XwingKeypair): Promise<string>;
|
|
11
|
+
/**
|
|
12
|
+
* Validates that all responses in a winning bucket have the same attestation
|
|
13
|
+
* count and types as the quorum-elected reference (bucket[0]).
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateDecryptResponseStructure<T extends AttestedDecryptResponse | AttestedRevealResponse>(bucket: Array<{
|
|
16
|
+
response: T;
|
|
17
|
+
signer: Address;
|
|
18
|
+
}>): void;
|
|
19
|
+
/**
|
|
20
|
+
* Validates that all responses in a winning bucket have a decryption
|
|
21
|
+
* attestation with the same case as the quorum-elected reference (bucket[0]),
|
|
22
|
+
* and that the case is consistent with the request's reencryptPubKey.
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateComputeResponseStructure(bucket: Array<{
|
|
25
|
+
response: AttestedComputeResponse;
|
|
26
|
+
signer: Address;
|
|
27
|
+
}>, request?: AttestedComputeRequest): void;
|
|
28
|
+
/**
|
|
29
|
+
* Verifies decrypt/reveal response consistency using hash-bucket voting.
|
|
30
|
+
* Collects all N responses, buckets them by content key, and returns the
|
|
31
|
+
* winning bucket (the first one with >= threshold votes).
|
|
32
|
+
*
|
|
33
|
+
* This is robust against a faulty first-responding node: even if responses[0]
|
|
34
|
+
* disagrees, a quorum of agreeing responses will form a winning bucket.
|
|
35
|
+
*/
|
|
36
|
+
export declare function verifyDecryptResponseConsistency<T extends AttestedDecryptResponse | AttestedRevealResponse>(allResults: Array<{
|
|
37
|
+
response: T;
|
|
38
|
+
signer: Address;
|
|
39
|
+
}>, threshold: number, reencryptKeypair?: XwingKeypair): Promise<{
|
|
40
|
+
reference: T;
|
|
41
|
+
winningResults: Array<{
|
|
42
|
+
response: T;
|
|
43
|
+
signer: Address;
|
|
44
|
+
}>;
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Verifies compute response consistency using hash-bucket voting.
|
|
48
|
+
*/
|
|
49
|
+
export declare function verifyComputeResponseConsistency(allResults: Array<{
|
|
50
|
+
response: AttestedComputeResponse;
|
|
51
|
+
signer: Address;
|
|
52
|
+
}>, threshold: number, request?: AttestedComputeRequest, reencryptKeypair?: XwingKeypair): Promise<{
|
|
53
|
+
reference: AttestedComputeResponse;
|
|
54
|
+
winningResults: Array<{
|
|
55
|
+
response: AttestedComputeResponse;
|
|
56
|
+
signer: Address;
|
|
57
|
+
}>;
|
|
58
|
+
}>;
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.computeAttestationKey = computeAttestationKey;
|
|
4
|
+
exports.validateDecryptResponseStructure = validateDecryptResponseStructure;
|
|
5
|
+
exports.validateComputeResponseStructure = validateComputeResponseStructure;
|
|
6
|
+
exports.verifyDecryptResponseConsistency = verifyDecryptResponseConsistency;
|
|
7
|
+
exports.verifyComputeResponseConsistency = verifyComputeResponseConsistency;
|
|
8
|
+
const binary_js_1 = require("../binary.js");
|
|
9
|
+
const handle_js_1 = require("../handle.js");
|
|
10
|
+
const xwing_js_1 = require("../lite/xwing.js");
|
|
11
|
+
/**
|
|
12
|
+
* Computes a canonical key for a single attestation.
|
|
13
|
+
* For plaintext/reencryption+keypair, the key is handle:hex(value).
|
|
14
|
+
* For reencryption without a keypair (XWing ciphertexts are non-deterministic),
|
|
15
|
+
* falls back to handle:op-type as a structural stand-in.
|
|
16
|
+
*/
|
|
17
|
+
async function computeAttestationKey(att, reencryptKeypair) {
|
|
18
|
+
if (!att.value)
|
|
19
|
+
throw new Error('No value in attestation');
|
|
20
|
+
if (att.value.case === 'plaintext') {
|
|
21
|
+
if (!att.value.value.value)
|
|
22
|
+
throw new Error('No plaintext value in attestation');
|
|
23
|
+
return att.handle + ':' + (0, binary_js_1.bytesToHex)(att.value.value.value);
|
|
24
|
+
}
|
|
25
|
+
if (att.value.case === 'reencryption') {
|
|
26
|
+
const ct = att.value.value.userCiphertext;
|
|
27
|
+
if (!ct)
|
|
28
|
+
throw new Error('No ciphertext in reencryption');
|
|
29
|
+
if (reencryptKeypair) {
|
|
30
|
+
return att.handle + ':' + (0, binary_js_1.bytesToHex)(await (0, xwing_js_1.decrypt)(reencryptKeypair, ct));
|
|
31
|
+
}
|
|
32
|
+
// Without a keypair, XWing ciphertexts are non-deterministic so we
|
|
33
|
+
// can only check structural equality (handle + op-type).
|
|
34
|
+
return att.handle + ':' + String((0, handle_js_1.getHandleType)((0, binary_js_1.parseHex)(att.handle)));
|
|
35
|
+
}
|
|
36
|
+
throw new Error(`Unexpected attestation type: ${att.value.case}, expected 'plaintext' or 'reencryption'`);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Validates that all responses in a winning bucket have the same attestation
|
|
40
|
+
* count and types as the quorum-elected reference (bucket[0]).
|
|
41
|
+
*/
|
|
42
|
+
function validateDecryptResponseStructure(bucket) {
|
|
43
|
+
const reference = bucket[0].response;
|
|
44
|
+
for (let r = 1; r < bucket.length; r++) {
|
|
45
|
+
if (bucket[r].response.decryptionAttestations.length !==
|
|
46
|
+
reference.decryptionAttestations.length) {
|
|
47
|
+
throw new Error('Inconsistent number of decryption attestations across KMS responses');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
for (let i = 0; i < reference.decryptionAttestations.length; i++) {
|
|
51
|
+
const refAtt = reference.decryptionAttestations[i];
|
|
52
|
+
const refCase = refAtt.value?.case;
|
|
53
|
+
if (!refCase) {
|
|
54
|
+
throw new Error('No value in reference attestation');
|
|
55
|
+
}
|
|
56
|
+
for (let r = 1; r < bucket.length; r++) {
|
|
57
|
+
const att = bucket[r].response.decryptionAttestations[i];
|
|
58
|
+
if (!att.value) {
|
|
59
|
+
throw new Error('No value in attestation');
|
|
60
|
+
}
|
|
61
|
+
// Defensive check: handles should match within a bucket (bucketing includes handle in key)
|
|
62
|
+
if (att.handle !== refAtt.handle) {
|
|
63
|
+
throw new Error(`Handle mismatch at attestation index ${i}: expected '${refAtt.handle}' but got '${att.handle}'`);
|
|
64
|
+
}
|
|
65
|
+
if (att.value.case !== refCase) {
|
|
66
|
+
throw new Error(`Inconsistent attestation types: reference has '${refCase}' but response ${r} has '${att.value.case}'`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Validates that all responses in a winning bucket have a decryption
|
|
73
|
+
* attestation with the same case as the quorum-elected reference (bucket[0]),
|
|
74
|
+
* and that the case is consistent with the request's reencryptPubKey.
|
|
75
|
+
*/
|
|
76
|
+
function validateComputeResponseStructure(bucket, request) {
|
|
77
|
+
const refAtt = bucket[0].response.decryptionAttestation;
|
|
78
|
+
if (!refAtt) {
|
|
79
|
+
throw new Error('No decryption attestation in reference response');
|
|
80
|
+
}
|
|
81
|
+
if (!refAtt.value) {
|
|
82
|
+
throw new Error('No value in reference attestation');
|
|
83
|
+
}
|
|
84
|
+
const refCase = refAtt.value.case;
|
|
85
|
+
const hasReencryptPubKey = request?.reencryptPubKey && request.reencryptPubKey.length > 0;
|
|
86
|
+
if (refCase === 'reencryption' && !hasReencryptPubKey) {
|
|
87
|
+
throw new Error("Unexpected attestation type: reencryption, expected 'plaintext'");
|
|
88
|
+
}
|
|
89
|
+
if (refCase !== 'plaintext' && refCase !== 'reencryption') {
|
|
90
|
+
throw new Error(`Unexpected attestation type: ${refCase}, expected 'plaintext' or 'reencryption'`);
|
|
91
|
+
}
|
|
92
|
+
for (let r = 1; r < bucket.length; r++) {
|
|
93
|
+
const att = bucket[r].response.decryptionAttestation;
|
|
94
|
+
if (!att)
|
|
95
|
+
throw new Error('No decryption attestation in response');
|
|
96
|
+
if (!att.value)
|
|
97
|
+
throw new Error('No value in attestation');
|
|
98
|
+
// Defensive check: handles should match within a bucket (bucketing includes handle in key)
|
|
99
|
+
if (att.handle !== refAtt.handle) {
|
|
100
|
+
throw new Error(`Handle mismatch: expected '${refAtt.handle}' but got '${att.handle}'`);
|
|
101
|
+
}
|
|
102
|
+
if (att.value.case !== refCase) {
|
|
103
|
+
throw new Error(`Inconsistent attestation types: reference has '${refCase}' but response ${r} has '${att.value.case}'`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async function computeDecryptResponseKey(response, reencryptKeypair) {
|
|
108
|
+
const keys = await Promise.all(response.decryptionAttestations.map((att) => computeAttestationKey(att, reencryptKeypair)));
|
|
109
|
+
return keys.join('|');
|
|
110
|
+
}
|
|
111
|
+
async function computeComputeResponseKey(response, reencryptKeypair) {
|
|
112
|
+
const att = response.decryptionAttestation;
|
|
113
|
+
if (!att)
|
|
114
|
+
throw new Error('No decryption attestation in response');
|
|
115
|
+
return computeAttestationKey(att, reencryptKeypair);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Verifies decrypt/reveal response consistency using hash-bucket voting.
|
|
119
|
+
* Collects all N responses, buckets them by content key, and returns the
|
|
120
|
+
* winning bucket (the first one with >= threshold votes).
|
|
121
|
+
*
|
|
122
|
+
* This is robust against a faulty first-responding node: even if responses[0]
|
|
123
|
+
* disagrees, a quorum of agreeing responses will form a winning bucket.
|
|
124
|
+
*/
|
|
125
|
+
async function verifyDecryptResponseConsistency(allResults, threshold, reencryptKeypair) {
|
|
126
|
+
if (allResults.length === 0) {
|
|
127
|
+
throw new Error('No responses collected to verify');
|
|
128
|
+
}
|
|
129
|
+
// Compute a content key for each response and bucket by key.
|
|
130
|
+
// Responses whose key computation fails (malformed/invalid attestation) are
|
|
131
|
+
// excluded so that one faulty responder cannot abort the whole check.
|
|
132
|
+
const buckets = new Map();
|
|
133
|
+
const skippedErrors = [];
|
|
134
|
+
for (const result of allResults) {
|
|
135
|
+
let key;
|
|
136
|
+
try {
|
|
137
|
+
key = await computeDecryptResponseKey(result.response, reencryptKeypair);
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
skippedErrors.push(e instanceof Error ? e.message : String(e));
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (!buckets.has(key))
|
|
144
|
+
buckets.set(key, []);
|
|
145
|
+
buckets.get(key).push(result);
|
|
146
|
+
}
|
|
147
|
+
// Find the first bucket that reaches the quorum threshold.
|
|
148
|
+
// With majority threshold (floor(n/2) + 1), at most one bucket can reach quorum,
|
|
149
|
+
// so iteration order doesn't affect which bucket wins.
|
|
150
|
+
for (const bucket of buckets.values()) {
|
|
151
|
+
if (bucket.length >= threshold) {
|
|
152
|
+
validateDecryptResponseStructure(bucket);
|
|
153
|
+
return { reference: bucket[0].response, winningResults: bucket };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const skippedSuffix = skippedErrors.length > 0
|
|
157
|
+
? `; ${skippedErrors.length} response(s) excluded due to key-computation errors: ${skippedErrors.join(', ')}`
|
|
158
|
+
: '';
|
|
159
|
+
throw new Error(`No quorum: no group of ${threshold} KMS responses agreed on the same value${skippedSuffix}`);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Verifies compute response consistency using hash-bucket voting.
|
|
163
|
+
*/
|
|
164
|
+
async function verifyComputeResponseConsistency(allResults, threshold, request, reencryptKeypair) {
|
|
165
|
+
if (allResults.length === 0) {
|
|
166
|
+
throw new Error('No responses collected to verify');
|
|
167
|
+
}
|
|
168
|
+
// Compute a content key for each response and bucket by key.
|
|
169
|
+
// Responses whose key computation fails (malformed/invalid attestation) are
|
|
170
|
+
// excluded so that one faulty responder cannot abort the whole check.
|
|
171
|
+
const buckets = new Map();
|
|
172
|
+
const skippedErrors = [];
|
|
173
|
+
for (const result of allResults) {
|
|
174
|
+
let key;
|
|
175
|
+
try {
|
|
176
|
+
key = await computeComputeResponseKey(result.response, reencryptKeypair);
|
|
177
|
+
}
|
|
178
|
+
catch (e) {
|
|
179
|
+
skippedErrors.push(e instanceof Error ? e.message : String(e));
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
if (!buckets.has(key))
|
|
183
|
+
buckets.set(key, []);
|
|
184
|
+
buckets.get(key).push(result);
|
|
185
|
+
}
|
|
186
|
+
// Find the first bucket that reaches the quorum threshold.
|
|
187
|
+
// With majority threshold (floor(n/2) + 1), at most one bucket can reach quorum,
|
|
188
|
+
// so iteration order doesn't affect which bucket wins.
|
|
189
|
+
for (const bucket of buckets.values()) {
|
|
190
|
+
if (bucket.length >= threshold) {
|
|
191
|
+
validateComputeResponseStructure(bucket, request);
|
|
192
|
+
return { reference: bucket[0].response, winningResults: bucket };
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const skippedSuffix = skippedErrors.length > 0
|
|
196
|
+
? `; ${skippedErrors.length} response(s) excluded due to key-computation errors: ${skippedErrors.join(', ')}`
|
|
197
|
+
: '';
|
|
198
|
+
throw new Error(`No quorum: no group of ${threshold} KMS responses agreed on the same value${skippedSuffix}`);
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvcnVtQ29uc2lzdGVuY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMva21zL3F1b3J1bUNvbnNpc3RlbmN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBbUJBLHNEQXVCQztBQU1ELDRFQXdDQztBQU9ELDRFQTRDQztBQThCRCw0RUFnREM7QUFLRCw0RUFrREM7QUEvUUQsNENBQW9EO0FBUXBELDRDQUE2QztBQUU3QywrQ0FBMkM7QUFFM0M7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLEdBQStCLEVBQy9CLGdCQUErQjtJQUUvQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDM0QsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDdkQsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFBLHNCQUFVLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFLENBQUM7UUFDdEMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQzFDLElBQUksQ0FBQyxFQUFFO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQzFELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUEsc0JBQVUsRUFBQyxNQUFNLElBQUEsa0JBQU8sRUFBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxtRUFBbUU7UUFDbkUseURBQXlEO1FBQ3pELE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUEseUJBQWEsRUFBQyxJQUFBLG9CQUFRLEVBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYixnQ0FBZ0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLDBDQUEwQyxDQUN6RixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGdDQUFnQyxDQUU5QyxNQUErQztJQUMvQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBRXJDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdkMsSUFDRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLE1BQU07WUFDaEQsU0FBUyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFDdkMsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IscUVBQXFFLENBQ3RFLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN2QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCwyRkFBMkY7WUFDM0YsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FDYix3Q0FBd0MsQ0FBQyxlQUFlLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUNqRyxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0RBQWtELE9BQU8sa0JBQWtCLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUN2RyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixnQ0FBZ0MsQ0FDOUMsTUFBcUUsRUFDckUsT0FBZ0M7SUFFaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztJQUN4RCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztJQUVsQyxNQUFNLGtCQUFrQixHQUN0QixPQUFPLEVBQUUsZUFBZSxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNqRSxJQUFJLE9BQU8sS0FBSyxjQUFjLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3RELE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVBQWlFLENBQ2xFLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssV0FBVyxJQUFJLE9BQU8sS0FBSyxjQUFjLEVBQUUsQ0FBQztRQUMxRCxNQUFNLElBQUksS0FBSyxDQUNiLGdDQUFnQyxPQUFPLDBDQUEwQyxDQUNsRixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdkMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztRQUNyRCxJQUFJLENBQUMsR0FBRztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUs7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDM0QsMkZBQTJGO1FBQzNGLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FDYiw4QkFBOEIsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQ3ZFLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUNiLGtEQUFrRCxPQUFPLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FDdkcsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSx5QkFBeUIsQ0FFdEMsUUFBVyxFQUFFLGdCQUErQjtJQUM1QyxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzVCLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUMxQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FDN0MsQ0FDRixDQUFDO0lBQ0YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxLQUFLLFVBQVUseUJBQXlCLENBQ3RDLFFBQWlDLEVBQ2pDLGdCQUErQjtJQUUvQixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUM7SUFDM0MsSUFBSSxDQUFDLEdBQUc7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDbkUsT0FBTyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNJLEtBQUssVUFBVSxnQ0FBZ0MsQ0FHcEQsVUFBbUQsRUFDbkQsU0FBaUIsRUFDakIsZ0JBQStCO0lBSy9CLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELDZEQUE2RDtJQUM3RCw0RUFBNEU7SUFDNUUsc0VBQXNFO0lBQ3RFLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFtRCxDQUFDO0lBQzNFLE1BQU0sYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUNuQyxLQUFLLE1BQU0sTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLElBQUksR0FBVyxDQUFDO1FBQ2hCLElBQUksQ0FBQztZQUNILEdBQUcsR0FBRyxNQUFNLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0QsU0FBUztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsMkRBQTJEO0lBQzNELGlGQUFpRjtJQUNqRix1REFBdUQ7SUFDdkQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUN0QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksU0FBUyxFQUFFLENBQUM7WUFDL0IsZ0NBQWdDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUNqQixhQUFhLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDdEIsQ0FBQyxDQUFDLEtBQUssYUFBYSxDQUFDLE1BQU0sd0RBQXdELGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDN0csQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNULE1BQU0sSUFBSSxLQUFLLENBQ2IsMEJBQTBCLFNBQVMsMENBQTBDLGFBQWEsRUFBRSxDQUM3RixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLGdDQUFnQyxDQUNwRCxVQUF5RSxFQUN6RSxTQUFpQixFQUNqQixPQUFnQyxFQUNoQyxnQkFBK0I7SUFLL0IsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsNkRBQTZEO0lBQzdELDRFQUE0RTtJQUM1RSxzRUFBc0U7SUFDdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBR3BCLENBQUM7SUFDSixNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUM7SUFDbkMsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxJQUFJLEdBQVcsQ0FBQztRQUNoQixJQUFJLENBQUM7WUFDSCxHQUFHLEdBQUcsTUFBTSx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9ELFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxpRkFBaUY7SUFDakYsdURBQXVEO0lBQ3ZELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDdEMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQy9CLGdDQUFnQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQ2pCLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUN0QixDQUFDLENBQUMsS0FBSyxhQUFhLENBQUMsTUFBTSx3REFBd0QsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM3RyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FDYiwwQkFBMEIsU0FBUywwQ0FBMEMsYUFBYSxFQUFFLENBQzdGLENBQUM7QUFDSixDQUFDIn0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Account, Address, Chain, PublicClient, Transport, WalletClient } from 'viem';
|
|
2
|
+
export type ViemClient = WalletClient<Transport, Chain, Account> | PublicClient<Transport, Chain>;
|
|
3
|
+
/**
|
|
4
|
+
* Verifies covalidator signatures for a plaintext DecryptionAttestation
|
|
5
|
+
* by calling `isValidDecryptionAttestation` on the IncoVerifier contract.
|
|
6
|
+
*
|
|
7
|
+
* This delegates all verification logic (EIP-712 digest computation,
|
|
8
|
+
* ECDSA recovery, signer authorization, threshold check) to the contract,
|
|
9
|
+
* ensuring exact parity with on-chain verification.
|
|
10
|
+
*
|
|
11
|
+
* @param handle - The handle hex string (bytes32)
|
|
12
|
+
* @param rawValueBytes - The raw plaintext value bytes (will be left-padded to 32 bytes)
|
|
13
|
+
* @param signatures - The covalidator ECDSA signatures to verify
|
|
14
|
+
* @param executorAddress - The Lightning contract address (executor)
|
|
15
|
+
* @param client - A viem client capable of reading contract state
|
|
16
|
+
* @throws If the contract returns false (insufficient valid signatures)
|
|
17
|
+
*/
|
|
18
|
+
export declare function verifyPlaintextAttestationSignatures(handle: string, rawValueBytes: Uint8Array, signatures: Uint8Array[], executorAddress: Address, client: ViemClient): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Verifies covalidator envelope signatures for reencryption attestations
|
|
21
|
+
* by calling `isValidReencryptionAttestation` on the IncoVerifier contract.
|
|
22
|
+
*
|
|
23
|
+
* Each covalidator signs over its own unique (userCiphertext, handle, encryptedSignature)
|
|
24
|
+
* tuple, so all three per-covalidator arrays must be aligned by index and sorted
|
|
25
|
+
* by signer address in ascending order.
|
|
26
|
+
*
|
|
27
|
+
* @param handle - The handle hex string (bytes32)
|
|
28
|
+
* @param userCiphertexts - Per-covalidator ciphertexts (sorted by signer address)
|
|
29
|
+
* @param encryptedSignatures - Per-covalidator encrypted inner signatures (sorted by signer address)
|
|
30
|
+
* @param envelopeSignatures - Per-covalidator envelope signatures (sorted by signer address)
|
|
31
|
+
* @param executorAddress - The Lightning contract address (executor)
|
|
32
|
+
* @param client - A viem client capable of reading contract state
|
|
33
|
+
* @throws If the contract returns false (insufficient valid signatures)
|
|
34
|
+
*/
|
|
35
|
+
export declare function verifyReencryptionAttestationSignatures(handle: string, userCiphertexts: Uint8Array[], encryptedSignatures: Uint8Array[], envelopeSignatures: Uint8Array[], executorAddress: Address, client: ViemClient): Promise<void>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.verifyPlaintextAttestationSignatures = verifyPlaintextAttestationSignatures;
|
|
4
|
+
exports.verifyReencryptionAttestationSignatures = verifyReencryptionAttestationSignatures;
|
|
5
|
+
const viem_1 = require("viem");
|
|
6
|
+
const lightning_js_1 = require("../generated/abis/lightning.js");
|
|
7
|
+
const verifier_js_1 = require("../generated/abis/verifier.js");
|
|
8
|
+
/**
|
|
9
|
+
* Resolves the IncoVerifier contract instance from the executor (Lightning) contract.
|
|
10
|
+
*/
|
|
11
|
+
async function getVerifierContract(executorAddress, client) {
|
|
12
|
+
const lightning = (0, viem_1.getContract)({
|
|
13
|
+
address: executorAddress,
|
|
14
|
+
abi: lightning_js_1.incoLightningAbi,
|
|
15
|
+
client,
|
|
16
|
+
});
|
|
17
|
+
const verifierAddress = await lightning.read.incoVerifier();
|
|
18
|
+
return (0, viem_1.getContract)({
|
|
19
|
+
address: verifierAddress,
|
|
20
|
+
abi: verifier_js_1.incoVerifierAbi,
|
|
21
|
+
client,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Verifies covalidator signatures for a plaintext DecryptionAttestation
|
|
26
|
+
* by calling `isValidDecryptionAttestation` on the IncoVerifier contract.
|
|
27
|
+
*
|
|
28
|
+
* This delegates all verification logic (EIP-712 digest computation,
|
|
29
|
+
* ECDSA recovery, signer authorization, threshold check) to the contract,
|
|
30
|
+
* ensuring exact parity with on-chain verification.
|
|
31
|
+
*
|
|
32
|
+
* @param handle - The handle hex string (bytes32)
|
|
33
|
+
* @param rawValueBytes - The raw plaintext value bytes (will be left-padded to 32 bytes)
|
|
34
|
+
* @param signatures - The covalidator ECDSA signatures to verify
|
|
35
|
+
* @param executorAddress - The Lightning contract address (executor)
|
|
36
|
+
* @param client - A viem client capable of reading contract state
|
|
37
|
+
* @throws If the contract returns false (insufficient valid signatures)
|
|
38
|
+
*/
|
|
39
|
+
async function verifyPlaintextAttestationSignatures(handle, rawValueBytes, signatures, executorAddress, client) {
|
|
40
|
+
const verifier = await getVerifierContract(executorAddress, client);
|
|
41
|
+
// Left-pad value to 32 bytes (matching Go's common.LeftPadBytes(value, 32))
|
|
42
|
+
const valueHex = (0, viem_1.pad)((0, viem_1.bytesToHex)(rawValueBytes), {
|
|
43
|
+
dir: 'left',
|
|
44
|
+
size: 32,
|
|
45
|
+
});
|
|
46
|
+
// Convert signatures to hex format for the contract call
|
|
47
|
+
const signaturesHex = signatures.map((sig) => (0, viem_1.bytesToHex)(sig));
|
|
48
|
+
const isValid = await verifier.read.isValidDecryptionAttestation([
|
|
49
|
+
{ handle: handle, value: valueHex },
|
|
50
|
+
signaturesHex,
|
|
51
|
+
]);
|
|
52
|
+
if (!isValid) {
|
|
53
|
+
throw new Error('Covalidator signature verification failed: isValidDecryptionAttestation returned false');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Verifies covalidator envelope signatures for reencryption attestations
|
|
58
|
+
* by calling `isValidReencryptionAttestation` on the IncoVerifier contract.
|
|
59
|
+
*
|
|
60
|
+
* Each covalidator signs over its own unique (userCiphertext, handle, encryptedSignature)
|
|
61
|
+
* tuple, so all three per-covalidator arrays must be aligned by index and sorted
|
|
62
|
+
* by signer address in ascending order.
|
|
63
|
+
*
|
|
64
|
+
* @param handle - The handle hex string (bytes32)
|
|
65
|
+
* @param userCiphertexts - Per-covalidator ciphertexts (sorted by signer address)
|
|
66
|
+
* @param encryptedSignatures - Per-covalidator encrypted inner signatures (sorted by signer address)
|
|
67
|
+
* @param envelopeSignatures - Per-covalidator envelope signatures (sorted by signer address)
|
|
68
|
+
* @param executorAddress - The Lightning contract address (executor)
|
|
69
|
+
* @param client - A viem client capable of reading contract state
|
|
70
|
+
* @throws If the contract returns false (insufficient valid signatures)
|
|
71
|
+
*/
|
|
72
|
+
async function verifyReencryptionAttestationSignatures(handle, userCiphertexts, encryptedSignatures, envelopeSignatures, executorAddress, client) {
|
|
73
|
+
const verifier = await getVerifierContract(executorAddress, client);
|
|
74
|
+
const attestations = userCiphertexts.map((ct, i) => ({
|
|
75
|
+
handle: handle,
|
|
76
|
+
userCiphertext: (0, viem_1.bytesToHex)(ct),
|
|
77
|
+
encryptedSignature: (0, viem_1.bytesToHex)(encryptedSignatures[i]),
|
|
78
|
+
}));
|
|
79
|
+
const signaturesHex = envelopeSignatures.map((sig) => (0, viem_1.bytesToHex)(sig));
|
|
80
|
+
const isValid = await verifier.read.isValidReencryptionAttestation([
|
|
81
|
+
attestations,
|
|
82
|
+
signaturesHex,
|
|
83
|
+
]);
|
|
84
|
+
if (!isValid) {
|
|
85
|
+
throw new Error('Covalidator signature verification failed: isValidReencryptionAttestation returned false');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmF0dXJlVmVyaWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ttcy9zaWduYXR1cmVWZXJpZmljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFzREEsb0ZBOEJDO0FBa0JELDBGQThCQztBQTNIRCwrQkFBc0U7QUFDdEUsaUVBQWtFO0FBQ2xFLCtEQUFnRTtBQU1oRTs7R0FFRztBQUNILEtBQUssVUFBVSxtQkFBbUIsQ0FDaEMsZUFBd0IsRUFDeEIsTUFBa0I7SUFFbEIsTUFBTSxTQUFTLEdBQUcsSUFBQSxrQkFBVyxFQUFDO1FBQzVCLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLEdBQUcsRUFBRSwrQkFBZ0I7UUFDckIsTUFBTTtLQUNQLENBQUMsQ0FBQztJQUVILE1BQU0sZUFBZSxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUU1RCxPQUFPLElBQUEsa0JBQVcsRUFBQztRQUNqQixPQUFPLEVBQUUsZUFBZTtRQUN4QixHQUFHLEVBQUUsNkJBQWU7UUFDcEIsTUFBTTtLQUNQLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNJLEtBQUssVUFBVSxvQ0FBb0MsQ0FDeEQsTUFBYyxFQUNkLGFBQXlCLEVBQ3pCLFVBQXdCLEVBQ3hCLGVBQXdCLEVBQ3hCLE1BQWtCO0lBRWxCLE1BQU0sUUFBUSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRXBFLDRFQUE0RTtJQUM1RSxNQUFNLFFBQVEsR0FBRyxJQUFBLFVBQUcsRUFBQyxJQUFBLGlCQUFjLEVBQUMsYUFBYSxDQUFDLEVBQUU7UUFDbEQsR0FBRyxFQUFFLE1BQU07UUFDWCxJQUFJLEVBQUUsRUFBRTtLQUNULENBQUMsQ0FBQztJQUVILHlEQUF5RDtJQUN6RCxNQUFNLGFBQWEsR0FBVSxVQUFVLENBQUMsR0FBRyxDQUN6QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBQSxpQkFBYyxFQUFDLEdBQUcsQ0FBUSxDQUNwQyxDQUFDO0lBRUYsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDO1FBQy9ELEVBQUUsTUFBTSxFQUFFLE1BQWEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1FBQzFDLGFBQWE7S0FDZCxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksS0FBSyxDQUNiLHdGQUF3RixDQUN6RixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSSxLQUFLLFVBQVUsdUNBQXVDLENBQzNELE1BQWMsRUFDZCxlQUE2QixFQUM3QixtQkFBaUMsRUFDakMsa0JBQWdDLEVBQ2hDLGVBQXdCLEVBQ3hCLE1BQWtCO0lBRWxCLE1BQU0sUUFBUSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRXBFLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sRUFBRSxNQUFhO1FBQ3JCLGNBQWMsRUFBRSxJQUFBLGlCQUFjLEVBQUMsRUFBRSxDQUFRO1FBQ3pDLGtCQUFrQixFQUFFLElBQUEsaUJBQWMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBUTtLQUNsRSxDQUFDLENBQUMsQ0FBQztJQUVKLE1BQU0sYUFBYSxHQUFVLGtCQUFrQixDQUFDLEdBQUcsQ0FDakQsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUEsaUJBQWMsRUFBQyxHQUFHLENBQVEsQ0FDcEMsQ0FBQztJQUVGLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQztRQUNqRSxZQUFZO1FBQ1osYUFBYTtLQUNkLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQ2IsMEZBQTBGLENBQzNGLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyJ9
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Executes promises and returns
|
|
2
|
+
* Executes all promises and returns all successful results.
|
|
3
|
+
* Rejects early if it becomes mathematically impossible to reach the threshold.
|
|
3
4
|
* @param promises Array of promises to execute
|
|
4
|
-
* @param threshold
|
|
5
|
-
* @returns Promise that resolves with
|
|
5
|
+
* @param threshold Minimum number of successful responses required
|
|
6
|
+
* @returns Promise that resolves with all successful results (length >= threshold)
|
|
6
7
|
*/
|
|
7
8
|
export declare function executeWithThreshold<T>(promises: Promise<T>[], threshold: number): Promise<T[]>;
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.executeWithThreshold = executeWithThreshold;
|
|
4
4
|
/**
|
|
5
|
-
* Executes promises and returns
|
|
5
|
+
* Executes all promises and returns all successful results.
|
|
6
|
+
* Rejects early if it becomes mathematically impossible to reach the threshold.
|
|
6
7
|
* @param promises Array of promises to execute
|
|
7
|
-
* @param threshold
|
|
8
|
-
* @returns Promise that resolves with
|
|
8
|
+
* @param threshold Minimum number of successful responses required
|
|
9
|
+
* @returns Promise that resolves with all successful results (length >= threshold)
|
|
9
10
|
*/
|
|
10
11
|
async function executeWithThreshold(promises, threshold) {
|
|
11
12
|
if (threshold < 0) {
|
|
@@ -22,31 +23,40 @@ async function executeWithThreshold(promises, threshold) {
|
|
|
22
23
|
throw new Error(`Threshold ${threshold} exceeds number of promises ${promises.length}`);
|
|
23
24
|
}
|
|
24
25
|
const results = [];
|
|
25
|
-
let
|
|
26
|
+
let settled = 0;
|
|
27
|
+
let rejected = false;
|
|
26
28
|
return new Promise((resolve, reject) => {
|
|
27
29
|
promises.forEach((promise) => {
|
|
28
30
|
promise
|
|
29
31
|
.then((response) => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
// After early rejection (threshold became unreachable), ignore late-arriving
|
|
33
|
+
// successes since we've already rejected the overall promise.
|
|
34
|
+
if (rejected)
|
|
35
|
+
return;
|
|
36
|
+
results.push(response);
|
|
37
|
+
settled++;
|
|
38
|
+
if (settled === promises.length) {
|
|
39
|
+
resolve(results);
|
|
35
40
|
}
|
|
36
41
|
})
|
|
37
42
|
.catch((error) => {
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
// After early rejection, ignore subsequent failures since we've already
|
|
44
|
+
// rejected the overall promise.
|
|
45
|
+
if (rejected)
|
|
46
|
+
return;
|
|
47
|
+
settled++;
|
|
40
48
|
// Check if we can still reach the threshold
|
|
41
|
-
|
|
42
|
-
// from (promises.length - results.length - failures) remaining promises
|
|
43
|
-
const remainingPromises = promises.length - results.length - failures;
|
|
49
|
+
const remainingPromises = promises.length - settled;
|
|
44
50
|
const neededSuccesses = threshold - results.length;
|
|
45
51
|
if (remainingPromises < neededSuccesses) {
|
|
52
|
+
rejected = true;
|
|
46
53
|
reject(new Error(`Cannot reach threshold of ${threshold} responses. Failed clients exceed limit. Last error: ${error}`));
|
|
47
54
|
}
|
|
55
|
+
else if (settled === promises.length) {
|
|
56
|
+
resolve(results);
|
|
57
|
+
}
|
|
48
58
|
});
|
|
49
59
|
});
|
|
50
60
|
});
|
|
51
61
|
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZXNob2xkUHJvbWlzZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMva21zL3RocmVzaG9sZFByb21pc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esb0RBMERDO0FBakVEOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsUUFBc0IsRUFDdEIsU0FBaUI7SUFFakIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCwwQ0FBMEM7SUFDMUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FDYixhQUFhLFNBQVMsK0JBQStCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FDdkUsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7SUFDeEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUVyQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMzQixPQUFPO2lCQUNKLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNqQiw2RUFBNkU7Z0JBQzdFLDhEQUE4RDtnQkFDOUQsSUFBSSxRQUFRO29CQUFFLE9BQU87Z0JBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3ZCLE9BQU8sRUFBRSxDQUFDO2dCQUNWLElBQUksT0FBTyxLQUFLLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDaEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNmLHdFQUF3RTtnQkFDeEUsZ0NBQWdDO2dCQUNoQyxJQUFJLFFBQVE7b0JBQUUsT0FBTztnQkFDckIsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsNENBQTRDO2dCQUM1QyxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO2dCQUNwRCxNQUFNLGVBQWUsR0FBRyxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDbkQsSUFBSSxpQkFBaUIsR0FBRyxlQUFlLEVBQUUsQ0FBQztvQkFDeEMsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDaEIsTUFBTSxDQUNKLElBQUksS0FBSyxDQUNQLDZCQUE2QixTQUFTLHdEQUF3RCxLQUFLLEVBQUUsQ0FDdEcsQ0FDRixDQUFDO2dCQUNKLENBQUM7cUJBQU0sSUFBSSxPQUFPLEtBQUssUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN2QyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25CLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=
|
package/dist/cjs/lite/hadu.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PlaintextWithContext } from '../encryption/
|
|
1
|
+
import { PlaintextWithContext } from '../encryption/encryption.js';
|
|
2
2
|
import { InputPayload } from '../generated/es/inco/covalidator/compute/v1/types_pb.js';
|
|
3
3
|
export declare function encodeInput({ plaintext, context, }: PlaintextWithContext): Uint8Array;
|
|
4
4
|
export declare function decodeInput(input: Uint8Array): InputPayload;
|
package/dist/cjs/lite/hadu.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.encodeInput = encodeInput;
|
|
4
4
|
exports.decodeInput = decodeInput;
|
|
5
5
|
const protobuf_1 = require("@bufbuild/protobuf");
|
|
6
|
-
const
|
|
6
|
+
const encryption_js_1 = require("../encryption/encryption.js");
|
|
7
7
|
const types_pb_js_1 = require("../generated/es/inco/covalidator/compute/v1/types_pb.js");
|
|
8
8
|
const handle_js_1 = require("../handle.js");
|
|
9
9
|
// HADU stands for "Host Chain, ACL, DApp, and User" it maps to the InputContext type where the aclAddress
|
|
@@ -15,7 +15,7 @@ function encodeInput({ plaintext, context, }) {
|
|
|
15
15
|
case: 'scalar',
|
|
16
16
|
value: (0, protobuf_1.create)(types_pb_js_1.ScalarSchema, {
|
|
17
17
|
type: plaintext.type,
|
|
18
|
-
value: (0,
|
|
18
|
+
value: (0, encryption_js_1.plaintextToBytes)(plaintext),
|
|
19
19
|
}),
|
|
20
20
|
},
|
|
21
21
|
});
|
|
@@ -25,4 +25,4 @@ function decodeInput(input) {
|
|
|
25
25
|
const payload = (0, protobuf_1.fromBinary)(types_pb_js_1.InputPayloadSchema, input);
|
|
26
26
|
return payload;
|
|
27
27
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFkdS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXRlL2hhZHUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSxrQ0FlQztBQUVELGtDQUdDO0FBbkNELGlEQUFrRTtBQUNsRSwrREFHcUM7QUFDckMseUZBSWlFO0FBQ2pFLDRDQUFnRDtBQUVoRCwwR0FBMEc7QUFDMUcsMEVBQTBFO0FBRTFFLFNBQWdCLFdBQVcsQ0FBQyxFQUMxQixTQUFTLEVBQ1QsT0FBTyxHQUNjO0lBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUEsaUJBQU0sRUFBQyxnQ0FBa0IsRUFBRTtRQUN6QyxXQUFXLEVBQUUsSUFBQSw0QkFBZ0IsRUFBQyxPQUFPLENBQUM7UUFDdEMsS0FBSyxFQUFFO1lBQ0wsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsSUFBQSxpQkFBTSxFQUFDLDBCQUFZLEVBQUU7Z0JBQzFCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsS0FBSyxFQUFFLElBQUEsZ0NBQWdCLEVBQUMsU0FBUyxDQUFDO2FBQ25DLENBQUM7U0FDSDtLQUNGLENBQUMsQ0FBQztJQUNILE9BQU8sSUFBQSxtQkFBUSxFQUFDLGdDQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFnQixXQUFXLENBQUMsS0FBaUI7SUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQkFBVSxFQUFDLGdDQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMifQ==
|
package/dist/cjs/lite/index.d.ts
CHANGED
|
@@ -4,6 +4,4 @@ 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 './hadu.js';
|
|
8
7
|
export * from './lightning.js';
|
|
9
|
-
export { TEST_NETWORK_SEED_KEY, XWING_PUBLIC_KEY_SIZE, decodeXwingPrivateKey, decodeXwingPublicKey, decrypt, deriveXwingKeypairFromSeed, encodeXwingPublicKey, encrypt, generateXwingKeypair, getXwingDecryptor, getXwingEncryptor, type XwingDecryptorArgs, type XwingEncryptorArgs, type XwingKeypair, } from './xwing.js';
|
package/dist/cjs/lite/index.js
CHANGED
|
@@ -14,23 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.getXwingEncryptor = exports.getXwingDecryptor = exports.generateXwingKeypair = exports.encrypt = exports.encodeXwingPublicKey = exports.deriveXwingKeypairFromSeed = exports.decrypt = exports.decodeXwingPublicKey = exports.decodeXwingPrivateKey = exports.XWING_PUBLIC_KEY_SIZE = exports.TEST_NETWORK_SEED_KEY = void 0;
|
|
18
17
|
__exportStar(require("../generated/abis/lightning.js"), exports);
|
|
19
18
|
__exportStar(require("./attested-compute.js"), exports);
|
|
20
19
|
__exportStar(require("./attested-decrypt.js"), exports);
|
|
21
20
|
__exportStar(require("./deployments.js"), exports);
|
|
22
|
-
__exportStar(require("./hadu.js"), exports);
|
|
23
21
|
__exportStar(require("./lightning.js"), exports);
|
|
24
|
-
|
|
25
|
-
Object.defineProperty(exports, "TEST_NETWORK_SEED_KEY", { enumerable: true, get: function () { return xwing_js_1.TEST_NETWORK_SEED_KEY; } });
|
|
26
|
-
Object.defineProperty(exports, "XWING_PUBLIC_KEY_SIZE", { enumerable: true, get: function () { return xwing_js_1.XWING_PUBLIC_KEY_SIZE; } });
|
|
27
|
-
Object.defineProperty(exports, "decodeXwingPrivateKey", { enumerable: true, get: function () { return xwing_js_1.decodeXwingPrivateKey; } });
|
|
28
|
-
Object.defineProperty(exports, "decodeXwingPublicKey", { enumerable: true, get: function () { return xwing_js_1.decodeXwingPublicKey; } });
|
|
29
|
-
Object.defineProperty(exports, "decrypt", { enumerable: true, get: function () { return xwing_js_1.decrypt; } });
|
|
30
|
-
Object.defineProperty(exports, "deriveXwingKeypairFromSeed", { enumerable: true, get: function () { return xwing_js_1.deriveXwingKeypairFromSeed; } });
|
|
31
|
-
Object.defineProperty(exports, "encodeXwingPublicKey", { enumerable: true, get: function () { return xwing_js_1.encodeXwingPublicKey; } });
|
|
32
|
-
Object.defineProperty(exports, "encrypt", { enumerable: true, get: function () { return xwing_js_1.encrypt; } });
|
|
33
|
-
Object.defineProperty(exports, "generateXwingKeypair", { enumerable: true, get: function () { return xwing_js_1.generateXwingKeypair; } });
|
|
34
|
-
Object.defineProperty(exports, "getXwingDecryptor", { enumerable: true, get: function () { return xwing_js_1.getXwingDecryptor; } });
|
|
35
|
-
Object.defineProperty(exports, "getXwingEncryptor", { enumerable: true, get: function () { return xwing_js_1.getXwingEncryptor; } });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlFQUErQztBQU8vQyx3REFBc0M7QUFDdEMsd0RBQXNDO0FBQ3RDLG1EQUFpQztBQUNqQyw0Q0FBMEI7QUFDMUIsaURBQStCO0FBQy9CLHVDQWVvQjtBQWRsQixpSEFBQSxxQkFBcUIsT0FBQTtBQUNyQixpSEFBQSxxQkFBcUIsT0FBQTtBQUNyQixpSEFBQSxxQkFBcUIsT0FBQTtBQUNyQixnSEFBQSxvQkFBb0IsT0FBQTtBQUNwQixtR0FBQSxPQUFPLE9BQUE7QUFDUCxzSEFBQSwwQkFBMEIsT0FBQTtBQUMxQixnSEFBQSxvQkFBb0IsT0FBQTtBQUNwQixtR0FBQSxPQUFPLE9BQUE7QUFDUCxnSEFBQSxvQkFBb0IsT0FBQTtBQUNwQiw2R0FBQSxpQkFBaUIsT0FBQTtBQUNqQiw2R0FBQSxpQkFBaUIsT0FBQSJ9
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGl0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUVBQStDO0FBTy9DLHdEQUFzQztBQUN0Qyx3REFBc0M7QUFDdEMsbURBQWlDO0FBQ2pDLGlEQUErQiJ9
|
|
@@ -4,7 +4,7 @@ import { AllowanceVoucherWithSig } from '../advancedacl/types.js';
|
|
|
4
4
|
import { AttestedComputeOP } from '../attestedcompute/types.js';
|
|
5
5
|
import { DecryptionAttestation, EncryptedDecryptionAttestation } from '../attesteddecrypt/index.js';
|
|
6
6
|
import { Address, HexString } from '../binary.js';
|
|
7
|
-
import { EncryptionScheme, SupportedFheType } from '../encryption/
|
|
7
|
+
import { EncryptionScheme, SupportedFheType } from '../encryption/encryption.js';
|
|
8
8
|
import { incoVerifierAbi } from '../generated/abis/verifier.js';
|
|
9
9
|
import { lightningDeployments } from '../generated/lightning.js';
|
|
10
10
|
import { localNodeLightningConfig } from '../generated/local-node.js';
|