INNER CODE UNIT · Rust
new_internal
RustCrypto/stream-ciphers · chacha20/src/lib.rs:139
fn new_internal(key: &[u8; 32], iv: &[u8]) -> Self {
assert!(matches!(iv.len(), 4 | 8 | 12));
let mut state = [0u32; STATE_WORDS];
let ctr_size = size_of::<V::Counter>() / size_of::<u32>();
let (const_dst, state_rem) = state.split_at_mut(4);
let (key_dst, state_rem) = state_rem.split_at_mut(8);
let (_ctr_dst, iv_dst) = state_rem.split_at_mut(ctr_size);
const_dst.copy_from_slice(&CONSTANTS);
// TODO(tarcieri): when MSRV 1.88, use `[T]::as_chunks` to avoid panic
#[allow(clippy::unwrap_used, reason = "MSRV TODO")]
{
for (src, dst) in key.chunks_exact(4).zip(key_dst) {
*dst = u32::from_le_bytes(src.try_into().unwrap());
}