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;