embassy-stm32

Crates

git

Versions

stm32h7s3l8

Flavors

embassy_stm32::cryp

Struct Cryp

source
pub struct Cryp<'d, T: Instance, DmaIn = NoDma, DmaOut = NoDma> { /* private fields */ }
Expand description

Crypto Accelerator Driver

Implementations§

source§

impl<'d, T: Instance, DmaIn, DmaOut> Cryp<'d, T, DmaIn, DmaOut>

source

pub fn new( peri: impl Peripheral<P = T> + 'd, indma: impl Peripheral<P = DmaIn> + 'd, outdma: impl Peripheral<P = DmaOut> + 'd, _irq: impl Binding<T::Interrupt, InterruptHandler<T>> + 'd, ) -> Self

Create a new CRYP driver.

source

pub fn start_blocking<'c, C: Cipher<'c> + CipherSized + IVSized>( &self, cipher: &'c C, dir: Direction, ) -> Context<'c, C>

Start a new encrypt or decrypt operation for the given cipher.

source

pub async fn start<'c, C: Cipher<'c> + CipherSized + IVSized>( &mut self, cipher: &'c C, dir: Direction, ) -> Context<'c, C>
where DmaIn: DmaIn<T>, DmaOut: DmaOut<T>,

Start a new encrypt or decrypt operation for the given cipher.

source

pub fn aad_blocking<'c, const TAG_SIZE: usize, C: Cipher<'c> + CipherSized + IVSized + CipherAuthenticated<TAG_SIZE>>( &self, ctx: &mut Context<'c, C>, aad: &[u8], last_aad_block: bool, )

Controls the header phase of cipher processing. This function is only valid for authenticated ciphers including GCM, CCM, and GMAC. All additional associated data (AAD) must be supplied to this function prior to starting the payload phase with payload_blocking. The AAD must be supplied in multiples of the block size (128-bits for AES, 64-bits for DES), except when supplying the last block. When supplying the last block of AAD, last_aad_block must be true.

source

pub async fn aad<'c, const TAG_SIZE: usize, C: Cipher<'c> + CipherSized + IVSized + CipherAuthenticated<TAG_SIZE>>( &mut self, ctx: &mut Context<'c, C>, aad: &[u8], last_aad_block: bool, )
where DmaIn: DmaIn<T>, DmaOut: DmaOut<T>,

Controls the header phase of cipher processing. This function is only valid for authenticated ciphers including GCM, CCM, and GMAC. All additional associated data (AAD) must be supplied to this function prior to starting the payload phase with payload. The AAD must be supplied in multiples of the block size (128-bits for AES, 64-bits for DES), except when supplying the last block. When supplying the last block of AAD, last_aad_block must be true.

source

pub fn payload_blocking<'c, C: Cipher<'c> + CipherSized + IVSized>( &self, ctx: &mut Context<'c, C>, input: &[u8], output: &mut [u8], last_block: bool, )

Performs encryption/decryption on the provided context. The context determines algorithm, mode, and state of the crypto accelerator. When the last piece of data is supplied, last_block should be true. This function panics under various mismatches of parameters. Output buffer must be at least as long as the input buffer. Data must be a multiple of block size (128-bits for AES, 64-bits for DES) for CBC and ECB modes. Padding or ciphertext stealing must be managed by the application for these modes. Data must also be a multiple of block size unless last_block is true.

source

pub async fn payload<'c, C: Cipher<'c> + CipherSized + IVSized>( &mut self, ctx: &mut Context<'c, C>, input: &[u8], output: &mut [u8], last_block: bool, )
where DmaIn: DmaIn<T>, DmaOut: DmaOut<T>,

Performs encryption/decryption on the provided context. The context determines algorithm, mode, and state of the crypto accelerator. When the last piece of data is supplied, last_block should be true. This function panics under various mismatches of parameters. Output buffer must be at least as long as the input buffer. Data must be a multiple of block size (128-bits for AES, 64-bits for DES) for CBC and ECB modes. Padding or ciphertext stealing must be managed by the application for these modes. Data must also be a multiple of block size unless last_block is true.

source

pub fn finish_blocking<'c, const TAG_SIZE: usize, C: Cipher<'c> + CipherSized + IVSized + CipherAuthenticated<TAG_SIZE>>( &self, ctx: Context<'c, C>, ) -> [u8; TAG_SIZE]

Generates an authentication tag for authenticated ciphers including GCM, CCM, and GMAC. Called after the all data has been encrypted/decrypted by payload.

source

pub async fn finish<'c, const TAG_SIZE: usize, C: Cipher<'c> + CipherSized + IVSized + CipherAuthenticated<TAG_SIZE>>( &mut self, ctx: Context<'c, C>, ) -> [u8; TAG_SIZE]
where DmaIn: DmaIn<T>, DmaOut: DmaOut<T>,

Called after the all data has been encrypted/decrypted by payload.

Auto Trait Implementations§

§

impl<'d, T, DmaIn, DmaOut> Freeze for Cryp<'d, T, DmaIn, DmaOut>
where T: Freeze, DmaIn: Freeze, DmaOut: Freeze,

§

impl<'d, T, DmaIn, DmaOut> RefUnwindSafe for Cryp<'d, T, DmaIn, DmaOut>
where T: RefUnwindSafe, DmaIn: RefUnwindSafe, DmaOut: RefUnwindSafe,

§

impl<'d, T, DmaIn, DmaOut> Send for Cryp<'d, T, DmaIn, DmaOut>
where DmaIn: Send, DmaOut: Send,

§

impl<'d, T, DmaIn, DmaOut> Sync for Cryp<'d, T, DmaIn, DmaOut>
where T: Sync, DmaIn: Sync, DmaOut: Sync,

§

impl<'d, T, DmaIn, DmaOut> Unpin for Cryp<'d, T, DmaIn, DmaOut>
where T: Unpin, DmaIn: Unpin, DmaOut: Unpin,

§

impl<'d, T, DmaIn = NoDma, DmaOut = NoDma> !UnwindSafe for Cryp<'d, T, DmaIn, DmaOut>

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.