@inco/lightning 0.6.8 → 0.7.0
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/CHANGELOG.md +6 -0
- package/README.md +29 -2
- package/manifest.yaml +35 -42
- package/package.json +5 -2
- package/src/CreateXHelper.sol +3 -1
- package/src/DeployUtils.sol +36 -71
- package/src/Errors.sol +1 -1
- package/src/IIncoLightning.sol +2 -0
- package/src/IncoLightning.sol +5 -17
- package/src/IncoVerifier.sol +12 -18
- package/src/Lib.alphanet.sol +1 -1
- package/src/Lib.sol +1 -1
- package/src/Lib.template.sol +35 -153
- package/src/Types.sol +231 -97
- package/src/interfaces/IIncoLightning.sol +2 -0
- package/src/interfaces/IIncoVerifier.sol +6 -12
- package/src/interfaces/automata-interfaces/BELE.sol +2 -0
- package/src/interfaces/automata-interfaces/IAutomataEnclaveIdentityDao.sol +9 -11
- package/src/interfaces/automata-interfaces/IFmspcTcbDao.sol +3 -3
- package/src/interfaces/automata-interfaces/IPCCSRouter.sol +13 -47
- package/src/interfaces/automata-interfaces/IPCCSRouterExtended.sol +2 -0
- package/src/interfaces/automata-interfaces/IPcsDao.sol +6 -11
- package/src/interfaces/automata-interfaces/IQuoteVerifier.sol +4 -7
- package/src/interfaces/automata-interfaces/Types.sol +7 -6
- package/src/libs/incoLightning_alphanet_v2_976644394.sol +478 -0
- package/src/libs/incoLightning_devnet_v1_887305889.sol +5 -3
- package/src/libs/incoLightning_testnet_v1_938327937.sol +5 -3
- package/src/lightning-parts/AccessControl/AdvancedAccessControl.sol +39 -72
- package/src/lightning-parts/AccessControl/BaseAccessControlList.sol +31 -62
- package/src/lightning-parts/AccessControl/interfaces/IAdvancedAccessControl.sol +8 -15
- package/src/lightning-parts/AccessControl/interfaces/IBaseAccessControlList.sol +5 -12
- package/src/lightning-parts/AccessControl/test/TestAdvancedAccessControl.t.sol +44 -84
- package/src/lightning-parts/AccessControl/test/TestBaseAccessControl.t.sol +2 -0
- package/src/lightning-parts/DecryptionAttester.sol +14 -28
- package/src/lightning-parts/EncryptedInput.sol +23 -52
- package/src/lightning-parts/EncryptedOperations.sol +96 -438
- package/src/lightning-parts/Fee.sol +3 -1
- package/src/lightning-parts/TEELifecycle.sol +94 -223
- package/src/lightning-parts/TEELifecycle.types.sol +4 -3
- package/src/lightning-parts/TrivialEncryption.sol +6 -20
- package/src/lightning-parts/interfaces/IDecryptionAttester.sol +7 -2
- package/src/lightning-parts/interfaces/IEncryptedInput.sol +5 -12
- package/src/lightning-parts/interfaces/IEncryptedOperations.sol +17 -61
- package/src/lightning-parts/interfaces/ITEELifecycle.sol +7 -11
- package/src/lightning-parts/interfaces/ITrivialEncryption.sol +2 -0
- package/src/lightning-parts/primitives/EventCounter.sol +7 -8
- package/src/lightning-parts/primitives/HandleGeneration.sol +20 -32
- package/src/lightning-parts/primitives/HandleMetadata.sol +7 -17
- package/src/lightning-parts/primitives/LightningAddressGetter.sol +3 -0
- package/src/lightning-parts/primitives/SignatureVerifier.sol +91 -27
- package/src/lightning-parts/primitives/VerifierAddressGetter.sol +3 -0
- package/src/lightning-parts/primitives/interfaces/IEventCounter.sol +2 -0
- package/src/lightning-parts/primitives/interfaces/IHandleGeneration.sol +10 -2
- package/src/lightning-parts/primitives/interfaces/ISignatureVerifier.sol +4 -2
- package/src/lightning-parts/primitives/interfaces/IVerifierAddressGetter.sol +2 -0
- package/src/lightning-parts/primitives/test/SignatureVerifier.t.sol +838 -0
- package/src/lightning-parts/test/Fee.t.sol +6 -6
- package/src/lightning-parts/test/HandleMetadata.t.sol +21 -76
- package/src/lightning-parts/test/InputsFee.t.sol +7 -28
- package/src/lightning-parts/test/TestDecryptionAttestationInSynchronousFlow.t.sol +16 -48
- package/src/pasted-dependencies/CreateX.sol +154 -455
- package/src/pasted-dependencies/ICreateX.sol +55 -102
- package/src/periphery/SessionVerifier.sol +10 -8
- package/src/shared/IOwnable.sol +3 -0
- package/src/shared/IUUPSUpgradable.sol +5 -1
- package/src/shared/JsonUtils.sol +3 -5
- package/src/shared/TestUtils.sol +15 -13
- package/src/test/AddTwo.sol +9 -7
- package/src/test/FakeIncoInfra/FakeComputeServer.sol +11 -53
- package/src/test/FakeIncoInfra/FakeDecryptionAttester.sol +35 -119
- package/src/test/FakeIncoInfra/FakeIncoInfraBase.sol +31 -48
- package/src/test/FakeIncoInfra/FakeQuoteVerifier.sol +4 -7
- package/src/test/FakeIncoInfra/KVStore.sol +2 -0
- package/src/test/FakeIncoInfra/MockOpHandler.sol +9 -31
- package/src/test/FakeIncoInfra/MockRemoteAttestation.sol +50 -21
- package/src/test/IncoTest.sol +22 -9
- package/src/test/OpsTest.sol +438 -0
- package/src/test/TEELifecycle/TEELifecycleMockTest.t.sol +57 -104
- package/src/test/TestAddTwo.t.sol +4 -3
- package/src/test/TestDeploy.t.sol +5 -6
- package/src/test/TestExtractDataOfEventTooLarge.t.sol +7 -9
- package/src/test/TestFakeInfra.t.sol +15 -38
- package/src/test/TestUpgrade.t.sol +40 -135
- package/src/test/TestVersion.t.sol +6 -5
- package/src/version/IncoLightningConfig.sol +2 -2
- package/src/version/Version.sol +46 -48
- package/src/version/interfaces/IVersion.sol +6 -0
|
@@ -7,18 +7,12 @@ import {ITEELifecycle} from "../lightning-parts/interfaces/ITEELifecycle.sol";
|
|
|
7
7
|
import {IQuoteVerifier} from "./automata-interfaces/IQuoteVerifier.sol";
|
|
8
8
|
import {ISignatureVerifier} from "../lightning-parts/primitives/interfaces/ISignatureVerifier.sol";
|
|
9
9
|
|
|
10
|
-
interface IIncoVerifier is
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
ISignatureVerifier
|
|
15
|
-
{
|
|
16
|
-
function initialize(
|
|
17
|
-
address owner,
|
|
18
|
-
string memory name,
|
|
19
|
-
string memory version,
|
|
20
|
-
IQuoteVerifier quoteVerifier
|
|
21
|
-
) external;
|
|
10
|
+
interface IIncoVerifier is IAdvancedAccessControl, IDecryptionAttester, ITEELifecycle, ISignatureVerifier {
|
|
11
|
+
|
|
12
|
+
function initialize(address owner, string memory name, string memory version, IQuoteVerifier quoteVerifier) external;
|
|
13
|
+
// forge-lint: disable-next-line(mixed-case-function)
|
|
22
14
|
function getEIP712Name() external view returns (string memory);
|
|
15
|
+
// forge-lint: disable-next-line(mixed-case-function)
|
|
23
16
|
function getEIP712Version() external view returns (string memory);
|
|
17
|
+
|
|
24
18
|
}
|
|
@@ -5,6 +5,7 @@ pragma solidity ^0.8.0;
|
|
|
5
5
|
* @notice Converts a little-endian encoded bytes to a big-endian uint256 integer
|
|
6
6
|
*/
|
|
7
7
|
library BELE {
|
|
8
|
+
|
|
8
9
|
function leBytesToBeUint(bytes memory encoded) internal pure returns (uint256 decoded) {
|
|
9
10
|
for (uint256 i = 0; i < encoded.length; i++) {
|
|
10
11
|
uint256 digits = uint256(uint8(bytes1(encoded[i])));
|
|
@@ -17,4 +18,5 @@ library BELE {
|
|
|
17
18
|
decoded += acc;
|
|
18
19
|
}
|
|
19
20
|
}
|
|
21
|
+
|
|
20
22
|
}
|
|
@@ -5,24 +5,22 @@ import {EnclaveIdentityJsonObj, IdentityObj} from "./Types.sol";
|
|
|
5
5
|
|
|
6
6
|
// only the functions we need have been included here
|
|
7
7
|
interface IEnclaveIdentityHelper {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
)
|
|
8
|
+
|
|
9
|
+
function parseIdentityString(string calldata identityStr)
|
|
11
10
|
external
|
|
12
11
|
pure
|
|
13
12
|
returns (IdentityObj memory identity, string memory identityTcbString);
|
|
13
|
+
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
// only the functions we need have been included here
|
|
17
17
|
interface IAutomataEnclaveIdentityDao {
|
|
18
|
-
function upsertEnclaveIdentity(
|
|
19
|
-
uint256 id,
|
|
20
|
-
uint256 version,
|
|
21
|
-
EnclaveIdentityJsonObj calldata enclaveIdentityObj
|
|
22
|
-
) external returns (bytes32 attestationId);
|
|
23
18
|
|
|
24
|
-
function
|
|
19
|
+
function upsertEnclaveIdentity(uint256 id, uint256 version, EnclaveIdentityJsonObj calldata enclaveIdentityObj)
|
|
25
20
|
external
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
returns (bytes32 attestationId);
|
|
22
|
+
|
|
23
|
+
// forge-lint: disable-next-line(mixed-case-function)
|
|
24
|
+
function EnclaveIdentityLib() external view returns (IEnclaveIdentityHelper);
|
|
25
|
+
|
|
28
26
|
}
|
|
@@ -4,7 +4,7 @@ pragma solidity ^0.8;
|
|
|
4
4
|
import {TcbInfoJsonObj} from "./Types.sol";
|
|
5
5
|
|
|
6
6
|
interface IFmspcTcbDao {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
|
|
8
|
+
function upsertFmspcTcb(TcbInfoJsonObj calldata tcbInfoObj) external returns (bytes32 attestationId);
|
|
9
|
+
|
|
10
10
|
}
|
|
@@ -1,18 +1,7 @@
|
|
|
1
1
|
//SPDX-License-Identifier: MIT
|
|
2
2
|
pragma solidity >=0.8.0;
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
EnclaveIdentityJsonObj,
|
|
6
|
-
IdentityObj,
|
|
7
|
-
EnclaveId,
|
|
8
|
-
CA,
|
|
9
|
-
TcbInfoJsonObj,
|
|
10
|
-
TCBLevelsObj,
|
|
11
|
-
TcbInfoBasic,
|
|
12
|
-
TcbId,
|
|
13
|
-
TDXModule,
|
|
14
|
-
TDXModuleIdentity
|
|
15
|
-
} from "./Types.sol";
|
|
4
|
+
import {IdentityObj, EnclaveId, CA, TcbLevelsObj, TcbId, TdxModule, TdxModuleIdentity} from "./Types.sol";
|
|
16
5
|
|
|
17
6
|
/**
|
|
18
7
|
* @title PCCS Router Interface
|
|
@@ -20,6 +9,7 @@ import {
|
|
|
20
9
|
* to fetch collaterals from the On Chain PCCS
|
|
21
10
|
*/
|
|
22
11
|
interface IPCCSRouter {
|
|
12
|
+
|
|
23
13
|
function qeIdDaoAddr() external view returns (address);
|
|
24
14
|
|
|
25
15
|
function fmspcTcbDaoAddr() external view returns (address);
|
|
@@ -34,37 +24,18 @@ interface IPCCSRouter {
|
|
|
34
24
|
|
|
35
25
|
function fmspcTcbHelperAddr() external view returns (address);
|
|
36
26
|
|
|
37
|
-
function getQeIdentity(
|
|
38
|
-
EnclaveId id,
|
|
39
|
-
uint256 quoteVersion
|
|
40
|
-
) external view returns (IdentityObj memory);
|
|
27
|
+
function getQeIdentity(EnclaveId id, uint256 quoteVersion) external view returns (IdentityObj memory);
|
|
41
28
|
|
|
42
|
-
function getQeIdentityContentHash(
|
|
43
|
-
EnclaveId id,
|
|
44
|
-
uint256 version
|
|
45
|
-
) external view returns (bytes32);
|
|
29
|
+
function getQeIdentityContentHash(EnclaveId id, uint256 version) external view returns (bytes32);
|
|
46
30
|
|
|
47
|
-
function getFmspcTcbV2(
|
|
48
|
-
bytes6 fmspc
|
|
49
|
-
) external view returns (TCBLevelsObj[] memory);
|
|
31
|
+
function getFmspcTcbV2(bytes6 fmspc) external view returns (TcbLevelsObj[] memory);
|
|
50
32
|
|
|
51
|
-
function getFmspcTcbV3(
|
|
52
|
-
TcbId id,
|
|
53
|
-
bytes6 fmspc
|
|
54
|
-
)
|
|
33
|
+
function getFmspcTcbV3(TcbId id, bytes6 fmspc)
|
|
55
34
|
external
|
|
56
35
|
view
|
|
57
|
-
returns (
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
TDXModuleIdentity[] memory
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
function getFmspcTcbContentHash(
|
|
64
|
-
TcbId id,
|
|
65
|
-
bytes6 fmspc,
|
|
66
|
-
uint32 version
|
|
67
|
-
) external view returns (bytes32);
|
|
36
|
+
returns (TcbLevelsObj[] memory, TdxModule memory, TdxModuleIdentity[] memory);
|
|
37
|
+
|
|
38
|
+
function getFmspcTcbContentHash(TcbId id, bytes6 fmspc, uint32 version) external view returns (bytes32);
|
|
68
39
|
|
|
69
40
|
function getPckCert(
|
|
70
41
|
string calldata qeid,
|
|
@@ -82,13 +53,8 @@ interface IPCCSRouter {
|
|
|
82
53
|
function getCrlHash(CA ca) external view returns (bytes32);
|
|
83
54
|
|
|
84
55
|
// *withTimestamp() methods to check collateral expiration status based on the provided timestamp
|
|
85
|
-
function getCertHashWithTimestamp(
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
function getCrlHashWithTimestamp(
|
|
91
|
-
CA ca,
|
|
92
|
-
uint64 timestamp
|
|
93
|
-
) external view returns (bytes32);
|
|
56
|
+
function getCertHashWithTimestamp(CA ca, uint64 timestamp) external view returns (bytes32);
|
|
57
|
+
|
|
58
|
+
function getCrlHashWithTimestamp(CA ca, uint64 timestamp) external view returns (bytes32);
|
|
59
|
+
|
|
94
60
|
}
|
|
@@ -6,5 +6,7 @@ import {IPCCSRouter} from "./IPCCSRouter.sol";
|
|
|
6
6
|
/// @dev we declare this interface because the one exported from the automata-dcap-attestation package is missing some
|
|
7
7
|
/// external functions.
|
|
8
8
|
interface IPCCSRouterExtended is IPCCSRouter {
|
|
9
|
+
|
|
9
10
|
function setAuthorized(address caller, bool authorized) external;
|
|
11
|
+
|
|
10
12
|
}
|
|
@@ -4,15 +4,10 @@ pragma solidity ^0.8.0;
|
|
|
4
4
|
import {CA} from "./Types.sol";
|
|
5
5
|
|
|
6
6
|
interface IPcsDao {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
bytes calldata crl
|
|
14
|
-
) external returns (bytes32 attestationId);
|
|
15
|
-
function upsertRootCACrl(
|
|
16
|
-
bytes calldata rootcacrl
|
|
17
|
-
) external returns (bytes32 attestationId);
|
|
7
|
+
|
|
8
|
+
function upsertPcsCertificates(CA ca, bytes calldata cert) external returns (bytes32 attestationId);
|
|
9
|
+
function upsertPckCrl(CA ca, bytes calldata crl) external returns (bytes32 attestationId);
|
|
10
|
+
// forge-lint: disable-next-line(mixed-case-function)
|
|
11
|
+
function upsertRootCACrl(bytes calldata rootcacrl) external returns (bytes32 attestationId);
|
|
12
|
+
|
|
18
13
|
}
|
|
@@ -9,6 +9,7 @@ import {Header} from "./Types.sol";
|
|
|
9
9
|
* @notice Provides the interface to implement version-specific verifiers
|
|
10
10
|
*/
|
|
11
11
|
interface IQuoteVerifier {
|
|
12
|
+
|
|
12
13
|
/**
|
|
13
14
|
* @dev this method must be immutable
|
|
14
15
|
* @return an instance of the PCCSRouter interface
|
|
@@ -20,15 +21,11 @@ interface IQuoteVerifier {
|
|
|
20
21
|
*/
|
|
21
22
|
function quoteVersion() external view returns (uint16);
|
|
22
23
|
|
|
23
|
-
function verifyQuote(
|
|
24
|
-
Header calldata,
|
|
25
|
-
bytes calldata
|
|
26
|
-
) external view returns (bool, bytes memory);
|
|
24
|
+
function verifyQuote(Header calldata, bytes calldata) external view returns (bool, bytes memory);
|
|
27
25
|
|
|
28
26
|
/**
|
|
29
27
|
* @notice additional check on the public output obtained from the ZK Program execution
|
|
30
28
|
*/
|
|
31
|
-
function verifyZkOutput(
|
|
32
|
-
|
|
33
|
-
) external view returns (bool, bytes memory);
|
|
29
|
+
function verifyZkOutput(bytes calldata) external view returns (bool, bytes memory);
|
|
30
|
+
|
|
34
31
|
}
|
|
@@ -41,7 +41,7 @@ struct TcbInfoBasic {
|
|
|
41
41
|
bytes2 pceid;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
struct
|
|
44
|
+
struct TcbLevelsObj {
|
|
45
45
|
uint16 pcesvn;
|
|
46
46
|
uint8[] sgxComponentCpuSvns;
|
|
47
47
|
uint8[] tdxComponentCpuSvns;
|
|
@@ -50,21 +50,21 @@ struct TCBLevelsObj {
|
|
|
50
50
|
string[] advisoryIDs;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
struct
|
|
53
|
+
struct TdxModule {
|
|
54
54
|
bytes mrsigner; // 48 bytes
|
|
55
55
|
bytes8 attributes;
|
|
56
56
|
bytes8 attributesMask;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
struct
|
|
59
|
+
struct TdxModuleIdentity {
|
|
60
60
|
string id;
|
|
61
61
|
bytes8 attributes;
|
|
62
62
|
bytes8 attributesMask;
|
|
63
63
|
bytes mrsigner; // 48 bytes
|
|
64
|
-
|
|
64
|
+
TdxModuleTcbLevelsObj[] tcbLevels;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
struct
|
|
67
|
+
struct TdxModuleTcbLevelsObj {
|
|
68
68
|
uint8 isvsvn;
|
|
69
69
|
uint64 tcbDateTimestamp;
|
|
70
70
|
TCBStatus status;
|
|
@@ -154,12 +154,13 @@ struct Header {
|
|
|
154
154
|
* @dev Section A.3.2 of Intel V4 TDX DCAP API Library Documentation
|
|
155
155
|
* @dev https://github.com/intel/SGX-TDX-DCAP-QuoteVerificationLibrary/blob/7e5b2a13ca5472de8d97dd7d7024c2ea5af9a6ba/Src/AttestationLibrary/src/QuoteVerification/QuoteStructures.h#L82-L103
|
|
156
156
|
*/
|
|
157
|
-
struct
|
|
157
|
+
struct Td10ReportBody {
|
|
158
158
|
bytes16 teeTcbSvn;
|
|
159
159
|
bytes mrSeam; // 48 bytes
|
|
160
160
|
bytes mrsignerSeam; // 48 bytes
|
|
161
161
|
bytes8 seamAttributes;
|
|
162
162
|
bytes8 tdAttributes;
|
|
163
|
+
// forge-lint: disable-next-line(mixed-case-variable)
|
|
163
164
|
bytes8 xFAM;
|
|
164
165
|
bytes mrTd; // 48 bytes
|
|
165
166
|
bytes mrConfigId; // 48 bytes
|