@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.
Files changed (87) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +29 -2
  3. package/manifest.yaml +35 -42
  4. package/package.json +5 -2
  5. package/src/CreateXHelper.sol +3 -1
  6. package/src/DeployUtils.sol +36 -71
  7. package/src/Errors.sol +1 -1
  8. package/src/IIncoLightning.sol +2 -0
  9. package/src/IncoLightning.sol +5 -17
  10. package/src/IncoVerifier.sol +12 -18
  11. package/src/Lib.alphanet.sol +1 -1
  12. package/src/Lib.sol +1 -1
  13. package/src/Lib.template.sol +35 -153
  14. package/src/Types.sol +231 -97
  15. package/src/interfaces/IIncoLightning.sol +2 -0
  16. package/src/interfaces/IIncoVerifier.sol +6 -12
  17. package/src/interfaces/automata-interfaces/BELE.sol +2 -0
  18. package/src/interfaces/automata-interfaces/IAutomataEnclaveIdentityDao.sol +9 -11
  19. package/src/interfaces/automata-interfaces/IFmspcTcbDao.sol +3 -3
  20. package/src/interfaces/automata-interfaces/IPCCSRouter.sol +13 -47
  21. package/src/interfaces/automata-interfaces/IPCCSRouterExtended.sol +2 -0
  22. package/src/interfaces/automata-interfaces/IPcsDao.sol +6 -11
  23. package/src/interfaces/automata-interfaces/IQuoteVerifier.sol +4 -7
  24. package/src/interfaces/automata-interfaces/Types.sol +7 -6
  25. package/src/libs/incoLightning_alphanet_v2_976644394.sol +478 -0
  26. package/src/libs/incoLightning_devnet_v1_887305889.sol +5 -3
  27. package/src/libs/incoLightning_testnet_v1_938327937.sol +5 -3
  28. package/src/lightning-parts/AccessControl/AdvancedAccessControl.sol +39 -72
  29. package/src/lightning-parts/AccessControl/BaseAccessControlList.sol +31 -62
  30. package/src/lightning-parts/AccessControl/interfaces/IAdvancedAccessControl.sol +8 -15
  31. package/src/lightning-parts/AccessControl/interfaces/IBaseAccessControlList.sol +5 -12
  32. package/src/lightning-parts/AccessControl/test/TestAdvancedAccessControl.t.sol +44 -84
  33. package/src/lightning-parts/AccessControl/test/TestBaseAccessControl.t.sol +2 -0
  34. package/src/lightning-parts/DecryptionAttester.sol +14 -28
  35. package/src/lightning-parts/EncryptedInput.sol +23 -52
  36. package/src/lightning-parts/EncryptedOperations.sol +96 -438
  37. package/src/lightning-parts/Fee.sol +3 -1
  38. package/src/lightning-parts/TEELifecycle.sol +94 -223
  39. package/src/lightning-parts/TEELifecycle.types.sol +4 -3
  40. package/src/lightning-parts/TrivialEncryption.sol +6 -20
  41. package/src/lightning-parts/interfaces/IDecryptionAttester.sol +7 -2
  42. package/src/lightning-parts/interfaces/IEncryptedInput.sol +5 -12
  43. package/src/lightning-parts/interfaces/IEncryptedOperations.sol +17 -61
  44. package/src/lightning-parts/interfaces/ITEELifecycle.sol +7 -11
  45. package/src/lightning-parts/interfaces/ITrivialEncryption.sol +2 -0
  46. package/src/lightning-parts/primitives/EventCounter.sol +7 -8
  47. package/src/lightning-parts/primitives/HandleGeneration.sol +20 -32
  48. package/src/lightning-parts/primitives/HandleMetadata.sol +7 -17
  49. package/src/lightning-parts/primitives/LightningAddressGetter.sol +3 -0
  50. package/src/lightning-parts/primitives/SignatureVerifier.sol +91 -27
  51. package/src/lightning-parts/primitives/VerifierAddressGetter.sol +3 -0
  52. package/src/lightning-parts/primitives/interfaces/IEventCounter.sol +2 -0
  53. package/src/lightning-parts/primitives/interfaces/IHandleGeneration.sol +10 -2
  54. package/src/lightning-parts/primitives/interfaces/ISignatureVerifier.sol +4 -2
  55. package/src/lightning-parts/primitives/interfaces/IVerifierAddressGetter.sol +2 -0
  56. package/src/lightning-parts/primitives/test/SignatureVerifier.t.sol +838 -0
  57. package/src/lightning-parts/test/Fee.t.sol +6 -6
  58. package/src/lightning-parts/test/HandleMetadata.t.sol +21 -76
  59. package/src/lightning-parts/test/InputsFee.t.sol +7 -28
  60. package/src/lightning-parts/test/TestDecryptionAttestationInSynchronousFlow.t.sol +16 -48
  61. package/src/pasted-dependencies/CreateX.sol +154 -455
  62. package/src/pasted-dependencies/ICreateX.sol +55 -102
  63. package/src/periphery/SessionVerifier.sol +10 -8
  64. package/src/shared/IOwnable.sol +3 -0
  65. package/src/shared/IUUPSUpgradable.sol +5 -1
  66. package/src/shared/JsonUtils.sol +3 -5
  67. package/src/shared/TestUtils.sol +15 -13
  68. package/src/test/AddTwo.sol +9 -7
  69. package/src/test/FakeIncoInfra/FakeComputeServer.sol +11 -53
  70. package/src/test/FakeIncoInfra/FakeDecryptionAttester.sol +35 -119
  71. package/src/test/FakeIncoInfra/FakeIncoInfraBase.sol +31 -48
  72. package/src/test/FakeIncoInfra/FakeQuoteVerifier.sol +4 -7
  73. package/src/test/FakeIncoInfra/KVStore.sol +2 -0
  74. package/src/test/FakeIncoInfra/MockOpHandler.sol +9 -31
  75. package/src/test/FakeIncoInfra/MockRemoteAttestation.sol +50 -21
  76. package/src/test/IncoTest.sol +22 -9
  77. package/src/test/OpsTest.sol +438 -0
  78. package/src/test/TEELifecycle/TEELifecycleMockTest.t.sol +57 -104
  79. package/src/test/TestAddTwo.t.sol +4 -3
  80. package/src/test/TestDeploy.t.sol +5 -6
  81. package/src/test/TestExtractDataOfEventTooLarge.t.sol +7 -9
  82. package/src/test/TestFakeInfra.t.sol +15 -38
  83. package/src/test/TestUpgrade.t.sol +40 -135
  84. package/src/test/TestVersion.t.sol +6 -5
  85. package/src/version/IncoLightningConfig.sol +2 -2
  86. package/src/version/Version.sol +46 -48
  87. 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
- IAdvancedAccessControl,
12
- IDecryptionAttester,
13
- ITEELifecycle,
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
- function parseIdentityString(
9
- string calldata identityStr
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 EnclaveIdentityLib()
19
+ function upsertEnclaveIdentity(uint256 id, uint256 version, EnclaveIdentityJsonObj calldata enclaveIdentityObj)
25
20
  external
26
- view
27
- returns (IEnclaveIdentityHelper);
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
- function upsertFmspcTcb(
8
- TcbInfoJsonObj calldata tcbInfoObj
9
- ) external returns (bytes32 attestationId);
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
- TCBLevelsObj[] memory,
59
- TDXModule memory,
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
- CA ca,
87
- uint64 timestamp
88
- ) external view returns (bytes32);
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
- function upsertPcsCertificates(
8
- CA ca,
9
- bytes calldata cert
10
- ) external returns (bytes32 attestationId);
11
- function upsertPckCrl(
12
- CA ca,
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
- bytes calldata
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 TCBLevelsObj {
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 TDXModule {
53
+ struct TdxModule {
54
54
  bytes mrsigner; // 48 bytes
55
55
  bytes8 attributes;
56
56
  bytes8 attributesMask;
57
57
  }
58
58
 
59
- struct TDXModuleIdentity {
59
+ struct TdxModuleIdentity {
60
60
  string id;
61
61
  bytes8 attributes;
62
62
  bytes8 attributesMask;
63
63
  bytes mrsigner; // 48 bytes
64
- TDXModuleTCBLevelsObj[] tcbLevels;
64
+ TdxModuleTcbLevelsObj[] tcbLevels;
65
65
  }
66
66
 
67
- struct TDXModuleTCBLevelsObj {
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 TD10ReportBody {
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