Struct chacha20::XChaCha20 [−][src]
XChaCha20 is a ChaCha20 variant with an extended 192-bit (24-byte) nonce.
The construction is an adaptation of the same techniques used by XSalsa20 as described in the paper “Extending the Salsa20 Nonce”, applied to the 96-bit nonce variant of ChaCha20, and derive a separate subkey/nonce for each extended nonce:
https://cr.yp.to/snuffle/xsalsa-20081128.pdf
No authoritative specification exists for XChaCha20, however the construction has “rough consensus and running code” in the form of several interoperable libraries and protocols (e.g. libsodium, WireGuard) and is documented in an (expired) IETF draft:
https://tools.ietf.org/html/draft-arciszewski-xchacha-03
The xchacha20
Cargo feature must be enabled in order to use this
(which it is by default).
Trait Implementations
impl NewStreamCipher for XChaCha20
[src]
type KeySize = U32
Key size in bytes
type NonceSize = U24
Nonce size in bytes
fn new(key: &Key, nonce: &XNonce) -> Self
[src]
pub fn new_var(key: &[u8], nonce: &[u8]) -> Result<Self, InvalidKeyNonceLength>
[src]
impl SyncStreamCipher for XChaCha20
[src]
fn try_apply_keystream(&mut self, data: &mut [u8]) -> Result<(), LoopError>
[src]
pub fn apply_keystream(&mut self, data: &mut [u8])
[src]
impl SyncStreamCipherSeek for XChaCha20
[src]
Auto Trait Implementations
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Same<T> for T
[src]
type Output = T
Should always be Self
impl<C> StreamCipher for C where
C: SyncStreamCipher,
[src]
C: SyncStreamCipher,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,