1use crate::{
6 cli::SubCommand,
7 command::{CommandError, InputArgs, OutputArgs, OutputEncodingArgs, ParenBindArgs},
8 device::with_device,
9 io::{read_file_input, write_key_data},
10 job::Job,
11};
12use clap::Args;
13
14#[derive(Args, Debug)]
16pub struct Convert {
17 #[clap(flatten)]
18 pub parent_args: ParenBindArgs,
19
20 #[clap(flatten)]
21 pub input_args: InputArgs,
22
23 #[clap(flatten)]
24 pub output_args: OutputArgs,
25
26 #[clap(flatten)]
27 pub output_encoding_args: OutputEncodingArgs,
28}
29
30impl SubCommand for Convert {
31 fn run(&self, job: &mut Job) -> Result<(), CommandError> {
32 with_device(job.device.clone(), |device| {
33 let parent_handle = job.load_context(device, &self.parent_args.parent)?;
34
35 let input_bytes = read_file_input(self.input_args.input.as_deref())?;
36 let tpm_key = job.import_key(device, parent_handle, &input_bytes, job.auth_list)?;
37 write_key_data(
38 &mut job.writer,
39 &tpm_key,
40 self.output_args.output.as_deref(),
41 self.output_encoding_args.output_encoding,
42 )
43 })
44 }
45}