hmac: Implement Deref and DerefMut for the HMAC buffers Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
diff --git a/examples/hmac.rs b/examples/hmac.rs index 97184f7..b6f2881 100644 --- a/examples/hmac.rs +++ b/examples/hmac.rs
@@ -23,7 +23,7 @@ b"A language empowering everyone to build reliable and efficient software."; for (i, d) in data.iter().enumerate() { - data_buffer.buffer[i] = *d; + data_buffer[i] = *d; } let _data_buffer = hmac_driver.init_data_buffer(&mut data_buffer)?; writeln!(console, " done")?;
diff --git a/src/hmac.rs b/src/hmac.rs index 5185128..1fa6b84 100644 --- a/src/hmac.rs +++ b/src/hmac.rs
@@ -3,6 +3,8 @@ use crate::result::TockResult; use crate::syscalls; use core::marker::PhantomData; +use core::ops::Deref; +use core::ops::DerefMut; use libtock_core::shared_memory::SharedMemory; const DRIVER_NUMBER: usize = 0x40003; @@ -58,8 +60,22 @@ } } +impl Deref for HmacKeyBuffer { + type Target = [u8; KEY_BUFFER_SIZE]; + + fn deref(&self) -> &Self::Target { + &self.buffer + } +} + +impl DerefMut for HmacKeyBuffer { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.buffer + } +} + pub struct HmacDataBuffer { - pub buffer: [u8; DATA_BUFFER_SIZE], + buffer: [u8; DATA_BUFFER_SIZE], } impl Default for HmacDataBuffer { @@ -70,6 +86,20 @@ } } +impl Deref for HmacDataBuffer { + type Target = [u8; DATA_BUFFER_SIZE]; + + fn deref(&self) -> &Self::Target { + &self.buffer + } +} + +impl DerefMut for HmacDataBuffer { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.buffer + } +} + pub struct HmacDestBuffer { buffer: [u8; DEST_BUFFER_SIZE], } @@ -82,6 +112,20 @@ } } +impl Deref for HmacDestBuffer { + type Target = [u8; DEST_BUFFER_SIZE]; + + fn deref(&self) -> &Self::Target { + &self.buffer + } +} + +impl DerefMut for HmacDestBuffer { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.buffer + } +} + pub struct HmacDriver<'a> { lifetime: PhantomData<&'a ()>, }