1 #ifndef crypto_box_curve25519xsalsa20poly1305_H
2 #define crypto_box_curve25519xsalsa20poly1305_H
3 
4 #include <stddef.h>
5 #include "crypto_stream_xsalsa20.h"
6 #include "export.h"
7 
8 #ifdef __cplusplus
9 # ifdef __GNUC__
10 #  pragma GCC diagnostic ignored "-Wlong-long"
11 # endif
12 extern "C" {
13 #endif
14 
15 #define crypto_box_curve25519xsalsa20poly1305_SEEDBYTES 32U
16 SODIUM_EXPORT
17 size_t crypto_box_curve25519xsalsa20poly1305_seedbytes(void);
18 
19 #define crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES 32U
20 SODIUM_EXPORT
21 size_t crypto_box_curve25519xsalsa20poly1305_publickeybytes(void);
22 
23 #define crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES 32U
24 SODIUM_EXPORT
25 size_t crypto_box_curve25519xsalsa20poly1305_secretkeybytes(void);
26 
27 #define crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES 32U
28 SODIUM_EXPORT
29 size_t crypto_box_curve25519xsalsa20poly1305_beforenmbytes(void);
30 
31 #define crypto_box_curve25519xsalsa20poly1305_NONCEBYTES 24U
32 SODIUM_EXPORT
33 size_t crypto_box_curve25519xsalsa20poly1305_noncebytes(void);
34 
35 #define crypto_box_curve25519xsalsa20poly1305_MACBYTES 16U
36 SODIUM_EXPORT
37 size_t crypto_box_curve25519xsalsa20poly1305_macbytes(void);
38 
39 /* Only for the libsodium API - The NaCl compatibility API would require BOXZEROBYTES extra bytes */
40 #define crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX \
41     (crypto_stream_xsalsa20_MESSAGEBYTES_MAX - crypto_box_curve25519xsalsa20poly1305_MACBYTES)
42 SODIUM_EXPORT
43 size_t crypto_box_curve25519xsalsa20poly1305_messagebytes_max(void);
44 
45 SODIUM_EXPORT
46 int crypto_box_curve25519xsalsa20poly1305_seed_keypair(unsigned char *pk,
47                                                        unsigned char *sk,
48                                                        const unsigned char *seed)
49             __attribute__ ((nonnull));
50 
51 SODIUM_EXPORT
52 int crypto_box_curve25519xsalsa20poly1305_keypair(unsigned char *pk,
53                                                   unsigned char *sk)
54             __attribute__ ((nonnull));
55 
56 SODIUM_EXPORT
57 int crypto_box_curve25519xsalsa20poly1305_beforenm(unsigned char *k,
58                                                    const unsigned char *pk,
59                                                    const unsigned char *sk)
60             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull));
61 
62 /* -- NaCl compatibility interface ; Requires padding -- */
63 
64 #define crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES 16U
65 SODIUM_EXPORT
66 size_t crypto_box_curve25519xsalsa20poly1305_boxzerobytes(void);
67 
68 #define crypto_box_curve25519xsalsa20poly1305_ZEROBYTES \
69     (crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES + \
70      crypto_box_curve25519xsalsa20poly1305_MACBYTES)
71 SODIUM_EXPORT
72 size_t crypto_box_curve25519xsalsa20poly1305_zerobytes(void);
73 
74 SODIUM_EXPORT
75 int crypto_box_curve25519xsalsa20poly1305(unsigned char *c,
76                                           const unsigned char *m,
77                                           unsigned long long mlen,
78                                           const unsigned char *n,
79                                           const unsigned char *pk,
80                                           const unsigned char *sk)
81             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6)));
82 
83 SODIUM_EXPORT
84 int crypto_box_curve25519xsalsa20poly1305_open(unsigned char *m,
85                                                const unsigned char *c,
86                                                unsigned long long clen,
87                                                const unsigned char *n,
88                                                const unsigned char *pk,
89                                                const unsigned char *sk)
90             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6)));
91 
92 SODIUM_EXPORT
93 int crypto_box_curve25519xsalsa20poly1305_afternm(unsigned char *c,
94                                                   const unsigned char *m,
95                                                   unsigned long long mlen,
96                                                   const unsigned char *n,
97                                                   const unsigned char *k)
98             __attribute__ ((nonnull(1, 4, 5)));
99 
100 SODIUM_EXPORT
101 int crypto_box_curve25519xsalsa20poly1305_open_afternm(unsigned char *m,
102                                                        const unsigned char *c,
103                                                        unsigned long long clen,
104                                                        const unsigned char *n,
105                                                        const unsigned char *k)
106             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5)));
107 
108 #ifdef __cplusplus
109 }
110 #endif
111 
112 #endif
113