build_corim/
build_corim.rs1use corim::builder::{ComidBuilder, CorimBuilder};
7use corim::types::common::{EntityMap, MeasuredElement, TagIdChoice};
8use corim::types::corim::{CorimId, ProfileChoice};
9use corim::types::environment::{ClassMap, EnvironmentMap};
10use corim::types::measurement::{Digest, MeasurementMap, MeasurementValuesMap};
11use corim::types::tags::COMID_ROLE_TAG_CREATOR;
12use corim::types::triples::ReferenceTriple;
13
14fn main() {
15 let env = EnvironmentMap {
17 class: Some(ClassMap {
18 class_id: None,
19 vendor: Some("ACME Corp".into()),
20 model: Some("Turbo Encabulator".into()),
21 layer: Some(0),
22 index: None,
23 }),
24 instance: None,
25 group: None,
26 };
27
28 let measurement = MeasurementMap {
30 mkey: Some(MeasuredElement::Text("firmware".into())),
31 mval: MeasurementValuesMap {
32 digests: Some(vec![Digest::new(7, vec![0xAA; 48])]),
33 ..MeasurementValuesMap::default()
34 },
35 authorized_by: None,
36 };
37
38 let comid = ComidBuilder::new(TagIdChoice::Text(
40 "example.com/acme/turbo-encabulator".into(),
41 ))
42 .set_tag_version(0)
43 .add_entity(EntityMap {
44 entity_name: "ACME Corp".into(),
45 reg_id: Some("https://acme.example.com".into()),
46 role: vec![COMID_ROLE_TAG_CREATOR],
47 })
48 .add_reference_triple(ReferenceTriple::new(env, vec![measurement]))
49 .build()
50 .expect("failed to build CoMID");
51
52 let bytes = CorimBuilder::new(CorimId::Text("acme/corim/v1".into()))
54 .set_profile(ProfileChoice::Uri(
55 "https://example.com/acme-profile".into(),
56 ))
57 .set_validity(Some(1700000000), 1900000000)
58 .unwrap()
59 .add_comid_tag(comid)
60 .expect("failed to encode CoMID")
61 .build_bytes()
62 .expect("failed to build CoRIM");
63
64 println!("Encoded CoRIM: {} bytes", bytes.len());
65 println!(
66 "Hex: {}",
67 bytes
68 .iter()
69 .map(|b| format!("{:02x}", b))
70 .collect::<String>()
71 );
72}