Skip to content

Commit bd9ed6f

Browse files
committed
support legacy format
1 parent 00cc144 commit bd9ed6f

File tree

2 files changed

+47
-4
lines changed

2 files changed

+47
-4
lines changed

common/expected_measurements.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ package common
44
// Helper to load expected measurements from a file or URL, and compare
55
// provided measurements against them.
66
//
7-
// Internally this uses the measurements data schema v2 (as served by
8-
// https://measurements.builder.flashbots.net):
7+
// Compatible with measurements data schema v2 (see measurements.json)
8+
// as well as the legacy v1 schema.
99
//
1010
// [
1111
// {
@@ -45,6 +45,8 @@ type MeasurementsContainer struct {
4545
Measurements measurements.M `json:"measurements"`
4646
}
4747

48+
type LegacyMeasurementsContainer map[string]measurements.M
49+
4850
// NewExpectedMeasurementsFromFile returns an ExpectedMeasurements instance,
4951
// with the measurements loaded from a file or URL.
5052
func NewExpectedMeasurementsFromFile(path string) (m *ExpectedMeasurements, err error) {
@@ -69,7 +71,21 @@ func NewExpectedMeasurementsFromFile(path string) (m *ExpectedMeasurements, err
6971
}
7072

7173
m = &ExpectedMeasurements{}
72-
err = json.Unmarshal(data, &m.Measurements)
74+
75+
// Try to load the v2 data schema, if that fails fall back to legacy v1 schema
76+
if err = json.Unmarshal(data, &m.Measurements); err != nil {
77+
var legacyData LegacyMeasurementsContainer
78+
err = json.Unmarshal(data, &legacyData)
79+
for measurementID, measurements := range legacyData {
80+
container := MeasurementsContainer{
81+
MeasurementID: measurementID,
82+
AttestationType: "azure-tdx",
83+
Measurements: measurements,
84+
}
85+
m.Measurements = append(m.Measurements, container)
86+
}
87+
}
88+
7389
return m, err
7490
}
7591

common/expected_measurements_test.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package common
22

33
import (
44
"encoding/hex"
5+
"os"
6+
"path/filepath"
57
"testing"
68

79
"github.com/stretchr/testify/require"
@@ -18,9 +20,12 @@ func mustBytesFromHex(hexValue string) []byte {
1820
return bytes
1921
}
2022

23+
// Measurements V1 (legacy) JSON (from https://github.com/flashbots/cvm-reverse-proxy/blob/837588b9f87ee49d1bb6dca4712a1c2844eb1ecc/measurements.json)
24+
var measurementsV1JSON = []byte(`{"azure-tdx-example":{"11":{"expected":"efa43e0beff151b0f251c4abf48152382b1452b4414dbd737b4127de05ca31f7"},"12":{"expected":"0000000000000000000000000000000000000000000000000000000000000000"},"13":{"expected":"0000000000000000000000000000000000000000000000000000000000000000"},"15":{"expected":"0000000000000000000000000000000000000000000000000000000000000000"},"4":{"expected":"ea92ff762767eae6316794f1641c485d4846bc2b9df2eab6ba7f630ce6f4d66f"},"8":{"expected":"0000000000000000000000000000000000000000000000000000000000000000"},"9":{"expected":"c9f429296634072d1063a03fb287bed0b2d177b0a504755ad9194cffd90b2489"}},"dcap-tdx-example":{"0":{"expected":"5d56080eb9ef8ce0bbaf6bdcdadeeb06e7c5b0a4d1ec16be868a85a953babe0c5e54d01c8e050a54fe1ca078372530d2"},"1":{"expected":"4216e925f796f4e282cfa6e72d4c77a80560987afa29155a61fdc33adb80eab0d4112abd52387e5e25a60deefb8a5287"},"2":{"expected":"4274fefb79092c164000b571b64ecb432fa2357adb421fd1c77a867168d7d7f7fe82796d1eba092c7bab35cf43f5ec55"},"3":{"expected":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},"4":{"expected":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}}}`)
25+
2126
// TestExpectedMeasurementsV2 tests the v2 data schema
2227
func TestExpectedMeasurementsV2(t *testing.T) {
23-
// Load expected measurements from JSON file
28+
// Load expected measurements from JSON file (in V2 format)
2429
m, err := NewExpectedMeasurementsFromFile("../measurements.json")
2530
require.NoError(t, err)
2631
require.Len(t, m.Measurements, 3)
@@ -65,3 +70,25 @@ func TestExpectedMeasurementsV2(t *testing.T) {
6570
require.True(t, exists)
6671
require.Equal(t, "dcap-tdx-example-02", foundMeasurement.MeasurementID)
6772
}
73+
74+
func TestExpectedMeasurementsV1(t *testing.T) {
75+
tempDir := t.TempDir()
76+
err := os.WriteFile(filepath.Join(tempDir, "measurements.json"), measurementsV1JSON, 0644)
77+
require.NoError(t, err)
78+
79+
// Load expected measurements from JSON file
80+
m, err := NewExpectedMeasurementsFromFile(filepath.Join(tempDir, "measurements.json"))
81+
require.NoError(t, err)
82+
require.Len(t, m.Measurements, 2)
83+
84+
testMeasurements := TestMeasurements{
85+
0: mustBytesFromHex("5d56080eb9ef8ce0bbaf6bdcdadeeb06e7c5b0a4d1ec16be868a85a953babe0c5e54d01c8e050a54fe1ca078372530d2"),
86+
1: mustBytesFromHex("4216e925f796f4e282cfa6e72d4c77a80560987afa29155a61fdc33adb80eab0d4112abd52387e5e25a60deefb8a5287"),
87+
2: mustBytesFromHex("4274fefb79092c164000b571b64ecb432fa2357adb421fd1c77a867168d7d7f7fe82796d1eba092c7bab35cf43f5ec55"),
88+
3: mustBytesFromHex("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
89+
4: mustBytesFromHex("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
90+
}
91+
exists, foundMeasurement := m.Contains(testMeasurements)
92+
require.True(t, exists)
93+
require.Equal(t, "dcap-tdx-example", foundMeasurement.MeasurementID)
94+
}

0 commit comments

Comments
 (0)