@fhevm/sdk 1.0.0-alpha.2 → 1.0.0-alpha.3
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/_cjs/core/_version.js +1 -1
- package/_cjs/core/actions/chain/parseSignedDecryptionPermit.js.map +1 -1
- package/_cjs/core/actions/host/getUserDecryptionDelegationExpirationDate.js +12 -14
- package/_cjs/core/actions/host/getUserDecryptionDelegationExpirationDate.js.map +1 -1
- package/_cjs/core/host-contracts/checkDelegation.js +74 -0
- package/_cjs/core/host-contracts/checkDelegation.js.map +1 -0
- package/_cjs/core/host-contracts/getUserDecryptionDelegationExpirationDate.js +21 -0
- package/_cjs/core/host-contracts/getUserDecryptionDelegationExpirationDate.js.map +1 -0
- package/_cjs/core/host-contracts/isHandleDelegatedForUserDecryption-p.js +33 -0
- package/_cjs/core/host-contracts/isHandleDelegatedForUserDecryption-p.js.map +1 -0
- package/_cjs/core/host-contracts/persistAllowed.js +1 -1
- package/_cjs/core/host-contracts/persistAllowed.js.map +1 -1
- package/_cjs/core/kms/fetchKmsSignedcryptedShares-p.js +16 -5
- package/_cjs/core/kms/fetchKmsSignedcryptedShares-p.js.map +1 -1
- package/_esm/core/_version.js +1 -1
- package/_esm/core/actions/chain/parseSignedDecryptionPermit.js.map +1 -1
- package/_esm/core/actions/host/getUserDecryptionDelegationExpirationDate.js +13 -14
- package/_esm/core/actions/host/getUserDecryptionDelegationExpirationDate.js.map +1 -1
- package/_esm/core/host-contracts/checkDelegation.js +81 -0
- package/_esm/core/host-contracts/checkDelegation.js.map +1 -0
- package/_esm/core/host-contracts/getUserDecryptionDelegationExpirationDate.js +19 -0
- package/_esm/core/host-contracts/getUserDecryptionDelegationExpirationDate.js.map +1 -0
- package/_esm/core/host-contracts/isHandleDelegatedForUserDecryption-p.js +32 -0
- package/_esm/core/host-contracts/isHandleDelegatedForUserDecryption-p.js.map +1 -0
- package/_esm/core/host-contracts/persistAllowed.js +1 -1
- package/_esm/core/host-contracts/persistAllowed.js.map +1 -1
- package/_esm/core/kms/fetchKmsSignedcryptedShares-p.js +16 -5
- package/_esm/core/kms/fetchKmsSignedcryptedShares-p.js.map +1 -1
- package/_types/core/actions/chain/parseSignedDecryptionPermit.d.ts +6 -2
- package/_types/core/actions/chain/parseSignedDecryptionPermit.d.ts.map +1 -1
- package/_types/core/actions/host/getUserDecryptionDelegationExpirationDate.d.ts +5 -2
- package/_types/core/actions/host/getUserDecryptionDelegationExpirationDate.d.ts.map +1 -1
- package/_types/core/host-contracts/checkDelegation.d.ts +22 -0
- package/_types/core/host-contracts/checkDelegation.d.ts.map +1 -0
- package/_types/core/host-contracts/getUserDecryptionDelegationExpirationDate.d.ts +19 -0
- package/_types/core/host-contracts/getUserDecryptionDelegationExpirationDate.d.ts.map +1 -0
- package/_types/core/host-contracts/isHandleDelegatedForUserDecryption-p.d.ts +20 -0
- package/_types/core/host-contracts/isHandleDelegatedForUserDecryption-p.d.ts.map +1 -0
- package/_types/core/kms/fetchKmsSignedcryptedShares-p.d.ts.map +1 -1
- package/_types/core/types/index.d.ts +1 -0
- package/_types/core/types/index.d.ts.map +1 -1
- package/_types/core/types/kms.d.ts +21 -0
- package/_types/core/types/kms.d.ts.map +1 -1
- package/core/_version.ts +1 -1
- package/core/actions/chain/parseSignedDecryptionPermit.ts +6 -2
- package/core/actions/host/getUserDecryptionDelegationExpirationDate.ts +22 -18
- package/core/host-contracts/checkDelegation.ts +114 -0
- package/core/host-contracts/getUserDecryptionDelegationExpirationDate.ts +45 -0
- package/core/host-contracts/isHandleDelegatedForUserDecryption-p.ts +77 -0
- package/core/host-contracts/persistAllowed.ts +1 -1
- package/core/kms/fetchKmsSignedcryptedShares-p.ts +15 -5
- package/core/types/index.ts +1 -0
- package/core/types/kms.ts +19 -0
- package/package.json +1 -1
package/_cjs/core/_version.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sdkName = exports.version = void 0;
|
|
4
|
-
exports.version = '1.0.0-alpha.
|
|
4
|
+
exports.version = '1.0.0-alpha.3';
|
|
5
5
|
exports.sdkName = '@fhevm/sdk';
|
|
6
6
|
//# sourceMappingURL=_version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseSignedDecryptionPermit.js","sourceRoot":"","sources":["../../../../core/actions/chain/parseSignedDecryptionPermit.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"parseSignedDecryptionPermit.js","sourceRoot":"","sources":["../../../../core/actions/chain/parseSignedDecryptionPermit.ts"],"names":[],"mappings":";;AA8BA,kEAOC;AAhCD,uFAAoH;AAyB7G,KAAK,UAAU,2BAA2B,CAC/C,KAAwB,EACxB,UAAiD;IAEjD,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAAC;IAE1D,OAAO,IAAA,yDAA4B,EAAC,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getUserDecryptionDelegationExpirationDate = getUserDecryptionDelegationExpirationDate;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const CoreFhevm_p_js_1 = require("../../runtime/CoreFhevm-p.js");
|
|
4
|
+
const address_js_1 = require("../../base/address.js");
|
|
5
|
+
const getUserDecryptionDelegationExpirationDate_js_1 = require("../../host-contracts/getUserDecryptionDelegationExpirationDate.js");
|
|
7
6
|
async function getUserDecryptionDelegationExpirationDate(fhevm, parameters) {
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
const { address, delegate, delegator, contractAddress } = parameters;
|
|
8
|
+
(0, address_js_1.assertIsAddress)(address, {});
|
|
9
|
+
(0, address_js_1.assertIsAddress)(delegate, {});
|
|
10
|
+
(0, address_js_1.assertIsAddress)(delegator, {});
|
|
11
|
+
(0, address_js_1.assertIsAddress)(contractAddress, {});
|
|
12
|
+
return (0, getUserDecryptionDelegationExpirationDate_js_1.getUserDecryptionDelegationExpirationDate)(fhevm, {
|
|
13
|
+
address: (0, address_js_1.addressToChecksummedAddress)(address),
|
|
14
|
+
delegate: (0, address_js_1.addressToChecksummedAddress)(delegate),
|
|
15
|
+
delegator: (0, address_js_1.addressToChecksummedAddress)(delegator),
|
|
16
|
+
contractAddress: (0, address_js_1.addressToChecksummedAddress)(contractAddress),
|
|
15
17
|
});
|
|
16
|
-
if (!(0, uint_js_1.isUint64)(res)) {
|
|
17
|
-
throw new Error(`Invalid expiration date.`);
|
|
18
|
-
}
|
|
19
|
-
return BigInt(res);
|
|
20
18
|
}
|
|
21
19
|
//# sourceMappingURL=getUserDecryptionDelegationExpirationDate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUserDecryptionDelegationExpirationDate.js","sourceRoot":"","sources":["../../../../core/actions/host/getUserDecryptionDelegationExpirationDate.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"getUserDecryptionDelegationExpirationDate.js","sourceRoot":"","sources":["../../../../core/actions/host/getUserDecryptionDelegationExpirationDate.ts"],"names":[],"mappings":";;AAkBA,8FAiBC;AAjCD,sDAAqF;AACrF,oIAA4K;AAerK,KAAK,UAAU,yCAAyC,CAC7D,KAAY,EACZ,UAA+D;IAE/D,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC;IAErE,IAAA,4BAAe,EAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7B,IAAA,4BAAe,EAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC9B,IAAA,4BAAe,EAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC/B,IAAA,4BAAe,EAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAErC,OAAO,IAAA,wFAA0C,EAAC,KAAK,EAAE;QACvD,OAAO,EAAE,IAAA,wCAA2B,EAAC,OAAO,CAAC;QAC7C,QAAQ,EAAE,IAAA,wCAA2B,EAAC,QAAQ,CAAC;QAC/C,SAAS,EAAE,IAAA,wCAA2B,EAAC,SAAS,CAAC;QACjD,eAAe,EAAE,IAAA,wCAA2B,EAAC,eAAe,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkDelegation = checkDelegation;
|
|
4
|
+
const AclError_js_1 = require("../errors/AclError.js");
|
|
5
|
+
const isHandleDelegatedForUserDecryption_p_js_1 = require("./isHandleDelegatedForUserDecryption-p.js");
|
|
6
|
+
async function checkDelegation(context, parameters) {
|
|
7
|
+
const { address, delegator, delegate, handleContractPairs } = parameters;
|
|
8
|
+
if (handleContractPairs.length === 0) {
|
|
9
|
+
throw new Error('checkDelegation requires at least one (handle, contractAddress) pair');
|
|
10
|
+
}
|
|
11
|
+
function getKey(addr, handleBytes32Hex) {
|
|
12
|
+
return `${addr}:${handleBytes32Hex}`.toLowerCase();
|
|
13
|
+
}
|
|
14
|
+
if (delegator.toLowerCase() === delegate.toLowerCase()) {
|
|
15
|
+
throw new AclError_js_1.AclUserDecryptionError({
|
|
16
|
+
contractAddress: address,
|
|
17
|
+
message: `delegator ${delegator} cannot be equal to delegate`,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
for (const pair of handleContractPairs) {
|
|
21
|
+
if (delegator.toLowerCase() === pair.contractAddress.toLowerCase()) {
|
|
22
|
+
throw new AclError_js_1.AclUserDecryptionError({
|
|
23
|
+
contractAddress: address,
|
|
24
|
+
message: `delegator ${delegator} cannot be equal to contractAddress`,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
if (delegate.toLowerCase() === pair.contractAddress.toLowerCase()) {
|
|
28
|
+
throw new AclError_js_1.AclUserDecryptionError({
|
|
29
|
+
contractAddress: address,
|
|
30
|
+
message: `delegate ${delegate} cannot be equal to contractAddress`,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const allChecks = [];
|
|
35
|
+
const seenKeys = new Set();
|
|
36
|
+
for (const pair of handleContractPairs) {
|
|
37
|
+
const key = getKey(pair.contractAddress, pair.handle.bytes32Hex);
|
|
38
|
+
if (!seenKeys.has(key)) {
|
|
39
|
+
seenKeys.add(key);
|
|
40
|
+
allChecks.push({
|
|
41
|
+
handle: pair.handle,
|
|
42
|
+
contractAddress: pair.contractAddress,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (allChecks.length === 0) {
|
|
47
|
+
throw new Error('checkDelegation: no delegation checks to perform (unexpected empty dedup result)');
|
|
48
|
+
}
|
|
49
|
+
const allResults = await (0, isHandleDelegatedForUserDecryption_p_js_1.isHandleDelegatedForUserDecryption)(context, {
|
|
50
|
+
address,
|
|
51
|
+
delegator,
|
|
52
|
+
delegate,
|
|
53
|
+
pairs: allChecks,
|
|
54
|
+
});
|
|
55
|
+
const resultMap = new Map();
|
|
56
|
+
for (const [i, check] of allChecks.entries()) {
|
|
57
|
+
const result = allResults[i];
|
|
58
|
+
if (result === undefined) {
|
|
59
|
+
throw new Error(`Missing result at index ${i}`);
|
|
60
|
+
}
|
|
61
|
+
const key = getKey(check.contractAddress, check.handle.bytes32Hex);
|
|
62
|
+
resultMap.set(key, result);
|
|
63
|
+
}
|
|
64
|
+
for (const pair of handleContractPairs) {
|
|
65
|
+
const key = getKey(pair.contractAddress, pair.handle.bytes32Hex);
|
|
66
|
+
if (resultMap.get(key) !== true) {
|
|
67
|
+
throw new AclError_js_1.AclUserDecryptionError({
|
|
68
|
+
contractAddress: address,
|
|
69
|
+
message: `Delegate ${delegate} is not delegated by ${delegator} to user decrypt handle ${pair.handle.bytes32Hex} on contract ${pair.contractAddress}!`,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=checkDelegation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkDelegation.js","sourceRoot":"","sources":["../../../core/host-contracts/checkDelegation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getUserDecryptionDelegationExpirationDate = getUserDecryptionDelegationExpirationDate;
|
|
4
|
+
const uint_js_1 = require("../base/uint.js");
|
|
5
|
+
const fragments_js_1 = require("../host-contracts/abi-fragments/fragments.js");
|
|
6
|
+
const CoreFhevm_p_js_1 = require("../runtime/CoreFhevm-p.js");
|
|
7
|
+
async function getUserDecryptionDelegationExpirationDate(context, parameters) {
|
|
8
|
+
const trustedClient = (0, CoreFhevm_p_js_1.getTrustedClient)(context);
|
|
9
|
+
const address = parameters.address;
|
|
10
|
+
const res = await context.runtime.ethereum.readContract(trustedClient, {
|
|
11
|
+
address: address,
|
|
12
|
+
abi: fragments_js_1.getUserDecryptionDelegationExpirationDateAbi,
|
|
13
|
+
args: [parameters.delegator, parameters.delegate, parameters.contractAddress],
|
|
14
|
+
functionName: fragments_js_1.getUserDecryptionDelegationExpirationDateAbi[0].name,
|
|
15
|
+
});
|
|
16
|
+
if (!(0, uint_js_1.isUint64)(res)) {
|
|
17
|
+
throw new Error(`Invalid expiration date.`);
|
|
18
|
+
}
|
|
19
|
+
return BigInt(res);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=getUserDecryptionDelegationExpirationDate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUserDecryptionDelegationExpirationDate.js","sourceRoot":"","sources":["../../../core/host-contracts/getUserDecryptionDelegationExpirationDate.ts"],"names":[],"mappings":";;AAyBA,8FAmBC;AA1CD,6CAA2C;AAC3C,+EAA4G;AAC5G,8DAA6D;AAqBtD,KAAK,UAAU,yCAAyC,CAC7D,OAAgB,EAChB,UAAsB;IAEtB,MAAM,aAAa,GAAG,IAAA,iCAAgB,EAAC,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IAEnC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE;QACrE,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,2DAA4C;QACjD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,eAAe,CAAC;QAC7E,YAAY,EAAE,2DAA4C,CAAC,CAAC,CAAC,CAAC,IAAI;KACnE,CAAC,CAAC;IAEH,IAAI,CAAC,IAAA,kBAAQ,EAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAiB,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isHandleDelegatedForUserDecryption = isHandleDelegatedForUserDecryption;
|
|
4
|
+
const fragments_js_1 = require("./abi-fragments/fragments.js");
|
|
5
|
+
const CoreFhevm_p_js_1 = require("../runtime/CoreFhevm-p.js");
|
|
6
|
+
const promise_js_1 = require("../base/promise.js");
|
|
7
|
+
async function isHandleDelegatedForUserDecryption(context, parameters) {
|
|
8
|
+
const { address, delegate, delegator, pairs } = parameters;
|
|
9
|
+
const rpcCalls = pairs.map((pair) => () => _isHandleDelegatedForUserDecryption(context, {
|
|
10
|
+
address,
|
|
11
|
+
delegate,
|
|
12
|
+
delegator,
|
|
13
|
+
handle: pair.handle,
|
|
14
|
+
contractAddress: pair.contractAddress,
|
|
15
|
+
}));
|
|
16
|
+
const results = await (0, promise_js_1.executeWithBatching)(rpcCalls, context.options.batchRpcCalls);
|
|
17
|
+
return results;
|
|
18
|
+
}
|
|
19
|
+
async function _isHandleDelegatedForUserDecryption(context, parameters) {
|
|
20
|
+
const { address, delegator, delegate, contractAddress, handle } = parameters;
|
|
21
|
+
const trustedClient = (0, CoreFhevm_p_js_1.getTrustedClient)(context);
|
|
22
|
+
const res = await context.runtime.ethereum.readContract(trustedClient, {
|
|
23
|
+
address: address,
|
|
24
|
+
abi: fragments_js_1.isHandleDelegatedForUserDecryptionAbi,
|
|
25
|
+
args: [delegator, delegate, contractAddress, handle.bytes32Hex],
|
|
26
|
+
functionName: fragments_js_1.isHandleDelegatedForUserDecryptionAbi[0].name,
|
|
27
|
+
});
|
|
28
|
+
if (typeof res !== 'boolean') {
|
|
29
|
+
throw new Error(`Invalid isHandleDelegatedForUserDecryptionAbi result.`);
|
|
30
|
+
}
|
|
31
|
+
return res;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=isHandleDelegatedForUserDecryption-p.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isHandleDelegatedForUserDecryption-p.js","sourceRoot":"","sources":["../../../core/host-contracts/isHandleDelegatedForUserDecryption-p.ts"],"names":[],"mappings":";;AA2BA,gFAoBC;AA3CD,+DAAqF;AACrF,8DAA6D;AAC7D,mDAAyD;AAqBlD,KAAK,UAAU,kCAAkC,CACtD,OAAgB,EAChB,UAAsB;IAEtB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;IAE3D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CACxB,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CACb,mCAAmC,CAAC,OAAO,EAAE;QAC3C,OAAO;QACP,QAAQ;QACR,SAAS;QACT,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,eAAe,EAAE,IAAI,CAAC,eAAe;KACtC,CAAC,CACL,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,IAAA,gCAAmB,EAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEnF,OAAO,OAAO,CAAC;AACjB,CAAC;AAID,KAAK,UAAU,mCAAmC,CAChD,OAAgB,EAChB,UAMC;IAED,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC7E,MAAM,aAAa,GAAG,IAAA,iCAAgB,EAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE;QACrE,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,oDAAqC;QAC1C,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC;QAC/D,YAAY,EAAE,oDAAqC,CAAC,CAAC,CAAC,CAAC,IAAI;KAC5D,CAAC,CAAC;IAEH,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -24,7 +24,7 @@ async function _persistAllowed(context, parameters) {
|
|
|
24
24
|
functionName: fragments_js_1.persistAllowedAbi[0].name,
|
|
25
25
|
});
|
|
26
26
|
if (typeof res !== 'boolean') {
|
|
27
|
-
throw new Error(`Invalid
|
|
27
|
+
throw new Error(`Invalid persistAllowed result.`);
|
|
28
28
|
}
|
|
29
29
|
return res;
|
|
30
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistAllowed.js","sourceRoot":"","sources":["../../../core/host-contracts/persistAllowed.ts"],"names":[],"mappings":";;AAyBA,wCAeC;AApCD,+DAAiE;AACjE,8DAA6D;AAC7D,mDAAyD;AAmBlD,KAAK,UAAU,cAAc,CAAC,OAAgB,EAAE,UAAsB;IAC3E,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;IAEtC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CACxB,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CACb,eAAe,CAAC,OAAO,EAAE;QACvB,OAAO;QACP,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CACL,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,IAAA,gCAAmB,EAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEnF,OAAO,OAAO,CAAC;AACjB,CAAC;AAID,KAAK,UAAU,eAAe,CAC5B,OAAgB,EAChB,UAIC;IAED,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IAChD,MAAM,aAAa,GAAG,IAAA,iCAAgB,EAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE;QACrE,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,gCAAiB;QACtB,IAAI,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;QAClC,YAAY,EAAE,gCAAiB,CAAC,CAAC,CAAC,CAAC,IAAI;KACxC,CAAC,CAAC;IAEH,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"persistAllowed.js","sourceRoot":"","sources":["../../../core/host-contracts/persistAllowed.ts"],"names":[],"mappings":";;AAyBA,wCAeC;AApCD,+DAAiE;AACjE,8DAA6D;AAC7D,mDAAyD;AAmBlD,KAAK,UAAU,cAAc,CAAC,OAAgB,EAAE,UAAsB;IAC3E,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;IAEtC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CACxB,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CACb,eAAe,CAAC,OAAO,EAAE;QACvB,OAAO;QACP,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CACL,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,IAAA,gCAAmB,EAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEnF,OAAO,OAAO,CAAC;AACjB,CAAC;AAID,KAAK,UAAU,eAAe,CAC5B,OAAgB,EAChB,UAIC;IAED,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IAChD,MAAM,aAAa,GAAG,IAAA,iCAAgB,EAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE;QACrE,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,gCAAiB;QACtB,IAAI,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;QAClC,YAAY,EAAE,gCAAiB,CAAC,CAAC,CAAC,CAAC,IAAI;KACxC,CAAC,CAAC;IAEH,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -9,6 +9,7 @@ const utils_js_1 = require("./utils.js");
|
|
|
9
9
|
const checkPersistAllowed_js_1 = require("../host-contracts/checkPersistAllowed.js");
|
|
10
10
|
const KmsSignersContext_p_js_1 = require("../host-contracts/KmsSignersContext-p.js");
|
|
11
11
|
const createKmsEip712Domain_js_1 = require("./createKmsEip712Domain.js");
|
|
12
|
+
const checkDelegation_js_1 = require("../host-contracts/checkDelegation.js");
|
|
12
13
|
const MAX_USER_DECRYPT_CONTRACT_ADDRESSES = 10;
|
|
13
14
|
async function fetchKmsSignedcryptedShares(context, parameters) {
|
|
14
15
|
const { signedPermit, options, pairs } = parameters;
|
|
@@ -35,11 +36,21 @@ async function fetchKmsSignedcryptedShares(context, parameters) {
|
|
|
35
36
|
(0, FhevmHandle_js_1.assertHandlesBelongToSameChainId)(handles, BigInt(context.chain.id));
|
|
36
37
|
(0, utils_js_1.assertKmsDecryptionBitLimit)(handles);
|
|
37
38
|
signedPermit.assertNotExpired();
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
if (signedPermit.isDelegated) {
|
|
40
|
+
await (0, checkDelegation_js_1.checkDelegation)(context, {
|
|
41
|
+
address: context.chain.fhevm.contracts.acl.address,
|
|
42
|
+
delegate: signerAddress,
|
|
43
|
+
delegator: encryptedDataOwnerAddress,
|
|
44
|
+
handleContractPairs,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
await (0, checkPersistAllowed_js_1.checkPersistAllowed)(context, {
|
|
49
|
+
address: context.chain.fhevm.contracts.acl.address,
|
|
50
|
+
userAddress: encryptedDataOwnerAddress,
|
|
51
|
+
handleContractPairs,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
43
54
|
const requestedKmsSignersContext = await (0, readKmsSignersContext_p_js_1.readKmsSignersContext)(context, {
|
|
44
55
|
address: context.chain.fhevm.contracts.kmsVerifier.address,
|
|
45
56
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchKmsSignedcryptedShares-p.js","sourceRoot":"","sources":["../../../core/kms/fetchKmsSignedcryptedShares-p.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"fetchKmsSignedcryptedShares-p.js","sourceRoot":"","sources":["../../../core/kms/fetchKmsSignedcryptedShares-p.ts"],"names":[],"mappings":"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"}
|
package/_esm/core/_version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseSignedDecryptionPermit.js","sourceRoot":"","sources":["../../../../core/actions/chain/parseSignedDecryptionPermit.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,2BAA2B,IAAI,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"parseSignedDecryptionPermit.js","sourceRoot":"","sources":["../../../../core/actions/chain/parseSignedDecryptionPermit.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,2BAA2B,IAAI,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAiBpH;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAwB,EACxB,UAAiD;IAEjD,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAAC;IAE1D,OAAO,4BAA4B,CAAC,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { addressToChecksummedAddress, assertIsAddress } from '../../base/address.js';
|
|
2
|
+
import { getUserDecryptionDelegationExpirationDate as getUserDecryptionDelegationExpirationDate_ } from '../../host-contracts/getUserDecryptionDelegationExpirationDate.js';
|
|
3
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
4
4
|
export async function getUserDecryptionDelegationExpirationDate(fhevm, parameters) {
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
const { address, delegate, delegator, contractAddress } = parameters;
|
|
6
|
+
assertIsAddress(address, {});
|
|
7
|
+
assertIsAddress(delegate, {});
|
|
8
|
+
assertIsAddress(delegator, {});
|
|
9
|
+
assertIsAddress(contractAddress, {});
|
|
10
|
+
return getUserDecryptionDelegationExpirationDate_(fhevm, {
|
|
11
|
+
address: addressToChecksummedAddress(address),
|
|
12
|
+
delegate: addressToChecksummedAddress(delegate),
|
|
13
|
+
delegator: addressToChecksummedAddress(delegator),
|
|
14
|
+
contractAddress: addressToChecksummedAddress(contractAddress),
|
|
12
15
|
});
|
|
13
|
-
if (!isUint64(res)) {
|
|
14
|
-
throw new Error(`Invalid expiration date.`);
|
|
15
|
-
}
|
|
16
|
-
return BigInt(res);
|
|
17
16
|
}
|
|
18
17
|
//# sourceMappingURL=getUserDecryptionDelegationExpirationDate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUserDecryptionDelegationExpirationDate.js","sourceRoot":"","sources":["../../../../core/actions/host/getUserDecryptionDelegationExpirationDate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"getUserDecryptionDelegationExpirationDate.js","sourceRoot":"","sources":["../../../../core/actions/host/getUserDecryptionDelegationExpirationDate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,yCAAyC,IAAI,0CAA0C,EAAE,MAAM,mEAAmE,CAAC;AAa5K,gFAAgF;AAEhF,MAAM,CAAC,KAAK,UAAU,yCAAyC,CAC7D,KAAY,EACZ,UAA+D;IAE/D,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC;IAErE,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7B,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC9B,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC/B,eAAe,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAErC,OAAO,0CAA0C,CAAC,KAAK,EAAE;QACvD,OAAO,EAAE,2BAA2B,CAAC,OAAO,CAAC;QAC7C,QAAQ,EAAE,2BAA2B,CAAC,QAAQ,CAAC;QAC/C,SAAS,EAAE,2BAA2B,CAAC,SAAS,CAAC;QACjD,eAAe,EAAE,2BAA2B,CAAC,eAAe,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { AclUserDecryptionError } from '../errors/AclError.js';
|
|
2
|
+
import { isHandleDelegatedForUserDecryption } from './isHandleDelegatedForUserDecryption-p.js';
|
|
3
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
4
|
+
export async function checkDelegation(context, parameters) {
|
|
5
|
+
const { address, delegator, delegate, handleContractPairs } = parameters;
|
|
6
|
+
if (handleContractPairs.length === 0) {
|
|
7
|
+
throw new Error('checkDelegation requires at least one (handle, contractAddress) pair');
|
|
8
|
+
}
|
|
9
|
+
// runtime defensive check, use lowercase
|
|
10
|
+
function getKey(addr, handleBytes32Hex) {
|
|
11
|
+
return `${addr}:${handleBytes32Hex}`.toLowerCase();
|
|
12
|
+
}
|
|
13
|
+
// 1. Verify rule: delegator !== delegate
|
|
14
|
+
if (delegator.toLowerCase() === delegate.toLowerCase()) {
|
|
15
|
+
throw new AclUserDecryptionError({
|
|
16
|
+
contractAddress: address,
|
|
17
|
+
message: `delegator ${delegator} cannot be equal to delegate`,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
// 2. Verify rules: delegator !== contractAddress & delegate !== contractAddress
|
|
21
|
+
for (const pair of handleContractPairs) {
|
|
22
|
+
if (delegator.toLowerCase() === pair.contractAddress.toLowerCase()) {
|
|
23
|
+
throw new AclUserDecryptionError({
|
|
24
|
+
contractAddress: address,
|
|
25
|
+
message: `delegator ${delegator} cannot be equal to contractAddress`,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if (delegate.toLowerCase() === pair.contractAddress.toLowerCase()) {
|
|
29
|
+
throw new AclUserDecryptionError({
|
|
30
|
+
contractAddress: address,
|
|
31
|
+
message: `delegate ${delegate} cannot be equal to contractAddress`,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// 3. Collect all unique (contractAddress, handle) pairs to avoid duplicate RPC calls
|
|
36
|
+
const allChecks = [];
|
|
37
|
+
const seenKeys = new Set();
|
|
38
|
+
for (const pair of handleContractPairs) {
|
|
39
|
+
// runtime defensive check, use lowercase
|
|
40
|
+
const key = getKey(pair.contractAddress, pair.handle.bytes32Hex);
|
|
41
|
+
if (!seenKeys.has(key)) {
|
|
42
|
+
seenKeys.add(key);
|
|
43
|
+
allChecks.push({
|
|
44
|
+
handle: pair.handle,
|
|
45
|
+
contractAddress: pair.contractAddress,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (allChecks.length === 0) {
|
|
50
|
+
throw new Error('checkDelegation: no delegation checks to perform (unexpected empty dedup result)');
|
|
51
|
+
}
|
|
52
|
+
// 4. Single batched RPC call for all unique checks
|
|
53
|
+
const allResults = await isHandleDelegatedForUserDecryption(context, {
|
|
54
|
+
address,
|
|
55
|
+
delegator,
|
|
56
|
+
delegate,
|
|
57
|
+
pairs: allChecks,
|
|
58
|
+
});
|
|
59
|
+
// 5. Build result map for lookup
|
|
60
|
+
const resultMap = new Map();
|
|
61
|
+
for (const [i, check] of allChecks.entries()) {
|
|
62
|
+
const result = allResults[i];
|
|
63
|
+
// tsc: noUncheckedIndexedAccess
|
|
64
|
+
if (result === undefined) {
|
|
65
|
+
throw new Error(`Missing result at index ${i}`);
|
|
66
|
+
}
|
|
67
|
+
const key = getKey(check.contractAddress, check.handle.bytes32Hex);
|
|
68
|
+
resultMap.set(key, result);
|
|
69
|
+
}
|
|
70
|
+
// 6. Verify delegation for each requested pair
|
|
71
|
+
for (const pair of handleContractPairs) {
|
|
72
|
+
const key = getKey(pair.contractAddress, pair.handle.bytes32Hex);
|
|
73
|
+
if (resultMap.get(key) !== true) {
|
|
74
|
+
throw new AclUserDecryptionError({
|
|
75
|
+
contractAddress: address,
|
|
76
|
+
message: `Delegate ${delegate} is not delegated by ${delegator} to user decrypt handle ${pair.handle.bytes32Hex} on contract ${pair.contractAddress}!`,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=checkDelegation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkDelegation.js","sourceRoot":"","sources":["../../../core/host-contracts/checkDelegation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { isUint64 } from '../base/uint.js';
|
|
2
|
+
import { getUserDecryptionDelegationExpirationDateAbi } from '../host-contracts/abi-fragments/fragments.js';
|
|
3
|
+
import { getTrustedClient } from '../runtime/CoreFhevm-p.js';
|
|
4
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
5
|
+
export async function getUserDecryptionDelegationExpirationDate(context, parameters) {
|
|
6
|
+
const trustedClient = getTrustedClient(context);
|
|
7
|
+
const address = parameters.address;
|
|
8
|
+
const res = await context.runtime.ethereum.readContract(trustedClient, {
|
|
9
|
+
address: address,
|
|
10
|
+
abi: getUserDecryptionDelegationExpirationDateAbi,
|
|
11
|
+
args: [parameters.delegator, parameters.delegate, parameters.contractAddress],
|
|
12
|
+
functionName: getUserDecryptionDelegationExpirationDateAbi[0].name,
|
|
13
|
+
});
|
|
14
|
+
if (!isUint64(res)) {
|
|
15
|
+
throw new Error(`Invalid expiration date.`);
|
|
16
|
+
}
|
|
17
|
+
return BigInt(res);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=getUserDecryptionDelegationExpirationDate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUserDecryptionDelegationExpirationDate.js","sourceRoot":"","sources":["../../../core/host-contracts/getUserDecryptionDelegationExpirationDate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,4CAA4C,EAAE,MAAM,8CAA8C,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAmB7D,gFAAgF;AAEhF,MAAM,CAAC,KAAK,UAAU,yCAAyC,CAC7D,OAAgB,EAChB,UAAsB;IAEtB,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IAEnC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE;QACrE,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,4CAA4C;QACjD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,eAAe,CAAC;QAC7E,YAAY,EAAE,4CAA4C,CAAC,CAAC,CAAC,CAAC,IAAI;KACnE,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAiB,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { isHandleDelegatedForUserDecryptionAbi } from './abi-fragments/fragments.js';
|
|
2
|
+
import { getTrustedClient } from '../runtime/CoreFhevm-p.js';
|
|
3
|
+
import { executeWithBatching } from '../base/promise.js';
|
|
4
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
5
|
+
export async function isHandleDelegatedForUserDecryption(context, parameters) {
|
|
6
|
+
const { address, delegate, delegator, pairs } = parameters;
|
|
7
|
+
const rpcCalls = pairs.map((pair) => () => _isHandleDelegatedForUserDecryption(context, {
|
|
8
|
+
address,
|
|
9
|
+
delegate,
|
|
10
|
+
delegator,
|
|
11
|
+
handle: pair.handle,
|
|
12
|
+
contractAddress: pair.contractAddress,
|
|
13
|
+
}));
|
|
14
|
+
const results = await executeWithBatching(rpcCalls, context.options.batchRpcCalls);
|
|
15
|
+
return results;
|
|
16
|
+
}
|
|
17
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
18
|
+
async function _isHandleDelegatedForUserDecryption(context, parameters) {
|
|
19
|
+
const { address, delegator, delegate, contractAddress, handle } = parameters;
|
|
20
|
+
const trustedClient = getTrustedClient(context);
|
|
21
|
+
const res = await context.runtime.ethereum.readContract(trustedClient, {
|
|
22
|
+
address: address,
|
|
23
|
+
abi: isHandleDelegatedForUserDecryptionAbi,
|
|
24
|
+
args: [delegator, delegate, contractAddress, handle.bytes32Hex],
|
|
25
|
+
functionName: isHandleDelegatedForUserDecryptionAbi[0].name,
|
|
26
|
+
});
|
|
27
|
+
if (typeof res !== 'boolean') {
|
|
28
|
+
throw new Error(`Invalid isHandleDelegatedForUserDecryptionAbi result.`);
|
|
29
|
+
}
|
|
30
|
+
return res;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=isHandleDelegatedForUserDecryption-p.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isHandleDelegatedForUserDecryption-p.js","sourceRoot":"","sources":["../../../core/host-contracts/isHandleDelegatedForUserDecryption-p.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qCAAqC,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAmBzD,gFAAgF;AAEhF,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,OAAgB,EAChB,UAAsB;IAEtB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;IAE3D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CACxB,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CACb,mCAAmC,CAAC,OAAO,EAAE;QAC3C,OAAO;QACP,QAAQ;QACR,SAAS;QACT,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,eAAe,EAAE,IAAI,CAAC,eAAe;KACtC,CAAC,CACL,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEnF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAEhF,KAAK,UAAU,mCAAmC,CAChD,OAAgB,EAChB,UAMC;IAED,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC7E,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE;QACrE,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,qCAAqC;QAC1C,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC;QAC/D,YAAY,EAAE,qCAAqC,CAAC,CAAC,CAAC,CAAC,IAAI;KAC5D,CAAC,CAAC;IAEH,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -23,7 +23,7 @@ async function _persistAllowed(context, parameters) {
|
|
|
23
23
|
functionName: persistAllowedAbi[0].name,
|
|
24
24
|
});
|
|
25
25
|
if (typeof res !== 'boolean') {
|
|
26
|
-
throw new Error(`Invalid
|
|
26
|
+
throw new Error(`Invalid persistAllowed result.`);
|
|
27
27
|
}
|
|
28
28
|
return res;
|
|
29
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistAllowed.js","sourceRoot":"","sources":["../../../core/host-contracts/persistAllowed.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAiBzD,gFAAgF;AAEhF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAgB,EAAE,UAAsB;IAC3E,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;IAEtC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CACxB,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CACb,eAAe,CAAC,OAAO,EAAE;QACvB,OAAO;QACP,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CACL,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEnF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAEhF,KAAK,UAAU,eAAe,CAC5B,OAAgB,EAChB,UAIC;IAED,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IAChD,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE;QACrE,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,iBAAiB;QACtB,IAAI,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;QAClC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI;KACxC,CAAC,CAAC;IAEH,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"persistAllowed.js","sourceRoot":"","sources":["../../../core/host-contracts/persistAllowed.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAiBzD,gFAAgF;AAEhF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAgB,EAAE,UAAsB;IAC3E,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;IAEtC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CACxB,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CACb,eAAe,CAAC,OAAO,EAAE;QACvB,OAAO;QACP,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CACL,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEnF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAEhF,KAAK,UAAU,eAAe,CAC5B,OAAgB,EAChB,UAIC;IAED,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IAChD,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE;QACrE,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,iBAAiB;QACtB,IAAI,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;QAClC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI;KACxC,CAAC,CAAC;IAEH,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -6,6 +6,7 @@ import { assertKmsDecryptionBitLimit } from './utils.js';
|
|
|
6
6
|
import { checkPersistAllowed } from '../host-contracts/checkPersistAllowed.js';
|
|
7
7
|
import { assertExtraDataMatchesKmsSingersContext } from '../host-contracts/KmsSignersContext-p.js';
|
|
8
8
|
import { createKmsEip712Domain } from './createKmsEip712Domain.js';
|
|
9
|
+
import { checkDelegation } from '../host-contracts/checkDelegation.js';
|
|
9
10
|
////////////////////////////////////////////////////////////////////////////////
|
|
10
11
|
const MAX_USER_DECRYPT_CONTRACT_ADDRESSES = 10;
|
|
11
12
|
////////////////////////////////////////////////////////////////////////////////
|
|
@@ -46,11 +47,21 @@ export async function fetchKmsSignedcryptedShares(context, parameters) {
|
|
|
46
47
|
// 6. Check: Expiration date
|
|
47
48
|
signedPermit.assertNotExpired();
|
|
48
49
|
// 7. Check: ACL permissions (user is signer or delegatorAddress)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
if (signedPermit.isDelegated) {
|
|
51
|
+
await checkDelegation(context, {
|
|
52
|
+
address: context.chain.fhevm.contracts.acl.address,
|
|
53
|
+
delegate: signerAddress,
|
|
54
|
+
delegator: encryptedDataOwnerAddress,
|
|
55
|
+
handleContractPairs,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
await checkPersistAllowed(context, {
|
|
60
|
+
address: context.chain.fhevm.contracts.acl.address,
|
|
61
|
+
userAddress: encryptedDataOwnerAddress,
|
|
62
|
+
handleContractPairs,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
54
65
|
// 8. Verify the EIP712 signature
|
|
55
66
|
// Not required because a signedPermit is guaranteed to be verified.
|
|
56
67
|
// 9. Fetch `KmsSignersContext` on-chain (cached)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchKmsSignedcryptedShares-p.js","sourceRoot":"","sources":["../../../core/kms/fetchKmsSignedcryptedShares-p.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,qCAAqC,EAAE,MAAM,+BAA+B,CAAC;AACtH,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,uCAAuC,EAAE,MAAM,0CAA0C,CAAC;AACnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"fetchKmsSignedcryptedShares-p.js","sourceRoot":"","sources":["../../../core/kms/fetchKmsSignedcryptedShares-p.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,14 @@ import type { Fhevm } from '../../types/coreFhevmClient.js';
|
|
|
2
2
|
import type { FhevmChain } from '../../types/fhevmChain.js';
|
|
3
3
|
import type { SignedDecryptionPermit } from '../../types/signedDecryptionPermit.js';
|
|
4
4
|
import type { TransportKeypair } from '../../kms/TransportKeypair-p.js';
|
|
5
|
-
import type {
|
|
5
|
+
import type { KmsDecryptEip712Like } from '../../types/kms.js';
|
|
6
6
|
export type ParseSignedDecryptionPermitParameters = {
|
|
7
7
|
/** The serialized permit — a previously parsed permit object. */
|
|
8
|
-
readonly serializedPermit:
|
|
8
|
+
readonly serializedPermit: {
|
|
9
|
+
readonly eip712: KmsDecryptEip712Like;
|
|
10
|
+
readonly signature: string;
|
|
11
|
+
readonly signerAddress: string;
|
|
12
|
+
};
|
|
9
13
|
/** The transport keypair that was used when signing the permit. */
|
|
10
14
|
readonly transportKeypair: TransportKeypair;
|
|
11
15
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseSignedDecryptionPermit.d.ts","sourceRoot":"","sources":["../../../../core/actions/chain/parseSignedDecryptionPermit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"parseSignedDecryptionPermit.d.ts","sourceRoot":"","sources":["../../../../core/actions/chain/parseSignedDecryptionPermit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAK/D,MAAM,MAAM,qCAAqC,GAAG;IAClD,iEAAiE;IACjE,QAAQ,CAAC,gBAAgB,EAAE;QACzB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;QACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,mEAAmE;IACnE,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,qCAAqC,GAAG,sBAAsB,CAAC;AAE3E;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,EACxB,UAAU,EAAE,qCAAqC,GAChD,OAAO,CAAC,qCAAqC,CAAC,CAIhD"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { Fhevm } from '../../types/coreFhevmClient.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { Uint64BigInt } from '../../types/primitives.js';
|
|
3
3
|
export type GetUserDecryptionDelegationExpirationDateParameters = {
|
|
4
|
-
readonly address:
|
|
4
|
+
readonly address: string;
|
|
5
|
+
readonly delegator: string;
|
|
6
|
+
readonly delegate: string;
|
|
7
|
+
readonly contractAddress: string;
|
|
5
8
|
};
|
|
6
9
|
export type GetUserDecryptionDelegationExpirationDateReturnType = Uint64BigInt;
|
|
7
10
|
export declare function getUserDecryptionDelegationExpirationDate(fhevm: Fhevm, parameters: GetUserDecryptionDelegationExpirationDateParameters): Promise<GetUserDecryptionDelegationExpirationDateReturnType>;
|