| 19 | |
| 20 | #[derive(Subcommand, Debug, Clone)] |
| 21 | enum Commands { |
| 22 | Attach { |
| 23 | #[arg(short, long)] |
| 24 | kernel_file: String, |
| 25 | #[arg(short, long)] |
| 26 | tap_file: String, |
| 27 | #[arg(short, long)] |
| 28 | output_file: Option<String>, |
| 29 | }, |
| 30 | Generate { |
| 31 | #[arg(short='p', long="pcrs", value_parser = parse_key_val::<u16, String>, value_delimiter = ',', required=true)] |
| 32 | pcrs: Vec<(u16, Vec<u8>)>, |
| 33 | #[arg(long="secrets", value_parser = parse_key_val::<u64, String>, value_delimiter = ',')] |
| 34 | confidential_vm_secrets: Vec<(u64, Vec<u8>)>, |
| 35 | #[clap(short, long, value_delimiter = ' ', num_args = 1..)] |
| 36 | tee_public_keys_files: Vec<String>, |
| 37 | #[arg(short, long)] |
| 38 | output_file: String, |
| 39 | }, |
| 40 | Measure { |
| 41 | #[arg(short, long)] |
| 42 | kernel_file: String, |
| 43 | #[arg(long = "embedded-tap")] |
| 44 | embedded_tap: bool, |
| 45 | #[arg(long = "base-address", value_parser=maybe_hex::<u64>, default_value_t = 0x80000000)] |
| 46 | base_address: u64, |
| 47 | }, |
| 48 | } |
| 49 | |
| 50 | /// Parse a single key-value pair |
| 51 | fn parse_key_val<T, U>( |
nothing calls this directly
no outgoing calls
no test coverage detected