1 /*******************************************************************************
2 
3     D language bindings for libsodium's crypto_box.h
4 
5     License: ISC (see LICENSE.txt)
6 
7 *******************************************************************************/
8 
9 module libsodium.crypto_box;
10 
11 @nogc nothrow:
12 
13 import libsodium.export_;
14 import libsodium.crypto_box_curve25519xsalsa20poly1305;
15 
16 extern (C):
17 
18 /*
19  * THREAD SAFETY: crypto_box_keypair() is thread-safe,
20  * provided that sodium_init() was called before.
21  *
22  * Other functions are always thread-safe.
23  */
24 
25 enum crypto_box_SEEDBYTES = crypto_box_curve25519xsalsa20poly1305_SEEDBYTES;
26 size_t crypto_box_seedbytes ();
27 
28 enum crypto_box_PUBLICKEYBYTES = crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES;
29 size_t crypto_box_publickeybytes ();
30 
31 enum crypto_box_SECRETKEYBYTES = crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES;
32 size_t crypto_box_secretkeybytes ();
33 
34 enum crypto_box_NONCEBYTES = crypto_box_curve25519xsalsa20poly1305_NONCEBYTES;
35 size_t crypto_box_noncebytes ();
36 
37 enum crypto_box_MACBYTES = crypto_box_curve25519xsalsa20poly1305_MACBYTES;
38 size_t crypto_box_macbytes ();
39 
40 enum crypto_box_MESSAGEBYTES_MAX = crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX;
41 size_t crypto_box_messagebytes_max ();
42 
43 enum crypto_box_PRIMITIVE = "curve25519xsalsa20poly1305";
44 const(char)* crypto_box_primitive ();
45 
46 int crypto_box_seed_keypair (ubyte* pk, ubyte* sk, const(ubyte)* seed);
47 
48 int crypto_box_keypair (ubyte* pk, ubyte* sk);
49 
50 int crypto_box_easy (
51     ubyte* c,
52     const(ubyte)* m,
53     ulong mlen,
54     const(ubyte)* n,
55     const(ubyte)* pk,
56     const(ubyte)* sk);
57 
58 int crypto_box_open_easy (
59     ubyte* m,
60     const(ubyte)* c,
61     ulong clen,
62     const(ubyte)* n,
63     const(ubyte)* pk,
64     const(ubyte)* sk);
65 
66 int crypto_box_detached (
67     ubyte* c,
68     ubyte* mac,
69     const(ubyte)* m,
70     ulong mlen,
71     const(ubyte)* n,
72     const(ubyte)* pk,
73     const(ubyte)* sk);
74 
75 int crypto_box_open_detached (
76     ubyte* m,
77     const(ubyte)* c,
78     const(ubyte)* mac,
79     ulong clen,
80     const(ubyte)* n,
81     const(ubyte)* pk,
82     const(ubyte)* sk);
83 
84 /* -- Precomputation interface -- */
85 
86 enum crypto_box_BEFORENMBYTES = crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES;
87 size_t crypto_box_beforenmbytes ();
88 
89 int crypto_box_beforenm (ubyte* k, const(ubyte)* pk, const(ubyte)* sk);
90 
91 int crypto_box_easy_afternm (
92     ubyte* c,
93     const(ubyte)* m,
94     ulong mlen,
95     const(ubyte)* n,
96     const(ubyte)* k);
97 
98 int crypto_box_open_easy_afternm (
99     ubyte* m,
100     const(ubyte)* c,
101     ulong clen,
102     const(ubyte)* n,
103     const(ubyte)* k);
104 
105 int crypto_box_detached_afternm (
106     ubyte* c,
107     ubyte* mac,
108     const(ubyte)* m,
109     ulong mlen,
110     const(ubyte)* n,
111     const(ubyte)* k);
112 
113 int crypto_box_open_detached_afternm (
114     ubyte* m,
115     const(ubyte)* c,
116     const(ubyte)* mac,
117     ulong clen,
118     const(ubyte)* n,
119     const(ubyte)* k);
120 
121 /* -- Ephemeral SK interface -- */
122 
123 enum crypto_box_SEALBYTES = crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES;
124 size_t crypto_box_sealbytes ();
125 
126 int crypto_box_seal (ubyte* c, const(ubyte)* m, ulong mlen, const(ubyte)* pk);
127 
128 int crypto_box_seal_open (
129     ubyte* m,
130     const(ubyte)* c,
131     ulong clen,
132     const(ubyte)* pk,
133     const(ubyte)* sk);
134 
135 /* -- NaCl compatibility interface ; Requires padding -- */
136 
137 enum crypto_box_ZEROBYTES = crypto_box_curve25519xsalsa20poly1305_ZEROBYTES;
138 size_t crypto_box_zerobytes ();
139 
140 enum crypto_box_BOXZEROBYTES = crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES;
141 size_t crypto_box_boxzerobytes ();
142 
143 int crypto_box (
144     ubyte* c,
145     const(ubyte)* m,
146     ulong mlen,
147     const(ubyte)* n,
148     const(ubyte)* pk,
149     const(ubyte)* sk);
150 
151 int crypto_box_open (
152     ubyte* m,
153     const(ubyte)* c,
154     ulong clen,
155     const(ubyte)* n,
156     const(ubyte)* pk,
157     const(ubyte)* sk);
158 
159 int crypto_box_afternm (
160     ubyte* c,
161     const(ubyte)* m,
162     ulong mlen,
163     const(ubyte)* n,
164     const(ubyte)* k);
165 
166 int crypto_box_open_afternm (
167     ubyte* m,
168     const(ubyte)* c,
169     ulong clen,
170     const(ubyte)* n,
171     const(ubyte)* k);