Skip to content

Commit 98573b9

Browse files
committed
package name: multimeasurements
1 parent bd9ed6f commit 98573b9

File tree

4 files changed

+30
-44
lines changed

4 files changed

+30
-44
lines changed

cmd/attested-get/main.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ package main
1414
//
1515
// go run cmd/attested-get/main.go --addr=https://instance_ip:port --out-measurements=measurements.json --out-response=response.txt
1616
//
17-
// You can also compare the resulting measurements with a list of expected measurements.
17+
// You can also compare the resulting measurements with a list of expected measurements:
18+
//
19+
// go run cmd/get-measurements/main.go --addr=https://instance_ip:port --expected-measurements measurements.json
1820
//
1921

2022
import (
@@ -34,6 +36,7 @@ import (
3436
"github.com/flashbots/cvm-reverse-proxy/internal/attestation/measurements"
3537
"github.com/flashbots/cvm-reverse-proxy/internal/attestation/variant"
3638
"github.com/flashbots/cvm-reverse-proxy/internal/config"
39+
"github.com/flashbots/cvm-reverse-proxy/multimeasurements"
3740
"github.com/flashbots/cvm-reverse-proxy/proxy"
3841
"github.com/urfave/cli/v2" // imports as package "cli"
3942
)
@@ -126,10 +129,10 @@ func runClient(cCtx *cli.Context) (err error) {
126129
}
127130

128131
// Load expected measurements from file or URL (if provided)
129-
var expectedMeasurements *common.ExpectedMeasurements
132+
var expectedMeasurements *multimeasurements.MultiMeasurements
130133
if expectedMeasurementsPath != "" {
131134
log.Info("Loading expected measurements from " + expectedMeasurementsPath + " ...")
132-
expectedMeasurements, err = common.NewExpectedMeasurementsFromFile(expectedMeasurementsPath)
135+
expectedMeasurements, err = multimeasurements.New(expectedMeasurementsPath)
133136
if err != nil {
134137
return err
135138
}
@@ -190,7 +193,7 @@ func runClient(cCtx *cli.Context) (err error) {
190193
if expectedMeasurements != nil {
191194
found, foundMeasurement := expectedMeasurements.Contains(extractedMeasurements)
192195
if found {
193-
log.Info("Measurements match expected measurements for " + foundMeasurement.MeasurementID + " ✅")
196+
log.With("matchedMeasurements", foundMeasurement.MeasurementID).Info("Measurements match expected measurements ✅")
194197
} else {
195198
log.Error("Measurements do not match expected measurements! ❌")
196199
}

common/expected_measurements.go renamed to multimeasurements/multimeasurements.go

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,9 @@
1-
package common
2-
3-
//
4-
// Helper to load expected measurements from a file or URL, and compare
5-
// provided measurements against them.
6-
//
7-
// Compatible with measurements data schema v2 (see measurements.json)
8-
// as well as the legacy v1 schema.
9-
//
10-
// [
11-
// {
12-
// "measurement_id": "cvm-image-azure-tdx.rootfs-20241107200854.wic.vhd",
13-
// "attestation_type": "azure-tdx",
14-
// "measurements": {
15-
// "4": {
16-
// "expected": "1b8cd655f5ebdf50bedabfb5db6b896a0a7c56de54f318103a2de1e7cea57b6b"
17-
// },
18-
// ...
19-
// }
20-
// },
21-
// ...
22-
// ]
1+
// Package multimeasurements contains a helper to load a file with multiple measurements
2+
// and compare provided measurements against them.
233
//
4+
// Compatible with measurements data schema v2 (see measurements.json) as well as the
5+
// legacy v1 schema.
6+
package multimeasurements
247

258
import (
269
"bytes"
@@ -33,9 +16,9 @@ import (
3316
"github.com/flashbots/cvm-reverse-proxy/internal/attestation/measurements"
3417
)
3518

36-
// ExpectedMeasurements is a struct that represents a list of expected measurements,
37-
// and allows checking if given measurements matches a known one.
38-
type ExpectedMeasurements struct {
19+
// MultiMeasurements is holds several known measurements, and can check if a
20+
// given measurements matches a known one.
21+
type MultiMeasurements struct {
3922
Measurements []MeasurementsContainer
4023
}
4124

@@ -45,11 +28,11 @@ type MeasurementsContainer struct {
4528
Measurements measurements.M `json:"measurements"`
4629
}
4730

48-
type LegacyMeasurementsContainer map[string]measurements.M
31+
type LegacyMultiMeasurements map[string]measurements.M
4932

50-
// NewExpectedMeasurementsFromFile returns an ExpectedMeasurements instance,
51-
// with the measurements loaded from a file or URL.
52-
func NewExpectedMeasurementsFromFile(path string) (m *ExpectedMeasurements, err error) {
33+
// New returns a MultiMeasurements instance, with the measurements
34+
// loaded from a file or URL.
35+
func New(path string) (m *MultiMeasurements, err error) {
5336
var data []byte
5437
if strings.HasPrefix(path, "http") {
5538
// load from URL
@@ -70,11 +53,11 @@ func NewExpectedMeasurementsFromFile(path string) (m *ExpectedMeasurements, err
7053
}
7154
}
7255

73-
m = &ExpectedMeasurements{}
56+
m = &MultiMeasurements{}
7457

7558
// Try to load the v2 data schema, if that fails fall back to legacy v1 schema
7659
if err = json.Unmarshal(data, &m.Measurements); err != nil {
77-
var legacyData LegacyMeasurementsContainer
60+
var legacyData LegacyMultiMeasurements
7861
err = json.Unmarshal(data, &legacyData)
7962
for measurementID, measurements := range legacyData {
8063
container := MeasurementsContainer{
@@ -91,7 +74,7 @@ func NewExpectedMeasurementsFromFile(path string) (m *ExpectedMeasurements, err
9174

9275
// Contains checks if the provided measurements match one of the known measurements. Any keys in the provided
9376
// measurements which are not in the known measurements are ignored.
94-
func (m *ExpectedMeasurements) Contains(measurements map[uint32][]byte) (found bool, foundMeasurement *MeasurementsContainer) {
77+
func (m *MultiMeasurements) Contains(measurements map[uint32][]byte) (found bool, foundMeasurement *MeasurementsContainer) {
9578
// For every known container, all known measurements match (and additional ones are ignored)
9679
for _, container := range m.Measurements {
9780
allMatch := true

common/expected_measurements_test.go renamed to multimeasurements/multimeasurements_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package common
1+
package multimeasurements
22

33
import (
44
"encoding/hex"
@@ -23,10 +23,10 @@ func mustBytesFromHex(hexValue string) []byte {
2323
// Measurements V1 (legacy) JSON (from https://github.com/flashbots/cvm-reverse-proxy/blob/837588b9f87ee49d1bb6dca4712a1c2844eb1ecc/measurements.json)
2424
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"}}}`)
2525

26-
// TestExpectedMeasurementsV2 tests the v2 data schema
27-
func TestExpectedMeasurementsV2(t *testing.T) {
26+
// TestMultiMeasurementsV2 tests the v2 data schema
27+
func TestMultiMeasurementsV2(t *testing.T) {
2828
// Load expected measurements from JSON file (in V2 format)
29-
m, err := NewExpectedMeasurementsFromFile("../measurements.json")
29+
m, err := New("../measurements.json")
3030
require.NoError(t, err)
3131
require.Len(t, m.Measurements, 3)
3232

@@ -71,13 +71,13 @@ func TestExpectedMeasurementsV2(t *testing.T) {
7171
require.Equal(t, "dcap-tdx-example-02", foundMeasurement.MeasurementID)
7272
}
7373

74-
func TestExpectedMeasurementsV1(t *testing.T) {
74+
func TestMultiMeasurementsV1(t *testing.T) {
7575
tempDir := t.TempDir()
7676
err := os.WriteFile(filepath.Join(tempDir, "measurements.json"), measurementsV1JSON, 0644)
7777
require.NoError(t, err)
7878

7979
// Load expected measurements from JSON file
80-
m, err := NewExpectedMeasurementsFromFile(filepath.Join(tempDir, "measurements.json"))
80+
m, err := New(filepath.Join(tempDir, "measurements.json"))
8181
require.NoError(t, err)
8282
require.Len(t, m.Measurements, 2)
8383

proxy/atls_config.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ import (
1010
"log/slog"
1111
"os"
1212

13-
"github.com/flashbots/cvm-reverse-proxy/common"
1413
"github.com/flashbots/cvm-reverse-proxy/internal/atls"
1514
azure_tdx "github.com/flashbots/cvm-reverse-proxy/internal/attestation/azure/tdx"
1615
"github.com/flashbots/cvm-reverse-proxy/internal/attestation/measurements"
1716
"github.com/flashbots/cvm-reverse-proxy/internal/attestation/variant"
1817
"github.com/flashbots/cvm-reverse-proxy/internal/cloud/cloudprovider"
1918
"github.com/flashbots/cvm-reverse-proxy/internal/config"
19+
"github.com/flashbots/cvm-reverse-proxy/multimeasurements"
2020
dcap_tdx "github.com/flashbots/cvm-reverse-proxy/tdx"
2121
)
2222

@@ -66,7 +66,7 @@ func CreateAttestationValidators(log *slog.Logger, attestationType AttestationTy
6666
return nil, err
6767
}
6868

69-
var parsedMeasurements []common.MeasurementsContainer
69+
var parsedMeasurements []multimeasurements.MeasurementsContainer
7070
err = json.Unmarshal(jsonMeasurements, &parsedMeasurements)
7171
if err != nil {
7272
return nil, err

0 commit comments

Comments
 (0)