diff options
| -rw-r--r-- | src/device.rs | 41 | ||||
| -rw-r--r-- | tests/device.rs | 7 | 
2 files changed, 31 insertions, 17 deletions
diff --git a/src/device.rs b/src/device.rs index 9813c50..d794e1b 100644 --- a/src/device.rs +++ b/src/device.rs @@ -225,13 +225,26 @@ pub struct SdCardData {      pub manufacturer: u8,  } -#[derive(Debug)] -/// Production information for a Storage device. -pub struct StorageProductionInfo { +/// A firmware version for a Nitrokey device. +#[derive(Clone, Copy, Debug, PartialEq)] +pub struct FirmwareVersion {      /// The major firmware version, e. g. 0 in v0.40. -    pub firmware_version_major: u8, +    pub major: u8,      /// The minor firmware version, e. g. 40 in v0.40. -    pub firmware_version_minor: u8, +    pub minor: u8, +} + +impl fmt::Display for FirmwareVersion { +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { +        write!(f, "v{}.{}", self.major, self.minor) +    } +} + +/// Production information for a Storage device. +#[derive(Debug)] +pub struct StorageProductionInfo { +    /// The firmware version. +    pub firmware_version: FirmwareVersion,      /// The internal firmware version.      pub firmware_version_internal: u8,      /// The serial number of the CPU. @@ -249,10 +262,8 @@ pub struct StorageStatus {      pub encrypted_volume: VolumeStatus,      /// The status of the hidden volume.      pub hidden_volume: VolumeStatus, -    /// The major firmware version, e. g. 0 in v0.40. -    pub firmware_version_major: u8, -    /// The minor firmware version, e. g. 40 in v0.40. -    pub firmware_version_minor: u8, +    /// The firmware version. +    pub firmware_version: FirmwareVersion,      /// Indicates whether the firmware is locked.      pub firmware_locked: bool,      /// The serial number of the SD card in the Storage stick. @@ -1321,8 +1332,10 @@ impl GenerateOtp for Storage {}  impl From<nitrokey_sys::NK_storage_ProductionTest> for StorageProductionInfo {      fn from(data: nitrokey_sys::NK_storage_ProductionTest) -> Self {          Self { -            firmware_version_major: data.FirmwareVersion_au8[0], -            firmware_version_minor: data.FirmwareVersion_au8[1], +            firmware_version: FirmwareVersion { +                major: data.FirmwareVersion_au8[0], +                minor: data.FirmwareVersion_au8[1], +            },              firmware_version_internal: data.FirmwareVersionInternal_u8,              serial_number_cpu: data.CPU_CardID_u32,              sd_card: SdCardData { @@ -1352,8 +1365,10 @@ impl From<nitrokey_sys::NK_storage_status> for StorageStatus {                  read_only: status.hidden_volume_read_only,                  active: status.hidden_volume_active,              }, -            firmware_version_major: status.firmware_version_major, -            firmware_version_minor: status.firmware_version_minor, +            firmware_version: FirmwareVersion { +                major: status.firmware_version_major, +                minor: status.firmware_version_minor, +            },              firmware_locked: status.firmware_locked,              serial_number_sd_card: status.serial_number_sd_card,              serial_number_smart_card: status.serial_number_smart_card, diff --git a/tests/device.rs b/tests/device.rs index 849d2ff..abede67 100644 --- a/tests/device.rs +++ b/tests/device.rs @@ -441,8 +441,8 @@ fn get_storage_status(device: Storage) {  #[test_device]  fn get_production_info(device: Storage) {      let info = device.get_production_info().unwrap(); -    assert_eq!(0, info.firmware_version_major); -    assert!(info.firmware_version_minor != 0); +    assert_eq!(0, info.firmware_version.major); +    assert!(info.firmware_version.minor != 0);      assert!(info.serial_number_cpu != 0);      assert!(info.sd_card.serial_number != 0);      assert!(info.sd_card.size > 0); @@ -454,8 +454,7 @@ fn get_production_info(device: Storage) {      assert!(info.sd_card.manufacturer != 0);      let status = device.get_status().unwrap(); -    assert_eq!(status.firmware_version_major, info.firmware_version_major); -    assert_eq!(status.firmware_version_minor, info.firmware_version_minor); +    assert_eq!(status.firmware_version, info.firmware_version);      assert_eq!(status.serial_number_sd_card, info.sd_card.serial_number);  }  | 
