@@ -23,10 +23,15 @@ use oak_attestation_verification::policy::{
23
23
} ;
24
24
use oak_attestation_verification_types:: policy:: Policy ;
25
25
use oak_file_utils:: data_path;
26
- use oak_proto_rust:: oak:: attestation:: v1:: {
27
- binary_reference_value, endorsements, reference_values, AmdSevSnpEndorsement , Endorsements ,
28
- Evidence , FirmwareEndorsement , OakContainersReferenceValues ,
29
- OakRestrictedKernelReferenceValues , ReferenceValues , SkipVerification ,
26
+ use oak_proto_rust:: oak:: {
27
+ attestation:: v1:: {
28
+ binary_reference_value, endorsements, kernel_binary_reference_value, reference_values,
29
+ text_reference_value, AmdSevSnpEndorsement , BinaryReferenceValue , CbReferenceValues ,
30
+ Endorsements , Evidence , FirmwareEndorsement , KernelBinaryReferenceValue ,
31
+ KernelLayerReferenceValues , OakContainersReferenceValues ,
32
+ OakRestrictedKernelReferenceValues , ReferenceValues , SkipVerification , TextReferenceValue ,
33
+ } ,
34
+ Variant ,
30
35
} ;
31
36
use oak_sev_snp_attestation_report:: AttestationReport ;
32
37
use prost:: Message ;
@@ -46,6 +51,13 @@ const RK_ENDORSEMENTS_PATH: &str =
46
51
const RK_REFERENCE_VALUES_PATH : & str =
47
52
"oak_attestation_verification/testdata/rk_reference_values_20241205.binarypb" ;
48
53
54
+ const CB_EVIDENCE_PATH : & str =
55
+ "oak_attestation_verification/testdata/cb_evidence_20250124.binarypb" ;
56
+ const CB_ENDORSEMENTS_PATH : & str =
57
+ "oak_attestation_verification/testdata/cb_endorsements_20250124.binarypb" ;
58
+ const CB_REFERENCE_VALUES_PATH : & str =
59
+ "oak_attestation_verification/testdata/cb_reference_values_20250124.binarypb" ;
60
+
49
61
const KERNEL_EVENT_INDEX : usize = 0 ;
50
62
const RK_APPLICATION_EVENT_INDEX : usize = 1 ;
51
63
const SYSTEM_EVENT_INDEX : usize = 1 ;
@@ -125,6 +137,36 @@ fn load_rk_reference_values() -> OakRestrictedKernelReferenceValues {
125
137
rk_reference_values
126
138
}
127
139
140
+ fn load_cb_evidence ( ) -> Evidence {
141
+ let serialized = fs:: read ( data_path ( CB_EVIDENCE_PATH ) ) . expect ( "could not read evidence" ) ;
142
+ Evidence :: decode ( serialized. as_slice ( ) ) . expect ( "could not decode evidence" )
143
+ }
144
+
145
+ fn load_cb_endorsements ( ) -> Endorsements {
146
+ let serialized =
147
+ fs:: read ( data_path ( CB_ENDORSEMENTS_PATH ) ) . expect ( "could not read endorsements" ) ;
148
+ Endorsements :: decode ( serialized. as_slice ( ) ) . expect ( "could not decode endorsements" )
149
+ }
150
+
151
+ fn load_cb_reference_values ( ) -> CbReferenceValues {
152
+ let serialized =
153
+ fs:: read ( data_path ( CB_REFERENCE_VALUES_PATH ) ) . expect ( "could not read reference values" ) ;
154
+ let reference_values =
155
+ ReferenceValues :: decode ( serialized. as_slice ( ) ) . expect ( "could not decode reference values" ) ;
156
+ let containers_reference_values = match reference_values. r#type . as_ref ( ) {
157
+ Some ( reference_values:: Type :: Cb ( containers_reference_values) ) => {
158
+ containers_reference_values. clone ( )
159
+ }
160
+ _ => panic ! ( "couldn't find CB reference values" ) ,
161
+ } ;
162
+ assert ! ( containers_reference_values. root_layer. is_some( ) ) ;
163
+ assert ! ( containers_reference_values. root_layer. as_ref( ) . unwrap( ) . amd_sev. is_some( ) ) ;
164
+ assert ! ( containers_reference_values. kernel_layer. is_some( ) ) ;
165
+ assert ! ( containers_reference_values. system_layer. is_some( ) ) ;
166
+ assert ! ( containers_reference_values. application_layer. is_some( ) ) ;
167
+ containers_reference_values
168
+ }
169
+
128
170
lazy_static:: lazy_static! {
129
171
static ref OC_EVIDENCE : Evidence = load_oc_evidence( ) ;
130
172
static ref OC_ENDORSEMENTS : Endorsements = load_oc_endorsements( ) ;
@@ -133,6 +175,10 @@ lazy_static::lazy_static! {
133
175
static ref RK_EVIDENCE : Evidence = load_rk_evidence( ) ;
134
176
static ref RK_ENDORSEMENTS : Endorsements = load_rk_endorsements( ) ;
135
177
static ref RK_REFERENCE_VALUES : OakRestrictedKernelReferenceValues = load_rk_reference_values( ) ;
178
+
179
+ static ref CB_EVIDENCE : Evidence = load_cb_evidence( ) ;
180
+ static ref CB_ENDORSEMENTS : Endorsements = load_cb_endorsements( ) ;
181
+ static ref CB_REFERENCE_VALUES : CbReferenceValues = load_cb_reference_values( ) ;
136
182
}
137
183
138
184
#[ test]
@@ -251,3 +297,33 @@ fn rk_application_policy_verify_succeeds() {
251
297
// TODO: b/356631062 - Verify detailed attestation results.
252
298
assert ! ( result. is_ok( ) , "Failed: {:?}" , result. err( ) . unwrap( ) ) ;
253
299
}
300
+
301
+ #[ test]
302
+ fn cb_kernel_policy_verify_succeeds ( ) {
303
+ // TODO: b/388251723 - Use real CB reference values instead of [`Skip`].
304
+ let _reference_values = CB_REFERENCE_VALUES . kernel_layer . as_ref ( ) . unwrap ( ) ;
305
+ let kernel_skip = KernelBinaryReferenceValue {
306
+ r#type : Some ( kernel_binary_reference_value:: Type :: Skip ( SkipVerification { } ) ) ,
307
+ } ;
308
+ let text_skip =
309
+ TextReferenceValue { r#type : Some ( text_reference_value:: Type :: Skip ( SkipVerification { } ) ) } ;
310
+ let binary_skip = BinaryReferenceValue {
311
+ r#type : Some ( binary_reference_value:: Type :: Skip ( SkipVerification { } ) ) ,
312
+ } ;
313
+ let skip_reference_values = KernelLayerReferenceValues {
314
+ kernel : Some ( kernel_skip) ,
315
+ kernel_cmd_line_text : Some ( text_skip) ,
316
+ init_ram_fs : Some ( binary_skip. clone ( ) ) ,
317
+ memory_map : Some ( binary_skip. clone ( ) ) ,
318
+ acpi : Some ( binary_skip) ,
319
+ } ;
320
+
321
+ let policy = KernelPolicy :: new ( & skip_reference_values) ;
322
+ let event = & CB_EVIDENCE . event_log . as_ref ( ) . unwrap ( ) . encoded_events [ KERNEL_EVENT_INDEX ] ;
323
+ let endorsement = Variant :: default ( ) ;
324
+
325
+ let result = policy. verify ( event, & endorsement, MILLISECONDS_SINCE_EPOCH ) ;
326
+
327
+ // TODO: b/356631062 - Verify detailed attestation results.
328
+ assert ! ( result. is_ok( ) , "Failed: {:?}" , result. err( ) . unwrap( ) ) ;
329
+ }
0 commit comments