libsodium (1.0.19)

(root)/
include/
sodium/
crypto_stream_chacha20.h
       1  #ifndef crypto_stream_chacha20_H
       2  #define crypto_stream_chacha20_H
       3  
       4  /*
       5   *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.
       6   *  While it provides some protection against eavesdropping, it does NOT
       7   *  provide any security against active attacks.
       8   *  Unless you know what you're doing, what you are looking for is probably
       9   *  the crypto_box functions.
      10   */
      11  
      12  #include <stddef.h>
      13  #include <stdint.h>
      14  #include "export.h"
      15  
      16  #ifdef __cplusplus
      17  # ifdef __GNUC__
      18  #  pragma GCC diagnostic ignored "-Wlong-long"
      19  # endif
      20  extern "C" {
      21  #endif
      22  
      23  #define crypto_stream_chacha20_KEYBYTES 32U
      24  SODIUM_EXPORT
      25  size_t crypto_stream_chacha20_keybytes(void);
      26  
      27  #define crypto_stream_chacha20_NONCEBYTES 8U
      28  SODIUM_EXPORT
      29  size_t crypto_stream_chacha20_noncebytes(void);
      30  
      31  #define crypto_stream_chacha20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX
      32  SODIUM_EXPORT
      33  size_t crypto_stream_chacha20_messagebytes_max(void);
      34  
      35  /* ChaCha20 with a 64-bit nonce and a 64-bit counter, as originally designed */
      36  
      37  SODIUM_EXPORT
      38  int crypto_stream_chacha20(unsigned char *c, unsigned long long clen,
      39                             const unsigned char *n, const unsigned char *k)
      40              __attribute__ ((nonnull));
      41  
      42  SODIUM_EXPORT
      43  int crypto_stream_chacha20_xor(unsigned char *c, const unsigned char *m,
      44                                 unsigned long long mlen, const unsigned char *n,
      45                                 const unsigned char *k)
      46              __attribute__ ((nonnull));
      47  
      48  SODIUM_EXPORT
      49  int crypto_stream_chacha20_xor_ic(unsigned char *c, const unsigned char *m,
      50                                    unsigned long long mlen,
      51                                    const unsigned char *n, uint64_t ic,
      52                                    const unsigned char *k)
      53              __attribute__ ((nonnull));
      54  
      55  SODIUM_EXPORT
      56  void crypto_stream_chacha20_keygen(unsigned char k[crypto_stream_chacha20_KEYBYTES])
      57              __attribute__ ((nonnull));
      58  
      59  /* ChaCha20 with a 96-bit nonce and a 32-bit counter (IETF) */
      60  
      61  #define crypto_stream_chacha20_ietf_KEYBYTES 32U
      62  SODIUM_EXPORT
      63  size_t crypto_stream_chacha20_ietf_keybytes(void);
      64  
      65  #define crypto_stream_chacha20_ietf_NONCEBYTES 12U
      66  SODIUM_EXPORT
      67  size_t crypto_stream_chacha20_ietf_noncebytes(void);
      68  
      69  #define crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX \
      70      SODIUM_MIN(SODIUM_SIZE_MAX, 64ULL * (1ULL << 32))
      71  SODIUM_EXPORT
      72  size_t crypto_stream_chacha20_ietf_messagebytes_max(void);
      73  
      74  SODIUM_EXPORT
      75  int crypto_stream_chacha20_ietf(unsigned char *c, unsigned long long clen,
      76                                  const unsigned char *n, const unsigned char *k)
      77              __attribute__ ((nonnull));
      78  
      79  SODIUM_EXPORT
      80  int crypto_stream_chacha20_ietf_xor(unsigned char *c, const unsigned char *m,
      81                                      unsigned long long mlen, const unsigned char *n,
      82                                      const unsigned char *k)
      83              __attribute__ ((nonnull));
      84  
      85  SODIUM_EXPORT
      86  int crypto_stream_chacha20_ietf_xor_ic(unsigned char *c, const unsigned char *m,
      87                                         unsigned long long mlen,
      88                                         const unsigned char *n, uint32_t ic,
      89                                         const unsigned char *k)
      90              __attribute__ ((nonnull));
      91  
      92  SODIUM_EXPORT
      93  void crypto_stream_chacha20_ietf_keygen(unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES])
      94              __attribute__ ((nonnull));
      95  
      96  /* Aliases */
      97  
      98  #define crypto_stream_chacha20_IETF_KEYBYTES crypto_stream_chacha20_ietf_KEYBYTES
      99  #define crypto_stream_chacha20_IETF_NONCEBYTES crypto_stream_chacha20_ietf_NONCEBYTES
     100  #define crypto_stream_chacha20_IETF_MESSAGEBYTES_MAX crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX
     101  
     102  #ifdef __cplusplus
     103  }
     104  #endif
     105  
     106  #endif