1 /******************************************************************************* 2 3 D language bindings for libsodium's crypto_aead_chacha20poly1305.h 4 5 License: ISC (see LICENSE.txt) 6 7 *******************************************************************************/ 8 9 module libsodium.crypto_aead_chacha20poly1305; 10 11 @nogc nothrow: 12 13 import libsodium.export_; 14 15 extern (C): 16 17 /* -- IETF ChaCha20-Poly1305 construction with a 96-bit nonce and a 32-bit internal counter -- */ 18 19 enum crypto_aead_chacha20poly1305_ietf_KEYBYTES = 32U; 20 size_t crypto_aead_chacha20poly1305_ietf_keybytes (); 21 22 enum crypto_aead_chacha20poly1305_ietf_NSECBYTES = 0U; 23 size_t crypto_aead_chacha20poly1305_ietf_nsecbytes (); 24 25 enum crypto_aead_chacha20poly1305_ietf_NPUBBYTES = 12U; 26 27 size_t crypto_aead_chacha20poly1305_ietf_npubbytes (); 28 29 enum crypto_aead_chacha20poly1305_ietf_ABYTES = 16U; 30 size_t crypto_aead_chacha20poly1305_ietf_abytes (); 31 32 enum crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX = SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ietf_ABYTES, 64UL * ((1UL << 32) - 1UL)); 33 size_t crypto_aead_chacha20poly1305_ietf_messagebytes_max (); 34 35 int crypto_aead_chacha20poly1305_ietf_encrypt ( 36 ubyte* c, 37 ulong* clen_p, 38 const(ubyte)* m, 39 ulong mlen, 40 const(ubyte)* ad, 41 ulong adlen, 42 const(ubyte)* nsec, 43 const(ubyte)* npub, 44 const(ubyte)* k); 45 46 int crypto_aead_chacha20poly1305_ietf_decrypt ( 47 ubyte* m, 48 ulong* mlen_p, 49 ubyte* nsec, 50 const(ubyte)* c, 51 ulong clen, 52 const(ubyte)* ad, 53 ulong adlen, 54 const(ubyte)* npub, 55 const(ubyte)* k); 56 57 int crypto_aead_chacha20poly1305_ietf_encrypt_detached ( 58 ubyte* c, 59 ubyte* mac, 60 ulong* maclen_p, 61 const(ubyte)* m, 62 ulong mlen, 63 const(ubyte)* ad, 64 ulong adlen, 65 const(ubyte)* nsec, 66 const(ubyte)* npub, 67 const(ubyte)* k); 68 69 int crypto_aead_chacha20poly1305_ietf_decrypt_detached ( 70 ubyte* m, 71 ubyte* nsec, 72 const(ubyte)* c, 73 ulong clen, 74 const(ubyte)* mac, 75 const(ubyte)* ad, 76 ulong adlen, 77 const(ubyte)* npub, 78 const(ubyte)* k); 79 80 void crypto_aead_chacha20poly1305_ietf_keygen ( 81 ref ubyte[crypto_aead_chacha20poly1305_ietf_KEYBYTES] k); 82 83 /* -- Original ChaCha20-Poly1305 construction with a 64-bit nonce and a 64-bit internal counter -- */ 84 85 enum crypto_aead_chacha20poly1305_KEYBYTES = 32U; 86 size_t crypto_aead_chacha20poly1305_keybytes (); 87 88 enum crypto_aead_chacha20poly1305_NSECBYTES = 0U; 89 size_t crypto_aead_chacha20poly1305_nsecbytes (); 90 91 enum crypto_aead_chacha20poly1305_NPUBBYTES = 8U; 92 size_t crypto_aead_chacha20poly1305_npubbytes (); 93 94 enum crypto_aead_chacha20poly1305_ABYTES = 16U; 95 size_t crypto_aead_chacha20poly1305_abytes (); 96 97 enum crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX = SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ABYTES; 98 size_t crypto_aead_chacha20poly1305_messagebytes_max (); 99 100 int crypto_aead_chacha20poly1305_encrypt ( 101 ubyte* c, 102 ulong* clen_p, 103 const(ubyte)* m, 104 ulong mlen, 105 const(ubyte)* ad, 106 ulong adlen, 107 const(ubyte)* nsec, 108 const(ubyte)* npub, 109 const(ubyte)* k); 110 111 int crypto_aead_chacha20poly1305_decrypt ( 112 ubyte* m, 113 ulong* mlen_p, 114 ubyte* nsec, 115 const(ubyte)* c, 116 ulong clen, 117 const(ubyte)* ad, 118 ulong adlen, 119 const(ubyte)* npub, 120 const(ubyte)* k); 121 122 int crypto_aead_chacha20poly1305_encrypt_detached ( 123 ubyte* c, 124 ubyte* mac, 125 ulong* maclen_p, 126 const(ubyte)* m, 127 ulong mlen, 128 const(ubyte)* ad, 129 ulong adlen, 130 const(ubyte)* nsec, 131 const(ubyte)* npub, 132 const(ubyte)* k); 133 134 int crypto_aead_chacha20poly1305_decrypt_detached ( 135 ubyte* m, 136 ubyte* nsec, 137 const(ubyte)* c, 138 ulong clen, 139 const(ubyte)* mac, 140 const(ubyte)* ad, 141 ulong adlen, 142 const(ubyte)* npub, 143 const(ubyte)* k); 144 145 void crypto_aead_chacha20poly1305_keygen ( 146 ref ubyte[crypto_aead_chacha20poly1305_KEYBYTES] k); 147 148 /* Aliases */ 149 150 enum crypto_aead_chacha20poly1305_IETF_KEYBYTES = crypto_aead_chacha20poly1305_ietf_KEYBYTES; 151 enum crypto_aead_chacha20poly1305_IETF_NSECBYTES = crypto_aead_chacha20poly1305_ietf_NSECBYTES; 152 enum crypto_aead_chacha20poly1305_IETF_NPUBBYTES = crypto_aead_chacha20poly1305_ietf_NPUBBYTES; 153 enum crypto_aead_chacha20poly1305_IETF_ABYTES = crypto_aead_chacha20poly1305_ietf_ABYTES; 154 enum crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX = crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX;