Skip to main content

dryoc/
constants.rs

1#![allow(missing_docs)]
2
3const fn min(a: usize, b: usize) -> usize {
4    [a, b][(a > b) as usize]
5}
6const fn min_usize_u64(a: usize, b: u64) -> usize {
7    if (a as u64) < b { a } else { b as usize }
8}
9
10const SODIUM_SIZE_MAX: usize = min(usize::MAX, u64::MAX as usize);
11
12pub const CRYPTO_SCALARMULT_CURVE25519_BYTES: usize = 32;
13pub const CRYPTO_SCALARMULT_CURVE25519_SCALARBYTES: usize = 32;
14
15pub const CRYPTO_SCALARMULT_BYTES: usize = CRYPTO_SCALARMULT_CURVE25519_BYTES;
16pub const CRYPTO_SCALARMULT_SCALARBYTES: usize = CRYPTO_SCALARMULT_CURVE25519_SCALARBYTES;
17
18const CRYPTO_BOX_CURVE25519XSALSA20POLY1305_PUBLICKEYBYTES: usize = 32;
19const CRYPTO_BOX_CURVE25519XSALSA20POLY1305_SECRETKEYBYTES: usize = 32;
20const CRYPTO_BOX_CURVE25519XSALSA20POLY1305_MACBYTES: usize = 16;
21const CRYPTO_BOX_CURVE25519XSALSA20POLY1305_NONCEBYTES: usize = 24;
22const CRYPTO_BOX_CURVE25519XSALSA20POLY1305_SEEDBYTES: usize = 32;
23const CRYPTO_BOX_CURVE25519XSALSA20POLY1305_BEFORENMBYTES: usize = 32;
24
25const CRYPTO_STREAM_XSALSA20_MESSAGEBYTES_MAX: usize = SODIUM_SIZE_MAX;
26
27pub const CRYPTO_BOX_PUBLICKEYBYTES: usize = CRYPTO_BOX_CURVE25519XSALSA20POLY1305_PUBLICKEYBYTES;
28pub const CRYPTO_BOX_SECRETKEYBYTES: usize = CRYPTO_BOX_CURVE25519XSALSA20POLY1305_SECRETKEYBYTES;
29pub const CRYPTO_BOX_MACBYTES: usize = CRYPTO_BOX_CURVE25519XSALSA20POLY1305_MACBYTES;
30pub const CRYPTO_BOX_NONCEBYTES: usize = CRYPTO_BOX_CURVE25519XSALSA20POLY1305_NONCEBYTES;
31pub const CRYPTO_BOX_SEEDBYTES: usize = CRYPTO_BOX_CURVE25519XSALSA20POLY1305_SEEDBYTES;
32pub const CRYPTO_BOX_BEFORENMBYTES: usize = CRYPTO_BOX_CURVE25519XSALSA20POLY1305_BEFORENMBYTES;
33pub const CRYPTO_BOX_SEALBYTES: usize = CRYPTO_BOX_PUBLICKEYBYTES + CRYPTO_BOX_MACBYTES;
34pub const CRYPTO_BOX_MESSAGEBYTES_MAX: usize =
35    CRYPTO_STREAM_XSALSA20_MESSAGEBYTES_MAX - CRYPTO_BOX_CURVE25519XSALSA20POLY1305_MACBYTES;
36
37pub const CRYPTO_SECRETBOX_XSALSA20POLY1305_KEYBYTES: usize = 32;
38pub const CRYPTO_SECRETBOX_XSALSA20POLY1305_NONCEBYTES: usize = 24;
39pub const CRYPTO_SECRETBOX_XSALSA20POLY1305_MACBYTES: usize = 16;
40pub const CRYPTO_SECRETBOX_XSALSA20POLY1305_MESSAGEBYTES_MAX: usize =
41    CRYPTO_STREAM_XSALSA20_MESSAGEBYTES_MAX - CRYPTO_SECRETBOX_XSALSA20POLY1305_MACBYTES;
42
43pub const CRYPTO_SECRETBOX_KEYBYTES: usize = CRYPTO_SECRETBOX_XSALSA20POLY1305_KEYBYTES;
44pub const CRYPTO_SECRETBOX_NONCEBYTES: usize = CRYPTO_SECRETBOX_XSALSA20POLY1305_NONCEBYTES;
45pub const CRYPTO_SECRETBOX_MACBYTES: usize = CRYPTO_SECRETBOX_XSALSA20POLY1305_MACBYTES;
46pub const CRYPTO_SECRETBOX_PRIMITIVE: &str = "xsalsa20poly1305";
47pub const CRYPTO_SECRETBOX_MESSAGEBYTES_MAX: usize =
48    CRYPTO_SECRETBOX_XSALSA20POLY1305_MESSAGEBYTES_MAX;
49
50pub const CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES: usize = 32;
51pub const CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES: usize = 0;
52pub const CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES: usize = 12;
53pub const CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES: usize = 16;
54pub const CRYPTO_AEAD_CHACHA20POLY1305_IETF_MESSAGEBYTES_MAX: usize = min_usize_u64(
55    SODIUM_SIZE_MAX - CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES,
56    64u64 * ((1u64 << 32) - 1u64),
57);
58
59pub const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES: usize = 32;
60pub const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES: usize = 0;
61pub const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES: usize = 24;
62pub const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES: usize = 16;
63// Match libsodium's XChaCha20-Poly1305-IETF API. This is larger than plain
64// RFC 8439 ChaCha20-Poly1305-IETF because libsodium's XChaCha path uses an
65// extended-counter XChaCha20 stream internally.
66pub const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_MESSAGEBYTES_MAX: usize =
67    SODIUM_SIZE_MAX - CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES;
68
69pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES: usize =
70    CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES;
71pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES: usize =
72    CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES;
73pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_INONCEBYTES: usize = 8;
74pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_COUNTERBYTES: usize = 4;
75pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES: usize =
76    1 + CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES;
77pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX: usize = min_usize_u64(
78    SODIUM_SIZE_MAX - CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES,
79    64u64 * ((1u64 << 32) - 2u64),
80);
81
82pub const CRYPTO_STREAM_CHACHA20_IETF_KEYBYTES: usize = 32;
83pub const CRYPTO_STREAM_CHACHA20_IETF_NONCEBYTES: usize = 12;
84
85pub const CRYPTO_CORE_HCHACHA20_INPUTBYTES: usize = 16;
86pub const CRYPTO_CORE_HCHACHA20_OUTPUTBYTES: usize = 32;
87pub const CRYPTO_CORE_HCHACHA20_KEYBYTES: usize = 32;
88
89pub const CRYPTO_CORE_HSALSA20_OUTPUTBYTES: usize = 32;
90pub const CRYPTO_CORE_HSALSA20_INPUTBYTES: usize = 16;
91pub const CRYPTO_CORE_HSALSA20_KEYBYTES: usize = 32;
92pub const CRYPTO_CORE_HSALSA20_CONSTBYTES: usize = 16;
93
94pub const CRYPTO_SECRETSTREAM_PADBYTES: usize = 8;
95
96pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_MESSAGE: u8 = 0x00;
97pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH: u8 = 0x01;
98pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY: u8 = 0x02;
99pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL: u8 =
100    CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH
101        | CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY;
102
103pub const CRYPTO_GENERICHASH_BLAKE2B_BYTES_MIN: usize = 16;
104pub const CRYPTO_GENERICHASH_BLAKE2B_BYTES_MAX: usize = 64;
105pub const CRYPTO_GENERICHASH_BLAKE2B_BYTES: usize = 32;
106pub const CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES_MIN: usize = 16;
107pub const CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES_MAX: usize = 64;
108pub const CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES: usize = 32;
109pub const CRYPTO_GENERICHASH_BLAKE2B_SALTBYTES: usize = 16;
110pub const CRYPTO_GENERICHASH_BLAKE2B_PERSONALBYTES: usize = 16;
111
112pub const CRYPTO_GENERICHASH_BYTES: usize = CRYPTO_GENERICHASH_BLAKE2B_BYTES;
113pub const CRYPTO_GENERICHASH_KEYBYTES: usize = CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES;
114pub const CRYPTO_GENERICHASH_BYTES_MIN: usize = CRYPTO_GENERICHASH_BLAKE2B_BYTES_MIN;
115pub const CRYPTO_GENERICHASH_BYTES_MAX: usize = CRYPTO_GENERICHASH_BLAKE2B_BYTES_MAX;
116pub const CRYPTO_GENERICHASH_KEYBYTES_MIN: usize = CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES_MIN;
117pub const CRYPTO_GENERICHASH_KEYBYTES_MAX: usize = CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES_MAX;
118
119pub const CRYPTO_ONETIMEAUTH_POLY1305_BYTES: usize = 16;
120pub const CRYPTO_ONETIMEAUTH_POLY1305_KEYBYTES: usize = 32;
121
122pub const CRYPTO_ONETIMEAUTH_BYTES: usize = CRYPTO_ONETIMEAUTH_POLY1305_BYTES;
123pub const CRYPTO_ONETIMEAUTH_KEYBYTES: usize = CRYPTO_ONETIMEAUTH_POLY1305_KEYBYTES;
124
125pub const CRYPTO_AUTH_HMACSHA512256_BYTES: usize = 32;
126pub const CRYPTO_AUTH_HMACSHA512256_KEYBYTES: usize = 32;
127
128pub const CRYPTO_AUTH_HMACSHA256_BYTES: usize = 32;
129pub const CRYPTO_AUTH_HMACSHA256_KEYBYTES: usize = 32;
130pub const CRYPTO_AUTH_HMACSHA512_BYTES: usize = 64;
131pub const CRYPTO_AUTH_HMACSHA512_KEYBYTES: usize = 32;
132
133pub const CRYPTO_AUTH_BYTES: usize = CRYPTO_AUTH_HMACSHA512256_BYTES;
134pub const CRYPTO_AUTH_KEYBYTES: usize = CRYPTO_AUTH_HMACSHA512256_KEYBYTES;
135
136pub const CRYPTO_HASH_SHA256_BYTES: usize = 32;
137pub const CRYPTO_HASH_SHA512_BYTES: usize = 64;
138pub const CRYPTO_HASH_SHA3256_BYTES: usize = 32;
139pub const CRYPTO_HASH_SHA3512_BYTES: usize = 64;
140pub const CRYPTO_HASH_BYTES: usize = CRYPTO_HASH_SHA512_BYTES;
141pub const CRYPTO_HASH_PRIMITIVE: &str = "sha512";
142
143pub const CRYPTO_KEM_MLKEM768_PUBLICKEYBYTES: usize = 1184;
144pub const CRYPTO_KEM_MLKEM768_SECRETKEYBYTES: usize = 2400;
145pub const CRYPTO_KEM_MLKEM768_CIPHERTEXTBYTES: usize = 1088;
146pub const CRYPTO_KEM_MLKEM768_SHAREDSECRETBYTES: usize = 32;
147pub const CRYPTO_KEM_MLKEM768_SEEDBYTES: usize = 64;
148/// Length of the `crypto_kem_mlkem768_enc_deterministic` seed (the ML-KEM
149/// message `m`). libsodium has no named constant for it.
150pub const CRYPTO_KEM_MLKEM768_ENCSEEDBYTES: usize = 32;
151
152pub const CRYPTO_KEM_XWING_PUBLICKEYBYTES: usize = 1216;
153pub const CRYPTO_KEM_XWING_SECRETKEYBYTES: usize = 32;
154pub const CRYPTO_KEM_XWING_CIPHERTEXTBYTES: usize = 1120;
155pub const CRYPTO_KEM_XWING_SHAREDSECRETBYTES: usize = 32;
156pub const CRYPTO_KEM_XWING_SEEDBYTES: usize = 32;
157/// Length of the `crypto_kem_xwing_enc_deterministic` seed. libsodium has no
158/// named constant for it.
159pub const CRYPTO_KEM_XWING_ENCSEEDBYTES: usize = 64;
160
161pub const CRYPTO_KEM_PUBLICKEYBYTES: usize = CRYPTO_KEM_XWING_PUBLICKEYBYTES;
162pub const CRYPTO_KEM_SECRETKEYBYTES: usize = CRYPTO_KEM_XWING_SECRETKEYBYTES;
163pub const CRYPTO_KEM_CIPHERTEXTBYTES: usize = CRYPTO_KEM_XWING_CIPHERTEXTBYTES;
164pub const CRYPTO_KEM_SHAREDSECRETBYTES: usize = CRYPTO_KEM_XWING_SHAREDSECRETBYTES;
165pub const CRYPTO_KEM_SEEDBYTES: usize = CRYPTO_KEM_XWING_SEEDBYTES;
166pub const CRYPTO_KEM_PRIMITIVE: &str = "xwing";
167
168pub const CRYPTO_XOF_SHAKE128_BLOCKBYTES: usize = 168;
169pub const CRYPTO_XOF_SHAKE128_DOMAIN_STANDARD: u8 = 0x1f;
170pub const CRYPTO_XOF_SHAKE256_BLOCKBYTES: usize = 136;
171pub const CRYPTO_XOF_SHAKE256_DOMAIN_STANDARD: u8 = 0x1f;
172pub const CRYPTO_XOF_TURBOSHAKE128_BLOCKBYTES: usize = 168;
173pub const CRYPTO_XOF_TURBOSHAKE128_DOMAIN_STANDARD: u8 = 0x1f;
174pub const CRYPTO_XOF_TURBOSHAKE256_BLOCKBYTES: usize = 136;
175pub const CRYPTO_XOF_TURBOSHAKE256_DOMAIN_STANDARD: u8 = 0x1f;
176
177pub const CRYPTO_KDF_BLAKE2B_KEYBYTES: usize = 32;
178pub const CRYPTO_KDF_BLAKE2B_CONTEXTBYTES: usize = 8;
179pub const CRYPTO_KDF_BLAKE2B_BYTES_MIN: usize = 16;
180pub const CRYPTO_KDF_BLAKE2B_BYTES_MAX: usize = 64;
181
182pub const CRYPTO_KDF_HKDF_SHA256_KEYBYTES: usize = CRYPTO_AUTH_HMACSHA256_BYTES;
183pub const CRYPTO_KDF_HKDF_SHA256_BYTES_MIN: usize = 0;
184pub const CRYPTO_KDF_HKDF_SHA256_BYTES_MAX: usize = 255 * CRYPTO_AUTH_HMACSHA256_BYTES;
185pub const CRYPTO_KDF_HKDF_SHA512_KEYBYTES: usize = CRYPTO_AUTH_HMACSHA512_BYTES;
186pub const CRYPTO_KDF_HKDF_SHA512_BYTES_MIN: usize = 0;
187pub const CRYPTO_KDF_HKDF_SHA512_BYTES_MAX: usize = 255 * CRYPTO_AUTH_HMACSHA512_BYTES;
188
189pub const CRYPTO_KDF_KEYBYTES: usize = CRYPTO_KDF_BLAKE2B_KEYBYTES;
190pub const CRYPTO_KDF_CONTEXTBYTES: usize = CRYPTO_KDF_BLAKE2B_CONTEXTBYTES;
191
192pub const CRYPTO_KX_PUBLICKEYBYTES: usize = 32;
193pub const CRYPTO_KX_SECRETKEYBYTES: usize = 32;
194pub const CRYPTO_KX_SEEDBYTES: usize = 32;
195pub const CRYPTO_KX_SESSIONKEYBYTES: usize = 32;
196
197pub const CRYPTO_SIGN_ED25519_PUBLICKEYBYTES: usize = 32;
198pub const CRYPTO_SIGN_ED25519_SECRETKEYBYTES: usize = 32 + 32;
199pub const CRYPTO_SIGN_ED25519_BYTES: usize = 64;
200pub const CRYPTO_SIGN_ED25519_SEEDBYTES: usize = 32;
201pub const CRYPTO_SIGN_ED25519_MESSAGEBYTES_MAX: usize = SODIUM_SIZE_MAX - CRYPTO_SIGN_ED25519_BYTES;
202pub const CRYPTO_CORE_ED25519_BYTES: usize = 32;
203
204pub const CRYPTO_SIGN_BYTES: usize = CRYPTO_SIGN_ED25519_BYTES;
205pub const CRYPTO_SIGN_SEEDBYTES: usize = CRYPTO_SIGN_ED25519_SEEDBYTES;
206pub const CRYPTO_SIGN_PUBLICKEYBYTES: usize = CRYPTO_SIGN_ED25519_PUBLICKEYBYTES;
207pub const CRYPTO_SIGN_SECRETKEYBYTES: usize = CRYPTO_SIGN_ED25519_SECRETKEYBYTES;
208pub const CRYPTO_SIGN_MESSAGEBYTES_MAX: usize = CRYPTO_SIGN_ED25519_MESSAGEBYTES_MAX;
209
210pub const CRYPTO_SHORTHASH_SIPHASH24_BYTES: usize = 8;
211pub const CRYPTO_SHORTHASH_SIPHASH24_KEYBYTES: usize = 16;
212
213pub const CRYPTO_SHORTHASH_BYTES: usize = CRYPTO_SHORTHASH_SIPHASH24_BYTES;
214pub const CRYPTO_SHORTHASH_KEYBYTES: usize = CRYPTO_SHORTHASH_SIPHASH24_KEYBYTES;
215
216pub const CRYPTO_PWHASH_ARGON2I_ALG_ARGON2I13: usize = 1;
217pub const CRYPTO_PWHASH_ARGON2I_BYTES_MAX: usize = min(SODIUM_SIZE_MAX, 4294967295);
218pub const CRYPTO_PWHASH_ARGON2I_BYTES_MIN: usize = 16;
219pub const CRYPTO_PWHASH_ARGON2I_MEMLIMIT_INTERACTIVE: usize = 33554432;
220pub const CRYPTO_PWHASH_ARGON2I_MEMLIMIT_MAX: usize = if usize::BITS >= 64 {
221    4_398_046_510_080u64 as usize
222} else if usize::BITS >= 32 {
223    2_147_483_648u64 as usize
224} else {
225    32_768
226};
227pub const CRYPTO_PWHASH_ARGON2I_MEMLIMIT_MIN: usize = 8192;
228pub const CRYPTO_PWHASH_ARGON2I_MEMLIMIT_MODERATE: usize = 134217728;
229pub const CRYPTO_PWHASH_ARGON2I_MEMLIMIT_SENSITIVE: usize = 536870912;
230pub const CRYPTO_PWHASH_ARGON2I_OPSLIMIT_INTERACTIVE: u64 = 4;
231pub const CRYPTO_PWHASH_ARGON2I_OPSLIMIT_MAX: u64 = 4294967295;
232pub const CRYPTO_PWHASH_ARGON2I_OPSLIMIT_MIN: u64 = 3;
233pub const CRYPTO_PWHASH_ARGON2I_OPSLIMIT_MODERATE: u64 = 6;
234pub const CRYPTO_PWHASH_ARGON2I_OPSLIMIT_SENSITIVE: u64 = 8;
235pub const CRYPTO_PWHASH_ARGON2I_PASSWD_MAX: usize = 4294967295;
236pub const CRYPTO_PWHASH_ARGON2I_PASSWD_MIN: usize = 0;
237pub const CRYPTO_PWHASH_ARGON2I_SALTBYTES_MAX: usize = 0xFFFFFFFF;
238pub const CRYPTO_PWHASH_ARGON2I_SALTBYTES_MIN: usize = 8;
239pub const CRYPTO_PWHASH_ARGON2I_SALTBYTES: usize = 16;
240pub const CRYPTO_PWHASH_ARGON2I_STRBYTES: usize = 128;
241pub const CRYPTO_PWHASH_ARGON2I_STRPREFIX: &str = "$argon2i$";
242
243pub const CRYPTO_PWHASH_ARGON2ID_ALG_ARGON2ID13: usize = 2;
244pub const CRYPTO_PWHASH_ARGON2ID_BYTES_MAX: usize = min(SODIUM_SIZE_MAX, 4294967295);
245pub const CRYPTO_PWHASH_ARGON2ID_BYTES_MIN: usize = 16;
246pub const CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_INTERACTIVE: usize = 67108864;
247pub const CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MIN: usize = 8192;
248pub const CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MAX: usize = if usize::BITS >= 64 {
249    4_398_046_510_080u64 as usize
250} else if usize::BITS >= 32 {
251    2_147_483_648u64 as usize
252} else {
253    32_768
254};
255pub const CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MODERATE: usize = 268435456;
256pub const CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_SENSITIVE: usize = 1073741824;
257pub const CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_INTERACTIVE: u64 = 2;
258pub const CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MAX: u64 = 4294967295;
259pub const CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MIN: u64 = 1;
260pub const CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MODERATE: u64 = 3;
261pub const CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_SENSITIVE: u64 = 4;
262pub const CRYPTO_PWHASH_ARGON2ID_PASSWD_MAX: usize = 4294967295;
263pub const CRYPTO_PWHASH_ARGON2ID_PASSWD_MIN: usize = 0;
264pub const CRYPTO_PWHASH_ARGON2ID_SALTBYTES_MAX: usize = 0xFFFFFFFF;
265pub const CRYPTO_PWHASH_ARGON2ID_SALTBYTES_MIN: usize = 8;
266pub const CRYPTO_PWHASH_ARGON2ID_SALTBYTES: usize = 16;
267pub const CRYPTO_PWHASH_ARGON2ID_STRBYTES: usize = 128;
268pub const CRYPTO_PWHASH_ARGON2ID_STRPREFIX: &str = "$argon2id$";
269
270pub const CRYPTO_PWHASH_ALG_ARGON2I13: usize = CRYPTO_PWHASH_ARGON2I_ALG_ARGON2I13;
271pub const CRYPTO_PWHASH_ALG_ARGON2ID13: usize = CRYPTO_PWHASH_ARGON2ID_ALG_ARGON2ID13;
272pub const CRYPTO_PWHASH_ALG_DEFAULT: usize = CRYPTO_PWHASH_ALG_ARGON2ID13;
273pub const CRYPTO_PWHASH_BYTES_MAX: usize = CRYPTO_PWHASH_ARGON2ID_BYTES_MAX;
274pub const CRYPTO_PWHASH_BYTES_MIN: usize = CRYPTO_PWHASH_ARGON2ID_BYTES_MIN;
275pub const CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE: usize = CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_INTERACTIVE;
276pub const CRYPTO_PWHASH_MEMLIMIT_MAX: usize = CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MAX;
277pub const CRYPTO_PWHASH_MEMLIMIT_MIN: usize = CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MIN;
278pub const CRYPTO_PWHASH_MEMLIMIT_MODERATE: usize = CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MODERATE;
279pub const CRYPTO_PWHASH_MEMLIMIT_SENSITIVE: usize = CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_SENSITIVE;
280pub const CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE: u64 = CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_INTERACTIVE;
281pub const CRYPTO_PWHASH_OPSLIMIT_MAX: u64 = CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MAX;
282pub const CRYPTO_PWHASH_OPSLIMIT_MIN: u64 = CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MIN;
283pub const CRYPTO_PWHASH_OPSLIMIT_MODERATE: u64 = CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MODERATE;
284pub const CRYPTO_PWHASH_OPSLIMIT_SENSITIVE: u64 = CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_SENSITIVE;
285pub const CRYPTO_PWHASH_PASSWD_MAX: usize = CRYPTO_PWHASH_ARGON2ID_PASSWD_MAX;
286pub const CRYPTO_PWHASH_PASSWD_MIN: usize = CRYPTO_PWHASH_ARGON2ID_PASSWD_MIN;
287pub const CRYPTO_PWHASH_SALTBYTES_MAX: usize = CRYPTO_PWHASH_ARGON2ID_SALTBYTES_MAX;
288pub const CRYPTO_PWHASH_SALTBYTES_MIN: usize = CRYPTO_PWHASH_ARGON2ID_SALTBYTES_MIN;
289pub const CRYPTO_PWHASH_SALTBYTES: usize = CRYPTO_PWHASH_ARGON2ID_SALTBYTES;
290pub const CRYPTO_PWHASH_STRBYTES: usize = CRYPTO_PWHASH_ARGON2ID_STRBYTES;
291pub const CRYPTO_PWHASH_STRPREFIX: &str = CRYPTO_PWHASH_ARGON2ID_STRPREFIX;
292
293#[cfg(target_pointer_width = "32")]
294const _: () = {
295    assert!(CRYPTO_PWHASH_ARGON2I_MEMLIMIT_MAX == 2_147_483_648usize);
296    assert!(CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MAX == 2_147_483_648usize);
297    assert!(CRYPTO_PWHASH_MEMLIMIT_MAX == 2_147_483_648usize);
298};
299
300#[cfg(test)]
301mod tests {
302
303    #[cfg(target_pointer_width = "32")]
304    #[test]
305    fn argon2_memory_limits_match_32_bit_libsodium_maximum() {
306        assert_eq!(
307            super::CRYPTO_PWHASH_ARGON2I_MEMLIMIT_MAX,
308            2_147_483_648usize
309        );
310        assert_eq!(
311            super::CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MAX,
312            2_147_483_648usize
313        );
314        assert_eq!(super::CRYPTO_PWHASH_MEMLIMIT_MAX, 2_147_483_648usize);
315    }
316    /// Every constant mirrored from libsodium equals the value reported by
317    /// the corresponding `libsodium_sys` getter. Constants without a getter
318    /// (`*_INONCEBYTES`, `*_COUNTERBYTES`, `*_PADBYTES`, the HKDF sizes,
319    /// `*_SALTBYTES_MIN/MAX`, the KEM `*_ENCSEEDBYTES`) are defined only by
320    /// this crate.
321    #[cfg(dryoc_native_tests)]
322    #[test]
323    fn test_libsodium_constants() {
324        use core::ffi::CStr;
325
326        use libsodium_sys::*;
327
328        use super::*;
329
330        crate::native_test_util::init();
331
332        // SAFETY: These parameter-free libsodium functions only return
333        // compile-time constants.
334        macro_rules! check_numeric {
335            ($($ours:ident == $theirs:ident),* $(,)?) => {$(
336                assert_eq!($ours as u64, unsafe { $theirs() } as u64, stringify!($ours));
337            )*};
338        }
339
340        // SAFETY: These parameter-free libsodium functions return pointers to
341        // static NUL-terminated strings.
342        macro_rules! check_str {
343            ($($ours:ident == $theirs:ident),* $(,)?) => {$(
344                let theirs = unsafe { CStr::from_ptr($theirs()) };
345                assert_eq!($ours.as_bytes(), theirs.to_bytes(), stringify!($ours));
346            )*};
347        }
348
349        check_numeric!(
350            CRYPTO_SCALARMULT_CURVE25519_BYTES == crypto_scalarmult_curve25519_bytes,
351            CRYPTO_SCALARMULT_CURVE25519_SCALARBYTES == crypto_scalarmult_curve25519_scalarbytes,
352            CRYPTO_SCALARMULT_BYTES == crypto_scalarmult_bytes,
353            CRYPTO_SCALARMULT_SCALARBYTES == crypto_scalarmult_scalarbytes,
354            CRYPTO_BOX_PUBLICKEYBYTES == crypto_box_publickeybytes,
355            CRYPTO_BOX_SECRETKEYBYTES == crypto_box_secretkeybytes,
356            CRYPTO_BOX_MACBYTES == crypto_box_macbytes,
357            CRYPTO_BOX_NONCEBYTES == crypto_box_noncebytes,
358            CRYPTO_BOX_SEEDBYTES == crypto_box_seedbytes,
359            CRYPTO_BOX_BEFORENMBYTES == crypto_box_beforenmbytes,
360            CRYPTO_BOX_SEALBYTES == crypto_box_sealbytes,
361            CRYPTO_BOX_MESSAGEBYTES_MAX == crypto_box_messagebytes_max,
362            CRYPTO_SECRETBOX_XSALSA20POLY1305_KEYBYTES
363                == crypto_secretbox_xsalsa20poly1305_keybytes,
364            CRYPTO_SECRETBOX_XSALSA20POLY1305_NONCEBYTES
365                == crypto_secretbox_xsalsa20poly1305_noncebytes,
366            CRYPTO_SECRETBOX_XSALSA20POLY1305_MACBYTES
367                == crypto_secretbox_xsalsa20poly1305_macbytes,
368            CRYPTO_SECRETBOX_XSALSA20POLY1305_MESSAGEBYTES_MAX
369                == crypto_secretbox_xsalsa20poly1305_messagebytes_max,
370            CRYPTO_SECRETBOX_KEYBYTES == crypto_secretbox_keybytes,
371            CRYPTO_SECRETBOX_NONCEBYTES == crypto_secretbox_noncebytes,
372            CRYPTO_SECRETBOX_MACBYTES == crypto_secretbox_macbytes,
373            CRYPTO_SECRETBOX_MESSAGEBYTES_MAX == crypto_secretbox_messagebytes_max,
374            CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES
375                == crypto_aead_chacha20poly1305_ietf_keybytes,
376            CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES
377                == crypto_aead_chacha20poly1305_ietf_nsecbytes,
378            CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES
379                == crypto_aead_chacha20poly1305_ietf_npubbytes,
380            CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES == crypto_aead_chacha20poly1305_ietf_abytes,
381            CRYPTO_AEAD_CHACHA20POLY1305_IETF_MESSAGEBYTES_MAX
382                == crypto_aead_chacha20poly1305_ietf_messagebytes_max,
383            CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES
384                == crypto_aead_xchacha20poly1305_ietf_keybytes,
385            CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES
386                == crypto_aead_xchacha20poly1305_ietf_nsecbytes,
387            CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES
388                == crypto_aead_xchacha20poly1305_ietf_npubbytes,
389            CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES == crypto_aead_xchacha20poly1305_ietf_abytes,
390            CRYPTO_AEAD_XCHACHA20POLY1305_IETF_MESSAGEBYTES_MAX
391                == crypto_aead_xchacha20poly1305_ietf_messagebytes_max,
392            CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES
393                == crypto_secretstream_xchacha20poly1305_keybytes,
394            CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES
395                == crypto_secretstream_xchacha20poly1305_headerbytes,
396            CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES
397                == crypto_secretstream_xchacha20poly1305_abytes,
398            CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX
399                == crypto_secretstream_xchacha20poly1305_messagebytes_max,
400            CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_MESSAGE
401                == crypto_secretstream_xchacha20poly1305_tag_message,
402            CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH
403                == crypto_secretstream_xchacha20poly1305_tag_push,
404            CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY
405                == crypto_secretstream_xchacha20poly1305_tag_rekey,
406            CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL
407                == crypto_secretstream_xchacha20poly1305_tag_final,
408            CRYPTO_STREAM_CHACHA20_IETF_KEYBYTES == crypto_stream_chacha20_ietf_keybytes,
409            CRYPTO_STREAM_CHACHA20_IETF_NONCEBYTES == crypto_stream_chacha20_ietf_noncebytes,
410            CRYPTO_CORE_HCHACHA20_INPUTBYTES == crypto_core_hchacha20_inputbytes,
411            CRYPTO_CORE_HCHACHA20_OUTPUTBYTES == crypto_core_hchacha20_outputbytes,
412            CRYPTO_CORE_HCHACHA20_KEYBYTES == crypto_core_hchacha20_keybytes,
413            CRYPTO_CORE_HSALSA20_OUTPUTBYTES == crypto_core_hsalsa20_outputbytes,
414            CRYPTO_CORE_HSALSA20_INPUTBYTES == crypto_core_hsalsa20_inputbytes,
415            CRYPTO_CORE_HSALSA20_KEYBYTES == crypto_core_hsalsa20_keybytes,
416            CRYPTO_CORE_HSALSA20_CONSTBYTES == crypto_core_hsalsa20_constbytes,
417            CRYPTO_GENERICHASH_BLAKE2B_BYTES_MIN == crypto_generichash_blake2b_bytes_min,
418            CRYPTO_GENERICHASH_BLAKE2B_BYTES_MAX == crypto_generichash_blake2b_bytes_max,
419            CRYPTO_GENERICHASH_BLAKE2B_BYTES == crypto_generichash_blake2b_bytes,
420            CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES_MIN == crypto_generichash_blake2b_keybytes_min,
421            CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES_MAX == crypto_generichash_blake2b_keybytes_max,
422            CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES == crypto_generichash_blake2b_keybytes,
423            CRYPTO_GENERICHASH_BLAKE2B_SALTBYTES == crypto_generichash_blake2b_saltbytes,
424            CRYPTO_GENERICHASH_BLAKE2B_PERSONALBYTES == crypto_generichash_blake2b_personalbytes,
425            CRYPTO_GENERICHASH_BYTES == crypto_generichash_bytes,
426            CRYPTO_GENERICHASH_KEYBYTES == crypto_generichash_keybytes,
427            CRYPTO_GENERICHASH_BYTES_MIN == crypto_generichash_bytes_min,
428            CRYPTO_GENERICHASH_BYTES_MAX == crypto_generichash_bytes_max,
429            CRYPTO_GENERICHASH_KEYBYTES_MIN == crypto_generichash_keybytes_min,
430            CRYPTO_GENERICHASH_KEYBYTES_MAX == crypto_generichash_keybytes_max,
431            CRYPTO_ONETIMEAUTH_POLY1305_BYTES == crypto_onetimeauth_poly1305_bytes,
432            CRYPTO_ONETIMEAUTH_POLY1305_KEYBYTES == crypto_onetimeauth_poly1305_keybytes,
433            CRYPTO_ONETIMEAUTH_BYTES == crypto_onetimeauth_bytes,
434            CRYPTO_ONETIMEAUTH_KEYBYTES == crypto_onetimeauth_keybytes,
435            CRYPTO_AUTH_HMACSHA512256_BYTES == crypto_auth_hmacsha512256_bytes,
436            CRYPTO_AUTH_HMACSHA512256_KEYBYTES == crypto_auth_hmacsha512256_keybytes,
437            CRYPTO_AUTH_HMACSHA256_BYTES == crypto_auth_hmacsha256_bytes,
438            CRYPTO_AUTH_HMACSHA256_KEYBYTES == crypto_auth_hmacsha256_keybytes,
439            CRYPTO_AUTH_HMACSHA512_BYTES == crypto_auth_hmacsha512_bytes,
440            CRYPTO_AUTH_HMACSHA512_KEYBYTES == crypto_auth_hmacsha512_keybytes,
441            CRYPTO_AUTH_BYTES == crypto_auth_bytes,
442            CRYPTO_AUTH_KEYBYTES == crypto_auth_keybytes,
443            CRYPTO_HASH_SHA256_BYTES == crypto_hash_sha256_bytes,
444            CRYPTO_HASH_SHA512_BYTES == crypto_hash_sha512_bytes,
445            CRYPTO_HASH_BYTES == crypto_hash_bytes,
446            CRYPTO_KDF_BLAKE2B_KEYBYTES == crypto_kdf_blake2b_keybytes,
447            CRYPTO_KDF_BLAKE2B_CONTEXTBYTES == crypto_kdf_blake2b_contextbytes,
448            CRYPTO_KDF_BLAKE2B_BYTES_MIN == crypto_kdf_blake2b_bytes_min,
449            CRYPTO_KDF_BLAKE2B_BYTES_MAX == crypto_kdf_blake2b_bytes_max,
450            CRYPTO_KDF_KEYBYTES == crypto_kdf_keybytes,
451            CRYPTO_KDF_CONTEXTBYTES == crypto_kdf_contextbytes,
452            CRYPTO_KX_PUBLICKEYBYTES == crypto_kx_publickeybytes,
453            CRYPTO_KX_SECRETKEYBYTES == crypto_kx_secretkeybytes,
454            CRYPTO_KX_SEEDBYTES == crypto_kx_seedbytes,
455            CRYPTO_KX_SESSIONKEYBYTES == crypto_kx_sessionkeybytes,
456            CRYPTO_SIGN_ED25519_PUBLICKEYBYTES == crypto_sign_ed25519_publickeybytes,
457            CRYPTO_SIGN_ED25519_SECRETKEYBYTES == crypto_sign_ed25519_secretkeybytes,
458            CRYPTO_SIGN_ED25519_BYTES == crypto_sign_ed25519_bytes,
459            CRYPTO_SIGN_ED25519_SEEDBYTES == crypto_sign_ed25519_seedbytes,
460            CRYPTO_SIGN_ED25519_MESSAGEBYTES_MAX == crypto_sign_ed25519_messagebytes_max,
461            CRYPTO_CORE_ED25519_BYTES == crypto_core_ed25519_bytes,
462            CRYPTO_SIGN_BYTES == crypto_sign_bytes,
463            CRYPTO_SIGN_SEEDBYTES == crypto_sign_seedbytes,
464            CRYPTO_SIGN_PUBLICKEYBYTES == crypto_sign_publickeybytes,
465            CRYPTO_SIGN_SECRETKEYBYTES == crypto_sign_secretkeybytes,
466            CRYPTO_SIGN_MESSAGEBYTES_MAX == crypto_sign_messagebytes_max,
467            CRYPTO_SHORTHASH_SIPHASH24_BYTES == crypto_shorthash_siphash24_bytes,
468            CRYPTO_SHORTHASH_SIPHASH24_KEYBYTES == crypto_shorthash_siphash24_keybytes,
469            CRYPTO_SHORTHASH_BYTES == crypto_shorthash_bytes,
470            CRYPTO_SHORTHASH_KEYBYTES == crypto_shorthash_keybytes,
471            CRYPTO_PWHASH_ARGON2I_ALG_ARGON2I13 == crypto_pwhash_argon2i_alg_argon2i13,
472            CRYPTO_PWHASH_ARGON2I_BYTES_MAX == crypto_pwhash_argon2i_bytes_max,
473            CRYPTO_PWHASH_ARGON2I_BYTES_MIN == crypto_pwhash_argon2i_bytes_min,
474            CRYPTO_PWHASH_ARGON2I_MEMLIMIT_INTERACTIVE
475                == crypto_pwhash_argon2i_memlimit_interactive,
476            CRYPTO_PWHASH_ARGON2I_MEMLIMIT_MAX == crypto_pwhash_argon2i_memlimit_max,
477            CRYPTO_PWHASH_ARGON2I_MEMLIMIT_MIN == crypto_pwhash_argon2i_memlimit_min,
478            CRYPTO_PWHASH_ARGON2I_MEMLIMIT_MODERATE == crypto_pwhash_argon2i_memlimit_moderate,
479            CRYPTO_PWHASH_ARGON2I_MEMLIMIT_SENSITIVE == crypto_pwhash_argon2i_memlimit_sensitive,
480            CRYPTO_PWHASH_ARGON2I_OPSLIMIT_INTERACTIVE
481                == crypto_pwhash_argon2i_opslimit_interactive,
482            CRYPTO_PWHASH_ARGON2I_OPSLIMIT_MAX == crypto_pwhash_argon2i_opslimit_max,
483            CRYPTO_PWHASH_ARGON2I_OPSLIMIT_MIN == crypto_pwhash_argon2i_opslimit_min,
484            CRYPTO_PWHASH_ARGON2I_OPSLIMIT_MODERATE == crypto_pwhash_argon2i_opslimit_moderate,
485            CRYPTO_PWHASH_ARGON2I_OPSLIMIT_SENSITIVE == crypto_pwhash_argon2i_opslimit_sensitive,
486            CRYPTO_PWHASH_ARGON2I_PASSWD_MAX == crypto_pwhash_argon2i_passwd_max,
487            CRYPTO_PWHASH_ARGON2I_PASSWD_MIN == crypto_pwhash_argon2i_passwd_min,
488            CRYPTO_PWHASH_ARGON2I_SALTBYTES == crypto_pwhash_argon2i_saltbytes,
489            CRYPTO_PWHASH_ARGON2I_STRBYTES == crypto_pwhash_argon2i_strbytes,
490            CRYPTO_PWHASH_ARGON2ID_ALG_ARGON2ID13 == crypto_pwhash_argon2id_alg_argon2id13,
491            CRYPTO_PWHASH_ARGON2ID_BYTES_MAX == crypto_pwhash_argon2id_bytes_max,
492            CRYPTO_PWHASH_ARGON2ID_BYTES_MIN == crypto_pwhash_argon2id_bytes_min,
493            CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_INTERACTIVE
494                == crypto_pwhash_argon2id_memlimit_interactive,
495            CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MIN == crypto_pwhash_argon2id_memlimit_min,
496            CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MAX == crypto_pwhash_argon2id_memlimit_max,
497            CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MODERATE == crypto_pwhash_argon2id_memlimit_moderate,
498            CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_SENSITIVE == crypto_pwhash_argon2id_memlimit_sensitive,
499            CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_INTERACTIVE
500                == crypto_pwhash_argon2id_opslimit_interactive,
501            CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MAX == crypto_pwhash_argon2id_opslimit_max,
502            CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MIN == crypto_pwhash_argon2id_opslimit_min,
503            CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MODERATE == crypto_pwhash_argon2id_opslimit_moderate,
504            CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_SENSITIVE == crypto_pwhash_argon2id_opslimit_sensitive,
505            CRYPTO_PWHASH_ARGON2ID_PASSWD_MAX == crypto_pwhash_argon2id_passwd_max,
506            CRYPTO_PWHASH_ARGON2ID_PASSWD_MIN == crypto_pwhash_argon2id_passwd_min,
507            CRYPTO_PWHASH_ARGON2ID_SALTBYTES == crypto_pwhash_argon2id_saltbytes,
508            CRYPTO_PWHASH_ARGON2ID_STRBYTES == crypto_pwhash_argon2id_strbytes,
509            CRYPTO_PWHASH_ALG_ARGON2I13 == crypto_pwhash_alg_argon2i13,
510            CRYPTO_PWHASH_ALG_ARGON2ID13 == crypto_pwhash_alg_argon2id13,
511            CRYPTO_PWHASH_ALG_DEFAULT == crypto_pwhash_alg_default,
512            CRYPTO_PWHASH_BYTES_MAX == crypto_pwhash_bytes_max,
513            CRYPTO_PWHASH_BYTES_MIN == crypto_pwhash_bytes_min,
514            CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE == crypto_pwhash_memlimit_interactive,
515            CRYPTO_PWHASH_MEMLIMIT_MAX == crypto_pwhash_memlimit_max,
516            CRYPTO_PWHASH_MEMLIMIT_MIN == crypto_pwhash_memlimit_min,
517            CRYPTO_PWHASH_MEMLIMIT_MODERATE == crypto_pwhash_memlimit_moderate,
518            CRYPTO_PWHASH_MEMLIMIT_SENSITIVE == crypto_pwhash_memlimit_sensitive,
519            CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE == crypto_pwhash_opslimit_interactive,
520            CRYPTO_PWHASH_OPSLIMIT_MAX == crypto_pwhash_opslimit_max,
521            CRYPTO_PWHASH_OPSLIMIT_MIN == crypto_pwhash_opslimit_min,
522            CRYPTO_PWHASH_OPSLIMIT_MODERATE == crypto_pwhash_opslimit_moderate,
523            CRYPTO_PWHASH_OPSLIMIT_SENSITIVE == crypto_pwhash_opslimit_sensitive,
524            CRYPTO_PWHASH_PASSWD_MAX == crypto_pwhash_passwd_max,
525            CRYPTO_PWHASH_PASSWD_MIN == crypto_pwhash_passwd_min,
526            CRYPTO_PWHASH_SALTBYTES == crypto_pwhash_saltbytes,
527            CRYPTO_PWHASH_STRBYTES == crypto_pwhash_strbytes,
528            CRYPTO_HASH_SHA3256_BYTES == crypto_hash_sha3256_bytes,
529            CRYPTO_HASH_SHA3512_BYTES == crypto_hash_sha3512_bytes,
530            CRYPTO_XOF_SHAKE128_BLOCKBYTES == crypto_xof_shake128_blockbytes,
531            CRYPTO_XOF_SHAKE128_DOMAIN_STANDARD == crypto_xof_shake128_domain_standard,
532            CRYPTO_XOF_SHAKE256_BLOCKBYTES == crypto_xof_shake256_blockbytes,
533            CRYPTO_XOF_SHAKE256_DOMAIN_STANDARD == crypto_xof_shake256_domain_standard,
534            CRYPTO_XOF_TURBOSHAKE128_BLOCKBYTES == crypto_xof_turboshake128_blockbytes,
535            CRYPTO_XOF_TURBOSHAKE128_DOMAIN_STANDARD == crypto_xof_turboshake128_domain_standard,
536            CRYPTO_XOF_TURBOSHAKE256_BLOCKBYTES == crypto_xof_turboshake256_blockbytes,
537            CRYPTO_XOF_TURBOSHAKE256_DOMAIN_STANDARD == crypto_xof_turboshake256_domain_standard,
538            CRYPTO_KEM_MLKEM768_PUBLICKEYBYTES == crypto_kem_mlkem768_publickeybytes,
539            CRYPTO_KEM_MLKEM768_SECRETKEYBYTES == crypto_kem_mlkem768_secretkeybytes,
540            CRYPTO_KEM_MLKEM768_CIPHERTEXTBYTES == crypto_kem_mlkem768_ciphertextbytes,
541            CRYPTO_KEM_MLKEM768_SHAREDSECRETBYTES == crypto_kem_mlkem768_sharedsecretbytes,
542            CRYPTO_KEM_MLKEM768_SEEDBYTES == crypto_kem_mlkem768_seedbytes,
543            CRYPTO_KEM_XWING_PUBLICKEYBYTES == crypto_kem_xwing_publickeybytes,
544            CRYPTO_KEM_XWING_SECRETKEYBYTES == crypto_kem_xwing_secretkeybytes,
545            CRYPTO_KEM_XWING_CIPHERTEXTBYTES == crypto_kem_xwing_ciphertextbytes,
546            CRYPTO_KEM_XWING_SHAREDSECRETBYTES == crypto_kem_xwing_sharedsecretbytes,
547            CRYPTO_KEM_XWING_SEEDBYTES == crypto_kem_xwing_seedbytes,
548            CRYPTO_KEM_PUBLICKEYBYTES == crypto_kem_publickeybytes,
549            CRYPTO_KEM_SECRETKEYBYTES == crypto_kem_secretkeybytes,
550            CRYPTO_KEM_CIPHERTEXTBYTES == crypto_kem_ciphertextbytes,
551            CRYPTO_KEM_SHAREDSECRETBYTES == crypto_kem_sharedsecretbytes,
552            CRYPTO_KEM_SEEDBYTES == crypto_kem_seedbytes,
553        );
554
555        check_str!(
556            CRYPTO_SECRETBOX_PRIMITIVE == crypto_secretbox_primitive,
557            CRYPTO_HASH_PRIMITIVE == crypto_hash_primitive,
558            CRYPTO_PWHASH_ARGON2I_STRPREFIX == crypto_pwhash_argon2i_strprefix,
559            CRYPTO_PWHASH_ARGON2ID_STRPREFIX == crypto_pwhash_argon2id_strprefix,
560            CRYPTO_PWHASH_STRPREFIX == crypto_pwhash_strprefix,
561            CRYPTO_KEM_PRIMITIVE == crypto_kem_primitive,
562        );
563    }
564}