From b2fecd6cee87c07170665e73cdbbf21bc1ba846c Mon Sep 17 00:00:00 2001 From: Marc Nijdam Date: Tue, 8 Aug 2023 07:48:39 -0600 Subject: [PATCH] Move device init to command level --- src/cmd/bench.rs | 1 + src/cmd/config.rs | 1 + src/cmd/info.rs | 1 + src/cmd/key.rs | 1 + src/cmd/provision.rs | 1 + src/cmd/test.rs | 1 + src/device/ecc.rs | 6 +----- src/device/mod.rs | 8 ++++++++ 8 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/cmd/bench.rs b/src/cmd/bench.rs index 394397f..5c7e33c 100644 --- a/src/cmd/bench.rs +++ b/src/cmd/bench.rs @@ -17,6 +17,7 @@ pub struct Cmd { impl Cmd { pub fn run(&self, device: &Device) -> Result { + device.init()?; let keypair = device.get_keypair(false)?; let duration = bench_sign(&keypair, self.iterations)?; let rate = self.iterations as f64 / duration.as_secs_f64(); diff --git a/src/cmd/config.rs b/src/cmd/config.rs index bcae036..5009dbc 100644 --- a/src/cmd/config.rs +++ b/src/cmd/config.rs @@ -6,6 +6,7 @@ pub struct Cmd {} impl Cmd { pub fn run(&self, device: &Device) -> Result { + device.init()?; let config = device.get_config()?; print_json(&config) } diff --git a/src/cmd/info.rs b/src/cmd/info.rs index 4967c4b..eae07fc 100644 --- a/src/cmd/info.rs +++ b/src/cmd/info.rs @@ -6,6 +6,7 @@ pub struct Cmd {} impl Cmd { pub fn run(&self, device: &Device) -> Result { + device.init()?; let info = device.get_info()?; print_json(&info) } diff --git a/src/cmd/key.rs b/src/cmd/key.rs index 55cfe5f..6fdd13c 100644 --- a/src/cmd/key.rs +++ b/src/cmd/key.rs @@ -14,6 +14,7 @@ pub struct Cmd { impl Cmd { pub fn run(&self, device: &Device) -> Result { + device.init()?; let keypair = device.get_keypair(self.generate)?; print_keypair(&keypair) } diff --git a/src/cmd/provision.rs b/src/cmd/provision.rs index dbfc163..da12fd0 100644 --- a/src/cmd/provision.rs +++ b/src/cmd/provision.rs @@ -6,6 +6,7 @@ pub struct Cmd {} impl Cmd { pub fn run(&self, device: &Device) -> Result { + device.init()?; let keypair = device.provision()?; print_keypair(&keypair) } diff --git a/src/cmd/test.rs b/src/cmd/test.rs index fadac0c..905333f 100644 --- a/src/cmd/test.rs +++ b/src/cmd/test.rs @@ -15,6 +15,7 @@ pub struct Cmd {} impl Cmd { pub fn run(&self, device: &Device) -> Result { + device.init()?; let tests = device.get_tests(); let results: Vec<(String, TestResult)> = tests .iter() diff --git a/src/device/ecc.rs b/src/device/ecc.rs index 3e03847..090edf3 100644 --- a/src/device/ecc.rs +++ b/src/device/ecc.rs @@ -62,7 +62,7 @@ impl Device { }) } - fn init_device(&self) -> Result { + pub fn init(&self) -> Result { // Initialize the global instance if not already initialized Ok(ecc608::init( &self.path.to_string_lossy(), @@ -72,7 +72,6 @@ impl Device { } pub fn get_info(&self) -> Result { - self.init_device()?; let info = with_ecc(|ecc: &mut Ecc| { ecc.get_info() .and_then(|info| ecc.get_serial().map(|serial| Info { info, serial })) @@ -81,7 +80,6 @@ impl Device { } pub fn get_keypair(&self, create: bool) -> Result { - self.init_device()?; let keypair: Keypair = with_ecc(|ecc| { if create { generate_compact_key_in_slot(ecc, self.slot) @@ -93,7 +91,6 @@ impl Device { } pub fn provision(&self) -> Result { - self.init_device()?; let slot_config = ecc608::SlotConfig::default(); let key_config = ecc608::KeyConfig::default(); for slot in 0..=ecc608::MAX_SLOT { @@ -107,7 +104,6 @@ impl Device { } pub fn get_config(&self) -> Result { - self.init_device()?; let slot_config = with_ecc(|ecc| ecc.get_slot_config(self.slot))?; let key_config = with_ecc(|ecc| ecc.get_key_config(self.slot))?; let zones = [ecc608::Zone::Config, ecc608::Zone::Data] diff --git a/src/device/mod.rs b/src/device/mod.rs index bb84f70..a697e48 100644 --- a/src/device/mod.rs +++ b/src/device/mod.rs @@ -212,6 +212,14 @@ impl DeviceArgs { } impl Device { + pub fn init(&self) -> Result { + match self { + #[cfg(feature = "ecc608")] + Self::Ecc(device) => device.init(), + _ => Ok(()), + } + } + pub fn get_info(&self) -> Result { let info = match self { #[cfg(feature = "ecc608")]