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
258import (
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
0 commit comments