Skip to main content

create_primary/
create_primary.rs

1//! Rust analog of wolfTPM's `examples/keygen/create_primary` against a software
2//! TPM. Start a server first, e.g. `ibmswtpm2/src/tpm_server` on :2321.
3
4use std::fmt::Write;
5
6use wolftpm::{Device, Hierarchy, KeyAlg};
7
8fn hex(b: &[u8]) -> String {
9    let mut encoded = String::with_capacity(b.len() * 2);
10    for byte in b {
11        write!(encoded, "{byte:02x}").expect("writing to a String cannot fail");
12    }
13    encoded
14}
15
16fn main() -> Result<(), Box<dyn std::error::Error>> {
17    let dev = Device::open()?;
18    println!("wolfTPM initialized");
19
20    let mut r = [0u8; 16];
21    dev.get_random(&mut r)?;
22    println!("GetRandom: {}", hex(&r));
23
24    let ecc = dev.create_primary(Hierarchy::Owner, KeyAlg::EccP256, None)?;
25    println!("ECC SRK handle: 0x{:08x}", ecc.handle());
26
27    let rsa = dev.create_primary(Hierarchy::Owner, KeyAlg::Rsa, None)?;
28    println!("RSA SRK handle: 0x{:08x}", rsa.handle());
29
30    Ok(())
31}