@inco/js 0.2.17 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/advancedacl/index.d.ts +2 -0
- package/dist/cjs/{generated/abis → advancedacl}/index.js +3 -3
- package/dist/cjs/advancedacl/session-key.d.ts +28 -0
- package/dist/cjs/advancedacl/session-key.js +176 -0
- package/dist/cjs/advancedacl/types.d.ts +15 -0
- package/dist/cjs/advancedacl/types.js +3 -0
- package/dist/cjs/attestedcompute/attested-compute.d.ts +38 -0
- package/dist/cjs/attestedcompute/attested-compute.js +98 -0
- package/dist/cjs/attestedcompute/types.d.ts +34 -0
- package/dist/cjs/attestedcompute/types.js +46 -0
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +6 -0
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +3 -1
- package/dist/cjs/attesteddecrypt/types.d.ts +6 -4
- package/dist/cjs/chain.d.ts +3 -0
- package/dist/cjs/chain.js +5 -2
- package/dist/cjs/generated/abis/lightning-preview.d.ts +2265 -0
- package/dist/cjs/generated/abis/lightning-preview.js +1429 -0
- package/dist/cjs/generated/abis/lightning.d.ts +4 -0
- package/dist/cjs/generated/abis/lightning.js +5 -2
- package/dist/cjs/generated/es/cosmos/msg/v1/msg_pb.d.ts +1 -1
- package/dist/cjs/generated/es/cosmos/msg/v1/msg_pb.js +5 -5
- package/dist/cjs/generated/es/cosmos_proto/cosmos_pb.d.ts +1 -1
- package/dist/cjs/generated/es/cosmos_proto/cosmos_pb.js +15 -15
- package/dist/cjs/generated/es/google/api/annotations_pb.d.ts +1 -1
- package/dist/cjs/generated/es/google/api/annotations_pb.js +3 -3
- package/dist/cjs/generated/es/google/api/http_pb.d.ts +1 -1
- package/dist/cjs/generated/es/google/api/http_pb.js +5 -5
- package/dist/cjs/generated/es/inco/fhe/v1/events_pb.d.ts +1 -1
- package/dist/cjs/generated/es/inco/fhe/v1/events_pb.js +5 -5
- package/dist/cjs/generated/es/inco/fhe/v1/genesis_pb.d.ts +1 -1
- package/dist/cjs/generated/es/inco/fhe/v1/genesis_pb.js +10 -10
- package/dist/cjs/generated/es/inco/fhe/v1/query_pb.d.ts +1 -1
- package/dist/cjs/generated/es/inco/fhe/v1/query_pb.js +22 -22
- package/dist/cjs/generated/es/inco/fhe/v1/tx_pb.d.ts +1 -1
- package/dist/cjs/generated/es/inco/fhe/v1/tx_pb.js +22 -22
- package/dist/cjs/generated/es/inco/fhe/v1/types_pb.d.ts +1 -1
- package/dist/cjs/generated/es/inco/fhe/v1/types_pb.js +16 -16
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +194 -1
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +114 -14
- package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.d.ts +1 -1
- package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.js +10 -10
- package/dist/cjs/generated/es/inco/preflight/v1/genesis_pb.d.ts +1 -1
- package/dist/cjs/generated/es/inco/preflight/v1/genesis_pb.js +5 -5
- package/dist/cjs/generated/es/inco/preflight/v1/query_pb.d.ts +1 -1
- package/dist/cjs/generated/es/inco/preflight/v1/query_pb.js +8 -8
- package/dist/cjs/generated/es/inco/preflight/v1/tx_pb.d.ts +1 -1
- package/dist/cjs/generated/es/inco/preflight/v1/tx_pb.js +10 -10
- package/dist/cjs/generated/es/inco/preflight/v1/types_pb.d.ts +1 -1
- package/dist/cjs/generated/es/inco/preflight/v1/types_pb.js +8 -8
- package/dist/cjs/generated/lightning.d.ts +42 -0
- package/dist/cjs/generated/lightning.js +45 -1
- package/dist/cjs/generated/local-node.d.ts +13 -2
- package/dist/cjs/generated/local-node.js +14 -3
- package/dist/cjs/generated/ts/amino/amino.js +1 -1
- package/dist/cjs/generated/ts/cometbft/abci/v1/types.js +49 -49
- package/dist/cjs/generated/ts/cometbft/crypto/v1/keys.js +3 -3
- package/dist/cjs/generated/ts/cometbft/crypto/v1/proof.js +7 -7
- package/dist/cjs/generated/ts/cometbft/types/v1/params.js +11 -11
- package/dist/cjs/generated/ts/cometbft/types/v1/validator.js +5 -5
- package/dist/cjs/generated/ts/cosmos/app/v1alpha1/module.js +5 -5
- package/dist/cjs/generated/ts/cosmos/msg/v1/msg.js +1 -1
- package/dist/cjs/generated/ts/cosmos_proto/cosmos.js +4 -4
- package/dist/cjs/generated/ts/gogoproto/gogo.js +1 -1
- package/dist/cjs/generated/ts/google/api/annotations.js +1 -1
- package/dist/cjs/generated/ts/google/api/http.js +5 -5
- package/dist/cjs/generated/ts/google/protobuf/descriptor.js +35 -35
- package/dist/cjs/generated/ts/google/protobuf/duration.js +3 -3
- package/dist/cjs/generated/ts/google/protobuf/timestamp.js +3 -3
- package/dist/cjs/generated/ts/google/protobuf/wrappers.js +11 -11
- package/dist/cjs/generated/ts/inco/abci/v1/types.js +3 -3
- package/dist/cjs/generated/ts/inco/fhe/module/v1/module.js +3 -3
- package/dist/cjs/generated/ts/inco/fhe/v1/events.js +4 -4
- package/dist/cjs/generated/ts/inco/fhe/v1/genesis.js +9 -9
- package/dist/cjs/generated/ts/inco/fhe/v1/query.d.ts +19 -19
- package/dist/cjs/generated/ts/inco/fhe/v1/query.js +20 -20
- package/dist/cjs/generated/ts/inco/fhe/v1/tx.d.ts +19 -19
- package/dist/cjs/generated/ts/inco/fhe/v1/tx.js +20 -20
- package/dist/cjs/generated/ts/inco/fhe/v1/types.js +14 -14
- package/dist/cjs/generated/ts/inco/originchain/module/v1/module.js +3 -3
- package/dist/cjs/generated/ts/inco/originchain/v1/abci.js +6 -6
- package/dist/cjs/generated/ts/inco/originchain/v1/events.js +4 -4
- package/dist/cjs/generated/ts/inco/originchain/v1/genesis.js +3 -3
- package/dist/cjs/generated/ts/inco/originchain/v1/query.d.ts +5 -5
- package/dist/cjs/generated/ts/inco/originchain/v1/query.js +6 -6
- package/dist/cjs/generated/ts/inco/originchain/v1/tx.d.ts +3 -3
- package/dist/cjs/generated/ts/inco/originchain/v1/tx.js +4 -4
- package/dist/cjs/generated/ts/inco/originchain/v1/types.js +4 -4
- package/dist/cjs/generated/ts/inco/preflight/module/v1/module.js +3 -3
- package/dist/cjs/generated/ts/inco/preflight/v1/genesis.js +4 -4
- package/dist/cjs/generated/ts/inco/preflight/v1/query.d.ts +5 -5
- package/dist/cjs/generated/ts/inco/preflight/v1/query.js +6 -6
- package/dist/cjs/generated/ts/inco/preflight/v1/tx.d.ts +7 -7
- package/dist/cjs/generated/ts/inco/preflight/v1/tx.js +8 -8
- package/dist/cjs/generated/ts/inco/preflight/v1/types.js +7 -7
- package/dist/cjs/lite/attested-compute.d.ts +4 -0
- package/dist/cjs/lite/attested-compute.js +6 -0
- package/dist/cjs/lite/ecies.js +2 -2
- package/dist/cjs/lite/lightning.d.ts +65 -3
- package/dist/cjs/lite/lightning.js +87 -3
- package/dist/cjs/local/local-node.d.ts +4 -1
- package/dist/cjs/local/local-node.js +22 -17
- package/dist/cjs/reencryption/eip712.js +5 -3
- package/dist/cjs/viem.d.ts +362 -0
- package/dist/cjs/viem.js +2 -2
- package/dist/esm/advancedacl/index.d.ts +2 -0
- package/dist/esm/advancedacl/index.js +3 -0
- package/dist/esm/advancedacl/session-key.d.ts +28 -0
- package/dist/esm/advancedacl/session-key.js +170 -0
- package/dist/esm/advancedacl/types.d.ts +15 -0
- package/dist/esm/advancedacl/types.js +2 -0
- package/dist/esm/attestedcompute/attested-compute.d.ts +38 -0
- package/dist/esm/attestedcompute/attested-compute.js +95 -0
- package/dist/esm/attestedcompute/types.d.ts +34 -0
- package/dist/esm/attestedcompute/types.js +42 -0
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +6 -0
- package/dist/esm/attesteddecrypt/attested-decrypt.js +4 -3
- package/dist/esm/attesteddecrypt/types.d.ts +6 -4
- package/dist/esm/chain.d.ts +3 -0
- package/dist/esm/chain.js +5 -2
- package/dist/esm/generated/abis/lightning-preview.d.ts +2265 -0
- package/dist/esm/generated/abis/lightning-preview.js +1426 -0
- package/dist/esm/generated/abis/lightning.d.ts +4 -0
- package/dist/esm/generated/abis/lightning.js +5 -2
- package/dist/esm/generated/es/cosmos/msg/v1/msg_pb.d.ts +1 -1
- package/dist/esm/generated/es/cosmos/msg/v1/msg_pb.js +2 -2
- package/dist/esm/generated/es/cosmos_proto/cosmos_pb.d.ts +1 -1
- package/dist/esm/generated/es/cosmos_proto/cosmos_pb.js +2 -2
- package/dist/esm/generated/es/google/api/annotations_pb.d.ts +1 -1
- package/dist/esm/generated/es/google/api/annotations_pb.js +1 -1
- package/dist/esm/generated/es/google/api/http_pb.d.ts +1 -1
- package/dist/esm/generated/es/google/api/http_pb.js +1 -1
- package/dist/esm/generated/es/inco/fhe/v1/events_pb.d.ts +1 -1
- package/dist/esm/generated/es/inco/fhe/v1/events_pb.js +2 -2
- package/dist/esm/generated/es/inco/fhe/v1/genesis_pb.d.ts +1 -1
- package/dist/esm/generated/es/inco/fhe/v1/genesis_pb.js +2 -2
- package/dist/esm/generated/es/inco/fhe/v1/query_pb.d.ts +1 -1
- package/dist/esm/generated/es/inco/fhe/v1/query_pb.js +2 -2
- package/dist/esm/generated/es/inco/fhe/v1/tx_pb.d.ts +1 -1
- package/dist/esm/generated/es/inco/fhe/v1/tx_pb.js +2 -2
- package/dist/esm/generated/es/inco/fhe/v1/types_pb.d.ts +1 -1
- 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 +194 -1
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +106 -6
- package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.d.ts +1 -1
- package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.js +2 -2
- package/dist/esm/generated/es/inco/preflight/v1/genesis_pb.d.ts +1 -1
- package/dist/esm/generated/es/inco/preflight/v1/genesis_pb.js +2 -2
- package/dist/esm/generated/es/inco/preflight/v1/query_pb.d.ts +1 -1
- package/dist/esm/generated/es/inco/preflight/v1/query_pb.js +2 -2
- package/dist/esm/generated/es/inco/preflight/v1/tx_pb.d.ts +1 -1
- package/dist/esm/generated/es/inco/preflight/v1/tx_pb.js +2 -2
- package/dist/esm/generated/es/inco/preflight/v1/types_pb.d.ts +1 -1
- package/dist/esm/generated/es/inco/preflight/v1/types_pb.js +2 -2
- package/dist/esm/generated/lightning.d.ts +42 -0
- package/dist/esm/generated/lightning.js +45 -1
- package/dist/esm/generated/local-node.d.ts +13 -2
- package/dist/esm/generated/local-node.js +14 -3
- package/dist/esm/generated/ts/amino/amino.js +1 -1
- package/dist/esm/generated/ts/cometbft/abci/v1/types.js +49 -49
- package/dist/esm/generated/ts/cometbft/crypto/v1/keys.js +3 -3
- package/dist/esm/generated/ts/cometbft/crypto/v1/proof.js +7 -7
- package/dist/esm/generated/ts/cometbft/types/v1/params.js +11 -11
- package/dist/esm/generated/ts/cometbft/types/v1/validator.js +5 -5
- package/dist/esm/generated/ts/cosmos/app/v1alpha1/module.js +5 -5
- package/dist/esm/generated/ts/cosmos/msg/v1/msg.js +1 -1
- package/dist/esm/generated/ts/cosmos_proto/cosmos.js +4 -4
- package/dist/esm/generated/ts/gogoproto/gogo.js +1 -1
- package/dist/esm/generated/ts/google/api/annotations.js +1 -1
- package/dist/esm/generated/ts/google/api/http.js +5 -5
- package/dist/esm/generated/ts/google/protobuf/descriptor.js +35 -35
- package/dist/esm/generated/ts/google/protobuf/duration.js +3 -3
- package/dist/esm/generated/ts/google/protobuf/timestamp.js +3 -3
- package/dist/esm/generated/ts/google/protobuf/wrappers.js +11 -11
- package/dist/esm/generated/ts/inco/abci/v1/types.js +3 -3
- package/dist/esm/generated/ts/inco/fhe/module/v1/module.js +3 -3
- package/dist/esm/generated/ts/inco/fhe/v1/events.js +4 -4
- package/dist/esm/generated/ts/inco/fhe/v1/genesis.js +9 -9
- package/dist/esm/generated/ts/inco/fhe/v1/query.d.ts +19 -19
- package/dist/esm/generated/ts/inco/fhe/v1/query.js +20 -20
- package/dist/esm/generated/ts/inco/fhe/v1/tx.d.ts +19 -19
- package/dist/esm/generated/ts/inco/fhe/v1/tx.js +20 -20
- package/dist/esm/generated/ts/inco/fhe/v1/types.js +14 -14
- package/dist/esm/generated/ts/inco/originchain/module/v1/module.js +3 -3
- package/dist/esm/generated/ts/inco/originchain/v1/abci.js +6 -6
- package/dist/esm/generated/ts/inco/originchain/v1/events.js +4 -4
- package/dist/esm/generated/ts/inco/originchain/v1/genesis.js +3 -3
- package/dist/esm/generated/ts/inco/originchain/v1/query.d.ts +5 -5
- package/dist/esm/generated/ts/inco/originchain/v1/query.js +6 -6
- package/dist/esm/generated/ts/inco/originchain/v1/tx.d.ts +3 -3
- package/dist/esm/generated/ts/inco/originchain/v1/tx.js +4 -4
- package/dist/esm/generated/ts/inco/originchain/v1/types.js +4 -4
- package/dist/esm/generated/ts/inco/preflight/module/v1/module.js +3 -3
- package/dist/esm/generated/ts/inco/preflight/v1/genesis.js +4 -4
- package/dist/esm/generated/ts/inco/preflight/v1/query.d.ts +5 -5
- package/dist/esm/generated/ts/inco/preflight/v1/query.js +6 -6
- package/dist/esm/generated/ts/inco/preflight/v1/tx.d.ts +7 -7
- package/dist/esm/generated/ts/inco/preflight/v1/tx.js +8 -8
- package/dist/esm/generated/ts/inco/preflight/v1/types.js +7 -7
- package/dist/esm/lite/attested-compute.d.ts +4 -0
- package/dist/esm/lite/attested-compute.js +3 -0
- package/dist/esm/lite/ecies.js +2 -2
- package/dist/esm/lite/lightning.d.ts +65 -3
- package/dist/esm/lite/lightning.js +87 -3
- package/dist/esm/local/local-node.d.ts +4 -1
- package/dist/esm/local/local-node.js +10 -5
- package/dist/esm/reencryption/eip712.js +5 -3
- package/dist/esm/viem.d.ts +362 -0
- package/dist/esm/viem.js +3 -3
- package/dist/types/advancedacl/index.d.ts +2 -0
- package/dist/types/advancedacl/session-key.d.ts +28 -0
- package/dist/types/advancedacl/types.d.ts +15 -0
- package/dist/types/attestedcompute/attested-compute.d.ts +38 -0
- package/dist/types/attestedcompute/types.d.ts +34 -0
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +6 -0
- package/dist/types/attesteddecrypt/types.d.ts +6 -4
- package/dist/types/chain.d.ts +3 -0
- package/dist/types/generated/abis/lightning-preview.d.ts +2265 -0
- package/dist/types/generated/abis/lightning.d.ts +4 -0
- package/dist/types/generated/es/cosmos/msg/v1/msg_pb.d.ts +1 -1
- package/dist/types/generated/es/cosmos_proto/cosmos_pb.d.ts +1 -1
- package/dist/types/generated/es/google/api/annotations_pb.d.ts +1 -1
- package/dist/types/generated/es/google/api/http_pb.d.ts +1 -1
- package/dist/types/generated/es/inco/fhe/v1/events_pb.d.ts +1 -1
- package/dist/types/generated/es/inco/fhe/v1/genesis_pb.d.ts +1 -1
- package/dist/types/generated/es/inco/fhe/v1/query_pb.d.ts +1 -1
- package/dist/types/generated/es/inco/fhe/v1/tx_pb.d.ts +1 -1
- package/dist/types/generated/es/inco/fhe/v1/types_pb.d.ts +1 -1
- package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +194 -1
- package/dist/types/generated/es/inco/kms/lite/v1/types_pb.d.ts +1 -1
- package/dist/types/generated/es/inco/preflight/v1/genesis_pb.d.ts +1 -1
- package/dist/types/generated/es/inco/preflight/v1/query_pb.d.ts +1 -1
- package/dist/types/generated/es/inco/preflight/v1/tx_pb.d.ts +1 -1
- package/dist/types/generated/es/inco/preflight/v1/types_pb.d.ts +1 -1
- package/dist/types/generated/lightning.d.ts +42 -0
- package/dist/types/generated/local-node.d.ts +13 -2
- package/dist/types/generated/ts/inco/fhe/v1/query.d.ts +19 -19
- package/dist/types/generated/ts/inco/fhe/v1/tx.d.ts +19 -19
- package/dist/types/generated/ts/inco/originchain/v1/query.d.ts +5 -5
- package/dist/types/generated/ts/inco/originchain/v1/tx.d.ts +3 -3
- package/dist/types/generated/ts/inco/preflight/v1/query.d.ts +5 -5
- package/dist/types/generated/ts/inco/preflight/v1/tx.d.ts +7 -7
- package/dist/types/lite/attested-compute.d.ts +4 -0
- package/dist/types/lite/lightning.d.ts +65 -3
- package/dist/types/local/local-node.d.ts +4 -1
- package/dist/types/viem.d.ts +362 -0
- package/package.json +4 -1
- package/dist/cjs/generated/abis/index.d.ts +0 -2
- package/dist/cjs/generated/es/cosmos/ics23/v1/proofs_pb.d.ts +0 -593
- package/dist/cjs/generated/es/cosmos/ics23/v1/proofs_pb.js +0 -201
- package/dist/cjs/generated/es/kms/base_pb.d.ts +0 -765
- package/dist/cjs/generated/es/kms/base_pb.js +0 -241
- package/dist/cjs/generated/es/sf/ethereum/type/v2/type_pb.d.ts +0 -1736
- package/dist/cjs/generated/es/sf/ethereum/type/v2/type_pb.js +0 -574
- package/dist/esm/generated/abis/index.d.ts +0 -2
- package/dist/esm/generated/abis/index.js +0 -3
- package/dist/esm/generated/es/cosmos/ics23/v1/proofs_pb.d.ts +0 -593
- package/dist/esm/generated/es/cosmos/ics23/v1/proofs_pb.js +0 -198
- package/dist/esm/generated/es/kms/base_pb.d.ts +0 -765
- package/dist/esm/generated/es/kms/base_pb.js +0 -238
- package/dist/esm/generated/es/sf/ethereum/type/v2/type_pb.d.ts +0 -1736
- package/dist/esm/generated/es/sf/ethereum/type/v2/type_pb.js +0 -571
- package/dist/types/generated/abis/index.d.ts +0 -2
- package/dist/types/generated/es/cosmos/ics23/v1/proofs_pb.d.ts +0 -593
- package/dist/types/generated/es/kms/base_pb.d.ts +0 -765
- package/dist/types/generated/es/sf/ethereum/type/v2/type_pb.d.ts +0 -1736
@@ -0,0 +1,170 @@
|
|
1
|
+
import { encodeAbiParameters, getContract, hexToBytes, toFunctionSelector, } from 'viem';
|
2
|
+
import { privateKeyToAccount } from 'viem/accounts';
|
3
|
+
import { getSupportedChain } from '../chain.js';
|
4
|
+
import { abiHelperAbi, advancedAccessControlAbi, sessionVerifierAbi } from '../generated/abis/lightning-preview.js';
|
5
|
+
import { incoLightningAbi } from '../generated/abis/lightning.js';
|
6
|
+
import { decryptGrpcResponse, defaultCovalidatorGrpc, getKmsClient, reencryptEIP712 } from '../lite/index.js';
|
7
|
+
import { createEIP712Payload } from '../reencryption/index.js';
|
8
|
+
// Given a sharer's wallet client, an incoLite contract address, and a
|
9
|
+
// (verifyingContract, callFunction, sharerArgData) tuple, this function
|
10
|
+
// creates an AllowanceVoucher.
|
11
|
+
export async function createAllowanceVoucher(incoLiteAddress, sharerWalletClient, verifyingContract, callFunction, sharerArgData) {
|
12
|
+
const advancedACL = getContract({
|
13
|
+
address: incoLiteAddress,
|
14
|
+
// Could have used the incoLightningAbi, but this is more efficient.
|
15
|
+
abi: advancedAccessControlAbi,
|
16
|
+
client: sharerWalletClient,
|
17
|
+
});
|
18
|
+
// The session nonce in the AllowanceVoucher must match the current active
|
19
|
+
// session nonce of the sharer on-chain.
|
20
|
+
const sessionNonce = await advancedACL.read.getActiveVouchersSessionNonce([sharerWalletClient.account.address]);
|
21
|
+
return {
|
22
|
+
sessionNonce,
|
23
|
+
verifyingContract,
|
24
|
+
callFunction,
|
25
|
+
sharerArgData,
|
26
|
+
};
|
27
|
+
}
|
28
|
+
// Let the sharer grant a session to the requester.
|
29
|
+
export async function grantSessionKey({ chainId, incoLiteAddress, sessionVerifierContractAddress, granteeAddress, sharerWalletClient, expiresAt, }) {
|
30
|
+
const session = {
|
31
|
+
decrypter: granteeAddress,
|
32
|
+
expiresAt: BigInt(Math.floor(expiresAt.getTime() / 1000)),
|
33
|
+
};
|
34
|
+
const sharerArgData = encodeAbiParameters(getSessionAbi(), [session.decrypter, session.expiresAt]);
|
35
|
+
// Get the domain name and version from the incoLite contract.
|
36
|
+
const incoLitePreview = getContract({
|
37
|
+
abi: incoLightningAbi,
|
38
|
+
address: incoLiteAddress,
|
39
|
+
client: sharerWalletClient,
|
40
|
+
});
|
41
|
+
const eip712DomainName = await incoLitePreview.read.getName();
|
42
|
+
const eip712DomainVersion = await incoLitePreview.read.getVersion();
|
43
|
+
const voucher = await createAllowanceVoucher(incoLiteAddress, sharerWalletClient,
|
44
|
+
// Careful that the verifying contract here is the SessionVerifier contract,
|
45
|
+
// not the incoLite contract.
|
46
|
+
sessionVerifierContractAddress, toFunctionSelector(getCanUseSessionAbi()), sharerArgData);
|
47
|
+
const eip712Payload = createEIP712Payload({
|
48
|
+
chainId,
|
49
|
+
primaryType: 'AllowanceVoucher',
|
50
|
+
primaryTypeFields: getAllowanceVoucherAbi(),
|
51
|
+
message: voucher,
|
52
|
+
// Related to comment above: careful that the verifying contract here is
|
53
|
+
// the incoLite contract (not the SessionVerifier contract).
|
54
|
+
verifyingContract: incoLiteAddress,
|
55
|
+
...(eip712DomainName && { domainName: eip712DomainName }),
|
56
|
+
...(eip712DomainVersion && { domainVersion: eip712DomainVersion }),
|
57
|
+
});
|
58
|
+
// Using browser extensions, this step will prompt the user to sign the
|
59
|
+
// payload.
|
60
|
+
const voucherSignature = await sharerWalletClient.signTypedData(eip712Payload);
|
61
|
+
return {
|
62
|
+
sharer: sharerWalletClient.account.address,
|
63
|
+
voucher,
|
64
|
+
voucherSignature,
|
65
|
+
};
|
66
|
+
}
|
67
|
+
// The sessionKeyReencryptor function is a reencryptor that uses a session key
|
68
|
+
// to reencrypt data.
|
69
|
+
export async function sessionKeyReencryptor({ chainId, kmsConnectRpcEndpointOrClient, ephemeralKeypair, allowanceVoucherWithSig, }) {
|
70
|
+
const kmsClient = getKmsClient(kmsConnectRpcEndpointOrClient || defaultCovalidatorGrpc(getSupportedChain(chainId)));
|
71
|
+
const requesterAccount = privateKeyToAccount(`0x${ephemeralKeypair.kp.getPrivate('hex')}`);
|
72
|
+
const ephemeralPubKey = ephemeralKeypair.encodePublicKey();
|
73
|
+
// Sign the EIP712 attesting that the requester has access to the private key
|
74
|
+
// corresponding to the ephemeral public key.
|
75
|
+
const eip712Payload = reencryptEIP712(chainId, ephemeralPubKey);
|
76
|
+
// Since the account is an ephemeral keypair stored in memory (not in Metamask),
|
77
|
+
// this step will NOT prompt the user with a pop-up.
|
78
|
+
const eip712Signature = await requesterAccount.signTypedData(eip712Payload);
|
79
|
+
return async function reencrypt({ handle }) {
|
80
|
+
const reencryptRequest = {
|
81
|
+
$typeName: 'inco.kms.lite.v1.ReencryptRequest',
|
82
|
+
userAddress: requesterAccount.address,
|
83
|
+
ephemeralPubKey,
|
84
|
+
eip712Signature: hexToBytes(eip712Signature),
|
85
|
+
handlesWithProofs: [
|
86
|
+
{
|
87
|
+
$typeName: 'inco.kms.lite.v1.HandleWithProof',
|
88
|
+
handle,
|
89
|
+
aclProof: {
|
90
|
+
$typeName: 'inco.kms.lite.v1.ACLProof',
|
91
|
+
proof: {
|
92
|
+
value: {
|
93
|
+
$typeName: 'inco.kms.lite.v1.IncoLiteAdvancedACLProof',
|
94
|
+
allowanceProof: {
|
95
|
+
$typeName: 'inco.kms.lite.v1.AllowanceProof',
|
96
|
+
sharer: allowanceVoucherWithSig.sharer,
|
97
|
+
voucher: {
|
98
|
+
// Converting from the AllowanceVoucher domain type to the
|
99
|
+
// AllowanceVoucher proto type.
|
100
|
+
$typeName: 'inco.kms.lite.v1.AllowanceVoucher',
|
101
|
+
sessionNonce: hexToBytes(allowanceVoucherWithSig.voucher.sessionNonce),
|
102
|
+
verifyingContract: allowanceVoucherWithSig.voucher.verifyingContract,
|
103
|
+
callFunction: hexToBytes(allowanceVoucherWithSig.voucher.callFunction),
|
104
|
+
sharerArgData: hexToBytes(allowanceVoucherWithSig.voucher.sharerArgData),
|
105
|
+
},
|
106
|
+
voucherSignature: hexToBytes(allowanceVoucherWithSig.voucherSignature),
|
107
|
+
// For SessionVerifier, the requesterArgData is empty.
|
108
|
+
requesterArgData: new Uint8Array(),
|
109
|
+
},
|
110
|
+
},
|
111
|
+
case: 'incoLiteAdvancedAclProof',
|
112
|
+
},
|
113
|
+
},
|
114
|
+
},
|
115
|
+
],
|
116
|
+
};
|
117
|
+
const response = await kmsClient.reencrypt(reencryptRequest);
|
118
|
+
return decryptGrpcResponse(response, ephemeralKeypair, handle);
|
119
|
+
};
|
120
|
+
}
|
121
|
+
export async function updateActiveVouchersSessionNonce(incoLiteAddress, sharerWalletClient) {
|
122
|
+
const advancedACL = getContract({
|
123
|
+
address: incoLiteAddress,
|
124
|
+
abi: advancedAccessControlAbi,
|
125
|
+
client: sharerWalletClient,
|
126
|
+
});
|
127
|
+
const txHash = await advancedACL.write.updateActiveVouchersSessionNonce();
|
128
|
+
return txHash;
|
129
|
+
}
|
130
|
+
// Below are helpers to get ABIs of functions/structs from the SessionVerifier
|
131
|
+
// contract.
|
132
|
+
// Get the ABI of the `AllowanceVoucher` struct.
|
133
|
+
function getAllowanceVoucherAbi() {
|
134
|
+
// Find the `allowanceVoucherDigest` function, it takes an AllowanceVoucher
|
135
|
+
// as sole argument.
|
136
|
+
const allowanceVoucherDigest = advancedAccessControlAbi.find((item) => item.name === 'allowanceVoucherDigest');
|
137
|
+
if (!allowanceVoucherDigest) {
|
138
|
+
throw new Error('allowanceVoucherDigest not found');
|
139
|
+
}
|
140
|
+
// Get the input whose internalType is "struct AllowanceVoucher"
|
141
|
+
const allowanceVoucherInput = allowanceVoucherDigest.inputs.find((input) => input.internalType === 'struct AllowanceVoucher');
|
142
|
+
if (!allowanceVoucherInput) {
|
143
|
+
throw new Error('allowanceVoucherInput not found');
|
144
|
+
}
|
145
|
+
return allowanceVoucherInput.components;
|
146
|
+
}
|
147
|
+
// Get the ABI of the `Session` struct.
|
148
|
+
//
|
149
|
+
// We specifically created an ABIHelper.sol contract to export the Session
|
150
|
+
// struct from the SessionVerifier contract.
|
151
|
+
function getSessionAbi() {
|
152
|
+
const getSession = abiHelperAbi.find((item) => 'name' in item && item.name === 'getSession');
|
153
|
+
if (!getSession) {
|
154
|
+
throw new Error('getSession not found');
|
155
|
+
}
|
156
|
+
const session = getSession.outputs[0];
|
157
|
+
if (!session) {
|
158
|
+
throw new Error('session not found');
|
159
|
+
}
|
160
|
+
return session.components;
|
161
|
+
}
|
162
|
+
// Get the ABI of the `canUseSession` function.
|
163
|
+
function getCanUseSessionAbi() {
|
164
|
+
const canUseSession = sessionVerifierAbi.find((item) => 'name' in item && item.name === 'canUseSession');
|
165
|
+
if (!canUseSession) {
|
166
|
+
throw new Error('canUseSession not found');
|
167
|
+
}
|
168
|
+
return canUseSession;
|
169
|
+
}
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWR2YW5jZWRhY2wvc2Vzc2lvbi1rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUlMLG1CQUFtQixFQUNuQixXQUFXLEVBRVgsVUFBVSxFQUNWLGtCQUFrQixHQUduQixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUFFLFlBQVksRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3BILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUcsT0FBTyxFQUFFLG1CQUFtQixFQUF3QixNQUFNLDBCQUEwQixDQUFDO0FBa0JyRixzRUFBc0U7QUFDdEUsd0VBQXdFO0FBQ3hFLCtCQUErQjtBQUMvQixNQUFNLENBQUMsS0FBSyxVQUFVLHNCQUFzQixDQUMxQyxlQUF3QixFQUN4QixrQkFBMkQsRUFDM0QsaUJBQTBCLEVBQzFCLFlBQWlCLEVBQ2pCLGFBQWtCO0lBRWxCLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUM5QixPQUFPLEVBQUUsZUFBZTtRQUN4QixvRUFBb0U7UUFDcEUsR0FBRyxFQUFFLHdCQUF3QjtRQUM3QixNQUFNLEVBQUUsa0JBQWtCO0tBQzNCLENBQUMsQ0FBQztJQUVILDBFQUEwRTtJQUMxRSx3Q0FBd0M7SUFDeEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE9B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
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { Address, Hex } from 'viem';
|
2
|
+
export type AllowanceVoucher = {
|
3
|
+
sessionNonce: Hex;
|
4
|
+
verifyingContract: Address;
|
5
|
+
callFunction: Hex;
|
6
|
+
sharerArgData: Hex;
|
7
|
+
};
|
8
|
+
export interface AllowanceVoucherWithSig {
|
9
|
+
sharer: Address;
|
10
|
+
voucher: AllowanceVoucher;
|
11
|
+
voucherSignature: Hex;
|
12
|
+
}
|
13
|
+
export interface AllowanceProof extends AllowanceVoucherWithSig {
|
14
|
+
requesterArgData: Uint8Array;
|
15
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import type { Account, Chain, Transport, WalletClient } from 'viem';
|
2
|
+
import { SupportedChainId } from '../chain.js';
|
3
|
+
import { EciesScheme } from '../encryption/encryption.js';
|
4
|
+
import type { KmsClient } from '../kms/client.js';
|
5
|
+
import { AttestedCompute } from './types.js';
|
6
|
+
/**
|
7
|
+
* Arguments for creating an attested compute.
|
8
|
+
*/
|
9
|
+
export interface IncoLiteAttestedComputeArgs {
|
10
|
+
/** The wallet used to interact with the blockchain and sign the compute request */
|
11
|
+
walletClient: WalletClient<Transport, Chain, Account>;
|
12
|
+
/** The KMS connect RPC endpoint or client instance */
|
13
|
+
kmsConnectRpcEndpointOrClient?: string | KmsClient;
|
14
|
+
/** The chain ID to use */
|
15
|
+
chainId: SupportedChainId;
|
16
|
+
}
|
17
|
+
/**
|
18
|
+
* Creates an attested compute function that can decrypt handles with an attached attestation from the covalidator.
|
19
|
+
* @param args - The arguments for creating the attested compute function
|
20
|
+
* @returns A function that can perform binary operation on a handle and return an attestation
|
21
|
+
* @throws {AttestedComputeError} If the creation fails
|
22
|
+
*
|
23
|
+
* @todo Support multiple operations in a single request.
|
24
|
+
*
|
25
|
+
* @example
|
26
|
+
* ```typescript
|
27
|
+
* const compute = await incoLiteAttestedCompute({
|
28
|
+
* walletClient,
|
29
|
+
* chainId: sepolia,
|
30
|
+
* });
|
31
|
+
* const decryptionAttestation = await compute({
|
32
|
+
* lhsHandle: '0x...',
|
33
|
+
* op: AttestedComputeSupportedOps.Eq,
|
34
|
+
* rhsPlaintext: 1337n,
|
35
|
+
* });
|
36
|
+
* ```
|
37
|
+
*/
|
38
|
+
export declare function incoLiteAttestedCompute({ kmsConnectRpcEndpointOrClient, chainId, walletClient, }: IncoLiteAttestedComputeArgs): AttestedCompute<EciesScheme>;
|
@@ -0,0 +1,95 @@
|
|
1
|
+
import { hexToBytes } from 'viem';
|
2
|
+
import { validateHandle } from '../attesteddecrypt/attested-decrypt.js';
|
3
|
+
import { bigintToBytes32, bytesToBigInt } from '../binary.js';
|
4
|
+
import { getSupportedChain } from '../chain.js';
|
5
|
+
import { bigintToPlaintext, encryptionSchemes } from '../encryption/encryption.js';
|
6
|
+
import { getHandleType } from '../handle.js';
|
7
|
+
import { defaultCovalidatorGrpc, getKmsClient } from '../kms/client.js';
|
8
|
+
import { createEIP712Payload } from '../reencryption/eip712.js';
|
9
|
+
import { retryWithBackoff } from '../retry.js';
|
10
|
+
import { AttestedComputeError } from './types.js';
|
11
|
+
const ATTESTED_COMPUTE_DOMAIN_NAME = 'IncoAttestedCompute';
|
12
|
+
const ATTESTED_COMPUTE_DOMAIN_VERSION = '0.1.0';
|
13
|
+
/**
|
14
|
+
* Creates an attested compute function that can decrypt handles with an attached attestation from the covalidator.
|
15
|
+
* @param args - The arguments for creating the attested compute function
|
16
|
+
* @returns A function that can perform binary operation on a handle and return an attestation
|
17
|
+
* @throws {AttestedComputeError} If the creation fails
|
18
|
+
*
|
19
|
+
* @todo Support multiple operations in a single request.
|
20
|
+
*
|
21
|
+
* @example
|
22
|
+
* ```typescript
|
23
|
+
* const compute = await incoLiteAttestedCompute({
|
24
|
+
* walletClient,
|
25
|
+
* chainId: sepolia,
|
26
|
+
* });
|
27
|
+
* const decryptionAttestation = await compute({
|
28
|
+
* lhsHandle: '0x...',
|
29
|
+
* op: AttestedComputeSupportedOps.Eq,
|
30
|
+
* rhsPlaintext: 1337n,
|
31
|
+
* });
|
32
|
+
* ```
|
33
|
+
*/
|
34
|
+
export function incoLiteAttestedCompute({ kmsConnectRpcEndpointOrClient, chainId, walletClient, }) {
|
35
|
+
const kmsClient = getKmsClient(kmsConnectRpcEndpointOrClient || defaultCovalidatorGrpc(getSupportedChain(chainId)));
|
36
|
+
return async function attestedCompute({ lhsHandle, op, rhsPlaintext, backoffConfig, }) {
|
37
|
+
try {
|
38
|
+
validateHandle(lhsHandle);
|
39
|
+
const rhsPlaintextBig = BigInt(rhsPlaintext);
|
40
|
+
// Create the EIP712 payload for the handles to decrypt
|
41
|
+
const eip712Payload = createEIP712Payload({
|
42
|
+
chainId: BigInt(chainId),
|
43
|
+
primaryType: 'AttestedComputeRequest',
|
44
|
+
primaryTypeFields: [
|
45
|
+
{ name: 'op', type: 'uint8' },
|
46
|
+
{ name: 'lhsHandle', type: 'bytes32' },
|
47
|
+
{ name: 'rhsPlaintext', type: 'bytes32' },
|
48
|
+
],
|
49
|
+
message: {
|
50
|
+
op: op,
|
51
|
+
lhsHandle: lhsHandle,
|
52
|
+
rhsPlaintext: bigintToBytes32(rhsPlaintextBig),
|
53
|
+
},
|
54
|
+
domainName: ATTESTED_COMPUTE_DOMAIN_NAME,
|
55
|
+
domainVersion: ATTESTED_COMPUTE_DOMAIN_VERSION,
|
56
|
+
});
|
57
|
+
// Sign the EIP712 message
|
58
|
+
const eip712Signature = await walletClient.signTypedData(eip712Payload);
|
59
|
+
const rhsValueBytes = bigintToPlaintext(encryptionSchemes.ecies, getHandleType(lhsHandle), rhsPlaintextBig);
|
60
|
+
const attestedComputeRequest = {
|
61
|
+
$typeName: 'inco.kms.lite.v1.AttestedComputeRequest',
|
62
|
+
userAddress: walletClient.account.address,
|
63
|
+
op: op,
|
64
|
+
lhsHandle: lhsHandle,
|
65
|
+
rhsPlaintext: rhsValueBytes.value.toString(16),
|
66
|
+
eip712Signature: hexToBytes(eip712Signature),
|
67
|
+
};
|
68
|
+
const response = await retryWithBackoff(async () => {
|
69
|
+
return await kmsClient.attestedCompute(attestedComputeRequest);
|
70
|
+
}, backoffConfig);
|
71
|
+
const decryptionAttestation = response.decryptionAttestation;
|
72
|
+
if (decryptionAttestation?.plaintext === undefined) {
|
73
|
+
throw new AttestedComputeError('No plaintext in response');
|
74
|
+
}
|
75
|
+
const computeResultHandle = response.decryptionAttestation?.handle;
|
76
|
+
if (!computeResultHandle) {
|
77
|
+
throw new AttestedComputeError('No compute result handle in response');
|
78
|
+
}
|
79
|
+
const handleType = getHandleType(computeResultHandle);
|
80
|
+
const bigIntValue = bytesToBigInt(decryptionAttestation.plaintext);
|
81
|
+
return {
|
82
|
+
handle: computeResultHandle,
|
83
|
+
plaintext: bigintToPlaintext(encryptionSchemes.ecies, handleType, bigIntValue),
|
84
|
+
covalidatorSignature: decryptionAttestation.signature,
|
85
|
+
};
|
86
|
+
}
|
87
|
+
catch (error) {
|
88
|
+
if (error instanceof AttestedComputeError) {
|
89
|
+
throw error;
|
90
|
+
}
|
91
|
+
throw new AttestedComputeError('Failed to perform attested compute', error);
|
92
|
+
}
|
93
|
+
};
|
94
|
+
}
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0ZWQtY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdHRlc3RlZGNvbXB1dGUvYXR0ZXN0ZWQtY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYSxNQUFNLGNBQWMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0sYUFBYSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBZSxpQkFBaUIsRUFBb0IsTUFBTSw2QkFBNkIsQ0FBQztBQUVsSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFtQixvQkFBb0IsRUFBcUIsTUFBTSxZQUFZLENBQUM7QUFFdEYsTUFBTSw0QkFBNEIsR0FBRyxxQkFBcUIsQ0FBQztBQUMzRCxNQUFNLCtCQUErQixHQUFHLE9BQU8sQ0FBQztBQWNoRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsRUFDdEMsNkJBQTZCLEVBQzdCLE9BQU8sRUFDUCxZQUFZLEdBQ2dCO0lBQzVCLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyw2QkFBNkIsSUFBSSxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEgsT0FBTyxLQUFLLFVBQVUsZUFBZSxDQUE2QixFQUNoRSxTQUFTLEVBQ1QsRUFBRSxFQUNGLFlBQVksRUFDWixhQUFhLEdBTWQ7UUFDQyxJQUFJLENBQUM7WUFDSCxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFMUIsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTdDLHVEQUF1RDtZQUN2RCxNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQztnQkFDeEMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQ3hCLFdBQVcsRUFBRSx3QkFBd0I7Z0JBQ3JDLGlCQUFpQixFQUFFO29CQUNqQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtvQkFDN0IsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2lCQUMxQztnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsRUFBRSxFQUFFLEVBQUU7b0JBQ04sU0FBUyxFQUFFLFNBQVM7b0JBQ3BCLFlBQVksRUFBRSxlQUFlLENBQUMsZUFBZSxDQUFDO2lCQUMvQztnQkFDRCxVQUFVLEVBQUUsNEJBQTRCO2dCQUN4QyxhQUFhLEVBQUUsK0JBQStCO2FBQy9DLENBQUMsQ0FBQztZQUVILDBCQUEwQjtZQUMxQixNQUFNLGVBQWUsR0FBRyxNQUFNLFlBQVksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFeEUsTUFBTSxhQUFhLEdBQUcsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNqSCxNQUFNLHNCQUFzQixHQUEyQjtnQkFDckQsU0FBUyxFQUFFLHlDQUF5QztnQkFDcEQsV0FBVyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTztnQkFDekMsRUFBRSxFQUFFLEVBQUU7Z0JBQ04sU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLFlBQVksRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLGVBQWUsRUFBRSxVQUFVLENBQUMsZUFBZSxDQUFDO2FBQzdDLENBQUM7WUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLGdCQUFnQixDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNqRCxPQUFPLE1BQU0sU0FBUyxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ2pFLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUVsQixNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztZQUU3RCxJQUFJLHFCQUFxQixFQUFFLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxJQUFJLG9CQUFvQixDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDN0QsQ0FBQztZQUVELE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQztZQUNuRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxJQUFJLG9CQUFvQixDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDekUsQ0FBQztZQUVELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxtQkFBZ0MsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVuRSxPQUFPO2dCQUNMLE1BQU0sRUFBRSxtQkFBZ0M7Z0JBQ3hDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsVUFBZSxFQUFFLFdBQVcsQ0FBQztnQkFDbkYsb0JBQW9CLEVBQUUscUJBQXFCLENBQUMsU0FBUzthQUN0RCxDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssWUFBWSxvQkFBb0IsRUFBRSxDQUFDO2dCQUMxQyxNQUFNLEtBQUssQ0FBQztZQUNkLENBQUM7WUFDRCxNQUFNLElBQUksb0JBQW9CLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUUsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUMifQ==
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import type { DecryptionAttestation } from '../attesteddecrypt/types.js';
|
2
|
+
import { HexString } from '../binary.js';
|
3
|
+
import { EncryptionScheme, SupportedFheType } from '../encryption/encryption.js';
|
4
|
+
import { SupportedScalarBinaryOp } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
|
5
|
+
import type { BackoffConfig } from '../retry.js';
|
6
|
+
/**
|
7
|
+
* Supported attested compute operations.
|
8
|
+
*/
|
9
|
+
export declare const AttestedComputeSupportedOps: {
|
10
|
+
readonly Eq: SupportedScalarBinaryOp.FHE_EQ;
|
11
|
+
readonly Ne: SupportedScalarBinaryOp.FHE_NE;
|
12
|
+
readonly Ge: SupportedScalarBinaryOp.FHE_GE;
|
13
|
+
readonly Gt: SupportedScalarBinaryOp.FHE_GT;
|
14
|
+
readonly Le: SupportedScalarBinaryOp.FHE_LE;
|
15
|
+
readonly Lt: SupportedScalarBinaryOp.FHE_LT;
|
16
|
+
};
|
17
|
+
/**
|
18
|
+
* This type represents all the supported operations for attested compute.
|
19
|
+
*/
|
20
|
+
export type AttestedComputeOP = (typeof AttestedComputeSupportedOps)[keyof typeof AttestedComputeSupportedOps];
|
21
|
+
/**
|
22
|
+
* Custom error class for attested compute operations.
|
23
|
+
*/
|
24
|
+
export declare class AttestedComputeError extends Error {
|
25
|
+
readonly cause?: unknown | undefined;
|
26
|
+
constructor(message: string, cause?: unknown | undefined);
|
27
|
+
}
|
28
|
+
export type AttestedCompute<S extends EncryptionScheme> = <T extends SupportedFheType>(args: {
|
29
|
+
/** The handle to compute on */
|
30
|
+
lhsHandle: HexString;
|
31
|
+
op: AttestedComputeOP;
|
32
|
+
rhsPlaintext: bigint | boolean;
|
33
|
+
backoffConfig?: Partial<BackoffConfig>;
|
34
|
+
}) => Promise<DecryptionAttestation<S, T>>;
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import { SupportedScalarBinaryOp } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
|
2
|
+
/**
|
3
|
+
* Supported attested compute operations.
|
4
|
+
*/
|
5
|
+
export const AttestedComputeSupportedOps = {
|
6
|
+
/*
|
7
|
+
Add: SupportedScalarBinaryOp.FHE_ADD,
|
8
|
+
Sub: SupportedScalarBinaryOp.FHE_SUB,
|
9
|
+
Mul: SupportedScalarBinaryOp.FHE_MUL,
|
10
|
+
Div: SupportedScalarBinaryOp.FHE_DIV,
|
11
|
+
Rem: SupportedScalarBinaryOp.FHE_REM,
|
12
|
+
BitAnd: SupportedScalarBinaryOp.FHE_BIT_AND,
|
13
|
+
BitOr: SupportedScalarBinaryOp.FHE_BIT_OR,
|
14
|
+
BitXor: SupportedScalarBinaryOp.FHE_BIT_XOR,
|
15
|
+
Shl: SupportedScalarBinaryOp.FHE_SHL,
|
16
|
+
Shr: SupportedScalarBinaryOp.FHE_SHR,
|
17
|
+
Rotl: SupportedScalarBinaryOp.FHE_ROTL,
|
18
|
+
Rotr: SupportedScalarBinaryOp.FHE_ROTR,
|
19
|
+
*/
|
20
|
+
Eq: SupportedScalarBinaryOp.FHE_EQ,
|
21
|
+
Ne: SupportedScalarBinaryOp.FHE_NE,
|
22
|
+
Ge: SupportedScalarBinaryOp.FHE_GE,
|
23
|
+
Gt: SupportedScalarBinaryOp.FHE_GT,
|
24
|
+
Le: SupportedScalarBinaryOp.FHE_LE,
|
25
|
+
Lt: SupportedScalarBinaryOp.FHE_LT,
|
26
|
+
/*
|
27
|
+
Min: SupportedScalarBinaryOp.FHE_MIN,
|
28
|
+
Max: SupportedScalarBinaryOp.FHE_MAX,
|
29
|
+
*/
|
30
|
+
};
|
31
|
+
/**
|
32
|
+
* Custom error class for attested compute operations.
|
33
|
+
*/
|
34
|
+
export class AttestedComputeError extends Error {
|
35
|
+
cause;
|
36
|
+
constructor(message, cause) {
|
37
|
+
super(message);
|
38
|
+
this.cause = cause;
|
39
|
+
this.name = 'AttestedComputeError';
|
40
|
+
}
|
41
|
+
}
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXR0ZXN0ZWRjb21wdXRlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBRzdGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUc7SUFDekM7Ozs7Ozs7Ozs7Ozs7TUFhRTtJQUNGLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO0lBQ2xDLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO0lBQ2xDLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO0lBQ2xDLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO0lBQ2xDLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO0lBQ2xDLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO0lBQ2xDOzs7TUFHRTtDQUNNLENBQUM7QUFPWDs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxLQUFLO0lBRzNCO0lBRmxCLFlBQ0UsT0FBZSxFQUNDLEtBQWU7UUFFL0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRkMsVUFBSyxHQUFMLEtBQUssQ0FBVTtRQUcvQixJQUFJLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO0lBQ3JDLENBQUM7Q0FDRiJ9
|
@@ -3,6 +3,12 @@ import { SupportedChainId } from '../chain.js';
|
|
3
3
|
import { EciesScheme } from '../encryption/encryption.js';
|
4
4
|
import type { KmsClient } from '../kms/client.js';
|
5
5
|
import { AttestedDecryptor } from './types.js';
|
6
|
+
/**
|
7
|
+
* Validates a handle format.
|
8
|
+
* @param handle - The handle to validate
|
9
|
+
* @throws {AttestedDecryptError} If the handle format is invalid
|
10
|
+
*/
|
11
|
+
export declare function validateHandle(handle: string): void;
|
6
12
|
/**
|
7
13
|
* Arguments for creating an attested decryptor.
|
8
14
|
*/
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { hexToBytes } from 'viem';
|
2
2
|
import { bytesToBigInt } from '../binary.js';
|
3
3
|
import { getSupportedChain } from '../chain.js';
|
4
|
-
import { bigintToPlaintext, encryptionSchemes
|
4
|
+
import { bigintToPlaintext, encryptionSchemes } from '../encryption/encryption.js';
|
5
5
|
import { getHandleType } from '../handle.js';
|
6
6
|
import { defaultCovalidatorGrpc, getKmsClient } from '../kms/client.js';
|
7
7
|
import { createEIP712Payload } from '../reencryption/eip712.js';
|
@@ -14,7 +14,7 @@ const ATTESTED_DECRYPT_DOMAIN_VERSION = '0.1.0';
|
|
14
14
|
* @param handle - The handle to validate
|
15
15
|
* @throws {AttestedDecryptError} If the handle format is invalid
|
16
16
|
*/
|
17
|
-
function validateHandle(handle) {
|
17
|
+
export function validateHandle(handle) {
|
18
18
|
if (!handle.startsWith('0x') || handle.length !== 66) {
|
19
19
|
throw new AttestedDecryptError('Invalid handle format: must be a 32-byte hex string with 0x prefix');
|
20
20
|
}
|
@@ -73,6 +73,7 @@ export function incoLiteAttestedDecryptor({ kmsConnectRpcEndpointOrClient, chain
|
|
73
73
|
const handleType = getHandleType(handle);
|
74
74
|
const bigIntValue = bytesToBigInt(decryptionAttestation.plaintext);
|
75
75
|
return {
|
76
|
+
handle: decryptionAttestation.handle,
|
76
77
|
plaintext: bigintToPlaintext(encryptionSchemes.ecies, handleType, bigIntValue),
|
77
78
|
covalidatorSignature: decryptionAttestation.signature,
|
78
79
|
};
|
@@ -85,4 +86,4 @@ export function incoLiteAttestedDecryptor({ kmsConnectRpcEndpointOrClient, chain
|
|
85
86
|
}
|
86
87
|
};
|
87
88
|
}
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0ZWQtZGVjcnlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdHRlc3RlZGRlY3J5cHQvYXR0ZXN0ZWQtZGVjcnlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxhQUFhLEVBQWEsTUFBTSxjQUFjLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQWUsaUJBQWlCLEVBQW9CLE1BQU0sNkJBQTZCLENBQUM7QUFFbEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBNEMsTUFBTSxZQUFZLENBQUM7QUFFNUYsTUFBTSw0QkFBNEIsR0FBRyxxQkFBcUIsQ0FBQztBQUMzRCxNQUFNLCtCQUErQixHQUFHLE9BQU8sQ0FBQztBQUVoRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFjO0lBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDckQsTUFBTSxJQUFJLG9CQUFvQixDQUFDLG9FQUFvRSxDQUFDLENBQUM7SUFDdkcsQ0FBQztBQUNILENBQUM7QUFjRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxFQUN4Qyw2QkFBNkIsRUFDN0IsT0FBTyxFQUNQ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
|
@@ -8,11 +8,13 @@ export declare class AttestedDecryptError extends Error {
|
|
8
8
|
readonly cause?: unknown | undefined;
|
9
9
|
constructor(message: string, cause?: unknown | undefined);
|
10
10
|
}
|
11
|
+
export type DecryptionAttestation<S extends EncryptionScheme, T extends SupportedFheType> = {
|
12
|
+
handle: HexString;
|
13
|
+
plaintext: PlaintextOf<S, T>;
|
14
|
+
covalidatorSignature: Uint8Array;
|
15
|
+
};
|
11
16
|
export type AttestedDecryptor<S extends EncryptionScheme> = <T extends SupportedFheType>(args: {
|
12
17
|
/** The handle to decrypt */
|
13
18
|
handle: HexString;
|
14
19
|
backoffConfig?: Partial<BackoffConfig>;
|
15
|
-
}) => Promise<
|
16
|
-
plaintext: PlaintextOf<S, T>;
|
17
|
-
covalidatorSignature: Uint8Array;
|
18
|
-
}>;
|
20
|
+
}) => Promise<DecryptionAttestation<S, T>>;
|
package/dist/esm/chain.d.ts
CHANGED
@@ -2,6 +2,9 @@ export declare const supportedChains: {
|
|
2
2
|
readonly baseSepolia: 84532;
|
3
3
|
readonly sepolia: 11155111;
|
4
4
|
readonly monadTestnet: 10143;
|
5
|
+
readonly plasmaTestnet: 9746;
|
6
|
+
readonly worldchainSepolia: 4801;
|
7
|
+
readonly anvil: 31337;
|
5
8
|
};
|
6
9
|
export declare const fheSupportedChains: {
|
7
10
|
readonly baseSepolia: 84532;
|
package/dist/esm/chain.js
CHANGED
@@ -6,6 +6,9 @@ export const supportedChains = {
|
|
6
6
|
baseSepolia: 84532,
|
7
7
|
sepolia: 11155111,
|
8
8
|
monadTestnet: 10143,
|
9
|
+
plasmaTestnet: 9746,
|
10
|
+
worldchainSepolia: 4801,
|
11
|
+
anvil: 31337,
|
9
12
|
};
|
10
13
|
export const fheSupportedChains = { baseSepolia: 84532, sepolia: 11155111 };
|
11
14
|
// Get supportedChain either by its chain ID or the short name (lower pascal case)
|
@@ -16,9 +19,9 @@ export function getSupportedChain(chainish) {
|
|
16
19
|
? Object.entries(supportedChains).find(([, id]) => id === Number(chainish.id))
|
17
20
|
: Object.entries(supportedChains).find(([shortName]) => shortName === chainish);
|
18
21
|
if (!found) {
|
19
|
-
throw new Error(`Supported chain ${
|
22
|
+
throw new Error(`Supported chain ${chainish} not found`);
|
20
23
|
}
|
21
24
|
const [name, id] = found;
|
22
25
|
return { name: name, id };
|
23
26
|
}
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUZBQW1GO0FBRW5GLHlHQUF5RztBQUN6RywrR0FBK0c7QUFDL0csa0dBQWtHO0FBRWxHLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM3QixXQUFXLEVBQUUsS0FBSztJQUNsQixPQUFPLEVBQUUsUUFBUTtJQUNqQixZQUFZLEVBQUUsS0FBSztJQUNuQixhQUFhLEVBQUUsSUFBSTtJQUNuQixpQkFBaUIsRUFBRSxJQUFJO0lBQ3ZCLEtBQUssRUFBRSxLQUFLO0NBQ0osQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFXLENBQUM7QUFjckYsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxRQUFrQjtJQUNsRCxNQUFNLEtBQUssR0FDVCxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUTtRQUMxRCxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLE9BQU8sUUFBUSxLQUFLLFFBQVE7WUFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5RSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDdEYsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsUUFBUSxZQUFZLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDekIsT0FBTyxFQUFFLElBQUksRUFBRSxJQUEwQixFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2xELENBQUMifQ==
|