1 #ifndef crypto_box_H
2 #define crypto_box_H
3 
4 /*
5  * THREAD SAFETY: crypto_box_keypair() is thread-safe,
6  * provided that sodium_init() was called before.
7  *
8  * Other functions are always thread-safe.
9  */
10 
11 #include <stddef.h>
12 
13 #include "crypto_box_curve25519xsalsa20poly1305.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_box_SEEDBYTES crypto_box_curve25519xsalsa20poly1305_SEEDBYTES
24 SODIUM_EXPORT
25 size_t  crypto_box_seedbytes(void);
26 
27 #define crypto_box_PUBLICKEYBYTES crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES
28 SODIUM_EXPORT
29 size_t  crypto_box_publickeybytes(void);
30 
31 #define crypto_box_SECRETKEYBYTES crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES
32 SODIUM_EXPORT
33 size_t  crypto_box_secretkeybytes(void);
34 
35 #define crypto_box_NONCEBYTES crypto_box_curve25519xsalsa20poly1305_NONCEBYTES
36 SODIUM_EXPORT
37 size_t  crypto_box_noncebytes(void);
38 
39 #define crypto_box_MACBYTES crypto_box_curve25519xsalsa20poly1305_MACBYTES
40 SODIUM_EXPORT
41 size_t  crypto_box_macbytes(void);
42 
43 #define crypto_box_MESSAGEBYTES_MAX crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX
44 SODIUM_EXPORT
45 size_t  crypto_box_messagebytes_max(void);
46 
47 #define crypto_box_PRIMITIVE "curve25519xsalsa20poly1305"
48 SODIUM_EXPORT
49 const char *crypto_box_primitive(void);
50 
51 SODIUM_EXPORT
52 int crypto_box_seed_keypair(unsigned char *pk, unsigned char *sk,
53                             const unsigned char *seed)
54             __attribute__ ((nonnull));
55 
56 SODIUM_EXPORT
57 int crypto_box_keypair(unsigned char *pk, unsigned char *sk)
58             __attribute__ ((nonnull));
59 
60 SODIUM_EXPORT
61 int crypto_box_easy(unsigned char *c, const unsigned char *m,
62                     unsigned long long mlen, const unsigned char *n,
63                     const unsigned char *pk, const unsigned char *sk)
64             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6)));
65 
66 SODIUM_EXPORT
67 int crypto_box_open_easy(unsigned char *m, const unsigned char *c,
68                          unsigned long long clen, const unsigned char *n,
69                          const unsigned char *pk, const unsigned char *sk)
70             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6)));
71 
72 SODIUM_EXPORT
73 int crypto_box_detached(unsigned char *c, unsigned char *mac,
74                         const unsigned char *m, unsigned long long mlen,
75                         const unsigned char *n, const unsigned char *pk,
76                         const unsigned char *sk)
77             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 2, 5, 6, 7)));
78 
79 SODIUM_EXPORT
80 int crypto_box_open_detached(unsigned char *m, const unsigned char *c,
81                              const unsigned char *mac,
82                              unsigned long long clen,
83                              const unsigned char *n,
84                              const unsigned char *pk,
85                              const unsigned char *sk)
86             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6, 7)));
87 
88 /* -- Precomputation interface -- */
89 
90 #define crypto_box_BEFORENMBYTES crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES
91 SODIUM_EXPORT
92 size_t  crypto_box_beforenmbytes(void);
93 
94 SODIUM_EXPORT
95 int crypto_box_beforenm(unsigned char *k, const unsigned char *pk,
96                         const unsigned char *sk)
97             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull));
98 
99 SODIUM_EXPORT
100 int crypto_box_easy_afternm(unsigned char *c, const unsigned char *m,
101                             unsigned long long mlen, const unsigned char *n,
102                             const unsigned char *k) __attribute__ ((nonnull(1, 4, 5)));
103 
104 SODIUM_EXPORT
105 int crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c,
106                                  unsigned long long clen, const unsigned char *n,
107                                  const unsigned char *k)
108             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5)));
109 
110 SODIUM_EXPORT
111 int crypto_box_detached_afternm(unsigned char *c, unsigned char *mac,
112                                 const unsigned char *m, unsigned long long mlen,
113                                 const unsigned char *n, const unsigned char *k)
114             __attribute__ ((nonnull(1, 2, 5, 6)));
115 
116 SODIUM_EXPORT
117 int crypto_box_open_detached_afternm(unsigned char *m, const unsigned char *c,
118                                      const unsigned char *mac,
119                                      unsigned long long clen, const unsigned char *n,
120                                      const unsigned char *k)
121             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6)));
122 
123 /* -- Ephemeral SK interface -- */
124 
125 #define crypto_box_SEALBYTES (crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES)
126 SODIUM_EXPORT
127 size_t crypto_box_sealbytes(void);
128 
129 SODIUM_EXPORT
130 int crypto_box_seal(unsigned char *c, const unsigned char *m,
131                     unsigned long long mlen, const unsigned char *pk)
132             __attribute__ ((nonnull(1, 4)));
133 
134 SODIUM_EXPORT
135 int crypto_box_seal_open(unsigned char *m, const unsigned char *c,
136                          unsigned long long clen,
137                          const unsigned char *pk, const unsigned char *sk)
138             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5)));
139 
140 /* -- NaCl compatibility interface ; Requires padding -- */
141 
142 #define crypto_box_ZEROBYTES crypto_box_curve25519xsalsa20poly1305_ZEROBYTES
143 SODIUM_EXPORT
144 size_t  crypto_box_zerobytes(void);
145 
146 #define crypto_box_BOXZEROBYTES crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES
147 SODIUM_EXPORT
148 size_t  crypto_box_boxzerobytes(void);
149 
150 SODIUM_EXPORT
151 int crypto_box(unsigned char *c, const unsigned char *m,
152                unsigned long long mlen, const unsigned char *n,
153                const unsigned char *pk, const unsigned char *sk)
154             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6)));
155 
156 SODIUM_EXPORT
157 int crypto_box_open(unsigned char *m, const unsigned char *c,
158                     unsigned long long clen, const unsigned char *n,
159                     const unsigned char *pk, const unsigned char *sk)
160             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6)));
161 
162 SODIUM_EXPORT
163 int crypto_box_afternm(unsigned char *c, const unsigned char *m,
164                        unsigned long long mlen, const unsigned char *n,
165                        const unsigned char *k) __attribute__ ((nonnull(1, 4, 5)));
166 
167 SODIUM_EXPORT
168 int crypto_box_open_afternm(unsigned char *m, const unsigned char *c,
169                             unsigned long long clen, const unsigned char *n,
170                             const unsigned char *k)
171             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5)));
172 
173 #ifdef __cplusplus
174 }
175 #endif
176 
177 #endif
178