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);