Skip to content

Commit e1e1ed2

Browse files
author
Juliette Pretot
committed
Deduplicate structs in stage0 attestation generation
Bug: 347970899 Change-Id: I2249064e988cf2e0811e575fd4f4aab342d01893
1 parent fcf553a commit e1e1ed2

File tree

5 files changed

+152
-180
lines changed

5 files changed

+152
-180
lines changed

oak_attestation_integration_tests/tests/attester_tests.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,27 @@ use oak_attestation::{
2020
};
2121
use oak_attestation_verification::verifier::verify_dice_chain;
2222
use oak_dice::evidence::TeePlatform;
23-
use oak_proto_rust::oak::{
24-
attestation::v1::{ApplicationLayerData, EventLog},
25-
RawDigest,
26-
};
23+
use oak_proto_rust::oak::{attestation::v1::ApplicationLayerData, RawDigest};
2724
use prost::Message;
2825

2926
const TEST_APPLICATION_DIGEST: [u8; 4] = [0, 1, 2, 3];
3027

3128
#[test]
3229
fn dice_attester_generates_correct_dice_chain() {
33-
let test_stage0_measurements = oak_stage0_dice::Measurements::default();
30+
let test_stage0_measurements = oak_proto_rust::oak::attestation::v1::Stage0Measurements {
31+
setup_data_digest: vec![],
32+
kernel_measurement: vec![],
33+
ram_disk_digest: vec![],
34+
memory_map_digest: vec![],
35+
acpi_digest: vec![],
36+
kernel_cmdline: String::new(),
37+
};
38+
let stage0_event = oak_stage0_dice::encoded_stage0_event(test_stage0_measurements);
3439
let (_, stage0_dice_data_proto) = oak_stage0_dice::generate_dice_data(
35-
&test_stage0_measurements,
3640
oak_stage0_dice::mock_attestation_report,
3741
oak_stage0_dice::mock_derived_key,
3842
TeePlatform::None,
39-
EventLog::default(),
43+
&stage0_event,
4044
);
4145
let serialized_stage0_dice_data = stage0_dice_data_proto.encode_length_delimited_to_vec();
4246

oak_containers_sdk/src/standalone.rs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,32 +41,29 @@ pub fn standalone_endorsed_evidence_containing_only_public_keys(
4141
oak_proto_rust::oak::attestation::v1::EventLog,
4242
oak_dice::evidence::Stage0DiceData,
4343
) = {
44-
let mut mock_stage0_measurements = oak_stage0_dice::Measurements::default();
45-
let (mock_event_log, stage0_event_sha2_256_digest) = oak_stage0_dice::generate_event_log(
46-
mock_stage0_measurements.kernel_sha2_256_digest.to_vec(),
47-
mock_stage0_measurements.acpi_sha2_256_digest.to_vec(),
48-
mock_stage0_measurements.memory_map_sha2_256_digest.to_vec(),
49-
mock_stage0_measurements.ram_disk_sha2_256_digest.to_vec(),
50-
mock_stage0_measurements.setup_data_sha2_256_digest.to_vec(),
51-
mock_stage0_measurements.cmdline.clone(),
44+
let encoded_stage0_event = oak_stage0_dice::encoded_stage0_event(
45+
oak_proto_rust::oak::attestation::v1::Stage0Measurements::default(),
5246
);
53-
mock_stage0_measurements.event_sha2_256_digest = stage0_event_sha2_256_digest;
54-
let (stage0_dice_data, _) = oak_stage0_dice::generate_dice_data(
55-
&mock_stage0_measurements,
47+
let mock_event_log = {
48+
let mut base = oak_proto_rust::oak::attestation::v1::EventLog::default();
49+
base.encoded_events.push(encoded_stage0_event.to_vec());
50+
base
51+
};
52+
let (mock_stage0_dice_data, _) = oak_stage0_dice::generate_dice_data(
5653
oak_stage0_dice::mock_attestation_report,
5754
oak_stage0_dice::mock_derived_key,
5855
oak_dice::evidence::TeePlatform::None,
59-
oak_proto_rust::oak::attestation::v1::EventLog::default(),
56+
&encoded_stage0_event,
6057
);
61-
(mock_event_log, stage0_dice_data)
58+
(mock_event_log, mock_stage0_dice_data)
6259
};
6360
let mut attester = oak_containers_stage1_dice::stage0_dice_data_into_dice_attester(
6461
mock_stage0_dice_data,
6562
mock_event_log,
6663
)
6764
.expect("failed to create dice attester");
6865
let stage1_layer_data = oak_containers_stage1_dice::get_layer_data(&[]);
69-
attester.add_layer(stage1_layer_data).expect("failred to add stage1 layer data");
66+
attester.add_layer(stage1_layer_data).expect("failed to add stage1 layer data");
7067
let orchestrator_layer_data =
7168
oak_containers_orchestrator_attestation::measure_container_and_config(&[], &[]);
7269
let (_instance_keys, instance_public_keys) =

oak_restricted_kernel_sdk/src/testing.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,22 +49,19 @@ lazy_static::lazy_static! {
4949

5050
fn get_mock_dice_data_and_event_log() -> (RestrictedKernelDiceData, Vec<u8>) {
5151
let (mut mock_event_log, stage0_dice_data): (EventLog, Stage0DiceData) = {
52-
let mut mock_stage0_measurements = oak_stage0_dice::Measurements::default();
53-
let (mock_event_log, stage0_event_sha2_256_digest) = oak_stage0_dice::generate_event_log(
54-
mock_stage0_measurements.kernel_sha2_256_digest.to_vec(),
55-
mock_stage0_measurements.acpi_sha2_256_digest.to_vec(),
56-
mock_stage0_measurements.memory_map_sha2_256_digest.to_vec(),
57-
mock_stage0_measurements.ram_disk_sha2_256_digest.to_vec(),
58-
mock_stage0_measurements.setup_data_sha2_256_digest.to_vec(),
59-
mock_stage0_measurements.cmdline.clone(),
52+
let stage0_event = oak_stage0_dice::encoded_stage0_event(
53+
oak_proto_rust::oak::attestation::v1::Stage0Measurements::default(),
6054
);
61-
mock_stage0_measurements.event_sha2_256_digest = stage0_event_sha2_256_digest;
55+
let mock_event_log = {
56+
let mut base = oak_proto_rust::oak::attestation::v1::EventLog::default();
57+
base.encoded_events.push(stage0_event.to_vec());
58+
base
59+
};
6260
let (stage0_dice_data, _) = oak_stage0_dice::generate_dice_data(
63-
&mock_stage0_measurements,
6461
oak_stage0_dice::mock_attestation_report,
6562
oak_stage0_dice::mock_derived_key,
6663
TeePlatform::None,
67-
EventLog::default(),
64+
&stage0_event,
6865
);
6966
(mock_event_log, stage0_dice_data)
7067
};

stage0/src/lib.rs

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ use x86_64::{
4444
};
4545
use zerocopy::AsBytes;
4646

47-
use crate::alloc::string::ToString;
48-
4947
mod acpi;
5048
mod acpi_tables;
5149
pub mod allocator;
@@ -145,7 +143,6 @@ pub fn rust64_start<P: hal::Platform>() -> ! {
145143
P::populate_zero_page(&mut zero_page);
146144

147145
let cmdline = kernel::try_load_cmdline(&mut fwcfg).unwrap_or_default();
148-
let cmdline_sha2_256_digest = cmdline.measure();
149146

150147
// Safety: this is the only place where we try to load a kernel, so the backing
151148
// memory is unused.
@@ -179,14 +176,22 @@ pub fn rust64_start<P: hal::Platform>() -> ! {
179176
let memory_map_sha2_256_digest = zero_page.e820_table().measure();
180177

181178
// Generate Stage0 Event Log data.
182-
let (event_log_proto, event_sha2_256_digest) = oak_stage0_dice::generate_event_log(
183-
kernel_sha2_256_digest.as_bytes().to_vec(),
184-
acpi_sha2_256_digest.as_bytes().to_vec(),
185-
memory_map_sha2_256_digest.as_bytes().to_vec(),
186-
ram_disk_sha2_256_digest.as_bytes().to_vec(),
187-
setup_data_sha2_256_digest.as_bytes().to_vec(),
188-
cmdline.clone(),
179+
let stage0_event = oak_stage0_dice::encoded_stage0_event(
180+
oak_proto_rust::oak::attestation::v1::Stage0Measurements {
181+
setup_data_digest: setup_data_sha2_256_digest.as_bytes().to_vec(),
182+
kernel_measurement: kernel_sha2_256_digest.as_bytes().to_vec(),
183+
ram_disk_digest: ram_disk_sha2_256_digest.as_bytes().to_vec(),
184+
memory_map_digest: memory_map_sha2_256_digest.as_bytes().to_vec(),
185+
acpi_digest: acpi_sha2_256_digest.as_bytes().to_vec(),
186+
kernel_cmdline: cmdline.clone(),
187+
},
189188
);
189+
let event_sha2_256_digest = Sha256::digest(&stage0_event).to_vec();
190+
let event_log_proto = {
191+
let mut base = oak_proto_rust::oak::attestation::v1::EventLog::default();
192+
base.encoded_events.push(stage0_event.to_vec());
193+
base
194+
};
190195

191196
log::debug!("Kernel image digest: sha2-256:{}", hex::encode(kernel_sha2_256_digest));
192197
log::debug!("Kernel setup data digest: sha2-256:{}", hex::encode(setup_data_sha2_256_digest));
@@ -196,31 +201,13 @@ pub fn rust64_start<P: hal::Platform>() -> ! {
196201
log::debug!("E820 table digest: sha2-256:{}", hex::encode(memory_map_sha2_256_digest));
197202
log::debug!("Event digest: sha2-256:{}", hex::encode(event_sha2_256_digest));
198203

199-
// TODO: b/331252282 - Remove temporary workaround for cmd line length.
200-
let cmdline_max_len = 256;
201-
let measurements = oak_stage0_dice::Measurements {
202-
acpi_sha2_256_digest,
203-
kernel_sha2_256_digest,
204-
cmdline_sha2_256_digest,
205-
cmdline: if cmdline.len() > cmdline_max_len {
206-
cmdline[..cmdline_max_len].to_string()
207-
} else {
208-
cmdline.clone()
209-
},
210-
ram_disk_sha2_256_digest,
211-
setup_data_sha2_256_digest,
212-
memory_map_sha2_256_digest,
213-
event_sha2_256_digest,
214-
};
215-
216204
let tee_platform = P::tee_platform();
217205

218206
let (dice_data_struct, dice_data_proto) = oak_stage0_dice::generate_dice_data(
219-
&measurements,
220207
P::get_attestation,
221208
P::get_derived_key,
222209
tee_platform,
223-
event_log_proto.clone(),
210+
&stage0_event,
224211
);
225212
let dice_data = Box::leak(Box::new_in(dice_data_struct, &crate::BOOT_ALLOC));
226213

0 commit comments

Comments
 (0)