1 #ifndef crypto_stream_salsa20_H
2 #define crypto_stream_salsa20_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_salsa20_KEYBYTES 32U
24 SODIUM_EXPORT
25 size_t crypto_stream_salsa20_keybytes(void);
26 
27 #define crypto_stream_salsa20_NONCEBYTES 8U
28 SODIUM_EXPORT
29 size_t crypto_stream_salsa20_noncebytes(void);
30 
31 #define crypto_stream_salsa20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX
32 SODIUM_EXPORT
33 size_t crypto_stream_salsa20_messagebytes_max(void);
34 
35 SODIUM_EXPORT
36 int crypto_stream_salsa20(unsigned char *c, unsigned long long clen,
37                           const unsigned char *n, const unsigned char *k);
38 
39 SODIUM_EXPORT
40 int crypto_stream_salsa20_xor(unsigned char *c, const unsigned char *m,
41                               unsigned long long mlen, const unsigned char *n,
42                               const unsigned char *k);
43 
44 SODIUM_EXPORT
45 int crypto_stream_salsa20_xor_ic(unsigned char *c, const unsigned char *m,
46                                  unsigned long long mlen,
47                                  const unsigned char *n, uint64_t ic,
48                                  const unsigned char *k);
49 
50 SODIUM_EXPORT
51 void crypto_stream_salsa20_keygen(unsigned char k[crypto_stream_salsa20_KEYBYTES]);
52 
53 #ifdef __cplusplus
54 }
55 #endif
56 
57 #endif
58