Home | History | Annotate | Line # | Download | only in sodium
      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 
     41 SODIUM_EXPORT
     42 int crypto_stream_chacha20_xor(unsigned char *c, const unsigned char *m,
     43                                unsigned long long mlen, const unsigned char *n,
     44                                const unsigned char *k);
     45 
     46 SODIUM_EXPORT
     47 int crypto_stream_chacha20_xor_ic(unsigned char *c, const unsigned char *m,
     48                                   unsigned long long mlen,
     49                                   const unsigned char *n, uint64_t ic,
     50                                   const unsigned char *k);
     51 
     52 SODIUM_EXPORT
     53 void crypto_stream_chacha20_keygen(unsigned char k[crypto_stream_chacha20_KEYBYTES]);
     54 
     55 /* ChaCha20 with a 96-bit nonce and a 32-bit counter (IETF) */
     56 
     57 #define crypto_stream_chacha20_ietf_KEYBYTES 32U
     58 SODIUM_EXPORT
     59 size_t crypto_stream_chacha20_ietf_keybytes(void);
     60 
     61 #define crypto_stream_chacha20_ietf_NONCEBYTES 12U
     62 SODIUM_EXPORT
     63 size_t crypto_stream_chacha20_ietf_noncebytes(void);
     64 
     65 #define crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX \
     66     SODIUM_MIN(SODIUM_SIZE_MAX, 64ULL * (1ULL << 32))
     67 SODIUM_EXPORT
     68 size_t crypto_stream_chacha20_ietf_messagebytes_max(void);
     69 
     70 SODIUM_EXPORT
     71 int crypto_stream_chacha20_ietf(unsigned char *c, unsigned long long clen,
     72                                 const unsigned char *n, const unsigned char *k);
     73 
     74 SODIUM_EXPORT
     75 int crypto_stream_chacha20_ietf_xor(unsigned char *c, const unsigned char *m,
     76                                     unsigned long long mlen, const unsigned char *n,
     77                                     const unsigned char *k);
     78 
     79 SODIUM_EXPORT
     80 int crypto_stream_chacha20_ietf_xor_ic(unsigned char *c, const unsigned char *m,
     81                                        unsigned long long mlen,
     82                                        const unsigned char *n, uint32_t ic,
     83                                        const unsigned char *k);
     84 
     85 SODIUM_EXPORT
     86 void crypto_stream_chacha20_ietf_keygen(unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES]);
     87 
     88 /* Aliases */
     89 
     90 #define crypto_stream_chacha20_IETF_KEYBYTES crypto_stream_chacha20_ietf_KEYBYTES
     91 #define crypto_stream_chacha20_IETF_NONCEBYTES crypto_stream_chacha20_ietf_NONCEBYTES
     92 #define crypto_stream_chacha20_IETF_MESSAGEBYTES_MAX crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX
     93 
     94 #ifdef __cplusplus
     95 }
     96 #endif
     97 
     98 #endif
     99