[][src]Struct chacha20poly1305::XChaCha20Poly1305

pub struct XChaCha20Poly1305 { /* fields omitted */ }
This is supported on crate feature xchacha20poly1305 only.

ChaCha20Poly1305 variant with an extended 192-bit (24-byte) nonce.

The xchacha20poly1305 Cargo feature must be enabled in order to use this (which it is by default).

The construction is an adaptation of the same techniques used by XSalsa20 as described in the paper "Extending the Salsa20 Nonce" to the 96-bit nonce variant of ChaCha20, which derive a separate subkey/nonce for each extended nonce:

https://cr.yp.to/snuffle/xsalsa-20081128.pdf

No authoritative specification exists for XChaCha20Poly1305, 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, which also applies the proof from the XSalsa20 paper to the construction in order to demonstrate that XChaCha20 is secure if ChaCha20 is secure (see Section 3.1):

https://tools.ietf.org/html/draft-arciszewski-xchacha-03

It is worth noting that NaCl/libsodium's default "secretbox" algorithm is XSalsa20Poly1305, not XChaCha20Poly1305, and thus not compatible with this library. If you are interested in that construction, please see the xsalsa20poly1305 crate:

https://docs.rs/xsalsa20poly1305/

Usage

use chacha20poly1305::{XChaCha20Poly1305, Key, XNonce};
use chacha20poly1305::aead::{Aead, NewAead};

let key = Key::from_slice(b"an example very very secret key."); // 32-bytes
let aead = XChaCha20Poly1305::new(key);

let nonce = XNonce::from_slice(b"extra long unique nonce!"); // 24-bytes; unique
let ciphertext = aead.encrypt(nonce, b"plaintext message".as_ref()).expect("encryption failure!");
let plaintext = aead.decrypt(nonce, ciphertext.as_ref()).expect("decryption failure!");
assert_eq!(&plaintext, b"plaintext message");

Trait Implementations

impl AeadInPlace for XChaCha20Poly1305[src]

type NonceSize = U24

The length of a nonce.

type TagSize = U16

The maximum length of the nonce.

type CiphertextOverhead = U0

The upper bound amount of additional space required to support a ciphertext vs. a plaintext. Read more

impl Clone for XChaCha20Poly1305[src]

impl Drop for XChaCha20Poly1305[src]

impl NewAead for XChaCha20Poly1305[src]

type KeySize = U32

The size of the key array required by this algorithm.

Auto Trait Implementations

Blanket Implementations

impl<Alg> Aead for Alg where
    Alg: AeadInPlace
[src]

type NonceSize = <Alg as AeadInPlace>::NonceSize

The length of a nonce.

type TagSize = <Alg as AeadInPlace>::TagSize

The maximum length of the nonce.

type CiphertextOverhead = <Alg as AeadInPlace>::CiphertextOverhead

The upper bound amount of additional space required to support a ciphertext vs. a plaintext. Read more

impl<Alg> AeadMut for Alg where
    Alg: AeadMutInPlace
[src]

type NonceSize = <Alg as AeadMutInPlace>::NonceSize

The length of a nonce.

type TagSize = <Alg as AeadMutInPlace>::TagSize

The maximum length of the nonce.

type CiphertextOverhead = <Alg as AeadMutInPlace>::CiphertextOverhead

The upper bound amount of additional space required to support a ciphertext vs. a plaintext. Read more

impl<Alg> AeadMutInPlace for Alg where
    Alg: AeadInPlace
[src]

type NonceSize = <Alg as AeadInPlace>::NonceSize

The length of a nonce.

type TagSize = <Alg as AeadInPlace>::TagSize

The maximum length of the nonce.

type CiphertextOverhead = <Alg as AeadInPlace>::CiphertextOverhead

The upper bound amount of additional space required to support a ciphertext vs. a plaintext. Read more

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.