pub struct Sm4Cipher { /* private fields */ }Expand description
SM4 cipher with pre-computed round keys.
Sm4Cipher zeroizes its round-key buffer on drop via the workspace
zeroize policy. Construction runs the key schedule (32 round keys
× secret-key-touching S-box invocations); see the W1 dudect target
ct_sm4_key_schedule.
Implementations§
Source§impl Sm4Cipher
impl Sm4Cipher
Sourcepub fn new(key: &[u8; 16]) -> Self
pub fn new(key: &[u8; 16]) -> Self
Construct a cipher from a 128-bit key and run the key schedule.
Sourcepub fn encrypt_block(&self, block: &mut [u8; 16])
pub fn encrypt_block(&self, block: &mut [u8; 16])
Encrypt one 16-byte block in place.
Sourcepub fn decrypt_block(&self, block: &mut [u8; 16])
pub fn decrypt_block(&self, block: &mut [u8; 16])
Decrypt one 16-byte block in place.
Sourcepub fn encrypt_blocks(&self, blocks: &mut [[u8; 16]])
pub fn encrypt_blocks(&self, blocks: &mut [[u8; 16]])
v0.7 W1 — Encrypt N 16-byte blocks in place. Byte-identical
to calling encrypt_block N times; under the
sm4-bitsliced-simd feature this fans the SM4 round loop
across the SIMD register width (8-block batches on x86_64
AVX2 via sbox_x32, 4-block batches on aarch64 NEON via
sbox_x16). blocks.len() may be any value including zero;
the tail after the largest multiple of SIMD_BATCH falls
back to per-block encrypt_block. Cross-checked in
tests/sm4_batch_api.rs.
Sourcepub fn decrypt_blocks(&self, blocks: &mut [[u8; 16]])
pub fn decrypt_blocks(&self, blocks: &mut [[u8; 16]])
v0.7 W1 — Decrypt N 16-byte blocks in place. Symmetric
counterpart of encrypt_blocks; see that method’s
docstring for the SIMD-fanout posture.
Trait Implementations§
Source§impl BlockCipher for Sm4Cipher
impl BlockCipher for Sm4Cipher
Source§impl BlockDecrypt for Sm4Cipher
impl BlockDecrypt for Sm4Cipher
Source§fn decrypt_with_backend(
&self,
f: impl BlockClosure<BlockSize = Self::BlockSize>,
)
fn decrypt_with_backend( &self, f: impl BlockClosure<BlockSize = Self::BlockSize>, )
Source§fn decrypt_block_inout(
&self,
block: InOut<'_, '_, GenericArray<u8, Self::BlockSize>>,
)
fn decrypt_block_inout( &self, block: InOut<'_, '_, GenericArray<u8, Self::BlockSize>>, )
inout block.Source§fn decrypt_blocks_inout(
&self,
blocks: InOutBuf<'_, '_, GenericArray<u8, Self::BlockSize>>,
)
fn decrypt_blocks_inout( &self, blocks: InOutBuf<'_, '_, GenericArray<u8, Self::BlockSize>>, )
inout blocks.Source§fn decrypt_block(&self, block: &mut GenericArray<u8, Self::BlockSize>)
fn decrypt_block(&self, block: &mut GenericArray<u8, Self::BlockSize>)
Source§fn decrypt_block_b2b(
&self,
in_block: &GenericArray<u8, Self::BlockSize>,
out_block: &mut GenericArray<u8, Self::BlockSize>,
)
fn decrypt_block_b2b( &self, in_block: &GenericArray<u8, Self::BlockSize>, out_block: &mut GenericArray<u8, Self::BlockSize>, )
in_block and write result to out_block.Source§fn decrypt_blocks(&self, blocks: &mut [GenericArray<u8, Self::BlockSize>])
fn decrypt_blocks(&self, blocks: &mut [GenericArray<u8, Self::BlockSize>])
Source§fn decrypt_blocks_b2b(
&self,
in_blocks: &[GenericArray<u8, Self::BlockSize>],
out_blocks: &mut [GenericArray<u8, Self::BlockSize>],
) -> Result<(), NotEqualError>
fn decrypt_blocks_b2b( &self, in_blocks: &[GenericArray<u8, Self::BlockSize>], out_blocks: &mut [GenericArray<u8, Self::BlockSize>], ) -> Result<(), NotEqualError>
Source§impl BlockEncrypt for Sm4Cipher
impl BlockEncrypt for Sm4Cipher
Source§fn encrypt_with_backend(
&self,
f: impl BlockClosure<BlockSize = Self::BlockSize>,
)
fn encrypt_with_backend( &self, f: impl BlockClosure<BlockSize = Self::BlockSize>, )
Source§fn encrypt_block_inout(
&self,
block: InOut<'_, '_, GenericArray<u8, Self::BlockSize>>,
)
fn encrypt_block_inout( &self, block: InOut<'_, '_, GenericArray<u8, Self::BlockSize>>, )
inout block.Source§fn encrypt_blocks_inout(
&self,
blocks: InOutBuf<'_, '_, GenericArray<u8, Self::BlockSize>>,
)
fn encrypt_blocks_inout( &self, blocks: InOutBuf<'_, '_, GenericArray<u8, Self::BlockSize>>, )
inout blocks.Source§fn encrypt_block(&self, block: &mut GenericArray<u8, Self::BlockSize>)
fn encrypt_block(&self, block: &mut GenericArray<u8, Self::BlockSize>)
Source§fn encrypt_block_b2b(
&self,
in_block: &GenericArray<u8, Self::BlockSize>,
out_block: &mut GenericArray<u8, Self::BlockSize>,
)
fn encrypt_block_b2b( &self, in_block: &GenericArray<u8, Self::BlockSize>, out_block: &mut GenericArray<u8, Self::BlockSize>, )
in_block and write result to out_block.Source§fn encrypt_blocks(&self, blocks: &mut [GenericArray<u8, Self::BlockSize>])
fn encrypt_blocks(&self, blocks: &mut [GenericArray<u8, Self::BlockSize>])
Source§fn encrypt_blocks_b2b(
&self,
in_blocks: &[GenericArray<u8, Self::BlockSize>],
out_blocks: &mut [GenericArray<u8, Self::BlockSize>],
) -> Result<(), NotEqualError>
fn encrypt_blocks_b2b( &self, in_blocks: &[GenericArray<u8, Self::BlockSize>], out_blocks: &mut [GenericArray<u8, Self::BlockSize>], ) -> Result<(), NotEqualError>
Source§impl BlockSizeUser for Sm4Cipher
impl BlockSizeUser for Sm4Cipher
Source§impl KeyInit for Sm4Cipher
impl KeyInit for Sm4Cipher
Source§fn new_from_slice(key: &[u8]) -> Result<Self, InvalidLength>
fn new_from_slice(key: &[u8]) -> Result<Self, InvalidLength>
Source§impl KeySizeUser for Sm4Cipher
impl KeySizeUser for Sm4Cipher
impl BlockCipher for Sm4Cipher
Auto Trait Implementations§
impl Freeze for Sm4Cipher
impl RefUnwindSafe for Sm4Cipher
impl Send for Sm4Cipher
impl Sync for Sm4Cipher
impl Unpin for Sm4Cipher
impl UnsafeUnpin for Sm4Cipher
impl UnwindSafe for Sm4Cipher
Blanket Implementations§
Source§impl<Alg> BlockDecryptMut for Algwhere
Alg: BlockDecrypt,
impl<Alg> BlockDecryptMut for Algwhere
Alg: BlockDecrypt,
Source§fn decrypt_with_backend_mut(
&mut self,
f: impl BlockClosure<BlockSize = <Alg as BlockSizeUser>::BlockSize>,
)
fn decrypt_with_backend_mut( &mut self, f: impl BlockClosure<BlockSize = <Alg as BlockSizeUser>::BlockSize>, )
Source§fn decrypt_block_inout_mut(
&mut self,
block: InOut<'_, '_, GenericArray<u8, Self::BlockSize>>,
)
fn decrypt_block_inout_mut( &mut self, block: InOut<'_, '_, GenericArray<u8, Self::BlockSize>>, )
inout block.Source§fn decrypt_blocks_inout_mut(
&mut self,
blocks: InOutBuf<'_, '_, GenericArray<u8, Self::BlockSize>>,
)
fn decrypt_blocks_inout_mut( &mut self, blocks: InOutBuf<'_, '_, GenericArray<u8, Self::BlockSize>>, )
inout blocks.Source§fn decrypt_block_mut(&mut self, block: &mut GenericArray<u8, Self::BlockSize>)
fn decrypt_block_mut(&mut self, block: &mut GenericArray<u8, Self::BlockSize>)
Source§fn decrypt_block_b2b_mut(
&mut self,
in_block: &GenericArray<u8, Self::BlockSize>,
out_block: &mut GenericArray<u8, Self::BlockSize>,
)
fn decrypt_block_b2b_mut( &mut self, in_block: &GenericArray<u8, Self::BlockSize>, out_block: &mut GenericArray<u8, Self::BlockSize>, )
in_block and write result to out_block.Source§fn decrypt_blocks_mut(
&mut self,
blocks: &mut [GenericArray<u8, Self::BlockSize>],
)
fn decrypt_blocks_mut( &mut self, blocks: &mut [GenericArray<u8, Self::BlockSize>], )
Source§fn decrypt_blocks_b2b_mut(
&mut self,
in_blocks: &[GenericArray<u8, Self::BlockSize>],
out_blocks: &mut [GenericArray<u8, Self::BlockSize>],
) -> Result<(), NotEqualError>
fn decrypt_blocks_b2b_mut( &mut self, in_blocks: &[GenericArray<u8, Self::BlockSize>], out_blocks: &mut [GenericArray<u8, Self::BlockSize>], ) -> Result<(), NotEqualError>
Source§impl<Alg> BlockEncryptMut for Algwhere
Alg: BlockEncrypt,
impl<Alg> BlockEncryptMut for Algwhere
Alg: BlockEncrypt,
Source§fn encrypt_with_backend_mut(
&mut self,
f: impl BlockClosure<BlockSize = <Alg as BlockSizeUser>::BlockSize>,
)
fn encrypt_with_backend_mut( &mut self, f: impl BlockClosure<BlockSize = <Alg as BlockSizeUser>::BlockSize>, )
Source§fn encrypt_block_inout_mut(
&mut self,
block: InOut<'_, '_, GenericArray<u8, Self::BlockSize>>,
)
fn encrypt_block_inout_mut( &mut self, block: InOut<'_, '_, GenericArray<u8, Self::BlockSize>>, )
inout block.Source§fn encrypt_blocks_inout_mut(
&mut self,
blocks: InOutBuf<'_, '_, GenericArray<u8, Self::BlockSize>>,
)
fn encrypt_blocks_inout_mut( &mut self, blocks: InOutBuf<'_, '_, GenericArray<u8, Self::BlockSize>>, )
inout blocks.Source§fn encrypt_block_mut(&mut self, block: &mut GenericArray<u8, Self::BlockSize>)
fn encrypt_block_mut(&mut self, block: &mut GenericArray<u8, Self::BlockSize>)
Source§fn encrypt_block_b2b_mut(
&mut self,
in_block: &GenericArray<u8, Self::BlockSize>,
out_block: &mut GenericArray<u8, Self::BlockSize>,
)
fn encrypt_block_b2b_mut( &mut self, in_block: &GenericArray<u8, Self::BlockSize>, out_block: &mut GenericArray<u8, Self::BlockSize>, )
in_block and write result to out_block.