     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49

    // copyright 2019 Kaz Wesley

    //! Pure Rust ChaCha with SIMD optimizations.
    //!
    //! Stream-cipher usage:
    //! ```
    //! extern crate c2_chacha;
    //!
    //! use c2_chacha::stream_cipher::{NewStreamCipher, SyncStreamCipher, SyncStreamCipherSeek};
    //! use c2_chacha::{ChaCha20, ChaCha12};
    //!
    //! let key = b"very secret key-the most secret.";
    //! let iv = b"my nonce";
    //! let plaintext = b"The quick brown fox jumps over the lazy dog.";
    //!
    //! let mut buffer = plaintext.to_vec();
    //! // create cipher instance
    //! let mut cipher = ChaCha20::new_var(key, iv).unwrap();
    //! // apply keystream (encrypt)
    //! cipher.apply_keystream(&mut buffer);
    //! // and decrypt it back
    //! cipher.seek(0);
    //! cipher.apply_keystream(&mut buffer);
    //! // stream ciphers can be used with streaming messages
    //! let mut cipher = ChaCha12::new_var(key, iv).unwrap();
    //! for chunk in buffer.chunks_mut(3) {
    //!     cipher.apply_keystream(chunk);
    //! }
    //! ```

    #![cfg_attr(not(feature = "std"), no_std)]

    #[cfg(test)]
    #[macro_use]
    extern crate hex_literal;

    #[cfg(feature = "std")]
    #[macro_use]
    extern crate lazy_static;

    #[macro_use]
    extern crate ppv_lite86;

    pub mod guts;

    #[cfg(feature = "rustcrypto_api")]
    mod rustcrypto_impl;
    #[cfg(feature = "rustcrypto_api")]
    pub use self::rustcrypto_impl::{stream_cipher, ChaCha12, ChaCha20, ChaCha8, Ietf, XChaCha20};

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g., `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g., `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g., `str,u8` or `String,struct:Vec,test`)