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 
55 SODIUM_EXPORT
56 int crypto_box_keypair(unsigned char *pk, unsigned char *sk);
57 
58 SODIUM_EXPORT
59 int crypto_box_easy(unsigned char *c, const unsigned char *m,
60                     unsigned long long mlen, const unsigned char *n,
61                     const unsigned char *pk, const unsigned char *sk)
62             __attribute__ ((warn_unused_result));
63 
64 SODIUM_EXPORT
65 int crypto_box_open_easy(unsigned char *m, const unsigned char *c,
66                          unsigned long long clen, const unsigned char *n,
67                          const unsigned char *pk, const unsigned char *sk)
68             __attribute__ ((warn_unused_result));
69 
70 SODIUM_EXPORT
71 int crypto_box_detached(unsigned char *c, unsigned char *mac,
72                         const unsigned char *m, unsigned long long mlen,
73                         const unsigned char *n, const unsigned char *pk,
74                         const unsigned char *sk)
75             __attribute__ ((warn_unused_result));
76 
77 SODIUM_EXPORT
78 int crypto_box_open_detached(unsigned char *m, const unsigned char *c,
79                              const unsigned char *mac,
80                              unsigned long long clen,
81                              const unsigned char *n,
82                              const unsigned char *pk,
83                              const unsigned char *sk)
84             __attribute__ ((warn_unused_result));
85 
86 /* -- Precomputation interface -- */
87 
88 #define crypto_box_BEFORENMBYTES crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES
89 SODIUM_EXPORT
90 size_t  crypto_box_beforenmbytes(void);
91 
92 SODIUM_EXPORT
93 int crypto_box_beforenm(unsigned char *k, const unsigned char *pk,
94                         const unsigned char *sk)
95             __attribute__ ((warn_unused_result));
96 
97 SODIUM_EXPORT
98 int crypto_box_easy_afternm(unsigned char *c, const unsigned char *m,
99                             unsigned long long mlen, const unsigned char *n,
100                             const unsigned char *k);
101 
102 SODIUM_EXPORT
103 int crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c,
104                                  unsigned long long clen, const unsigned char *n,
105                                  const unsigned char *k)
106             __attribute__ ((warn_unused_result));
107 
108 SODIUM_EXPORT
109 int crypto_box_detached_afternm(unsigned char *c, unsigned char *mac,
110                                 const unsigned char *m, unsigned long long mlen,
111                                 const unsigned char *n, const unsigned char *k);
112 
113 SODIUM_EXPORT
114 int crypto_box_open_detached_afternm(unsigned char *m, const unsigned char *c,
115                                      const unsigned char *mac,
116                                      unsigned long long clen, const unsigned char *n,
117                                      const unsigned char *k)
118             __attribute__ ((warn_unused_result));
119 
120 /* -- Ephemeral SK interface -- */
121 
122 #define crypto_box_SEALBYTES (crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES)
123 SODIUM_EXPORT
124 size_t crypto_box_sealbytes(void);
125 
126 SODIUM_EXPORT
127 int crypto_box_seal(unsigned char *c, const unsigned char *m,
128                     unsigned long long mlen, const unsigned char *pk);
129 
130 SODIUM_EXPORT
131 int crypto_box_seal_open(unsigned char *m, const unsigned char *c,
132                          unsigned long long clen,
133                          const unsigned char *pk, const unsigned char *sk)
134             __attribute__ ((warn_unused_result));
135 
136 /* -- NaCl compatibility interface ; Requires padding -- */
137 
138 #define crypto_box_ZEROBYTES crypto_box_curve25519xsalsa20poly1305_ZEROBYTES
139 SODIUM_EXPORT
140 size_t  crypto_box_zerobytes(void);
141 
142 #define crypto_box_BOXZEROBYTES crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES
143 SODIUM_EXPORT
144 size_t  crypto_box_boxzerobytes(void);
145 
146 SODIUM_EXPORT
147 int crypto_box(unsigned char *c, const unsigned char *m,
148                unsigned long long mlen, const unsigned char *n,
149                const unsigned char *pk, const unsigned char *sk)
150             __attribute__ ((warn_unused_result));
151 
152 SODIUM_EXPORT
153 int crypto_box_open(unsigned char *m, const unsigned char *c,
154                     unsigned long long clen, const unsigned char *n,
155                     const unsigned char *pk, const unsigned char *sk)
156             __attribute__ ((warn_unused_result));
157 
158 SODIUM_EXPORT
159 int crypto_box_afternm(unsigned char *c, const unsigned char *m,
160                        unsigned long long mlen, const unsigned char *n,
161                        const unsigned char *k);
162 
163 SODIUM_EXPORT
164 int crypto_box_open_afternm(unsigned char *m, const unsigned char *c,
165                             unsigned long long clen, const unsigned char *n,
166                             const unsigned char *k)
167             __attribute__ ((warn_unused_result));
168 
169 #ifdef __cplusplus
170 }
171 #endif
172 
173 #endif
174