cli/command/
convert.rs

1// SPDX-License-Identifier: GPL-3-0-or-later
2// Copyright (c) 2024-2025 Jarkko Sakkinen
3// Copyright (c) 2025 Opinsys Oy
4
5use 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/// Convert external keys to TPM keys.
15#[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}