|
1 | 1 | package common |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "encoding/json" |
| 4 | + "encoding/hex" |
5 | 5 | "testing" |
6 | 6 |
|
7 | 7 | "github.com/stretchr/testify/require" |
8 | 8 | ) |
9 | 9 |
|
10 | 10 | // TestMeasurements is kept simple: map[pcr]measurement |
11 | | -type TestMeasurements map[string]string |
| 11 | +type TestMeasurements map[uint32][]byte |
12 | 12 |
|
13 | | -// Expected measurements v2 data schema. See also https://measurements.builder.flashbots.net |
14 | | -var expectedMeasurementsV2JSON = `[{"measurement_id":"measurement-test-1","attestation_type":"azure-tdx","measurements":{"4":{"expected":"98ba2c602b62e67b8e0bd6c6676f12ade320a763e5e4564f62fd875a502dd651"},"9":{"expected":"e77938394412d83a8d4de52cdaf97df82a4d4059e1e7c4fc3c73581816cea496"},"11":{"expected":"0000000000000000000000000000000000000000000000000000000000000000"}}},{"measurement_id":"cvm-image-azure-tdx.rootfs-20241107200854.wic.vhd","attestation_type":"azure-tdx","measurements":{"4":{"expected":"1b8cd655f5ebdf50bedabfb5db6b896a0a7c56de54f318103a2de1e7cea57b6b"},"9":{"expected":"992465f922102234c196f596fdaba86ea16eaa4c264dc425ec26bc2d1c364472"}}}]` |
| 13 | +func mustBytesFromHex(hexValue string) []byte { |
| 14 | + bytes, err := hex.DecodeString(hexValue) |
| 15 | + if err != nil { |
| 16 | + panic(err) |
| 17 | + } |
| 18 | + return bytes |
| 19 | +} |
15 | 20 |
|
16 | 21 | // TestExpectedMeasurementsV2 tests the v2 data schema |
17 | 22 | func TestExpectedMeasurementsV2(t *testing.T) { |
18 | | - // Load expected measurements from provided JSON string |
19 | | - m := ExpectedMeasurements{} |
20 | | - err := json.Unmarshal([]byte(expectedMeasurementsV2JSON), &m.Measurements) |
| 23 | + // Load expected measurements from JSON file |
| 24 | + m, err := NewExpectedMeasurementsFromFile("../measurements.json") |
21 | 25 | require.NoError(t, err) |
22 | | - require.Len(t, m.Measurements, 2) |
| 26 | + require.Len(t, m.Measurements, 3) |
23 | 27 |
|
24 | 28 | // Setup test measurements (matching cvm-image-azure-tdx.rootfs-20241107200854.wic.vhd) |
25 | 29 | testMeasurements := TestMeasurements{ |
26 | | - "4": "1b8cd655f5ebdf50bedabfb5db6b896a0a7c56de54f318103a2de1e7cea57b6b", |
27 | | - "9": "992465f922102234c196f596fdaba86ea16eaa4c264dc425ec26bc2d1c364472", |
| 30 | + 4: mustBytesFromHex("1b8cd655f5ebdf50bedabfb5db6b896a0a7c56de54f318103a2de1e7cea57b6b"), |
| 31 | + 9: mustBytesFromHex("992465f922102234c196f596fdaba86ea16eaa4c264dc425ec26bc2d1c364472"), |
28 | 32 | } |
29 | 33 |
|
30 | 34 | // Ensure matching entries works, and that additional fields are ignored |
31 | | - testMeasurements["11"] = testMeasurements["4"] |
32 | | - exists, name := m.Contains(testMeasurements) |
| 35 | + testMeasurements[11] = testMeasurements[4] |
| 36 | + exists, foundMeasurement := m.Contains(testMeasurements) |
33 | 37 | require.True(t, exists) |
34 | | - require.Equal(t, "cvm-image-azure-tdx.rootfs-20241107200854.wic.vhd", name) |
| 38 | + require.Equal(t, "cvm-image-azure-tdx.rootfs-20241107200854.wic.vhd", foundMeasurement.MeasurementID) |
| 39 | + require.Equal(t, "azure-tdx", foundMeasurement.AttestationType) |
35 | 40 |
|
36 | 41 | // Ensure check fails with a missing required key |
37 | | - delete(testMeasurements, "4") |
| 42 | + delete(testMeasurements, 4) |
38 | 43 | exists, _ = m.Contains(testMeasurements) |
39 | 44 | require.False(t, exists) |
40 | 45 |
|
41 | 46 | // Double-check it works again |
42 | | - testMeasurements["4"] = testMeasurements["11"] |
| 47 | + testMeasurements[4] = testMeasurements[11] |
43 | 48 | exists, _ = m.Contains(testMeasurements) |
44 | 49 | require.True(t, exists) |
45 | 50 |
|
46 | 51 | // Any changed value should make it fail |
47 | | - testMeasurements["4"] = testMeasurements["9"] |
| 52 | + testMeasurements[4] = testMeasurements[9] |
48 | 53 | exists, _ = m.Contains(testMeasurements) |
49 | 54 | require.False(t, exists) |
50 | | -} |
51 | | - |
52 | | -// TestExpectedMeasurementsV1 tests the v1 data schema backwards compatibility |
53 | | -func TestExpectedMeasurementsV1(t *testing.T) { |
54 | | - // Load expected measurements from provided JSON string |
55 | | - m, err := NewExpectedMeasurementsFromFile("../measurements.json") |
56 | | - require.NoError(t, err) |
57 | | - |
58 | | - // Ensure that two known measurements are loaded |
59 | | - require.Len(t, m.Measurements, 2) |
60 | 55 |
|
61 | | - // Setup test measurements (matching dcap-tdx-example) |
62 | | - testMeasurements := TestMeasurements{ |
63 | | - "0": "5d56080eb9ef8ce0bbaf6bdcdadeeb06e7c5b0a4d1ec16be868a85a953babe0c5e54d01c8e050a54fe1ca078372530d2", |
64 | | - "1": "4216e925f796f4e282cfa6e72d4c77a80560987afa29155a61fdc33adb80eab0d4112abd52387e5e25a60deefb8a5287", |
65 | | - "2": "4274fefb79092c164000b571b64ecb432fa2357adb421fd1c77a867168d7d7f7fe82796d1eba092c7bab35cf43f5ec55", |
66 | | - "3": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", |
67 | | - "4": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", |
| 56 | + // Check for another set of known measurements (dcap-tdx-example) |
| 57 | + testMeasurements = TestMeasurements{ |
| 58 | + 0: mustBytesFromHex("5d56080eb9ef8ce0bbaf6bdcdadeeb06e7c5b0a4d1ec16be868a85a953babe0c5e54d01c8e050a54fe1ca078372530d2"), |
| 59 | + 1: mustBytesFromHex("4216e925f796f4e282cfa6e72d4c77a80560987afa29155a61fdc33adb80eab0d4112abd52387e5e25a60deefb8a5287"), |
| 60 | + 2: mustBytesFromHex("4274fefb79092c164000b571b64ecb432fa2357adb421fd1c77a867168d7d7f7fe82796d1eba092c7bab35cf43f5ec55"), |
| 61 | + 3: mustBytesFromHex("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), |
| 62 | + 4: mustBytesFromHex("000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), |
68 | 63 | } |
69 | | - |
70 | | - // Check if matching a known measurements entry |
71 | | - exists, name := m.Contains(testMeasurements) |
| 64 | + exists, foundMeasurement = m.Contains(testMeasurements) |
72 | 65 | require.True(t, exists) |
73 | | - require.Equal(t, "dcap-tdx-example", name) |
| 66 | + require.Equal(t, "dcap-tdx-example-02", foundMeasurement.MeasurementID) |
74 | 67 | } |
0 commit comments