@@ -34,6 +34,7 @@ import (
34
34
35
35
var devMu sync.Once
36
36
var device Device
37
+ var qp QuoteProvider
37
38
var tests []test.TestCase
38
39
39
40
var guestPolicy = flag .Uint64 ("guest_policy" , abi .SnpPolicyToBytes (abi.SnpPolicy {SMT : true }),
@@ -69,6 +70,7 @@ func initDevice() {
69
70
panic (err )
70
71
}
71
72
device = sevTestDevice
73
+ qp = & test.QuoteProvider {Device : sevTestDevice }
72
74
return
73
75
}
74
76
@@ -77,6 +79,7 @@ func initDevice() {
77
79
panic (err )
78
80
}
79
81
device = client
82
+ qp = & test.QuoteProvider {Device : device .(* test.Device )}
80
83
}
81
84
82
85
func cleanReport (report * spb.Report ) {
@@ -129,106 +132,114 @@ func fixRawReportWants(raw []byte) error {
129
132
func TestOpenGetReportClose (t * testing.T ) {
130
133
devMu .Do (initDevice )
131
134
for _ , tc := range tests {
132
- reportProto := & spb.Report {}
133
- if err := prototext .Unmarshal ([]byte (tc .OutputProto ), reportProto ); err != nil {
134
- t .Fatalf ("test failure: %v" , err )
135
- }
136
- fixReportWants (reportProto )
135
+ t .Run (tc .Name , func (t * testing.T ) {
136
+ reportProto := & spb.Report {}
137
+ if err := prototext .Unmarshal ([]byte (tc .OutputProto ), reportProto ); err != nil {
138
+ t .Fatalf ("test failure: %v" , err )
139
+ }
140
+ fixReportWants (reportProto )
137
141
138
- // Does the proto report match expectations?
139
- got , err := GetReport ( device , tc .Input )
140
- if ! test .Match (err , tc .WantErr ) {
141
- t .Fatalf ("GetReport(device, %v) = %v, %v. Want err: %v" , tc .Input , got , err , tc .WantErr )
142
- }
142
+ // Does the proto report match expectations?
143
+ attestation , err := GetQuoteProto ( qp , tc .Input )
144
+ if ! test .Match (err , tc .WantErr ) {
145
+ t .Fatalf ("GetReport(device, %v) = %v, %v. Want err: %v" , tc .Input , attestation , err , tc .WantErr )
146
+ }
143
147
144
- if tc .WantErr == "" {
145
- cleanReport (got )
146
- want := reportProto
147
- want .Signature = got .Signature // Zeros were placeholders.
148
- if diff := cmp .Diff (got , want , protocmp .Transform ()); diff != "" {
149
- t .Errorf ("%s: GetReport(%v) expectation diff %s" , tc .Name , tc .Input , diff )
148
+ if tc .WantErr == "" {
149
+ got := attestation .Report
150
+ cleanReport (got )
151
+ want := reportProto
152
+ want .Signature = got .Signature // Zeros were placeholders.
153
+ if diff := cmp .Diff (got , want , protocmp .Transform ()); diff != "" {
154
+ t .Errorf ("GetReport(%v) expectation diff %s" , tc .Input , diff )
155
+ }
150
156
}
151
- }
157
+ })
152
158
}
153
159
}
154
160
155
161
func TestOpenGetRawExtendedReportClose (t * testing.T ) {
156
162
devMu .Do (initDevice )
157
163
for _ , tc := range tests {
158
- raw , certs , err := GetRawExtendedReport (device , tc .Input )
159
- if ! test .Match (err , tc .WantErr ) {
160
- t .Fatalf ("%s: GetRawExtendedReport(device, %v) = %v, %v, %v. Want err: %v" , tc .Name , tc .Input , raw , certs , err , tc .WantErr )
161
- }
162
- if tc .WantErr == "" {
163
- if err := cleanRawReport (raw ); err != nil {
164
- t .Fatal (err )
165
- }
166
- got := abi .SignedComponent (raw )
167
- if err := fixRawReportWants (tc .Output [:]); err != nil {
168
- t .Fatal (err )
164
+ t .Run (tc .Name , func (t * testing.T ) {
165
+ rawcerts , err := qp .GetRawQuote (tc .Input )
166
+ if ! test .Match (err , tc .WantErr ) || (tc .WantErr == "" && len (rawcerts ) < abi .ReportSize ) {
167
+ t .Fatalf ("qp.GetRawQuote(%v) = %v, %v. Want err: %v" , tc .Input , rawcerts , err , tc .WantErr )
169
168
}
170
- want := abi .SignedComponent (tc .Output [:])
171
- if ! bytes .Equal (got , want ) {
172
- t .Errorf ("%s: GetRawExtendedReport(%v) = {data: %v, certs: _} want %v" , tc .Name , tc .Input , got , want )
173
- }
174
- der , err := abi .ReportToSignatureDER (raw )
175
- if err != nil {
176
- t .Errorf ("ReportToSignatureDER(%v) errored unexpectedly: %v" , raw , err )
177
- }
178
- if UseDefaultSevGuest () {
179
- tcdev := device .(* test.Device )
180
- infoRaw , _ := abi .ReportSignerInfo (raw )
181
- info , _ := abi .ParseSignerInfo (infoRaw )
182
- reportSigner := tcdev .Signer .Vcek
183
- if info .SigningKey == abi .VlekReportSigner {
184
- reportSigner = tcdev .Signer .Vlek
169
+ if tc .WantErr == "" {
170
+ raw := rawcerts [:abi .ReportSize ]
171
+ if err := cleanRawReport (raw ); err != nil {
172
+ t .Fatal (err )
173
+ }
174
+ got := abi .SignedComponent (raw )
175
+ if err := fixRawReportWants (tc .Output [:]); err != nil {
176
+ t .Fatal (err )
185
177
}
186
- if err := reportSigner .CheckSignature (x509 .ECDSAWithSHA384 , got , der ); err != nil {
187
- t .Errorf ("signature with test keys did not verify: %v" , err )
178
+ want := abi .SignedComponent (tc .Output [:])
179
+ if ! bytes .Equal (got , want ) {
180
+ t .Errorf ("qp.GetRawQuote(%v) = {data: %v, certs: _} want %v" , tc .Input , got , want )
181
+ }
182
+ der , err := abi .ReportToSignatureDER (raw )
183
+ if err != nil {
184
+ t .Errorf ("ReportToSignatureDER(%v) errored unexpectedly: %v" , raw , err )
185
+ }
186
+ if UseDefaultSevGuest () {
187
+ tcdev := device .(* test.Device )
188
+ infoRaw , _ := abi .ReportSignerInfo (raw )
189
+ info , _ := abi .ParseSignerInfo (infoRaw )
190
+ reportSigner := tcdev .Signer .Vcek
191
+ if info .SigningKey == abi .VlekReportSigner {
192
+ reportSigner = tcdev .Signer .Vlek
193
+ }
194
+ if err := reportSigner .CheckSignature (x509 .ECDSAWithSHA384 , got , der ); err != nil {
195
+ t .Errorf ("signature with test keys did not verify: %v" , err )
196
+ }
188
197
}
189
198
}
190
- }
199
+ })
191
200
}
192
201
}
193
202
194
- func TestOpenGetExtendedReportClose (t * testing.T ) {
203
+ func TestGetQuoteProto (t * testing.T ) {
195
204
devMu .Do (initDevice )
196
205
for _ , tc := range tests {
197
- ereport , err := GetExtendedReport (device , tc .Input )
198
- if ! test .Match (err , tc .WantErr ) {
199
- t .Fatalf ("%s: GetExtendedReport(device, %v) = %v, %v. Want err: %v" , tc .Name , tc .Input , ereport , err , tc .WantErr )
200
- }
201
- if tc .WantErr == "" {
202
- reportProto := & spb.Report {}
203
- if err := prototext .Unmarshal ([]byte (tc .OutputProto ), reportProto ); err != nil {
204
- t .Fatalf ("test failure: %v" , err )
206
+ t .Run (tc .Name , func (t * testing.T ) {
207
+ ereport , err := GetQuoteProto (qp , tc .Input )
208
+ if ! test .Match (err , tc .WantErr ) {
209
+ t .Fatalf ("GetQuoteProto(qp, %v) = %v, %v. Want err: %v" , tc .Input , ereport , err , tc .WantErr )
205
210
}
206
- fixReportWants (reportProto )
207
-
208
- got := ereport .Report
209
- cleanReport (got )
210
- want := reportProto
211
- want .Signature = got .Signature // Zeros were placeholders.
212
- if diff := cmp .Diff (got , want , protocmp .Transform ()); diff != "" {
213
- t .Errorf ("%s: GetExtendedReport(%v) = {data: %v, certs: _} want %v. Diff: %s" , tc .Name , tc .Input , got , want , diff )
214
- }
215
-
216
- if UseDefaultSevGuest () {
217
- tcdev := device .(* test.Device )
218
- if ! bytes .Equal (ereport .GetCertificateChain ().GetArkCert (), tcdev .Signer .Ark .Raw ) {
219
- t .Errorf ("ARK certificate mismatch. Got %v, want %v" ,
220
- ereport .GetCertificateChain ().GetArkCert (), tcdev .Signer .Ark .Raw )
211
+ if tc .WantErr == "" {
212
+ reportProto := & spb.Report {}
213
+ if err := prototext .Unmarshal ([]byte (tc .OutputProto ), reportProto ); err != nil {
214
+ t .Fatalf ("test failure: %v" , err )
221
215
}
222
- if ! bytes .Equal (ereport .GetCertificateChain ().GetAskCert (), tcdev .Signer .Ask .Raw ) {
223
- t .Errorf ("ASK certificate mismatch. Got %v, want %v" ,
224
- ereport .GetCertificateChain ().GetAskCert (), tcdev .Signer .Ask .Raw )
216
+ fixReportWants (reportProto )
217
+
218
+ got := ereport .Report
219
+ cleanReport (got )
220
+ want := reportProto
221
+ want .Signature = got .Signature // Zeros were placeholders.
222
+ if diff := cmp .Diff (got , want , protocmp .Transform ()); diff != "" {
223
+ t .Errorf ("GetQuoteProto(qp, %v) = {data: %v, certs: _} want %v. Diff: %s" , tc .Input , got , want , diff )
225
224
}
226
- if ! bytes .Equal (ereport .GetCertificateChain ().GetVcekCert (), tcdev .Signer .Vcek .Raw ) {
227
- t .Errorf ("VCEK certificate mismatch. Got %v, want %v" ,
228
- ereport .GetCertificateChain ().GetVcekCert (), tcdev .Signer .Vcek .Raw )
225
+
226
+ if UseDefaultSevGuest () {
227
+ tcdev := device .(* test.Device )
228
+ if ! bytes .Equal (ereport .GetCertificateChain ().GetArkCert (), tcdev .Signer .Ark .Raw ) {
229
+ t .Errorf ("ARK certificate mismatch. Got %v, want %v" ,
230
+ ereport .GetCertificateChain ().GetArkCert (), tcdev .Signer .Ark .Raw )
231
+ }
232
+ if ! bytes .Equal (ereport .GetCertificateChain ().GetAskCert (), tcdev .Signer .Ask .Raw ) {
233
+ t .Errorf ("ASK certificate mismatch. Got %v, want %v" ,
234
+ ereport .GetCertificateChain ().GetAskCert (), tcdev .Signer .Ask .Raw )
235
+ }
236
+ if ! bytes .Equal (ereport .GetCertificateChain ().GetVcekCert (), tcdev .Signer .Vcek .Raw ) {
237
+ t .Errorf ("VCEK certificate mismatch. Got %v, want %v" ,
238
+ ereport .GetCertificateChain ().GetVcekCert (), tcdev .Signer .Vcek .Raw )
239
+ }
229
240
}
230
241
}
231
- }
242
+ })
232
243
}
233
244
}
234
245
0 commit comments