@inco/js 0.6.1 → 0.6.9
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 +8 -1
- package/dist/cjs/advancedacl/session-key.js +55 -21
- package/dist/cjs/attestedcompute/attested-compute.js +11 -4
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +38 -1
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +49 -6
- package/dist/cjs/attesteddecrypt/types.d.ts +6 -1
- package/dist/cjs/attesteddecrypt/types.js +1 -1
- package/dist/cjs/attestedreveal/attested-reveal.js +9 -7
- package/dist/cjs/binary.d.ts +1 -0
- package/dist/cjs/binary.js +6 -2
- package/dist/cjs/encryption/encryption.d.ts +17 -22
- package/dist/cjs/encryption/encryption.js +34 -16
- package/dist/cjs/generated/abis/add-two.d.ts +1 -1
- package/dist/cjs/generated/abis/add-two.js +1 -1
- package/dist/cjs/generated/abis/lightning-preview.d.ts +48 -106
- package/dist/cjs/generated/abis/lightning-preview.js +33 -55
- package/dist/cjs/generated/abis/lightning.d.ts +55 -116
- package/dist/cjs/generated/abis/lightning.js +33 -66
- package/dist/cjs/generated/abis/verifier.d.ts +193 -84
- package/dist/cjs/generated/abis/verifier.js +151 -61
- package/dist/cjs/generated/es/cosmos_proto/cosmos_pb.js +2 -2
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +775 -0
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +261 -0
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +186 -0
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +47 -0
- package/dist/cjs/generated/es/inco/fhe/v1/types_pb.js +2 -2
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +76 -129
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +21 -26
- package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.js +2 -2
- package/dist/cjs/generated/lightning.d.ts +0 -32
- package/dist/cjs/generated/lightning.js +1 -33
- package/dist/cjs/generated/local-node.d.ts +1 -5
- package/dist/cjs/generated/local-node.js +2 -6
- package/dist/cjs/handle.d.ts +16 -0
- package/dist/cjs/handle.js +28 -3
- package/dist/cjs/lite/deployments.d.ts +20 -2
- package/dist/cjs/lite/deployments.js +1 -1
- package/dist/cjs/lite/ecies.d.ts +0 -2
- package/dist/cjs/lite/ecies.js +24 -13
- package/dist/cjs/lite/hadu.d.ts +3 -23
- package/dist/cjs/lite/hadu.js +26 -29
- package/dist/cjs/lite/index.d.ts +1 -1
- package/dist/cjs/lite/index.js +1 -1
- package/dist/cjs/lite/lightning.d.ts +24 -12
- package/dist/cjs/lite/lightning.js +62 -27
- package/dist/cjs/lite/reencrypt.d.ts +5 -7
- package/dist/cjs/lite/reencrypt.js +68 -58
- package/dist/cjs/test/mocks.d.ts +12 -0
- package/dist/cjs/test/mocks.js +27 -0
- package/dist/cjs/viem.d.ts +45 -48
- package/dist/esm/advancedacl/session-key.d.ts +8 -1
- package/dist/esm/advancedacl/session-key.js +58 -24
- package/dist/esm/attestedcompute/attested-compute.js +11 -4
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +38 -1
- package/dist/esm/attesteddecrypt/attested-decrypt.js +51 -8
- package/dist/esm/attesteddecrypt/types.d.ts +6 -1
- package/dist/esm/attesteddecrypt/types.js +1 -1
- package/dist/esm/attestedreveal/attested-reveal.js +9 -7
- package/dist/esm/binary.d.ts +1 -0
- package/dist/esm/binary.js +5 -2
- package/dist/esm/encryption/encryption.d.ts +17 -22
- package/dist/esm/encryption/encryption.js +30 -16
- package/dist/esm/generated/abis/add-two.d.ts +1 -1
- package/dist/esm/generated/abis/add-two.js +1 -1
- package/dist/esm/generated/abis/lightning-preview.d.ts +48 -106
- package/dist/esm/generated/abis/lightning-preview.js +33 -55
- package/dist/esm/generated/abis/lightning.d.ts +55 -116
- package/dist/esm/generated/abis/lightning.js +33 -66
- package/dist/esm/generated/abis/verifier.d.ts +193 -84
- package/dist/esm/generated/abis/verifier.js +151 -61
- package/dist/esm/generated/es/cosmos_proto/cosmos_pb.js +2 -2
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +775 -0
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +258 -0
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +186 -0
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +44 -0
- package/dist/esm/generated/es/inco/fhe/v1/types_pb.js +2 -2
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +76 -129
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +20 -25
- package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.js +2 -2
- package/dist/esm/generated/lightning.d.ts +0 -32
- package/dist/esm/generated/lightning.js +1 -33
- package/dist/esm/generated/local-node.d.ts +1 -5
- package/dist/esm/generated/local-node.js +2 -6
- package/dist/esm/handle.d.ts +16 -0
- package/dist/esm/handle.js +27 -3
- package/dist/esm/lite/deployments.d.ts +20 -2
- package/dist/esm/lite/deployments.js +1 -1
- package/dist/esm/lite/ecies.d.ts +0 -2
- package/dist/esm/lite/ecies.js +26 -15
- package/dist/esm/lite/hadu.d.ts +3 -23
- package/dist/esm/lite/hadu.js +28 -30
- package/dist/esm/lite/index.d.ts +1 -1
- package/dist/esm/lite/index.js +1 -1
- package/dist/esm/lite/lightning.d.ts +24 -12
- package/dist/esm/lite/lightning.js +59 -24
- package/dist/esm/lite/reencrypt.d.ts +5 -7
- package/dist/esm/lite/reencrypt.js +67 -58
- package/dist/esm/test/mocks.d.ts +12 -0
- package/dist/esm/test/mocks.js +23 -0
- package/dist/esm/viem.d.ts +45 -48
- package/dist/types/advancedacl/session-key.d.ts +8 -1
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +38 -1
- package/dist/types/attesteddecrypt/types.d.ts +6 -1
- package/dist/types/binary.d.ts +1 -0
- package/dist/types/encryption/encryption.d.ts +17 -22
- package/dist/types/generated/abis/add-two.d.ts +1 -1
- package/dist/types/generated/abis/lightning-preview.d.ts +48 -106
- package/dist/types/generated/abis/lightning.d.ts +55 -116
- package/dist/types/generated/abis/verifier.d.ts +193 -84
- package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +775 -0
- package/dist/types/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +186 -0
- package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +76 -129
- package/dist/types/generated/lightning.d.ts +0 -32
- package/dist/types/generated/local-node.d.ts +1 -5
- package/dist/types/handle.d.ts +16 -0
- package/dist/types/lite/deployments.d.ts +20 -2
- package/dist/types/lite/ecies.d.ts +0 -2
- package/dist/types/lite/hadu.d.ts +3 -23
- package/dist/types/lite/index.d.ts +1 -1
- package/dist/types/lite/lightning.d.ts +24 -12
- package/dist/types/lite/reencrypt.d.ts +5 -7
- package/dist/types/test/mocks.d.ts +12 -0
- package/dist/types/viem.d.ts +45 -48
- package/package.json +3 -1
|
@@ -29,6 +29,11 @@ export interface SessionKeyReencryptorArgs {
|
|
|
29
29
|
kmsConnectRpcEndpointOrClient: string | Client<typeof KmsService>;
|
|
30
30
|
allowanceVoucherWithSig: AllowanceVoucherWithSig;
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* The sessionKeyReencryptor function is a reencryptor that uses a session key
|
|
34
|
+
* to reencrypt data.
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
32
37
|
export declare function sessionKeyReencryptor({ chainId, kmsConnectRpcEndpointOrClient, ephemeralKeypair, allowanceVoucherWithSig, }: SessionKeyReencryptorArgs): Promise<(<T extends SupportedFheType>({ handle, }: ReencryptFnArgs<EciesScheme, T>) => Promise<import("../encryption/encryption.js").PlaintextOf<1, 0 | 5 | 7 | 8>>)>;
|
|
33
38
|
export declare function updateActiveVouchersSessionNonce(incoLiteAddress: Address, sharerWalletClient: WalletClient<Transport, Chain, Account>): Promise<`0x${string}`>;
|
|
34
39
|
export interface SessionKeyAttestedComputeArgs {
|
|
@@ -53,5 +58,7 @@ export interface SessionKeyAttestedDecryptArgs {
|
|
|
53
58
|
allowanceVoucherWithSig: AllowanceVoucherWithSig;
|
|
54
59
|
handles: HexString[];
|
|
55
60
|
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
61
|
+
reencryptPubKey?: Uint8Array;
|
|
62
|
+
reencryptKeypair?: Secp256k1Keypair;
|
|
56
63
|
}
|
|
57
|
-
export declare function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpointOrClient, handles, ephemeralKeypair, allowanceVoucherWithSig, backoffConfig, }: SessionKeyAttestedDecryptArgs): Promise<Array<DecryptionAttestation<EciesScheme, SupportedFheType>>>;
|
|
64
|
+
export declare function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpointOrClient, handles, ephemeralKeypair, allowanceVoucherWithSig, backoffConfig, reencryptPubKey, reencryptKeypair, }: SessionKeyAttestedDecryptArgs): Promise<Array<DecryptionAttestation<EciesScheme, SupportedFheType>>>;
|
|
@@ -21,6 +21,7 @@ const index_js_4 = require("../reencryption/index.js");
|
|
|
21
21
|
const retry_js_1 = require("../retry.js");
|
|
22
22
|
const kms_service_pb_js_1 = require("../generated/es/inco/kms/lite/v1/kms_service_pb.js");
|
|
23
23
|
const types_pb_js_1 = require("../generated/es/inco/kms/lite/v1/types_pb.js");
|
|
24
|
+
const reencrypt_js_1 = require("../lite/reencrypt.js");
|
|
24
25
|
// Given a sharer's wallet client, an incoLite contract address, and a
|
|
25
26
|
// (verifyingContract, callFunction, sharerArgData) tuple, this function
|
|
26
27
|
// creates an AllowanceVoucher.
|
|
@@ -84,23 +85,40 @@ async function grantSessionKey({ chainId, incoLiteAddress, sessionVerifierContra
|
|
|
84
85
|
voucherSignature,
|
|
85
86
|
};
|
|
86
87
|
}
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
/**
|
|
89
|
+
* The sessionKeyReencryptor function is a reencryptor that uses a session key
|
|
90
|
+
* to reencrypt data.
|
|
91
|
+
*
|
|
92
|
+
*/
|
|
89
93
|
async function sessionKeyReencryptor({ chainId, kmsConnectRpcEndpointOrClient, ephemeralKeypair, allowanceVoucherWithSig, }) {
|
|
90
94
|
const kmsClient = (0, index_js_3.getKmsClient)(kmsConnectRpcEndpointOrClient ||
|
|
91
95
|
(0, index_js_3.defaultCovalidatorGrpc)((0, chain_js_1.getSupportedChain)(chainId)));
|
|
92
96
|
const requesterAccount = (0, accounts_1.privateKeyToAccount)(`0x${ephemeralKeypair.kp.getPrivate('hex')}`);
|
|
93
97
|
const ephemeralPubKey = ephemeralKeypair.encodePublicKey();
|
|
94
|
-
// Sign the EIP712 attesting that the requester has access to the private key
|
|
95
|
-
// corresponding to the ephemeral public key.
|
|
96
|
-
const eip712Payload = (0, index_js_3.reencryptEIP712)(chainId, ephemeralPubKey);
|
|
97
|
-
// Since the account is an ephemeral keypair stored in memory (not in Metamask),
|
|
98
|
-
// this step will NOT prompt the user with a pop-up.
|
|
99
|
-
const eip712Signature = await requesterAccount.signTypedData(eip712Payload);
|
|
100
98
|
return async function reencrypt({ handle, }) {
|
|
101
|
-
const
|
|
99
|
+
const handles = [handle];
|
|
100
|
+
// Sign the EIP712 attesting that the requester has access to the private key
|
|
101
|
+
// corresponding to the ephemeral public key.
|
|
102
|
+
const eip712Payload = (0, index_js_4.createEIP712Payload)({
|
|
103
|
+
chainId,
|
|
104
|
+
primaryType: 'AttestedDecryptRequest',
|
|
105
|
+
primaryTypeFields: [
|
|
106
|
+
{ name: 'handles', type: 'bytes32[]' },
|
|
107
|
+
{ name: 'publicKey', type: 'bytes' },
|
|
108
|
+
],
|
|
109
|
+
message: {
|
|
110
|
+
handles: handles,
|
|
111
|
+
publicKey: (0, viem_1.bytesToHex)(ephemeralPubKey),
|
|
112
|
+
},
|
|
113
|
+
domainName: index_js_3.ATTESTED_DECRYPT_DOMAIN_NAME,
|
|
114
|
+
domainVersion: index_js_3.ATTESTED_DECRYPT_DOMAIN_VERSION,
|
|
115
|
+
});
|
|
116
|
+
// Since the account is an ephemeral keypair stored in memory (not in Metamask),
|
|
117
|
+
// this step will NOT prompt the user with a pop-up.
|
|
118
|
+
const eip712Signature = await requesterAccount.signTypedData(eip712Payload);
|
|
119
|
+
const reencryptRequest = (0, protobuf_1.create)(kms_service_pb_js_1.AttestedDecryptRequestSchema, {
|
|
102
120
|
userAddress: requesterAccount.address,
|
|
103
|
-
ephemeralPubKey,
|
|
121
|
+
reencryptPubKey: ephemeralPubKey,
|
|
104
122
|
eip712Signature: (0, viem_1.hexToBytes)(eip712Signature),
|
|
105
123
|
handlesWithProofs: [
|
|
106
124
|
(0, protobuf_1.create)(types_pb_js_1.HandleWithProofSchema, {
|
|
@@ -126,7 +144,7 @@ async function sessionKeyReencryptor({ chainId, kmsConnectRpcEndpointOrClient, e
|
|
|
126
144
|
}),
|
|
127
145
|
],
|
|
128
146
|
});
|
|
129
|
-
const response = await kmsClient.
|
|
147
|
+
const response = await kmsClient.attestedDecrypt(reencryptRequest);
|
|
130
148
|
return (0, index_js_3.decryptGrpcResponse)(response, ephemeralKeypair, handle);
|
|
131
149
|
};
|
|
132
150
|
}
|
|
@@ -197,10 +215,14 @@ async function sessionKeyAttestedCompute({ lhsHandle, op, rhsPlaintext, backoffC
|
|
|
197
215
|
throw new Error('Failed to get decryption attestation from attested compute');
|
|
198
216
|
}
|
|
199
217
|
const decryptionAttestation = response.decryptionAttestation;
|
|
200
|
-
if (decryptionAttestation.
|
|
201
|
-
throw new Error('No
|
|
218
|
+
if (decryptionAttestation.value === undefined) {
|
|
219
|
+
throw new Error('No value in compute response');
|
|
220
|
+
}
|
|
221
|
+
if (decryptionAttestation.value.case !== 'plaintext') {
|
|
222
|
+
throw new Error(`Unexpected attestation type: ${decryptionAttestation.value.case}, expected 'plaintext'`);
|
|
202
223
|
}
|
|
203
|
-
const
|
|
224
|
+
const plaintext = decryptionAttestation.value.value;
|
|
225
|
+
const bigIntValue = (0, index_js_2.bytesToBigInt)(plaintext.value);
|
|
204
226
|
return {
|
|
205
227
|
handle: decryptionAttestation.handle,
|
|
206
228
|
plaintext: (0, encryption_js_1.bigintToPlaintext)(encryption_js_1.encryptionSchemes.ecies, (0, index_js_2.getHandleType)(lhsHandle), bigIntValue),
|
|
@@ -209,7 +231,7 @@ async function sessionKeyAttestedCompute({ lhsHandle, op, rhsPlaintext, backoffC
|
|
|
209
231
|
}
|
|
210
232
|
// The sessionKeyAttestedDecrypt function is a decryptor that uses a session key
|
|
211
233
|
// to decrypt data.
|
|
212
|
-
async function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpointOrClient, handles, ephemeralKeypair, allowanceVoucherWithSig, backoffConfig, }) {
|
|
234
|
+
async function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpointOrClient, handles, ephemeralKeypair, allowanceVoucherWithSig, backoffConfig, reencryptPubKey, reencryptKeypair, }) {
|
|
213
235
|
const kmsClient = (0, index_js_3.getKmsClient)(kmsConnectRpcEndpointOrClient ||
|
|
214
236
|
(0, index_js_3.defaultCovalidatorGrpc)((0, chain_js_1.getSupportedChain)(chainId)));
|
|
215
237
|
const requesterAccount = (0, accounts_1.privateKeyToAccount)(`0x${ephemeralKeypair.kp.getPrivate('hex')}`);
|
|
@@ -218,9 +240,13 @@ async function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpointOrClien
|
|
|
218
240
|
const eip712Payload = (0, index_js_4.createEIP712Payload)({
|
|
219
241
|
chainId: BigInt(chainId),
|
|
220
242
|
primaryType: 'AttestedDecryptRequest',
|
|
221
|
-
primaryTypeFields: [
|
|
243
|
+
primaryTypeFields: [
|
|
244
|
+
{ name: 'handles', type: 'bytes32[]' },
|
|
245
|
+
{ name: 'publicKey', type: 'bytes' },
|
|
246
|
+
],
|
|
222
247
|
message: {
|
|
223
248
|
handles: handles,
|
|
249
|
+
publicKey: (0, viem_1.bytesToHex)(reencryptPubKey ? reencryptPubKey : Uint8Array.from([])),
|
|
224
250
|
},
|
|
225
251
|
domainName: index_js_3.ATTESTED_DECRYPT_DOMAIN_NAME,
|
|
226
252
|
domainVersion: index_js_3.ATTESTED_DECRYPT_DOMAIN_VERSION,
|
|
@@ -255,21 +281,29 @@ async function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpointOrClien
|
|
|
255
281
|
userAddress: requesterAccount.address,
|
|
256
282
|
handlesWithProofs: handlesWithProofs,
|
|
257
283
|
eip712Signature: (0, viem_1.hexToBytes)(eip712Signature),
|
|
284
|
+
reencryptPubKey: reencryptPubKey ? reencryptPubKey : Uint8Array.from([]),
|
|
258
285
|
});
|
|
259
|
-
|
|
286
|
+
var response = await (0, retry_js_1.retryWithBackoff)(async () => {
|
|
260
287
|
return await kmsClient.attestedDecrypt(attestedDecryptRequest);
|
|
261
288
|
}, backoffConfig);
|
|
262
289
|
if (!response.decryptionAttestations ||
|
|
263
290
|
response.decryptionAttestations.length === 0) {
|
|
264
291
|
throw new index_js_1.AttestedDecryptError('No decryption attestations in response');
|
|
265
292
|
}
|
|
293
|
+
if (reencryptKeypair) {
|
|
294
|
+
response = await (0, reencrypt_js_1.decryptGrpcDecryptResponse)(response, reencryptKeypair);
|
|
295
|
+
}
|
|
266
296
|
const results = response.decryptionAttestations.map((att) => {
|
|
267
|
-
if (att.
|
|
268
|
-
throw new index_js_1.AttestedDecryptError('No
|
|
297
|
+
if (att.value === undefined) {
|
|
298
|
+
throw new index_js_1.AttestedDecryptError('No value in attestation');
|
|
299
|
+
}
|
|
300
|
+
if (att.value.case !== 'plaintext') {
|
|
301
|
+
throw new Error(`Unexpected attestation type: ${att.value.case}, expected 'plaintext'`);
|
|
269
302
|
}
|
|
303
|
+
const plaintext = att.value.value;
|
|
270
304
|
const h = att.handle;
|
|
271
305
|
const handleType = (0, index_js_2.getHandleType)(h);
|
|
272
|
-
const bigIntValue = (0, index_js_2.bytesToBigInt)(
|
|
306
|
+
const bigIntValue = (0, index_js_2.bytesToBigInt)(plaintext.value);
|
|
273
307
|
return {
|
|
274
308
|
handle: h,
|
|
275
309
|
plaintext: (0, encryption_js_1.bigintToPlaintext)(encryption_js_1.encryptionSchemes.ecies, handleType, bigIntValue),
|
|
@@ -341,4 +375,4 @@ async function getIncoVerifier(incoLiteAddress, walletClient) {
|
|
|
341
375
|
client: walletClient,
|
|
342
376
|
});
|
|
343
377
|
}
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWR2YW5jZWRhY2wvc2Vzc2lvbi1rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnR0Esd0RBcUJDO0FBd0JELDBDQWlFQztBQXNCRCxzREFrRUM7QUFFRCw0RUFPQztBQTZCRCw4REE4R0M7QUEwQkQsOERBMEdDO0FBOWpCRCxpREFBNEM7QUFFNUMsK0JBV2M7QUFDZCw0Q0FBb0Q7QUFDcEQsMERBR3FDO0FBQ3JDLDBDQUFrRTtBQUNsRSwrREFLcUM7QUFDckMsaUZBR2dEO0FBQ2hELGlFQUd3QztBQUN4QywrREFBZ0U7QUFDaEUsMENBS3FCO0FBU3JCLCtDQVMwQjtBQUMxQix1REFHa0M7QUFDbEMsMENBQThEO0FBSTlELDBGQUk0RDtBQUM1RCw4RUFLc0Q7QUFnQnRELHNFQUFzRTtBQUN0RSx3RUFBd0U7QUFDeEUsK0JBQStCO0FBQ3hCLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsZUFBd0IsRUFDeEIsa0JBQTJELEVBQzNELGlCQUEwQixFQUMxQixZQUFpQixFQUNqQixhQUFrQjtJQUVsQixNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQWUsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUU1RSwwRUFBMEU7SUFDMUUsd0NBQXdDO0lBQ3hDLE1BQU0sWUFBWSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztRQUNyRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsT0FBTztLQUNuQyxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsWUFBWTtRQUNaLGlCQUFpQjtRQUNqQixZQUFZO1FBQ1osYUFBYTtLQUNkLENBQUM7QUFDSixDQUFDO0FBdUJELG1EQUFtRDtBQUM1QyxLQUFLLFVBQVUsZUFBZSxDQUFDLEVBQ3BDLE9BQU8sRUFDUCxlQUFlLEVBQ2YsOEJBQThCLEVBQzlCLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsU0FB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
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWR2YW5jZWRhY2wvc2Vzc2lvbi1rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpR0Esd0RBcUJDO0FBd0JELDBDQWlFQztBQXlCRCxzREFtRkM7QUFFRCw0RUFPQztBQTZCRCw4REFxSEM7QUE4QkQsOERBZ0lDO0FBcG5CRCxpREFBNEM7QUFFNUMsK0JBWWM7QUFDZCw0Q0FBb0Q7QUFDcEQsMERBR3FDO0FBQ3JDLDBDQUFrRTtBQUNsRSwrREFLcUM7QUFDckMsaUZBR2dEO0FBQ2hELGlFQUd3QztBQUN4QywrREFBZ0U7QUFDaEUsMENBS3FCO0FBUXJCLCtDQVEwQjtBQUMxQix1REFHa0M7QUFDbEMsMENBQThEO0FBSTlELDBGQUk0RDtBQUM1RCw4RUFLc0Q7QUFDdEQsdURBQWtFO0FBaUJsRSxzRUFBc0U7QUFDdEUsd0VBQXdFO0FBQ3hFLCtCQUErQjtBQUN4QixLQUFLLFVBQVUsc0JBQXNCLENBQzFDLGVBQXdCLEVBQ3hCLGtCQUEyRCxFQUMzRCxpQkFBMEIsRUFDMUIsWUFBaUIsRUFDakIsYUFBa0I7SUFFbEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxlQUFlLENBQUMsZUFBZSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFFNUUsMEVBQTBFO0lBQzFFLHdDQUF3QztJQUN4QyxNQUFNLFlBQVksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUM7UUFDckUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE9BQU87S0FDbkMsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLFlBQVk7UUFDWixpQkFBaUI7UUFDakIsWUFBWTtRQUNaLGFBQWE7S0FDZCxDQUFDO0FBQ0osQ0FBQztBQXVCRCxtREFBbUQ7QUFDNUMsS0FBSyxVQUFVLGVBQWUsQ0FBQyxFQUNwQyxPQUFPLEVBQ1AsZUFBZSxFQUNmLDhCQUE4QixFQUM5QixjQUFjLEVBQ2Qsa0JB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
|
|
@@ -70,15 +70,22 @@ async function attestedCompute({ lhsHandle, op, rhsPlaintext, backoffConfig, wal
|
|
|
70
70
|
return await kmsClient.attestedCompute(attestedComputeRequest);
|
|
71
71
|
}, backoffConfig);
|
|
72
72
|
const decryptionAttestation = response.decryptionAttestation;
|
|
73
|
-
if (decryptionAttestation
|
|
74
|
-
throw new types_js_1.AttestedComputeError('No
|
|
73
|
+
if (decryptionAttestation === undefined) {
|
|
74
|
+
throw new types_js_1.AttestedComputeError('No decryption attestation in response');
|
|
75
75
|
}
|
|
76
|
+
if (decryptionAttestation.value === undefined) {
|
|
77
|
+
throw new types_js_1.AttestedComputeError('No value in compute response');
|
|
78
|
+
}
|
|
79
|
+
if (decryptionAttestation.value.case !== 'plaintext') {
|
|
80
|
+
throw new types_js_1.AttestedComputeError(`Unexpected attestation type: ${decryptionAttestation.value.case}, expected 'plaintext'`);
|
|
81
|
+
}
|
|
82
|
+
const plaintext = decryptionAttestation.value.value;
|
|
76
83
|
const computeResultHandle = response.decryptionAttestation?.handle;
|
|
77
84
|
if (!computeResultHandle) {
|
|
78
85
|
throw new types_js_1.AttestedComputeError('No compute result handle in response');
|
|
79
86
|
}
|
|
80
87
|
const handleType = (0, handle_js_1.getHandleType)(computeResultHandle);
|
|
81
|
-
const bigIntValue = (0, binary_js_1.bytesToBigInt)(
|
|
88
|
+
const bigIntValue = (0, binary_js_1.bytesToBigInt)(plaintext.value);
|
|
82
89
|
return {
|
|
83
90
|
handle: computeResultHandle,
|
|
84
91
|
plaintext: (0, encryption_js_1.bigintToPlaintext)(encryption_js_1.encryptionSchemes.ecies, handleType, bigIntValue),
|
|
@@ -92,4 +99,4 @@ async function attestedCompute({ lhsHandle, op, rhsPlaintext, backoffConfig, wal
|
|
|
92
99
|
throw new types_js_1.AttestedComputeError('Failed to perform attested compute', error);
|
|
93
100
|
}
|
|
94
101
|
}
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0ZWQtY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdHRlc3RlZGNvbXB1dGUvYXR0ZXN0ZWQtY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpREEsMENBa0hDO0FBbktELGlEQUE0QztBQUU1QywrQkFBa0M7QUFDbEMsZ0ZBQXdFO0FBRXhFLDRDQUF5RTtBQUN6RSwwQ0FBa0U7QUFDbEUsK0RBS3FDO0FBQ3JDLDBGQUk0RDtBQUM1RCw0Q0FBNkM7QUFFN0MsZ0RBQXdFO0FBQ3hFLHlEQUFnRTtBQUVoRSwwQ0FBK0M7QUFDL0MseUNBQXFFO0FBRXhELFFBQUEsNEJBQTRCLEdBQUcscUJBQXFCLENBQUM7QUFDckQsUUFBQSwrQkFBK0IsR0FBRyxPQUFPLENBQUM7QUFjdkQ7Ozs7Ozs7R0FPRztBQUNJLEtBQUssVUFBVSxlQUFlLENBQTZCLEVBQ2hFLFNBQVMsRUFDVCxFQUFFLEVBQ0YsWUFBWSxFQUNaLGFBQWEsRUFDYixZQUFZLEVBQ1osNkJBQTZCLEVBQzdCLE9BQU8sR0FTUjtJQUNDLElBQUksQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLElBQUEsd0JBQVksRUFDNUIsNkJBQTZCO1lBQzNCLElBQUEsa0NBQXNCLEVBQUMsSUFBQSw0QkFBaUIsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUNyRCxDQUFDO1FBQ0YsSUFBQSxvQ0FBYyxFQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTFCLE1BQU0sZUFBZSxHQUNuQixPQUFPLFlBQVksS0FBSyxTQUFTO1lBQy9CLENBQUMsQ0FBQyxZQUFZO2dCQUNaLENBQUMsQ0FBQyxFQUFFO2dCQUNKLENBQUMsQ0FBQyxFQUFFO1lBQ04sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUzQix1REFBdUQ7UUFDdkQsTUFBTSxhQUFhLEdBQUcsSUFBQSwrQkFBbUIsRUFBQztZQUN4QyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUN4QixXQUFXLEVBQUUsd0JBQXdCO1lBQ3JDLGlCQUFpQixFQUFFO2dCQUNqQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtnQkFDN0IsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7Z0JBQ3RDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2FBQzFDO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEVBQUUsRUFBRSxFQUFFO2dCQUNOLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixZQUFZLEVBQUUsSUFBQSwyQkFBZSxFQUFDLGVBQWUsQ0FBQzthQUMvQztZQUNELFVBQVUsRUFBRSxvQ0FBNEI7WUFDeEMsYUFBYSxFQUFFLHVDQUErQjtTQUMvQyxDQUFDLENBQUM7UUFFSCwwQkFBMEI7UUFDMUIsTUFBTSxlQUFlLEdBQUcsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXhFLE1BQU0sc0JBQXNCLEdBQTJCLElBQUEsaUJBQU0sRUFDM0QsZ0RBQTRCLEVBQzVCO1lBQ0UsV0FBVyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUN6QyxFQUFFLEVBQUUsRUFBRTtZQUNOLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFlBQVksRUFBRSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxlQUFlLEVBQUUsSUFBQSxpQkFBVSxFQUFDLGVBQWUsQ0FBQztZQUM1QyxRQUFRLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFO29CQUNMLElBQUksRUFBRSx1QkFBdUI7b0JBQzdCLEtBQUssRUFBRSxFQUFFO2lCQUNWO2FBQ0Y7U0FDRixDQUNGLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsMkJBQWdCLEVBQUMsS0FBSyxJQUFJLEVBQUU7WUFDakQsT0FBTyxNQUFNLFNBQVMsQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNqRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFbEIsTUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUMscUJBQXFCLENBQUM7UUFFN0QsSUFBSSxxQkFBcUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksK0JBQW9CLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBRUQsSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUMsTUFBTSxJQUFJLCtCQUFvQixDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELElBQUkscUJBQXFCLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNyRCxNQUFNLElBQUksK0JBQW9CLENBQzVCLGdDQUFnQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsSUFBSSx3QkFBd0IsQ0FDekYsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsS0FBa0IsQ0FBQztRQUVqRSxNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUM7UUFDbkUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLCtCQUFvQixDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUEseUJBQWEsRUFBQyxtQkFBZ0MsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sV0FBVyxHQUFHLElBQUEseUJBQWEsRUFBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbkQsT0FBTztZQUNMLE1BQU0sRUFBRSxtQkFBZ0M7WUFDeEMsU0FBUyxFQUFFLElBQUEsaUNBQWlCLEVBQzFCLGlDQUFpQixDQUFDLEtBQUssRUFDdkIsVUFBZSxFQUNmLFdBQVcsQ0FDWjtZQUNELG9CQUFvQixFQUFFLHFCQUFxQixDQUFDLFNBQVM7U0FDdEQsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVksK0JBQW9CLEVBQUUsQ0FBQztZQUMxQyxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLElBQUksK0JBQW9CLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUUsQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -3,8 +3,9 @@ import { HexString } from '../binary.js';
|
|
|
3
3
|
import { SupportedChainId } from '../chain.js';
|
|
4
4
|
import { EciesScheme, SupportedFheType } from '../encryption/encryption.js';
|
|
5
5
|
import type { KmsClient } from '../kms/client.js';
|
|
6
|
+
import { Secp256k1Keypair } from '../lite/ecies.js';
|
|
6
7
|
import type { BackoffConfig } from '../retry.js';
|
|
7
|
-
import { DecryptionAttestation } from './types.js';
|
|
8
|
+
import { DecryptionAttestation, EncryptedDecryptionAttestation } from './types.js';
|
|
8
9
|
export declare const ATTESTED_DECRYPT_DOMAIN_NAME = "IncoAttestedDecrypt";
|
|
9
10
|
export declare const ATTESTED_DECRYPT_DOMAIN_VERSION = "0.1.0";
|
|
10
11
|
/**
|
|
@@ -24,6 +25,40 @@ export interface IncoLiteAttestedDecryptorArgs {
|
|
|
24
25
|
/** The chain ID to use */
|
|
25
26
|
chainId: SupportedChainId;
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Decrypt multiple handles in a single attested request.
|
|
30
|
+
* Returns an array of attestations aligned with the response ordering.
|
|
31
|
+
*
|
|
32
|
+
* @param args - The arguments for creating the attested decrypt function
|
|
33
|
+
* @returns A function that can decrypt handles and return an attestation
|
|
34
|
+
* @throws {AttestedDecryptError} If the creation fails
|
|
35
|
+
*/
|
|
36
|
+
export declare function attestedDecrypt({ handles, backoffConfig, walletClient, chainId, reencryptPubKey, reencryptKeypair, kmsConnectRpcEndpointOrClient, }: {
|
|
37
|
+
handles: HexString[];
|
|
38
|
+
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
39
|
+
walletClient: WalletClient<Transport, Chain, Account>;
|
|
40
|
+
chainId: SupportedChainId;
|
|
41
|
+
reencryptPubKey: Uint8Array;
|
|
42
|
+
reencryptKeypair: Secp256k1Keypair;
|
|
43
|
+
kmsConnectRpcEndpointOrClient?: string | KmsClient;
|
|
44
|
+
}): Promise<Array<DecryptionAttestation<EciesScheme, SupportedFheType>>>;
|
|
45
|
+
/**
|
|
46
|
+
* Decrypt multiple handles in a single attested request.
|
|
47
|
+
* Returns an array of attestations aligned with the response ordering.
|
|
48
|
+
*
|
|
49
|
+
* @param args - The arguments for creating the attested decrypt function
|
|
50
|
+
* @returns A function that can decrypt handles and return an attestation
|
|
51
|
+
* @throws {AttestedDecryptError} If the creation fails
|
|
52
|
+
*/
|
|
53
|
+
export declare function attestedDecrypt({ handles, backoffConfig, walletClient, chainId, reencryptPubKey, kmsConnectRpcEndpointOrClient, }: {
|
|
54
|
+
handles: HexString[];
|
|
55
|
+
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
56
|
+
walletClient: WalletClient<Transport, Chain, Account>;
|
|
57
|
+
chainId: SupportedChainId;
|
|
58
|
+
reencryptPubKey: Uint8Array;
|
|
59
|
+
reencryptKeypair?: never;
|
|
60
|
+
kmsConnectRpcEndpointOrClient?: string | KmsClient;
|
|
61
|
+
}): Promise<Array<EncryptedDecryptionAttestation<EciesScheme, SupportedFheType>>>;
|
|
27
62
|
/**
|
|
28
63
|
* Decrypt multiple handles in a single attested request.
|
|
29
64
|
* Returns an array of attestations aligned with the response ordering.
|
|
@@ -37,5 +72,7 @@ export declare function attestedDecrypt({ handles, backoffConfig, walletClient,
|
|
|
37
72
|
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
38
73
|
walletClient: WalletClient<Transport, Chain, Account>;
|
|
39
74
|
chainId: SupportedChainId;
|
|
75
|
+
reencryptPubKey?: never;
|
|
76
|
+
reencryptKeypair?: never;
|
|
40
77
|
kmsConnectRpcEndpointOrClient?: string | KmsClient;
|
|
41
78
|
}): Promise<Array<DecryptionAttestation<EciesScheme, SupportedFheType>>>;
|
|
@@ -12,6 +12,7 @@ const kms_service_pb_js_1 = require("../generated/es/inco/kms/lite/v1/kms_servic
|
|
|
12
12
|
const types_pb_js_1 = require("../generated/es/inco/kms/lite/v1/types_pb.js");
|
|
13
13
|
const handle_js_1 = require("../handle.js");
|
|
14
14
|
const client_js_1 = require("../kms/client.js");
|
|
15
|
+
const reencrypt_js_1 = require("../lite/reencrypt.js");
|
|
15
16
|
const eip712_js_1 = require("../reencryption/eip712.js");
|
|
16
17
|
const retry_js_1 = require("../retry.js");
|
|
17
18
|
const types_js_1 = require("./types.js");
|
|
@@ -35,7 +36,7 @@ function validateHandle(handle) {
|
|
|
35
36
|
* @returns A function that can decrypt handles and return an attestation
|
|
36
37
|
* @throws {AttestedDecryptError} If the creation fails
|
|
37
38
|
*/
|
|
38
|
-
async function attestedDecrypt({ handles, backoffConfig, walletClient, chainId, kmsConnectRpcEndpointOrClient, }) {
|
|
39
|
+
async function attestedDecrypt({ handles, backoffConfig, walletClient, chainId, reencryptPubKey, reencryptKeypair, kmsConnectRpcEndpointOrClient, }) {
|
|
39
40
|
try {
|
|
40
41
|
handles.forEach(validateHandle);
|
|
41
42
|
const kmsClient = (0, client_js_1.getKmsClient)(kmsConnectRpcEndpointOrClient ||
|
|
@@ -44,9 +45,13 @@ async function attestedDecrypt({ handles, backoffConfig, walletClient, chainId,
|
|
|
44
45
|
const eip712Payload = (0, eip712_js_1.createEIP712Payload)({
|
|
45
46
|
chainId: BigInt(chainId),
|
|
46
47
|
primaryType: 'AttestedDecryptRequest',
|
|
47
|
-
primaryTypeFields: [
|
|
48
|
+
primaryTypeFields: [
|
|
49
|
+
{ name: 'handles', type: 'bytes32[]' },
|
|
50
|
+
{ name: 'publicKey', type: 'bytes' },
|
|
51
|
+
],
|
|
48
52
|
message: {
|
|
49
53
|
handles: handles,
|
|
54
|
+
publicKey: (0, viem_1.bytesToHex)(reencryptPubKey ? reencryptPubKey : new Uint8Array()),
|
|
50
55
|
},
|
|
51
56
|
domainName: exports.ATTESTED_DECRYPT_DOMAIN_NAME,
|
|
52
57
|
domainVersion: exports.ATTESTED_DECRYPT_DOMAIN_VERSION,
|
|
@@ -68,21 +73,59 @@ async function attestedDecrypt({ handles, backoffConfig, walletClient, chainId,
|
|
|
68
73
|
userAddress: walletClient.account.address,
|
|
69
74
|
handlesWithProofs: handlesWithProofs,
|
|
70
75
|
eip712Signature: (0, viem_1.hexToBytes)(eip712Signature),
|
|
76
|
+
reencryptPubKey: reencryptPubKey ? reencryptPubKey : new Uint8Array(),
|
|
71
77
|
});
|
|
72
|
-
|
|
78
|
+
var response = await (0, retry_js_1.retryWithBackoff)(async () => {
|
|
73
79
|
return await kmsClient.attestedDecrypt(attestedDecryptRequest);
|
|
74
80
|
}, backoffConfig);
|
|
75
81
|
if (!response.decryptionAttestations ||
|
|
76
82
|
response.decryptionAttestations.length === 0) {
|
|
77
83
|
throw new types_js_1.AttestedDecryptError('No decryption attestations in response');
|
|
78
84
|
}
|
|
85
|
+
// If reencryptPubKey is provided without a keypair, we return EncryptedDecryptionAttestation
|
|
86
|
+
if (reencryptPubKey !== undefined) {
|
|
87
|
+
if (reencryptKeypair) {
|
|
88
|
+
response = await (0, reencrypt_js_1.decryptGrpcDecryptResponse)(response, reencryptKeypair);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
return response.decryptionAttestations.map((att) => {
|
|
92
|
+
if (att.value === undefined) {
|
|
93
|
+
throw new types_js_1.AttestedDecryptError('No reencryption in attestation');
|
|
94
|
+
}
|
|
95
|
+
if (att.value.case !== 'reencryption') {
|
|
96
|
+
throw new Error(`Unexpected attestation type: ${att.value.case}, expected 'reencryption'`);
|
|
97
|
+
}
|
|
98
|
+
const reencryption = att.value.value;
|
|
99
|
+
const fheType = reencryption.userCiphertext?.fheType;
|
|
100
|
+
const ct = reencryption.userCiphertext?.ciphertext;
|
|
101
|
+
if (ct == undefined) {
|
|
102
|
+
throw new Error('No ciphertext in reencryption');
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
handle: att.handle,
|
|
106
|
+
encryptedPlaintext: {
|
|
107
|
+
ciphertext: {
|
|
108
|
+
value: (0, viem_1.bytesToHex)(ct),
|
|
109
|
+
scheme: 1, //EciesScheme
|
|
110
|
+
type: fheType,
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
covalidatorSignature: att.signature,
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
79
118
|
const results = response.decryptionAttestations.map((att) => {
|
|
80
|
-
if (att.
|
|
119
|
+
if (att.value === undefined) {
|
|
81
120
|
throw new types_js_1.AttestedDecryptError('No plaintext in attestation');
|
|
82
121
|
}
|
|
122
|
+
if (att.value.case !== 'plaintext') {
|
|
123
|
+
throw new Error(`Unexpected attestation type: ${att.value.case}, expected 'plaintext'`);
|
|
124
|
+
}
|
|
125
|
+
const plaintext = att.value.value;
|
|
83
126
|
const h = att.handle;
|
|
84
127
|
const handleType = (0, handle_js_1.getHandleType)(h);
|
|
85
|
-
const bigIntValue = (0, binary_js_1.bytesToBigInt)(
|
|
128
|
+
const bigIntValue = (0, binary_js_1.bytesToBigInt)(plaintext.value);
|
|
86
129
|
return {
|
|
87
130
|
handle: h,
|
|
88
131
|
plaintext: (0, encryption_js_1.bigintToPlaintext)(encryption_js_1.encryptionSchemes.ecies, handleType, bigIntValue),
|
|
@@ -98,4 +141,4 @@ async function attestedDecrypt({ handles, backoffConfig, walletClient, chainId,
|
|
|
98
141
|
throw new types_js_1.AttestedDecryptError('Failed to decrypt handles', error);
|
|
99
142
|
}
|
|
100
143
|
}
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0ZWQtZGVjcnlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdHRlc3RlZGRlY3J5cHQvYXR0ZXN0ZWQtZGVjcnlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE0Q0Esd0NBTUM7QUFzR0QsMENBNEpDO0FBcFRELGlEQUE0QztBQUU1QywrQkFBOEM7QUFDOUMsNENBQXdEO0FBQ3hELDBDQUFrRTtBQUNsRSwrREFNcUM7QUFDckMsMEZBSzREO0FBQzVELDhFQUdzRDtBQUN0RCw0Q0FBNkM7QUFFN0MsZ0RBQXdFO0FBRXhFLHVEQUFrRTtBQUNsRSx5REFBZ0U7QUFFaEUsMENBQStDO0FBQy9DLHlDQUlvQjtBQUVQLFFBQUEsNEJBQTRCLEdBQUcscUJBQXFCLENBQUM7QUFDckQsUUFBQSwrQkFBK0IsR0FBRyxPQUFPLENBQUM7QUFFdkQ7Ozs7R0FJRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxNQUFpQjtJQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDN0QsTUFBTSxJQUFJLCtCQUFvQixDQUM1QixvRUFBb0UsQ0FDckUsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDO0FBOEZEOzs7Ozs7O0dBT0c7QUFDSSxLQUFLLFVBQVUsZUFBZSxDQUFDLEVBQ3BDLE9BQU8sRUFDUCxhQUFhLEVBQ2IsWUFBWSxFQUNaLE9BQU8sRUFDUCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLDZCQUE2QixHQVM5QjtJQU1DLElBQUksQ0FBQztRQUNILE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBQSx3QkFBWSxFQUM1Qiw2QkFBNkI7WUFDM0IsSUFBQSxrQ0FBc0IsRUFBQyxJQUFBLDRCQUFpQixFQUFDLE9BQU8sQ0FBQyxDQUFD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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HexString } from '../binary.js';
|
|
2
|
-
import { EncryptionScheme, PlaintextOf, SupportedFheType } from '../encryption/encryption.js';
|
|
2
|
+
import { EncryptionScheme, EncryptResultOf, PlaintextOf, SupportedFheType } from '../encryption/encryption.js';
|
|
3
3
|
import type { BackoffConfig } from '../retry.js';
|
|
4
4
|
/**
|
|
5
5
|
* Custom error class for attested decrypt operations.
|
|
@@ -13,6 +13,11 @@ export type DecryptionAttestation<S extends EncryptionScheme, T extends Supporte
|
|
|
13
13
|
plaintext: PlaintextOf<S, T>;
|
|
14
14
|
covalidatorSignature: Uint8Array;
|
|
15
15
|
};
|
|
16
|
+
export type EncryptedDecryptionAttestation<S extends EncryptionScheme, T extends SupportedFheType> = {
|
|
17
|
+
handle: HexString;
|
|
18
|
+
encryptedPlaintext: EncryptResultOf<S, T>;
|
|
19
|
+
covalidatorSignature: Uint8Array;
|
|
20
|
+
};
|
|
16
21
|
export type AttestedDecryptor<S extends EncryptionScheme> = <T extends SupportedFheType>(args: AttestedDecryptFnArgs<S, T>) => Promise<DecryptionAttestation<S, T>>;
|
|
17
22
|
export type AttestedDecryptFnArgs<S extends EncryptionScheme, T extends SupportedFheType> = {
|
|
18
23
|
/** The handle to decrypt */
|
|
@@ -13,4 +13,4 @@ class AttestedDecryptError extends Error {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
exports.AttestedDecryptError = AttestedDecryptError;
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXR0ZXN0ZWRkZWNyeXB0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVNBOztHQUVHO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSxLQUFLO0lBRzNCO0lBRmxCLFlBQ0UsT0FBZSxFQUNDLEtBQWU7UUFFL0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRkMsVUFBSyxHQUFMLEtBQUssQ0FBVTtRQUcvQixJQUFJLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQVJELG9EQVFDIn0=
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.attestedReveal = attestedReveal;
|
|
4
|
+
const protobuf_1 = require("@bufbuild/protobuf");
|
|
4
5
|
const binary_js_1 = require("../binary.js");
|
|
5
6
|
const chain_js_1 = require("../chain.js");
|
|
6
7
|
const encryption_js_1 = require("../encryption/encryption.js");
|
|
8
|
+
const kms_service_pb_js_1 = require("../generated/es/inco/kms/lite/v1/kms_service_pb.js");
|
|
7
9
|
const handle_js_1 = require("../handle.js");
|
|
8
10
|
const client_js_1 = require("../kms/client.js");
|
|
9
11
|
const retry_js_1 = require("../retry.js");
|
|
@@ -32,10 +34,9 @@ async function attestedReveal({ handles, backoffConfig, chainId, kmsConnectRpcEn
|
|
|
32
34
|
handles.forEach(validateHandle);
|
|
33
35
|
const kmsClient = (0, client_js_1.getKmsClient)(kmsConnectRpcEndpointOrClient ||
|
|
34
36
|
(0, client_js_1.defaultCovalidatorGrpc)((0, chain_js_1.getSupportedChain)(chainId)));
|
|
35
|
-
const attestedRevealRequest = {
|
|
36
|
-
$typeName: 'inco.kms.lite.v1.AttestedRevealRequest',
|
|
37
|
+
const attestedRevealRequest = (0, protobuf_1.create)(kms_service_pb_js_1.AttestedRevealRequestSchema, {
|
|
37
38
|
handles: handles,
|
|
38
|
-
};
|
|
39
|
+
});
|
|
39
40
|
const response = await (0, retry_js_1.retryWithBackoff)(async () => {
|
|
40
41
|
return await kmsClient.attestedReveal(attestedRevealRequest);
|
|
41
42
|
}, backoffConfig);
|
|
@@ -43,12 +44,13 @@ async function attestedReveal({ handles, backoffConfig, chainId, kmsConnectRpcEn
|
|
|
43
44
|
throw new types_js_1.AttestedRevealError(`Expected ${handles.length} decryption attestations in response, got ${response.decryptionAttestations.length}`);
|
|
44
45
|
}
|
|
45
46
|
const results = response.decryptionAttestations.map((att) => {
|
|
46
|
-
if (att.
|
|
47
|
-
throw new types_js_1.AttestedRevealError('No
|
|
47
|
+
if (att.value === undefined) {
|
|
48
|
+
throw new types_js_1.AttestedRevealError('No value in attestation');
|
|
48
49
|
}
|
|
50
|
+
const plaintext = att.value.value;
|
|
49
51
|
const h = att.handle;
|
|
50
52
|
const handleType = (0, handle_js_1.getHandleType)(h);
|
|
51
|
-
const bigIntValue = (0, binary_js_1.bytesToBigInt)(
|
|
53
|
+
const bigIntValue = (0, binary_js_1.bytesToBigInt)(plaintext.value);
|
|
52
54
|
return {
|
|
53
55
|
handle: h,
|
|
54
56
|
plaintext: (0, encryption_js_1.bigintToPlaintext)(encryption_js_1.encryptionSchemes.ecies, handleType, bigIntValue),
|
|
@@ -64,4 +66,4 @@ async function attestedReveal({ handles, backoffConfig, chainId, kmsConnectRpcEn
|
|
|
64
66
|
throw new types_js_1.AttestedRevealError('Failed to reveal handles', error);
|
|
65
67
|
}
|
|
66
68
|
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0ZWQtcmV2ZWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F0dGVzdGVkcmV2ZWFsL2F0dGVzdGVkLXJldmVhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTRDQSx3Q0E4REM7QUExR0QsaURBQTRDO0FBRTVDLDRDQUF3RDtBQUN4RCwwQ0FBa0U7QUFDbEUsK0RBS3FDO0FBQ3JDLDBGQUk0RDtBQUM1RCw0Q0FBNkM7QUFFN0MsZ0RBQXdFO0FBRXhFLDBDQUErQztBQUMvQyx5Q0FBaUQ7QUFFakQ7Ozs7R0FJRztBQUNILFNBQVMsY0FBYyxDQUFDLE1BQWM7SUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQzdELE1BQU0sSUFBSSw4QkFBbUIsQ0FDM0Isb0VBQW9FLENBQ3JFLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0ksS0FBSyxVQUFVLGNBQWMsQ0FBQyxFQUNuQyxPQUFPLEVBQ1AsYUFBYSxFQUNiLE9BQU8sRUFDUCw2QkFBNkIsR0FNOUI7SUFDQyxJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUEsd0JBQVksRUFDNUIsNkJBQTZCO1lBQzNCLElBQUEsa0NBQXNCLEVBQUMsSUFBQSw0QkFBaUIsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUNyRCxDQUFDO1FBRUYsTUFBTSxxQkFBcUIsR0FBMEIsSUFBQSxpQkFBTSxFQUN6RCwrQ0FBMkIsRUFDM0I7WUFDRSxPQUFPLEVBQUUsT0FBTztTQUNqQixDQUNGLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsMkJBQWdCLEVBQUMsS0FBSyxJQUFJLEVBQUU7WUFDakQsT0FBTyxNQUFNLFNBQVMsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMvRCxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFbEIsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5RCxNQUFNLElBQUksOEJBQW1CLENBQzNCLFlBQVksT0FBTyxDQUFDLE1BQU0sNkNBQTZDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsQ0FDaEgsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FDWCxRQUFRLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLElBQUksOEJBQW1CLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFrQixDQUFDO1lBQy9DLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFtQixDQUFDO1lBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUEseUJBQWEsRUFBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxNQUFNLFdBQVcsR0FBRyxJQUFBLHlCQUFhLEVBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELE9BQU87Z0JBQ0wsTUFBTSxFQUFFLENBQUM7Z0JBQ1QsU0FBUyxFQUFFLElBQUEsaUNBQWlCLEVBQzFCLGlDQUFpQixDQUFDLEtBQUssRUFDdkIsVUFBOEIsRUFDOUIsV0FBVyxDQUNaO2dCQUNELG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxTQUFTO2FBQ3BDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVMLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVksOEJBQW1CLEVBQUUsQ0FBQztZQUN6QyxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLElBQUksOEJBQW1CLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkUsQ0FBQztBQUNILENBQUMifQ==
|
package/dist/cjs/binary.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export type HexString = typeof HexString.Type;
|
|
|
5
5
|
export type BytesIsh = string | Uint8Array;
|
|
6
6
|
export declare function bytesToBigInt(byteArray: Uint8Array): bigint;
|
|
7
7
|
export declare function bufferToBigInt(buffer: Buffer): bigint;
|
|
8
|
+
export declare function bigintToBytes(value: bigint): Buffer;
|
|
8
9
|
export declare function bigintToBytes32(value: bigint): Bytes32;
|
|
9
10
|
export declare function padLeft(bs: Uint8Array, n: number): Buffer;
|
|
10
11
|
export declare function bytes32ToBigint(bs: BytesIsh): bigint;
|
package/dist/cjs/binary.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Address = exports.Bytes32 = exports.HexString = void 0;
|
|
4
4
|
exports.bytesToBigInt = bytesToBigInt;
|
|
5
5
|
exports.bufferToBigInt = bufferToBigInt;
|
|
6
|
+
exports.bigintToBytes = bigintToBytes;
|
|
6
7
|
exports.bigintToBytes32 = bigintToBytes32;
|
|
7
8
|
exports.padLeft = padLeft;
|
|
8
9
|
exports.bytes32ToBigint = bytes32ToBigint;
|
|
@@ -26,11 +27,14 @@ function bytesToBigInt(byteArray) {
|
|
|
26
27
|
function bufferToBigInt(buffer) {
|
|
27
28
|
return bytesToBigInt(Uint8Array.from(buffer));
|
|
28
29
|
}
|
|
30
|
+
function bigintToBytes(value) {
|
|
31
|
+
return Buffer.from(value.toString(16).padStart(64, '0'), 'hex');
|
|
32
|
+
}
|
|
29
33
|
// Convert a bigint to a 32-byte array, left-padded if necessary. Note: it is
|
|
30
34
|
// caller's responsibility to ensure that the bigint is not too large to fit in
|
|
31
35
|
// 32 bytes, or else the result will be truncated.
|
|
32
36
|
function bigintToBytes32(value) {
|
|
33
|
-
return (0, schema_js_1.parse)(exports.Bytes32,
|
|
37
|
+
return (0, schema_js_1.parse)(exports.Bytes32, bigintToBytes(value).toString('hex'));
|
|
34
38
|
}
|
|
35
39
|
function padLeft(bs, n) {
|
|
36
40
|
if (bs.length > n) {
|
|
@@ -82,4 +86,4 @@ function parseAddress(address) {
|
|
|
82
86
|
function parseHex(hex) {
|
|
83
87
|
return (0, schema_js_1.parse)(exports.HexString, hex);
|
|
84
88
|
}
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JpbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFVQSxzQ0FLQztBQUVELHdDQUVDO0FBRUQsc0NBRUM7QUFLRCwwQ0FFQztBQUVELDBCQU9DO0FBRUQsMENBR0M7QUFFRCxnREFLQztBQUVELDhCQUtDO0FBRUQsd0NBRUM7QUFFRCxnQ0FFQztBQWlDRCw4QkFFQztBQWVELG9DQUVDO0FBRUQsNEJBRUM7QUExSEQsbUNBQTZDO0FBQzdDLCtCQUFrQztBQUNsQywyQ0FBb0M7QUFFdkIsUUFBQSxTQUFTLEdBQUcsZUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsZUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBTXJFLFNBQWdCLGFBQWEsQ0FBQyxTQUFxQjtJQUNqRCwrR0FBK0c7SUFDL0csT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNO1FBQ3ZCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLE1BQWM7SUFDM0MsT0FBTyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxTQUFnQixhQUFhLENBQUMsS0FBYTtJQUN6QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCw2RUFBNkU7QUFDN0UsK0VBQStFO0FBQy9FLGtEQUFrRDtBQUNsRCxTQUFnQixlQUFlLENBQUMsS0FB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
|