[−][src]Struct chacha20::XChaCha20
feature="xchacha20"
only.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]
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]
fn apply_keystream(&mut self, data: &mut [u8])
[src]
impl SyncStreamCipherSeek for XChaCha20
[src]
fn current_pos(&self) -> u64
[src]
fn seek(&mut self, pos: u64)
[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,
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
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.
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>,