Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 50 additions & 1 deletion crates/enclave-contract/contracts/UpgradeOperator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ contract UpgradeOperator {
// Keep track of all tags for enumeration if needed
bytes32[] public acceptedTags;
bytes32[] public deprecatedTags;
bool public initialIsDeprecated = false;

// Track if a tag exists to prevent duplicates
mapping(bytes32 => bool) public tagExists;
Expand Down Expand Up @@ -128,7 +129,14 @@ contract UpgradeOperator {
* @param measurementHash Hash of the measurements to check
*/
function isAccepted(bytes32 measurementHash) external view returns (bool) {
return bytes(acceptedMeasurements[measurementHash].tag).length > 0;
if (
!initialIsDeprecated &&
measurementHash == _getMeasurementHash(getInitialMeasurements())
) {
return true;
} else {
return bytes(acceptedMeasurements[measurementHash].tag).length > 0;
}
}

/**
Expand All @@ -147,6 +155,17 @@ contract UpgradeOperator {
function getAcceptedMeasurement(
bytes32 measurementHash
) external view returns (Measurements memory) {
if (
!initialIsDeprecated &&
measurementHash == _getMeasurementHash(getInitialMeasurements())
) {
Measurements memory initialMeasurements = getInitialMeasurements();

if (_getMeasurementHash(initialMeasurements) == measurementHash) {
return initialMeasurements;
}
}

require(
bytes(acceptedMeasurements[measurementHash].tag).length > 0,
"Measurement not found"
Expand Down Expand Up @@ -196,4 +215,34 @@ contract UpgradeOperator {
)
);
}

function getInitialMeasurements()
public
pure
returns (Measurements memory)
{
Measurements memory m;

m.tag = "Initial";

m
.mrtd = hex"f858414aef26d52a3b21614bab4bafab13b3ed62ebdd9d46a6be799228c2e27bc0d025cc6e4e90daff827cbe0316bbd9";

m
.mrseam = hex"49b66faa451d19ebbdbe89371b8daf2b65aa3984ec90110343e9e2eec116af08850fa20e3b1aa9a874d77a65380ee7e6";

m.registrar_slots = new uint8[](4);
m.registrar_slots[0] = 0;
m.registrar_slots[1] = 1;
m.registrar_slots[2] = 2;
m.registrar_slots[3] = 3;

m.registrar_values = new bytes[](4);
m.registrar_values[0] = new bytes(48); // All zeros by default
m.registrar_values[1] = new bytes(48);
m.registrar_values[2] = new bytes(48);
m.registrar_values[3] = new bytes(48);

return m;
}
}
31 changes: 31 additions & 0 deletions crates/enclave-contract/tests/MultisigUpgradeOperator.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,37 @@ contract MultisigUpgradeOperatorTest is Test {
assertFalse(upgradeOperator.isDeprecated(measurement1Hash));
}

function testInitialMeasurments() public view {
// Setup test measurements
UpgradeOperator.Measurements memory m;

m.tag = "Initial";

m
.mrtd = hex"f858414aef26d52a3b21614bab4bafab13b3ed62ebdd9d46a6be799228c2e27bc0d025cc6e4e90daff827cbe0316bbd9";

m
.mrseam = hex"49b66faa451d19ebbdbe89371b8daf2b65aa3984ec90110343e9e2eec116af08850fa20e3b1aa9a874d77a65380ee7e6";

m.registrar_slots = new uint8[](4);
m.registrar_slots[0] = 0;
m.registrar_slots[1] = 1;
m.registrar_slots[2] = 2;
m.registrar_slots[3] = 3;

m.registrar_values = new bytes[](4);
m.registrar_values[0] = new bytes(48); // All zeros by default
m.registrar_values[1] = new bytes(48);
m.registrar_values[2] = new bytes(48);
m.registrar_values[3] = new bytes(48);

console.logBytes(m.mrtd);
console.logBytes(m.mrseam);
bytes32 measurementHash = upgradeOperator.getMeasurementHash(m);

assertTrue(upgradeOperator.isAccepted(measurementHash));
}

// Test get vote status
function testGetVoteStatus() public {
vm.prank(signer1);
Expand Down
1 change: 0 additions & 1 deletion crates/enclave-contract/tests/multisig_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ pub async fn test_multisig_upgrade_operator_workflow() -> Result<(), anyhow::Err
// Wait a bit for the transaction to be processed
sleep(Duration::from_secs(2));

// Test data for proposal
let params = Measurements {
tag: "AzureV1".to_string(),
mrtd: [
Expand Down
Loading