diff options
| author | Robin Krahl <robin.krahl@ireas.org> | 2019-01-23 03:02:31 +0000 | 
|---|---|---|
| committer | Robin Krahl <robin.krahl@ireas.org> | 2019-01-23 03:02:31 +0000 | 
| commit | e31009064eaaef9153ad5da3911aa0a939a050c2 (patch) | |
| tree | f7469134712074a9081e09c1fb7caa85c52e6d04 | |
| parent | 601bc22ae18838ff56b64c15b365bcf7f93006be (diff) | |
| download | nitrokey-rs-e31009064eaaef9153ad5da3911aa0a939a050c2.tar.gz nitrokey-rs-e31009064eaaef9153ad5da3911aa0a939a050c2.tar.bz2 | |
Add temp_password_ptr method to AuthenticatedDevice
To reduce the number of casts, we introduce the temp_password_ptr method
that casts the pointer received from the Vec<u8> to a c_char pointer
that can be handled by libnitrokey.
| -rw-r--r-- | src/auth.rs | 24 | 
1 files changed, 16 insertions, 8 deletions
| diff --git a/src/auth.rs b/src/auth.rs index d1eb049..541de35 100644 --- a/src/auth.rs +++ b/src/auth.rs @@ -111,6 +111,8 @@ pub trait Authenticate {  trait AuthenticatedDevice<T> {      fn new(device: T, temp_password: Vec<u8>) -> Self; + +    fn temp_password_ptr(&self) -> *const c_char;  }  /// A Nitrokey device with user authentication. @@ -217,20 +219,19 @@ impl<T: Device> Deref for User<T> {  impl<T: Device> GenerateOtp for User<T> {      fn get_hotp_code(&self, slot: u8) -> Result<String, Error> {          unsafe { -            let temp_password_ptr = self.temp_password.as_ptr() as *const c_char; +            let temp_password_ptr = self.temp_password_ptr();              return result_from_string(nitrokey_sys::NK_get_hotp_code_PIN(slot, temp_password_ptr));          }      }      fn get_totp_code(&self, slot: u8) -> Result<String, Error> {          unsafe { -            let temp_password_ptr = self.temp_password.as_ptr() as *const c_char;              return result_from_string(nitrokey_sys::NK_get_totp_code_PIN(                  slot,                  0,                  0,                  0, -                temp_password_ptr, +                self.temp_password_ptr(),              ));          }      } @@ -243,6 +244,10 @@ impl<T: Device> AuthenticatedDevice<T> for User<T> {              temp_password,          }      } + +    fn temp_password_ptr(&self) -> *const c_char { +        self.temp_password.as_ptr() as *const c_char +    }  }  impl<T: Device> Deref for Admin<T> { @@ -297,7 +302,7 @@ impl<T: Device> Admin<T> {                  raw_config.scrollock,                  raw_config.user_password,                  false, -                self.temp_password.as_ptr() as *const c_char, +                self.temp_password_ptr(),              ))          }      } @@ -307,8 +312,7 @@ impl<T: Device> Admin<T> {          C: Fn(RawOtpSlotData, *const c_char) -> c_int,      {          let raw_data = RawOtpSlotData::new(data)?; -        let temp_password_ptr = self.temp_password.as_ptr() as *const c_char; -        get_command_result(callback(raw_data, temp_password_ptr)) +        get_command_result(callback(raw_data, self.temp_password_ptr()))      }  } @@ -346,12 +350,12 @@ impl<T: Device> ConfigureOtp for Admin<T> {      }      fn erase_hotp_slot(&self, slot: u8) -> Result<(), Error> { -        let temp_password_ptr = self.temp_password.as_ptr() as *const c_char; +        let temp_password_ptr = self.temp_password_ptr();          unsafe { get_command_result(nitrokey_sys::NK_erase_hotp_slot(slot, temp_password_ptr)) }      }      fn erase_totp_slot(&self, slot: u8) -> Result<(), Error> { -        let temp_password_ptr = self.temp_password.as_ptr() as *const c_char; +        let temp_password_ptr = self.temp_password_ptr();          unsafe { get_command_result(nitrokey_sys::NK_erase_totp_slot(slot, temp_password_ptr)) }      }  } @@ -363,6 +367,10 @@ impl<T: Device> AuthenticatedDevice<T> for Admin<T> {              temp_password,          }      } + +    fn temp_password_ptr(&self) -> *const c_char { +        self.temp_password.as_ptr() as *const c_char +    }  }  impl Authenticate for DeviceWrapper { | 
