@inco/js 0.9.0-devnet-test-4 → 0.10.0-devnet-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +503 -47
- package/dist/cjs/advancedacl/session-key.d.ts +5 -5
- package/dist/cjs/advancedacl/session-key.js +33 -9
- package/dist/cjs/attestedcompute/attested-compute.d.ts +1 -2
- package/dist/cjs/attestedcompute/attested-compute.js +15 -7
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +5 -43
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +33 -96
- package/dist/cjs/attestedreveal/attested-reveal.d.ts +21 -0
- package/dist/cjs/attestedreveal/attested-reveal.js +31 -0
- package/dist/cjs/attestedreveal/index.d.ts +2 -0
- package/dist/cjs/attestedreveal/index.js +21 -0
- package/dist/cjs/attestedreveal/types.d.ts +4 -0
- package/dist/cjs/attestedreveal/types.js +13 -0
- package/dist/cjs/binary.d.ts +82 -0
- package/dist/cjs/binary.js +87 -5
- package/dist/cjs/chain.d.ts +29 -4
- package/dist/cjs/chain.js +34 -6
- package/dist/cjs/eip712/eip712.d.ts +18 -0
- package/dist/cjs/eip712/eip712.js +51 -0
- package/dist/cjs/eip712/index.d.ts +1 -0
- package/dist/cjs/eip712/index.js +8 -0
- package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
- package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.js +94 -0
- package/dist/cjs/elistattesteddecrypt/index.d.ts +2 -0
- package/dist/cjs/elistattesteddecrypt/index.js +22 -0
- package/dist/cjs/elistattesteddecrypt/types.d.ts +31 -0
- package/dist/cjs/elistattesteddecrypt/types.js +16 -0
- package/dist/cjs/encryption/encryption.d.ts +115 -0
- package/dist/cjs/encryption/encryption.js +98 -7
- package/dist/cjs/encryption/index.d.ts +1 -1
- package/dist/cjs/encryption/index.js +17 -16
- package/dist/cjs/generated/abis/lightning.d.ts +1119 -107
- package/dist/cjs/generated/abis/lightning.js +762 -52
- package/dist/cjs/generated/abis/test-elist.d.ts +20 -2
- package/dist/cjs/generated/abis/test-elist.js +16 -3
- package/dist/cjs/generated/abis/verifier.d.ts +118 -15
- package/dist/cjs/generated/abis/verifier.js +71 -19
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +23 -37
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +36 -41
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +1 -1
- package/dist/cjs/generated/es/inco/helioswrapper/v1/helioswrapper_pb.js +1 -1
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +16 -0
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +3 -3
- package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.js +1 -1
- package/dist/cjs/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +7 -0
- package/dist/cjs/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.js +3 -3
- package/dist/cjs/generated/lightning.d.ts +150 -0
- package/dist/cjs/generated/lightning.js +157 -1
- package/dist/cjs/generated/local-node.d.ts +9 -9
- package/dist/cjs/generated/local-node.js +37 -10
- package/dist/cjs/handle.d.ts +72 -0
- package/dist/cjs/handle.js +113 -9
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +11 -2
- package/dist/cjs/kms/client.d.ts +1 -1
- package/dist/cjs/kms/client.js +4 -3
- package/dist/cjs/kms/quorumClient.d.ts +18 -12
- package/dist/cjs/kms/quorumClient.js +212 -231
- package/dist/cjs/kms/quorumConsistency.d.ts +82 -0
- package/dist/cjs/kms/quorumConsistency.js +269 -0
- package/dist/cjs/kms/signatureVerification.d.ts +35 -0
- package/dist/cjs/kms/signatureVerification.js +88 -0
- package/dist/cjs/kms/thresholdPromises.d.ts +4 -3
- package/dist/cjs/kms/thresholdPromises.js +25 -15
- package/dist/cjs/lite/attested-compute.d.ts +2 -2
- package/dist/cjs/lite/attested-compute.js +2 -3
- package/dist/cjs/lite/attested-decrypt.d.ts +2 -2
- package/dist/cjs/lite/attested-decrypt.js +2 -3
- package/dist/cjs/lite/hadu.d.ts +1 -1
- package/dist/cjs/lite/hadu.js +3 -3
- package/dist/cjs/lite/index.d.ts +6 -2
- package/dist/cjs/lite/index.js +8 -14
- package/dist/cjs/lite/lightning.d.ts +96 -47
- package/dist/cjs/lite/lightning.js +221 -267
- package/dist/cjs/lite/types.d.ts +47 -0
- package/dist/cjs/lite/types.js +3 -0
- package/dist/cjs/lite/xwing.d.ts +33 -2
- package/dist/cjs/lite/xwing.js +62 -7
- package/dist/cjs/local/local-node.d.ts +18 -0
- package/dist/cjs/local/local-node.js +18 -3
- package/dist/cjs/reencryption/eip712.d.ts +27 -0
- package/dist/cjs/reencryption/eip712.js +20 -7
- package/dist/cjs/reencryption/types.d.ts +24 -0
- package/dist/cjs/retry.d.ts +14 -0
- package/dist/cjs/retry.js +58 -2
- package/dist/cjs/test/mocks.d.ts +6 -1
- package/dist/cjs/test/mocks.js +31 -6
- package/dist/cjs/viem.d.ts +361 -1
- package/dist/cjs/viem.js +14 -1
- package/dist/esm/advancedacl/session-key.d.ts +5 -5
- package/dist/esm/advancedacl/session-key.js +33 -9
- package/dist/esm/attestedcompute/attested-compute.d.ts +1 -2
- package/dist/esm/attestedcompute/attested-compute.js +13 -5
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +5 -43
- package/dist/esm/attesteddecrypt/attested-decrypt.js +34 -96
- package/dist/esm/attestedreveal/attested-reveal.d.ts +21 -0
- package/dist/esm/attestedreveal/attested-reveal.js +28 -0
- package/dist/esm/attestedreveal/index.d.ts +2 -0
- package/dist/esm/attestedreveal/index.js +3 -0
- package/dist/esm/attestedreveal/types.d.ts +4 -0
- package/dist/esm/attestedreveal/types.js +9 -0
- package/dist/esm/binary.d.ts +82 -0
- package/dist/esm/binary.js +87 -5
- package/dist/esm/chain.d.ts +29 -4
- package/dist/esm/chain.js +33 -5
- package/dist/esm/eip712/eip712.d.ts +18 -0
- package/dist/esm/eip712/eip712.js +46 -0
- package/dist/esm/eip712/index.d.ts +1 -0
- package/dist/esm/eip712/index.js +2 -0
- package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
- package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.js +89 -0
- package/dist/esm/elistattesteddecrypt/index.d.ts +2 -0
- package/dist/esm/elistattesteddecrypt/index.js +3 -0
- package/dist/esm/elistattesteddecrypt/types.d.ts +31 -0
- package/dist/esm/elistattesteddecrypt/types.js +12 -0
- package/dist/esm/encryption/encryption.d.ts +115 -0
- package/dist/esm/encryption/encryption.js +98 -7
- package/dist/esm/encryption/index.d.ts +1 -1
- package/dist/esm/encryption/index.js +2 -2
- package/dist/esm/generated/abis/lightning.d.ts +1119 -107
- package/dist/esm/generated/abis/lightning.js +761 -51
- package/dist/esm/generated/abis/test-elist.d.ts +20 -2
- package/dist/esm/generated/abis/test-elist.js +16 -3
- package/dist/esm/generated/abis/verifier.d.ts +118 -15
- package/dist/esm/generated/abis/verifier.js +71 -19
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +23 -37
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +35 -40
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +1 -1
- package/dist/esm/generated/es/inco/helioswrapper/v1/helioswrapper_pb.js +1 -1
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +16 -0
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +3 -3
- package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.js +1 -1
- package/dist/esm/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +7 -0
- package/dist/esm/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.js +3 -3
- package/dist/esm/generated/lightning.d.ts +150 -0
- package/dist/esm/generated/lightning.js +157 -1
- package/dist/esm/generated/local-node.d.ts +9 -9
- package/dist/esm/generated/local-node.js +37 -10
- package/dist/esm/handle.d.ts +72 -0
- package/dist/esm/handle.js +110 -8
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/kms/client.d.ts +1 -1
- package/dist/esm/kms/client.js +3 -2
- package/dist/esm/kms/quorumClient.d.ts +18 -12
- package/dist/esm/kms/quorumClient.js +213 -232
- package/dist/esm/kms/quorumConsistency.d.ts +82 -0
- package/dist/esm/kms/quorumConsistency.js +260 -0
- package/dist/esm/kms/signatureVerification.d.ts +35 -0
- package/dist/esm/kms/signatureVerification.js +84 -0
- package/dist/esm/kms/thresholdPromises.d.ts +4 -3
- package/dist/esm/kms/thresholdPromises.js +25 -15
- package/dist/esm/lite/attested-compute.d.ts +2 -2
- package/dist/esm/lite/attested-compute.js +3 -3
- package/dist/esm/lite/attested-decrypt.d.ts +2 -2
- package/dist/esm/lite/attested-decrypt.js +3 -3
- package/dist/esm/lite/hadu.d.ts +1 -1
- package/dist/esm/lite/hadu.js +2 -2
- package/dist/esm/lite/index.d.ts +6 -2
- package/dist/esm/lite/index.js +5 -3
- package/dist/esm/lite/lightning.d.ts +96 -47
- package/dist/esm/lite/lightning.js +217 -263
- package/dist/esm/lite/types.d.ts +47 -0
- package/dist/esm/lite/types.js +2 -0
- package/dist/esm/lite/xwing.d.ts +33 -2
- package/dist/esm/lite/xwing.js +59 -7
- package/dist/esm/local/local-node.d.ts +18 -0
- package/dist/esm/local/local-node.js +18 -3
- package/dist/esm/reencryption/eip712.d.ts +27 -0
- package/dist/esm/reencryption/eip712.js +20 -7
- package/dist/esm/reencryption/types.d.ts +24 -0
- package/dist/esm/retry.d.ts +14 -0
- package/dist/esm/retry.js +56 -2
- package/dist/esm/test/mocks.d.ts +6 -1
- package/dist/esm/test/mocks.js +31 -8
- package/dist/esm/viem.d.ts +361 -1
- package/dist/esm/viem.js +15 -2
- package/dist/types/advancedacl/session-key.d.ts +5 -5
- package/dist/types/attestedcompute/attested-compute.d.ts +1 -2
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +5 -43
- package/dist/types/attestedreveal/attested-reveal.d.ts +21 -0
- package/dist/types/attestedreveal/index.d.ts +2 -0
- package/dist/types/attestedreveal/types.d.ts +4 -0
- package/dist/types/binary.d.ts +82 -0
- package/dist/types/chain.d.ts +29 -4
- package/dist/types/eip712/eip712.d.ts +18 -0
- package/dist/types/eip712/index.d.ts +1 -0
- package/dist/types/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
- package/dist/types/elistattesteddecrypt/index.d.ts +2 -0
- package/dist/types/elistattesteddecrypt/types.d.ts +31 -0
- package/dist/types/encryption/encryption.d.ts +115 -0
- package/dist/types/encryption/index.d.ts +1 -1
- package/dist/types/generated/abis/lightning.d.ts +1119 -107
- package/dist/types/generated/abis/test-elist.d.ts +20 -2
- package/dist/types/generated/abis/verifier.d.ts +118 -15
- package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +23 -37
- package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +16 -0
- package/dist/types/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +7 -0
- package/dist/types/generated/lightning.d.ts +150 -0
- package/dist/types/generated/local-node.d.ts +9 -9
- package/dist/types/handle.d.ts +72 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/kms/client.d.ts +1 -1
- package/dist/types/kms/quorumClient.d.ts +18 -12
- package/dist/types/kms/quorumConsistency.d.ts +82 -0
- package/dist/types/kms/signatureVerification.d.ts +35 -0
- package/dist/types/kms/thresholdPromises.d.ts +4 -3
- package/dist/types/lite/attested-compute.d.ts +2 -2
- package/dist/types/lite/attested-decrypt.d.ts +2 -2
- package/dist/types/lite/hadu.d.ts +1 -1
- package/dist/types/lite/index.d.ts +6 -2
- package/dist/types/lite/lightning.d.ts +96 -47
- package/dist/types/lite/types.d.ts +47 -0
- package/dist/types/lite/xwing.d.ts +33 -2
- package/dist/types/local/local-node.d.ts +18 -0
- package/dist/types/reencryption/eip712.d.ts +27 -0
- package/dist/types/reencryption/types.d.ts +24 -0
- package/dist/types/retry.d.ts +14 -0
- package/dist/types/test/mocks.d.ts +6 -1
- package/dist/types/viem.d.ts +361 -1
- package/package.json +19 -21
- package/dist/cjs/generated/abis/lightning-preview.d.ts +0 -1385
- package/dist/cjs/generated/abis/lightning-preview.js +0 -857
- package/dist/esm/generated/abis/lightning-preview.d.ts +0 -1385
- package/dist/esm/generated/abis/lightning-preview.js +0 -854
- package/dist/types/generated/abis/lightning-preview.d.ts +0 -1385
package/dist/cjs/handle.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.InputContext = exports.HandleTypeName = exports.handleTypes = exports.HANDLE_VERSION = void 0;
|
|
3
|
+
exports.HANDLE_LENGTH_BYTES = exports.InputContext = exports.HandleTypeName = exports.handleTypes = exports.BYTE_ELIST_ELEMENT_TYPE_INDEX = exports.SEP_ELIST_OP_RESULT = exports.SEP_OP_RESULT = exports.SEP_INPUT_CONTEXT = exports.SEP_INPUT_HANDLE = exports.SEP_INPUT_PREHANDLE = exports.HANDLE_VERSION = void 0;
|
|
4
4
|
exports.isFheType = isFheType;
|
|
5
|
+
exports.validateHandle = validateHandle;
|
|
5
6
|
exports.getHandleType = getHandleType;
|
|
7
|
+
exports.getEListElementType = getEListElementType;
|
|
6
8
|
exports.computePrehandle = computePrehandle;
|
|
7
9
|
exports.computeHandle = computeHandle;
|
|
8
10
|
exports.hashInputContext = hashInputContext;
|
|
@@ -11,10 +13,28 @@ const effect_1 = require("effect");
|
|
|
11
13
|
const sha3_1 = require("sha3");
|
|
12
14
|
const viem_1 = require("viem");
|
|
13
15
|
const binary_js_1 = require("./binary.js");
|
|
16
|
+
/** Current handle version byte, appended as the last byte of every handle. */
|
|
14
17
|
exports.HANDLE_VERSION = 0;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Domain separators for handle derivation. Must be kept in sync with Solidity
|
|
20
|
+
* (contracts/lightning/src/Types.sol) and Go (pkg/fhe/handle.go). Prefixing every
|
|
21
|
+
* keccak256 preimage with a unique constant string makes cross-derivation-path
|
|
22
|
+
* collision resistance structural rather than incidental.
|
|
23
|
+
*/
|
|
24
|
+
exports.SEP_INPUT_PREHANDLE = 'inco/handle/input-prehandle';
|
|
25
|
+
exports.SEP_INPUT_HANDLE = 'inco/handle/input-handle';
|
|
26
|
+
exports.SEP_INPUT_CONTEXT = 'inco/handle/input-context';
|
|
27
|
+
exports.SEP_OP_RESULT = 'inco/handle/op-result';
|
|
28
|
+
exports.SEP_ELIST_OP_RESULT = 'inco/handle/elist-result';
|
|
29
|
+
// The index of the byte in the handle where elist element type is stored
|
|
30
|
+
exports.BYTE_ELIST_ELEMENT_TYPE_INDEX = 29;
|
|
31
|
+
/**
|
|
32
|
+
* Map of ENCRYPTION type names to their integer identifiers (matching tfhe-rs `FheType`).
|
|
33
|
+
*
|
|
34
|
+
* Keys provide a semantic interpretation over the underlying integral type.
|
|
35
|
+
* For example, `ebool` interprets a `uint16` as a boolean, `ebytes64` interprets
|
|
36
|
+
* a `uint512` as a 64-byte array, etc.
|
|
37
|
+
*/
|
|
18
38
|
exports.handleTypes = Object.freeze({
|
|
19
39
|
ebool: 0,
|
|
20
40
|
euint4: 1,
|
|
@@ -30,10 +50,17 @@ exports.handleTypes = Object.freeze({
|
|
|
30
50
|
ebytes256: 11,
|
|
31
51
|
});
|
|
32
52
|
const handleNames = Object.keys(exports.handleTypes);
|
|
53
|
+
/** Schema that validates a string is one of the known ENCRYPTION type names (e.g. `"ebool"`, `"euint256"`). */
|
|
33
54
|
exports.HandleTypeName = effect_1.Schema.Literal(...handleNames);
|
|
55
|
+
/**
|
|
56
|
+
* Type guard that checks whether a number is a valid {@link FheType} identifier.
|
|
57
|
+
* @param value - The number to check.
|
|
58
|
+
* @returns `true` if `value` is a known ENCRYPTION type integer (0–11).
|
|
59
|
+
*/
|
|
34
60
|
function isFheType(value) {
|
|
35
61
|
return Object.values(exports.handleTypes).includes(value);
|
|
36
62
|
}
|
|
63
|
+
/** Schema for the context required to compute a deterministic ENCRYPTION handle from a prehandle. */
|
|
37
64
|
exports.InputContext = effect_1.Schema.Struct({
|
|
38
65
|
hostChainId: effect_1.Schema.BigInt,
|
|
39
66
|
aclAddress: binary_js_1.HexString,
|
|
@@ -41,9 +68,40 @@ exports.InputContext = effect_1.Schema.Struct({
|
|
|
41
68
|
contractAddress: binary_js_1.HexString,
|
|
42
69
|
version: effect_1.Schema.Number,
|
|
43
70
|
});
|
|
44
|
-
|
|
45
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Expected length of a handle in bytes.
|
|
73
|
+
* Handle format: 29 bytes hash + 1 byte index + 1 byte type + 1 byte version = 32 bytes
|
|
74
|
+
*/
|
|
75
|
+
exports.HANDLE_LENGTH_BYTES = 32;
|
|
76
|
+
/**
|
|
77
|
+
* Validates handle integrity by checking format, length, and version.
|
|
78
|
+
* Matches the validation in Go's HandleFromBytes (pkg/fhe/handle.go).
|
|
79
|
+
* @param handle - The handle to validate
|
|
80
|
+
* @throws Error if handle is malformed (wrong format, length, or unsupported version)
|
|
81
|
+
*/
|
|
82
|
+
function validateHandle(handle) {
|
|
83
|
+
// Check format: must start with 0x prefix and have correct length
|
|
84
|
+
if (!handle.startsWith('0x') ||
|
|
85
|
+
handle.length !== 2 + 2 * exports.HANDLE_LENGTH_BYTES) {
|
|
86
|
+
throw new Error(`Invalid handle format: must be a ${exports.HANDLE_LENGTH_BYTES}-byte hex string with 0x prefix`);
|
|
87
|
+
}
|
|
88
|
+
const handleBytes = (0, viem_1.hexToBytes)(handle);
|
|
89
|
+
// Validate handle version (byte 31 must match HANDLE_VERSION)
|
|
90
|
+
const handleVersion = handleBytes[31];
|
|
91
|
+
if (handleVersion !== exports.HANDLE_VERSION) {
|
|
92
|
+
throw new Error(`Unsupported handle version: expected ${exports.HANDLE_VERSION}, got ${handleVersion} for handle ${handle}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Extracts the {@link FheType} from byte 30 of a validated handle.
|
|
97
|
+
* @param handle - A 32-byte hex handle string.
|
|
98
|
+
* @returns The ENCRYPTION type identifier stored in the handle.
|
|
99
|
+
* @throws If the handle is malformed or contains an invalid ENCRYPTION type.
|
|
100
|
+
* @see {@link https://github.com/Inco-fhevm/inco-monorepo/blob/636756f512ae16535bdcb9a43df76bf14fbd6ba7/pkg/fhe/handle.md Handle format spec}
|
|
101
|
+
*/
|
|
46
102
|
function getHandleType(handle) {
|
|
103
|
+
// Validate handle integrity before extracting type
|
|
104
|
+
validateHandle(handle);
|
|
47
105
|
const handleBytes = (0, viem_1.hexToBytes)(handle);
|
|
48
106
|
const handleType = handleBytes[30];
|
|
49
107
|
if (!isFheType(handleType)) {
|
|
@@ -51,6 +109,21 @@ function getHandleType(handle) {
|
|
|
51
109
|
}
|
|
52
110
|
return handleType;
|
|
53
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Extracts the elist element {@link FheType} from byte 29 of a validated handle.
|
|
114
|
+
* @param handle - A 32-byte hex handle string for an elist.
|
|
115
|
+
* @returns The ENCRYPTION type identifier of the elist elements.
|
|
116
|
+
* @throws If the handle is malformed or contains an invalid ENCRYPTION type at byte 29.
|
|
117
|
+
*/
|
|
118
|
+
function getEListElementType(handle) {
|
|
119
|
+
validateHandle(handle);
|
|
120
|
+
const handleBytes = (0, viem_1.hexToBytes)(handle);
|
|
121
|
+
const elementType = handleBytes[exports.BYTE_ELIST_ELEMENT_TYPE_INDEX];
|
|
122
|
+
if (!isFheType(elementType)) {
|
|
123
|
+
throw new Error(`Invalid elist element type ${elementType} for handle ${handle}`);
|
|
124
|
+
}
|
|
125
|
+
return elementType;
|
|
126
|
+
}
|
|
54
127
|
// A note from Solidity at https://github.com/Inco-fhevm/fhevm/blob/7952950243b144b1bbdfc30318412a2dc6b575fd/lib/TFHEExecutor.sol#L87-L89:
|
|
55
128
|
/// @dev handle format for user inputs is: keccak256(keccak256(CiphertextFHEList)||index_handle)[0:29] || index_handle || handle_type || handle_version
|
|
56
129
|
/// @dev other handles format (fhe ops results) is: keccak256(keccak256(rawCiphertextFHEList)||index_handle)[0:30] || handle_type || handle_versioreenctestn
|
|
@@ -71,6 +144,7 @@ function computePrehandle({ ciphertext, indexHandle, handleType, handleVersion,
|
|
|
71
144
|
.update(Buffer.from(ciphertext))
|
|
72
145
|
.digest();
|
|
73
146
|
const ciphertextIndexHash = new sha3_1.Keccak(256)
|
|
147
|
+
.update(Buffer.from(exports.SEP_INPUT_PREHANDLE, 'utf8'))
|
|
74
148
|
.update(Buffer.from(ciphertextHash))
|
|
75
149
|
.update(Buffer.from([indexHandle]))
|
|
76
150
|
.digest();
|
|
@@ -92,7 +166,28 @@ function computeHandle({ prehandle, context, }) {
|
|
|
92
166
|
if (prehandle.length !== 32) {
|
|
93
167
|
throw new Error(`prehandle should be 32 bytes but is: ${prehandle.length}`);
|
|
94
168
|
}
|
|
95
|
-
|
|
169
|
+
// HANDLE_VERSION and inputType (extracted from prehandle bytes 30/31) are folded into the
|
|
170
|
+
// preimage so the handle is cryptographically bound to its claimed metadata.
|
|
171
|
+
const inputType = prehandle[30];
|
|
172
|
+
const handleVersion = prehandle[31];
|
|
173
|
+
if (handleVersion !== exports.HANDLE_VERSION) {
|
|
174
|
+
throw new Error(`Unsupported prehandle version: expected ${exports.HANDLE_VERSION}, got ${handleVersion}`);
|
|
175
|
+
}
|
|
176
|
+
const packed = (0, viem_1.encodePacked)([
|
|
177
|
+
'string',
|
|
178
|
+
'uint8',
|
|
179
|
+
'uint8',
|
|
180
|
+
'bytes32',
|
|
181
|
+
'string',
|
|
182
|
+
'uint256',
|
|
183
|
+
'address',
|
|
184
|
+
'address',
|
|
185
|
+
'address',
|
|
186
|
+
'uint16',
|
|
187
|
+
], [
|
|
188
|
+
exports.SEP_INPUT_HANDLE,
|
|
189
|
+
handleVersion,
|
|
190
|
+
inputType,
|
|
96
191
|
(0, viem_1.toHex)(prehandle),
|
|
97
192
|
// Note: The x/hostchain spec requires the chain ID to be prefixed with 'evm/' for EVM chains
|
|
98
193
|
'evm/',
|
|
@@ -111,10 +206,19 @@ function computeHandle({ prehandle, context, }) {
|
|
|
111
206
|
prehandle.slice(29, 32),
|
|
112
207
|
]);
|
|
113
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Computes the Keccak-256 hash of an ABI-packed {@link InputContext}.
|
|
211
|
+
*
|
|
212
|
+
* The context is packed as: `SEP_INPUT_CONTEXT || "evm/" || chainId || aclAddress || userAddress || contractAddress || version`.
|
|
213
|
+
*
|
|
214
|
+
* @param context - The input context to hash.
|
|
215
|
+
* @returns A 32-byte `Buffer` containing the Keccak-256 digest.
|
|
216
|
+
*/
|
|
114
217
|
function hashInputContext(context) {
|
|
115
|
-
const packed = (0, viem_1.encodePacked)(['string', 'uint256', 'address', 'address', 'address', '
|
|
218
|
+
const packed = (0, viem_1.encodePacked)(['string', 'string', 'uint256', 'address', 'address', 'address', 'uint16'], [
|
|
116
219
|
// Note: The x/hostchain spec requires the chain ID to be prefixed with 'evm/' for EVM chains
|
|
117
220
|
'evm/',
|
|
221
|
+
exports.SEP_INPUT_CONTEXT,
|
|
118
222
|
context.hostChainId,
|
|
119
223
|
context.aclAddress,
|
|
120
224
|
context.userAddress,
|
|
@@ -128,4 +232,4 @@ function assertUint8(value) {
|
|
|
128
232
|
throw new Error(`Invalid uint8 value: ${value}`);
|
|
129
233
|
}
|
|
130
234
|
}
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhbmRsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFnRUEsOEJBRUM7QUFzQ0Qsd0NBb0JDO0FBU0Qsc0NBVUM7QUFRRCxrREFXQztBQWVELDRDQTRCQztBQVNELHNDQXNEQztBQVVELDRDQWVDO0FBclNELHVIQUF1SDtBQUN2SCxtQ0FBZ0M7QUFDaEMsK0JBQThCO0FBQzlCLCtCQUF1RDtBQUN2RCwyQ0FBd0M7QUFFeEMsOEVBQThFO0FBQ2pFLFFBQUEsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUVoQzs7Ozs7R0FLRztBQUNVLFFBQUEsbUJBQW1CLEdBQUcsNkJBQTZCLENBQUM7QUFDcEQsUUFBQSxnQkFBZ0IsR0FBRywwQkFBMEIsQ0FBQztBQUM5QyxRQUFBLGlCQUFpQixHQUFHLDJCQUEyQixDQUFDO0FBQ2hELFFBQUEsYUFBYSxHQUFHLHVCQUF1QixDQUFDO0FBQ3hDLFFBQUEsbUJBQW1CLEdBQUcsMEJBQTBCLENBQUM7QUFDOUQseUVBQXlFO0FBQzVELFFBQUEsNkJBQTZCLEdBQUcsRUFBRSxDQUFDO0FBRWhEOzs7Ozs7R0FNRztBQUNVLFFBQUEsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDdkMsS0FBSyxFQUFFLENBQUM7SUFDUixNQUFNLEVBQUUsQ0FBQztJQUNULE1BQU0sRUFBRSxDQUFDO0lBQ1QsT0FBTyxFQUFFLENBQUM7SUFDVixPQUFPLEVBQUUsQ0FBQztJQUNWLE9BQU8sRUFBRSxDQUFDO0lBQ1YsUUFBUSxFQUFFLENBQUM7SUFDWCxRQUFRLEVBQUUsQ0FBQztJQUNYLFFBQVEsRUFBRSxDQUFDO0lBQ1gsUUFBUSxFQUFFLENBQUM7SUFDWCxTQUFTLEVBQUUsRUFBRTtJQUNiLFNBQVMsRUFBRSxFQUFFO0NBQ2QsQ0FBQyxDQUFDO0FBRUgsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBVyxDQUFpQyxDQUFD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
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export * from './binary.js';
|
|
2
2
|
export * from './chain.js';
|
|
3
|
-
export
|
|
3
|
+
export { HANDLE_LENGTH_BYTES, HANDLE_VERSION, HandleTypeName, InputContext, getHandleType, handleTypes, isFheType, validateHandle, type FheType, type Handle, type HandleTypes, } from './handle.js';
|
|
4
4
|
export * from './schema.js';
|
|
5
5
|
export * from './viem.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -14,9 +14,18 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.validateHandle = exports.isFheType = exports.handleTypes = exports.getHandleType = exports.InputContext = exports.HandleTypeName = exports.HANDLE_VERSION = exports.HANDLE_LENGTH_BYTES = void 0;
|
|
17
18
|
__exportStar(require("./binary.js"), exports);
|
|
18
19
|
__exportStar(require("./chain.js"), exports);
|
|
19
|
-
|
|
20
|
+
var handle_js_1 = require("./handle.js");
|
|
21
|
+
Object.defineProperty(exports, "HANDLE_LENGTH_BYTES", { enumerable: true, get: function () { return handle_js_1.HANDLE_LENGTH_BYTES; } });
|
|
22
|
+
Object.defineProperty(exports, "HANDLE_VERSION", { enumerable: true, get: function () { return handle_js_1.HANDLE_VERSION; } });
|
|
23
|
+
Object.defineProperty(exports, "HandleTypeName", { enumerable: true, get: function () { return handle_js_1.HandleTypeName; } });
|
|
24
|
+
Object.defineProperty(exports, "InputContext", { enumerable: true, get: function () { return handle_js_1.InputContext; } });
|
|
25
|
+
Object.defineProperty(exports, "getHandleType", { enumerable: true, get: function () { return handle_js_1.getHandleType; } });
|
|
26
|
+
Object.defineProperty(exports, "handleTypes", { enumerable: true, get: function () { return handle_js_1.handleTypes; } });
|
|
27
|
+
Object.defineProperty(exports, "isFheType", { enumerable: true, get: function () { return handle_js_1.isFheType; } });
|
|
28
|
+
Object.defineProperty(exports, "validateHandle", { enumerable: true, get: function () { return handle_js_1.validateHandle; } });
|
|
20
29
|
__exportStar(require("./schema.js"), exports);
|
|
21
30
|
__exportStar(require("./viem.js"), exports);
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNEI7QUFDNUIsNkNBQTJCO0FBQzNCLHlDQVlxQjtBQVhuQixnSEFBQSxtQkFBbUIsT0FBQTtBQUNuQiwyR0FBQSxjQUFjLE9BQUE7QUFDZCwyR0FBQSxjQUFjLE9BQUE7QUFDZCx5R0FBQSxZQUFZLE9BQUE7QUFDWiwwR0FBQSxhQUFhLE9BQUE7QUFDYix3R0FBQSxXQUFXLE9BQUE7QUFDWCxzR0FBQSxTQUFTLE9BQUE7QUFDVCwyR0FBQSxjQUFjLE9BQUE7QUFLaEIsOENBQTRCO0FBQzVCLDRDQUEwQiJ9
|
package/dist/cjs/kms/client.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { type Client } from '@connectrpc/connect';
|
|
|
2
2
|
import type { Address } from 'viem';
|
|
3
3
|
import type { SupportedChain } from '../chain.js';
|
|
4
4
|
import { KmsService } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
|
|
5
|
-
export declare const
|
|
5
|
+
export declare const TEST_DEFAULT_COVALIDATOR_SIGNER: Address;
|
|
6
6
|
export type KmsClient = Client<typeof KmsService> & {
|
|
7
7
|
signerAddress: Address;
|
|
8
8
|
};
|
package/dist/cjs/kms/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.TEST_DEFAULT_COVALIDATOR_SIGNER = void 0;
|
|
4
4
|
exports.getKmsClient = getKmsClient;
|
|
5
5
|
exports.defaultCovalidatorGrpc = defaultCovalidatorGrpc;
|
|
6
6
|
exports.lightningDevnetCovalidatorGrpc = lightningDevnetCovalidatorGrpc;
|
|
@@ -10,7 +10,8 @@ const connect_web_1 = require("@connectrpc/connect-web");
|
|
|
10
10
|
const kms_service_pb_js_1 = require("../generated/es/inco/kms/lite/v1/kms_service_pb.js");
|
|
11
11
|
// anvil zeroth address, while there is only one signer,
|
|
12
12
|
// this does not matter, as we use these addresses for signer ordering
|
|
13
|
-
|
|
13
|
+
// [WARNING] This is the default signer for the Inco Lightning public testnet.
|
|
14
|
+
exports.TEST_DEFAULT_COVALIDATOR_SIGNER = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
|
|
14
15
|
// Helper function to get a KMS client from a string or a Client instance.
|
|
15
16
|
function getKmsClient(kmsConnectRpcEndpointOrClient, signerAddress) {
|
|
16
17
|
if (typeof kmsConnectRpcEndpointOrClient === 'string') {
|
|
@@ -43,4 +44,4 @@ function camelToDashCase(str) {
|
|
|
43
44
|
function getCovalidatorGrpcHelper(chain, network, cluster) {
|
|
44
45
|
return `https://grpc.${camelToDashCase(chain.name)}.${cluster}.${network}.inco.org`;
|
|
45
46
|
}
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ttcy9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZUEsb0NBYUM7QUFJRCx3REFFQztBQUdELHdFQUVDO0FBR0QsMEVBRUM7QUE1Q0QsaURBQWdFO0FBQ2hFLHlEQUFpRTtBQUdqRSwwRkFBZ0Y7QUFFaEYsd0RBQXdEO0FBQ3hELHNFQUFzRTtBQUN0RSw4RUFBOEU7QUFDakUsUUFBQSwrQkFBK0IsR0FDMUMsNENBQTRDLENBQUM7QUFJL0MsMEVBQTBFO0FBQzFFLFNBQWdCLFlBQVksQ0FDMUIsNkJBQWlELEVBQ2pELGFBQXNCO0lBRXRCLElBQUksT0FBTyw2QkFBNkIsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0RCxNQUFNLFNBQVMsR0FBRyxJQUFBLG9DQUFzQixFQUFDO1lBQ3ZDLE9BQU8sRUFBRSw2QkFBNkI7U0FDdkMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQkFBWSxFQUFDLDhCQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxpRkFBaUY7QUFDakYsU0FBZ0Isc0JBQXNCLENBQUMsS0FBcUI7SUFDMUQsT0FBTywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsc0ZBQXNGO0FBQ3RGLFNBQWdCLDhCQUE4QixDQUFDLEtBQXFCO0lBQ2xFLE9BQU8sd0JBQXdCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLFNBQWdCLCtCQUErQixDQUFDLEtBQXFCO0lBQ25FLE9BQU8sd0JBQXdCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsa0NBQWtDO0FBQ2xDLFNBQVMsZUFBZSxDQUFDLEdBQVc7SUFDbEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQy9ELENBQUM7QUFFRCxzRUFBc0U7QUFDdEUsU0FBUyx3QkFBd0IsQ0FDL0IsS0FBcUIsRUFDckIsT0FBNkIsRUFDN0IsT0FBb0I7SUFFcEIsT0FBTyxnQkFBZ0IsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLElBQUksT0FBTyxXQUFXLENBQUM7QUFDdEYsQ0FBQyJ9
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Address } from 'viem';
|
|
2
2
|
import type { DecryptionAttestation, EncryptedDecryptionAttestation } from '../attesteddecrypt/types.js';
|
|
3
|
+
import { type EListDecryptionAttestation, type EncryptedEListDecryptionAttestation } from '../elistattesteddecrypt/types.js';
|
|
3
4
|
import type { EncryptionScheme, SupportedFheType } from '../encryption/encryption.js';
|
|
4
|
-
import type { AttestedComputeRequest, AttestedDecryptRequest, AttestedRevealRequest } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
|
|
5
|
-
import type
|
|
5
|
+
import type { AttestedComputeRequest, AttestedDecryptRequest, AttestedRevealRequest, EListAttestedDecryptRequest, EListAttestedRevealRequest } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
|
|
6
|
+
import { type XwingKeypair } from '../lite/xwing.js';
|
|
6
7
|
import type { BackoffConfig } from '../retry.js';
|
|
7
8
|
import { type KmsClient } from './client.js';
|
|
9
|
+
import type { ViemClient } from '../viem.js';
|
|
8
10
|
export declare class KmsQuorumClient {
|
|
9
11
|
private readonly kmss;
|
|
10
12
|
private readonly threshold;
|
|
@@ -29,9 +31,11 @@ export declare class KmsQuorumClient {
|
|
|
29
31
|
* @throws {Error} If KMS clients array is empty or threshold is invalid
|
|
30
32
|
*/
|
|
31
33
|
static fromKmsClients(kmsClients: KmsClient[], threshold: number): KmsQuorumClient;
|
|
32
|
-
attestedDecrypt(request: AttestedDecryptRequest, backoffConfig?: Partial<BackoffConfig>, reencryptKeypair?: XwingKeypair): Promise<(DecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>)[]>;
|
|
33
|
-
attestedCompute(request: AttestedComputeRequest, backoffConfig?: Partial<BackoffConfig>, reencryptKeypair?: XwingKeypair): Promise<DecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
34
|
-
attestedReveal(request: AttestedRevealRequest, backoffConfig?: Partial<BackoffConfig
|
|
34
|
+
attestedDecrypt(request: AttestedDecryptRequest, backoffConfig?: Partial<BackoffConfig>, reencryptKeypair?: XwingKeypair, executorAddress?: Address, client?: ViemClient): Promise<(DecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>)[]>;
|
|
35
|
+
attestedCompute(request: AttestedComputeRequest, backoffConfig?: Partial<BackoffConfig>, reencryptKeypair?: XwingKeypair, executorAddress?: Address, client?: ViemClient): Promise<DecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
36
|
+
attestedReveal(request: AttestedRevealRequest, backoffConfig?: Partial<BackoffConfig>, executorAddress?: Address, client?: ViemClient): Promise<(DecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedDecryptionAttestation<EncryptionScheme, SupportedFheType>)[]>;
|
|
37
|
+
eListAttestedDecrypt(request: EListAttestedDecryptRequest, backoffConfig?: Partial<BackoffConfig>, reencryptKeypair?: XwingKeypair, executorAddress?: Address, client?: ViemClient): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedFheType> | EncryptedEListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
38
|
+
eListAttestedReveal(request: EListAttestedRevealRequest, backoffConfig?: Partial<BackoffConfig>, executorAddress?: Address, client?: ViemClient): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
|
|
35
39
|
/**
|
|
36
40
|
* Generic method to execute a KMS operation across all clients with retry and threshold logic.
|
|
37
41
|
* Returns results with both the response and signer address.
|
|
@@ -48,12 +52,14 @@ export declare class KmsQuorumClient {
|
|
|
48
52
|
private buildPlaintextAttestation;
|
|
49
53
|
private buildAggregatedAttestations;
|
|
50
54
|
private buildAggregatedComputeAttestation;
|
|
51
|
-
private
|
|
52
|
-
private verifyComputeResponseConsistency;
|
|
55
|
+
private buildAggregatedEListAttestation;
|
|
53
56
|
/**
|
|
54
|
-
* Verifies
|
|
57
|
+
* Verifies proof hashes at two levels:
|
|
58
|
+
* 1. Aggregate: keccak256(concat(proofHashes)) must equal the attested commitmentProof
|
|
59
|
+
* 2. Per-element:
|
|
60
|
+
* - For plaintext (reveal): proofHash[i] = keccak256(value[i])
|
|
61
|
+
* - For reencryption (decrypt): proofHash[i] = keccak256(commitment[i] || plaintext[i])
|
|
62
|
+
* — requires reencryptKeypair to decrypt the ciphertext first.
|
|
55
63
|
*/
|
|
56
|
-
private
|
|
57
|
-
private verifyPlaintextConsistency;
|
|
58
|
-
private verifyCiphertextConsistency;
|
|
64
|
+
private verifyElementProofHashes;
|
|
59
65
|
}
|