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>
impl<'d, T: Instance, DmaIn, DmaOut> Cryp<'d, T, DmaIn, DmaOut>
sourcepub 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
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.
sourcepub fn start_blocking<'c, C: Cipher<'c> + CipherSized + IVSized>(
&self,
cipher: &'c C,
dir: Direction,
) -> Context<'c, C>
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.
sourcepub async fn start<'c, C: Cipher<'c> + CipherSized + IVSized>(
&mut self,
cipher: &'c C,
dir: Direction,
) -> Context<'c, C>
pub async fn start<'c, C: Cipher<'c> + CipherSized + IVSized>( &mut self, cipher: &'c C, dir: Direction, ) -> Context<'c, C>
Start a new encrypt or decrypt operation for the given cipher.
sourcepub 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,
)
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
.
sourcepub 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,
)
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, )
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
.
sourcepub fn payload_blocking<'c, C: Cipher<'c> + CipherSized + IVSized>(
&self,
ctx: &mut Context<'c, C>,
input: &[u8],
output: &mut [u8],
last_block: bool,
)
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
.
sourcepub async fn payload<'c, C: Cipher<'c> + CipherSized + IVSized>(
&mut self,
ctx: &mut Context<'c, C>,
input: &[u8],
output: &mut [u8],
last_block: bool,
)
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, )
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
.
sourcepub fn finish_blocking<'c, const TAG_SIZE: usize, C: Cipher<'c> + CipherSized + IVSized + CipherAuthenticated<TAG_SIZE>>(
&self,
ctx: Context<'c, C>,
) -> [u8; TAG_SIZE]
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
.