capsules_extra::sha

Struct ShaDriver

Source
pub struct ShaDriver<'a, H: Digest<'a, L>, const L: usize> { /* private fields */ }

Implementations§

Source§

impl<'a, H: Digest<'a, L> + Sha256 + Sha384 + Sha512, const L: usize> ShaDriver<'a, H, L>

Source

pub fn new( sha: &'a H, data_buffer: &'static mut [u8], dest_buffer: &'static mut [u8; L], grant: Grant<App, UpcallCount<1>, AllowRoCount<{ ro_allow::COUNT }>, AllowRwCount<{ rw_allow::COUNT }>>, ) -> ShaDriver<'a, H, L>

Trait Implementations§

Source§

impl<'a, H: Digest<'a, L> + Sha256 + Sha384 + Sha512, const L: usize> ClientData<L> for ShaDriver<'a, H, L>

Source§

fn add_data_done( &self, _result: Result<(), ErrorCode>, _data: SubSlice<'static, u8>, )

Called when the data has been added to the digest. data is the SubSlice passed in the call to add_data, whose active slice contains the data that was not added. On Ok, data has an active slice of size zero (all data was added). Valid ErrorCode values are: Read more
Source§

fn add_mut_data_done( &self, _result: Result<(), ErrorCode>, data: SubSliceMut<'static, u8>, )

Called when the data has been added to the digest. data is the SubSliceMut passed in the call to add_mut_data, whose active slice contains the data that was not added. On Ok, data has an active slice of size zero (all data was added). Valid ErrorCode values are: Read more
Source§

impl<'a, H: Digest<'a, L> + Sha256 + Sha384 + Sha512, const L: usize> ClientHash<L> for ShaDriver<'a, H, L>

Source§

fn hash_done(&self, result: Result<(), ErrorCode>, digest: &'static mut [u8; L])

Called when a digest is computed. digest is the same reference passed to run() to store the hash value. If result is Ok, digest stores the computed hash. If result is Err, the data stored in digest is undefined and may have any value. Valid ErrorCode values are: Read more
Source§

impl<'a, H: Digest<'a, L> + Sha256 + Sha384 + Sha512, const L: usize> ClientVerify<L> for ShaDriver<'a, H, L>

Source§

fn verification_done( &self, result: Result<bool, ErrorCode>, compare: &'static mut [u8; L], )

Called when a verification is computed. compare is the reference supplied to verify() and the data stored in compare is unchanged. On Ok the bool indicates if the computed hash matches the value in compare. Valid ErrorCode values are: Read more
Source§

impl<'a, H: Digest<'a, L> + Sha256 + Sha384 + Sha512, const L: usize> SyscallDriver for ShaDriver<'a, H, L>

Source§

fn command( &self, command_num: usize, data1: usize, _data2: usize, processid: ProcessId, ) -> CommandReturn

Setup and run the HMAC hardware

We expect userspace to setup buffers for the key, data and digest. These buffers must be allocated and specified to the kernel from the above allow calls.

We expect userspace not to change the value while running. If userspace changes the value we have no guarantee of what is passed to the hardware. This isn’t a security issue, it will just prove the requesting app with invalid data.

The driver will take care of clearing data from the underlying implementation by calling the clear_data() function when the hash_complete() callback is called or if an error is encountered.

§command_num
  • 0: set_algorithm
  • 1: run
  • 2: update
  • 3: finish
Source§

fn allocate_grant(&self, processid: ProcessId) -> Result<(), Error>

Request to allocate a capsule’s grant for a specific process. Read more
Source§

fn allow_userspace_readable( &self, app: ProcessId, which: usize, slice: ReadWriteProcessBuffer, ) -> Result<ReadWriteProcessBuffer, (ReadWriteProcessBuffer, ErrorCode)>

System call for a process to pass a buffer (a UserspaceReadableProcessBuffer) to the kernel that the kernel can either read or write. The kernel calls this method only after it checks that the entire buffer is within memory the process can both read and write. Read more

Auto Trait Implementations§

§

impl<'a, H, const L: usize> !Freeze for ShaDriver<'a, H, L>

§

impl<'a, H, const L: usize> !RefUnwindSafe for ShaDriver<'a, H, L>

§

impl<'a, H, const L: usize> !Send for ShaDriver<'a, H, L>

§

impl<'a, H, const L: usize> !Sync for ShaDriver<'a, H, L>

§

impl<'a, H, const L: usize> Unpin for ShaDriver<'a, H, L>

§

impl<'a, H, const L: usize> !UnwindSafe for ShaDriver<'a, H, L>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, const L: usize> Client<L> for T
where T: ClientData<L> + ClientHash<L> + ClientVerify<L>,

Source§

impl<T, const L: usize> ClientDataHash<L> for T
where T: ClientData<L> + ClientHash<L>,

Source§

impl<T, const L: usize> ClientDataVerify<L> for T
where T: ClientData<L> + ClientVerify<L>,