1#![allow(missing_docs)]
2
3const fn min(a: usize, b: usize) -> usize {
4 [a, b][(a > b) as usize]
5}
6const fn max(a: usize, b: usize) -> usize {
7 [a, b][(a < b) as usize]
8}
9const fn min_usize_u64(a: usize, b: u64) -> usize {
10 if (a as u64) < b { a } else { b as usize }
11}
12
13const SODIUM_SIZE_MAX: usize = min(usize::MAX, u64::MAX as usize);
14
15pub const CRYPTO_SCALARMULT_CURVE25519_BYTES: usize = 32;
16pub const CRYPTO_SCALARMULT_CURVE25519_SCALARBYTES: usize = 32;
17
18pub const CRYPTO_SCALARMULT_BYTES: usize = CRYPTO_SCALARMULT_CURVE25519_BYTES;
19pub const CRYPTO_SCALARMULT_SCALARBYTES: usize = CRYPTO_SCALARMULT_CURVE25519_SCALARBYTES;
20
21const CRYPTO_BOX_CURVE25519XSALSA20POLY1305_PUBLICKEYBYTES: usize = 32;
22const CRYPTO_BOX_CURVE25519XSALSA20POLY1305_SECRETKEYBYTES: usize = 32;
23const CRYPTO_BOX_CURVE25519XSALSA20POLY1305_MACBYTES: usize = 16;
24const CRYPTO_BOX_CURVE25519XSALSA20POLY1305_NONCEBYTES: usize = 24;
25const CRYPTO_BOX_CURVE25519XSALSA20POLY1305_SEEDBYTES: usize = 32;
26const CRYPTO_BOX_CURVE25519XSALSA20POLY1305_BEFORENMBYTES: usize = 32;
27
28const CRYPTO_STREAM_XSALSA20_MESSAGEBYTES_MAX: usize = SODIUM_SIZE_MAX;
29
30pub const CRYPTO_BOX_PUBLICKEYBYTES: usize = CRYPTO_BOX_CURVE25519XSALSA20POLY1305_PUBLICKEYBYTES;
31pub const CRYPTO_BOX_SECRETKEYBYTES: usize = CRYPTO_BOX_CURVE25519XSALSA20POLY1305_SECRETKEYBYTES;
32pub const CRYPTO_BOX_MACBYTES: usize = CRYPTO_BOX_CURVE25519XSALSA20POLY1305_MACBYTES;
33pub const CRYPTO_BOX_NONCEBYTES: usize = CRYPTO_BOX_CURVE25519XSALSA20POLY1305_NONCEBYTES;
34pub const CRYPTO_BOX_SEEDBYTES: usize = CRYPTO_BOX_CURVE25519XSALSA20POLY1305_SEEDBYTES;
35pub const CRYPTO_BOX_BEFORENMBYTES: usize = CRYPTO_BOX_CURVE25519XSALSA20POLY1305_BEFORENMBYTES;
36pub const CRYPTO_BOX_SEALBYTES: usize = CRYPTO_BOX_PUBLICKEYBYTES + CRYPTO_BOX_MACBYTES;
37pub const CRYPTO_BOX_MESSAGEBYTES_MAX: usize =
38 CRYPTO_STREAM_XSALSA20_MESSAGEBYTES_MAX - CRYPTO_BOX_CURVE25519XSALSA20POLY1305_MACBYTES;
39
40pub const CRYPTO_SECRETBOX_XSALSA20POLY1305_KEYBYTES: usize = 32;
41pub const CRYPTO_SECRETBOX_XSALSA20POLY1305_NONCEBYTES: usize = 24;
42pub const CRYPTO_SECRETBOX_XSALSA20POLY1305_MACBYTES: usize = 16;
43pub const CRYPTO_SECRETBOX_XSALSA20POLY1305_MESSAGEBYTES_MAX: usize =
44 CRYPTO_STREAM_XSALSA20_MESSAGEBYTES_MAX - CRYPTO_SECRETBOX_XSALSA20POLY1305_MACBYTES;
45
46pub const CRYPTO_SECRETBOX_KEYBYTES: usize = CRYPTO_SECRETBOX_XSALSA20POLY1305_KEYBYTES;
47pub const CRYPTO_SECRETBOX_NONCEBYTES: usize = CRYPTO_SECRETBOX_XSALSA20POLY1305_NONCEBYTES;
48pub const CRYPTO_SECRETBOX_MACBYTES: usize = CRYPTO_SECRETBOX_XSALSA20POLY1305_MACBYTES;
49pub const CRYPTO_SECRETBOX_PRIMITIVE: &str = "xsalsa20poly1305";
50pub const CRYPTO_SECRETBOX_MESSAGEBYTES_MAX: usize =
51 CRYPTO_SECRETBOX_XSALSA20POLY1305_MESSAGEBYTES_MAX;
52
53pub const CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES: usize = 32;
54pub const CRYPTO_AEAD_CHACHA20POLY1305_IETF_NSECBYTES: usize = 0;
55pub const CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES: usize = 12;
56pub const CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES: usize = 16;
57pub const CRYPTO_AEAD_CHACHA20POLY1305_IETF_MESSAGEBYTES_MAX: usize = min_usize_u64(
58 SODIUM_SIZE_MAX - CRYPTO_AEAD_CHACHA20POLY1305_IETF_ABYTES,
59 64u64 * ((1u64 << 32) - 1u64),
60);
61
62pub const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES: usize = 32;
63pub const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NSECBYTES: usize = 0;
64pub const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES: usize = 24;
65pub const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES: usize = 16;
66pub const CRYPTO_AEAD_XCHACHA20POLY1305_IETF_MESSAGEBYTES_MAX: usize =
70 SODIUM_SIZE_MAX - CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES;
71
72pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES: usize =
73 CRYPTO_AEAD_XCHACHA20POLY1305_IETF_KEYBYTES;
74pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_HEADERBYTES: usize =
75 CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES;
76pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_INONCEBYTES: usize = 8;
77pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_COUNTERBYTES: usize = 4;
78pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES: usize =
79 1 + CRYPTO_AEAD_XCHACHA20POLY1305_IETF_ABYTES;
80pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_MESSAGEBYTES_MAX: usize = min_usize_u64(
81 SODIUM_SIZE_MAX - CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES,
82 64u64 * ((1u64 << 32) - 2u64),
83);
84
85pub const CRYPTO_STREAM_CHACHA20_IETF_KEYBYTES: usize = 32;
86pub const CRYPTO_STREAM_CHACHA20_IETF_NONCEBYTES: usize = 12;
87
88pub const CRYPTO_CORE_HCHACHA20_INPUTBYTES: usize = 16;
89pub const CRYPTO_CORE_HCHACHA20_OUTPUTBYTES: usize = 32;
90pub const CRYPTO_CORE_HCHACHA20_KEYBYTES: usize = 32;
91
92pub const CRYPTO_CORE_HSALSA20_OUTPUTBYTES: usize = 32;
93pub const CRYPTO_CORE_HSALSA20_INPUTBYTES: usize = 16;
94pub const CRYPTO_CORE_HSALSA20_KEYBYTES: usize = 32;
95pub const CRYPTO_CORE_HSALSA20_CONSTBYTES: usize = 16;
96
97pub const CRYPTO_SECRETSTREAM_PADBYTES: usize = 8;
98
99pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_MESSAGE: u8 = 0x00;
100pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH: u8 = 0x01;
101pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY: u8 = 0x02;
102pub const CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL: u8 =
103 CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_PUSH
104 | CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_REKEY;
105
106pub const CRYPTO_GENERICHASH_BLAKE2B_BYTES_MIN: usize = 16;
107pub const CRYPTO_GENERICHASH_BLAKE2B_BYTES_MAX: usize = 64;
108pub const CRYPTO_GENERICHASH_BLAKE2B_BYTES: usize = 32;
109pub const CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES_MIN: usize = 16;
110pub const CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES_MAX: usize = 64;
111pub const CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES: usize = 32;
112pub const CRYPTO_GENERICHASH_BLAKE2B_SALTBYTES: usize = 16;
113pub const CRYPTO_GENERICHASH_BLAKE2B_PERSONALBYTES: usize = 16;
114
115pub const CRYPTO_GENERICHASH_BYTES: usize = CRYPTO_GENERICHASH_BLAKE2B_BYTES;
116pub const CRYPTO_GENERICHASH_KEYBYTES: usize = CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES;
117pub const CRYPTO_GENERICHASH_BYTES_MIN: usize = CRYPTO_GENERICHASH_BLAKE2B_BYTES_MIN;
118pub const CRYPTO_GENERICHASH_BYTES_MAX: usize = CRYPTO_GENERICHASH_BLAKE2B_BYTES_MAX;
119pub const CRYPTO_GENERICHASH_KEYBYTES_MIN: usize = CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES_MIN;
120pub const CRYPTO_GENERICHASH_KEYBYTES_MAX: usize = CRYPTO_GENERICHASH_BLAKE2B_KEYBYTES_MAX;
121
122pub const CRYPTO_ONETIMEAUTH_POLY1305_BYTES: usize = 16;
123pub const CRYPTO_ONETIMEAUTH_POLY1305_KEYBYTES: usize = 32;
124
125pub const CRYPTO_ONETIMEAUTH_BYTES: usize = CRYPTO_ONETIMEAUTH_POLY1305_BYTES;
126pub const CRYPTO_ONETIMEAUTH_KEYBYTES: usize = CRYPTO_ONETIMEAUTH_POLY1305_KEYBYTES;
127
128pub const CRYPTO_AUTH_HMACSHA512256_BYTES: usize = 32;
129pub const CRYPTO_AUTH_HMACSHA512256_KEYBYTES: usize = 32;
130
131pub const CRYPTO_AUTH_HMACSHA256_BYTES: usize = 32;
132pub const CRYPTO_AUTH_HMACSHA256_KEYBYTES: usize = 32;
133pub const CRYPTO_AUTH_HMACSHA512_BYTES: usize = 64;
134pub const CRYPTO_AUTH_HMACSHA512_KEYBYTES: usize = 32;
135
136pub const CRYPTO_AUTH_BYTES: usize = CRYPTO_AUTH_HMACSHA512256_BYTES;
137pub const CRYPTO_AUTH_KEYBYTES: usize = CRYPTO_AUTH_HMACSHA512256_KEYBYTES;
138
139pub const CRYPTO_HASH_SHA256_BYTES: usize = 32;
140pub const CRYPTO_HASH_SHA512_BYTES: usize = 64;
141pub const CRYPTO_HASH_SHA3256_BYTES: usize = 32;
142pub const CRYPTO_HASH_SHA3512_BYTES: usize = 64;
143pub const CRYPTO_HASH_BYTES: usize = CRYPTO_HASH_SHA512_BYTES;
144pub const CRYPTO_HASH_PRIMITIVE: &str = "sha512";
145
146pub const CRYPTO_KDF_BLAKE2B_KEYBYTES: usize = 32;
147pub const CRYPTO_KDF_BLAKE2B_CONTEXTBYTES: usize = 8;
148pub const CRYPTO_KDF_BLAKE2B_BYTES_MIN: usize = 16;
149pub const CRYPTO_KDF_BLAKE2B_BYTES_MAX: usize = 64;
150
151pub const CRYPTO_KDF_HKDF_SHA256_KEYBYTES: usize = CRYPTO_AUTH_HMACSHA256_BYTES;
152pub const CRYPTO_KDF_HKDF_SHA256_BYTES_MIN: usize = 0;
153pub const CRYPTO_KDF_HKDF_SHA256_BYTES_MAX: usize = 255 * CRYPTO_AUTH_HMACSHA256_BYTES;
154pub const CRYPTO_KDF_HKDF_SHA512_KEYBYTES: usize = CRYPTO_AUTH_HMACSHA512_BYTES;
155pub const CRYPTO_KDF_HKDF_SHA512_BYTES_MIN: usize = 0;
156pub const CRYPTO_KDF_HKDF_SHA512_BYTES_MAX: usize = 255 * CRYPTO_AUTH_HMACSHA512_BYTES;
157
158pub const CRYPTO_KDF_KEYBYTES: usize = CRYPTO_KDF_BLAKE2B_KEYBYTES;
159pub const CRYPTO_KDF_CONTEXTBYTES: usize = CRYPTO_KDF_BLAKE2B_CONTEXTBYTES;
160
161pub const CRYPTO_KX_PUBLICKEYBYTES: usize = 32;
162pub const CRYPTO_KX_SECRETKEYBYTES: usize = 32;
163pub const CRYPTO_KX_SEEDBYTES: usize = 32;
164pub const CRYPTO_KX_SESSIONKEYBYTES: usize = 32;
165
166pub const CRYPTO_SIGN_ED25519_PUBLICKEYBYTES: usize = 32;
167pub const CRYPTO_SIGN_ED25519_SECRETKEYBYTES: usize = 32 + 32;
168pub const CRYPTO_SIGN_ED25519_BYTES: usize = 64;
169pub const CRYPTO_SIGN_ED25519_SEEDBYTES: usize = 32;
170pub const CRYPTO_SIGN_ED25519_MESSAGEBYTES_MAX: usize = SODIUM_SIZE_MAX - CRYPTO_SIGN_ED25519_BYTES;
171pub const CRYPTO_CORE_ED25519_BYTES: usize = 32;
172
173pub const CRYPTO_SIGN_BYTES: usize = CRYPTO_SIGN_ED25519_BYTES;
174pub const CRYPTO_SIGN_SEEDBYTES: usize = CRYPTO_SIGN_ED25519_SEEDBYTES;
175pub const CRYPTO_SIGN_PUBLICKEYBYTES: usize = CRYPTO_SIGN_ED25519_PUBLICKEYBYTES;
176pub const CRYPTO_SIGN_SECRETKEYBYTES: usize = CRYPTO_SIGN_ED25519_SECRETKEYBYTES;
177pub const CRYPTO_SIGN_MESSAGEBYTES_MAX: usize = CRYPTO_SIGN_ED25519_MESSAGEBYTES_MAX;
178
179pub const CRYPTO_SHORTHASH_SIPHASH24_BYTES: usize = 8;
180pub const CRYPTO_SHORTHASH_SIPHASH24_KEYBYTES: usize = 16;
181
182pub const CRYPTO_SHORTHASH_BYTES: usize = CRYPTO_SHORTHASH_SIPHASH24_BYTES;
183pub const CRYPTO_SHORTHASH_KEYBYTES: usize = CRYPTO_SHORTHASH_SIPHASH24_KEYBYTES;
184
185pub const CRYPTO_PWHASH_ARGON2I_ALG_ARGON2I13: usize = 1;
186pub const CRYPTO_PWHASH_ARGON2I_BYTES_MAX: usize = min(SODIUM_SIZE_MAX, 4294967295);
187pub const CRYPTO_PWHASH_ARGON2I_BYTES_MIN: usize = 16;
188pub const CRYPTO_PWHASH_ARGON2I_MEMLIMIT_INTERACTIVE: usize = 33554432;
189pub const CRYPTO_PWHASH_ARGON2I_MEMLIMIT_MAX: usize = max(
190 min_usize_u64(SODIUM_SIZE_MAX, 4398046510080),
191 max(
192 min(SODIUM_SIZE_MAX, 2147483648),
193 min(SODIUM_SIZE_MAX, 32768),
194 ),
195);
196pub const CRYPTO_PWHASH_ARGON2I_MEMLIMIT_MIN: usize = 8192;
197pub const CRYPTO_PWHASH_ARGON2I_MEMLIMIT_MODERATE: usize = 134217728;
198pub const CRYPTO_PWHASH_ARGON2I_MEMLIMIT_SENSITIVE: usize = 536870912;
199pub const CRYPTO_PWHASH_ARGON2I_OPSLIMIT_INTERACTIVE: u64 = 4;
200pub const CRYPTO_PWHASH_ARGON2I_OPSLIMIT_MAX: u64 = 4294967295;
201pub const CRYPTO_PWHASH_ARGON2I_OPSLIMIT_MIN: u64 = 3;
202pub const CRYPTO_PWHASH_ARGON2I_OPSLIMIT_MODERATE: u64 = 6;
203pub const CRYPTO_PWHASH_ARGON2I_OPSLIMIT_SENSITIVE: u64 = 8;
204pub const CRYPTO_PWHASH_ARGON2I_PASSWD_MAX: usize = 4294967295;
205pub const CRYPTO_PWHASH_ARGON2I_PASSWD_MIN: usize = 0;
206pub const CRYPTO_PWHASH_ARGON2I_SALTBYTES_MAX: usize = 0xFFFFFFFF;
207pub const CRYPTO_PWHASH_ARGON2I_SALTBYTES_MIN: usize = 8;
208pub const CRYPTO_PWHASH_ARGON2I_SALTBYTES: usize = 16;
209pub const CRYPTO_PWHASH_ARGON2I_STRBYTES: usize = 128;
210pub const CRYPTO_PWHASH_ARGON2I_STRPREFIX: &str = "$argon2i$";
211
212pub const CRYPTO_PWHASH_ARGON2ID_ALG_ARGON2ID13: usize = 2;
213pub const CRYPTO_PWHASH_ARGON2ID_BYTES_MAX: usize = min(SODIUM_SIZE_MAX, 4294967295);
214pub const CRYPTO_PWHASH_ARGON2ID_BYTES_MIN: usize = 16;
215pub const CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_INTERACTIVE: usize = 67108864;
216pub const CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MIN: usize = 8192;
217pub const CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MAX: usize = max(
218 min_usize_u64(SODIUM_SIZE_MAX, 4398046510080),
219 max(
220 min(SODIUM_SIZE_MAX, 2147483648),
221 min(SODIUM_SIZE_MAX, 32768),
222 ),
223);
224pub const CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MODERATE: usize = 268435456;
225pub const CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_SENSITIVE: usize = 1073741824;
226pub const CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_INTERACTIVE: u64 = 2;
227pub const CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MAX: u64 = 4294967295;
228pub const CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MIN: u64 = 1;
229pub const CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MODERATE: u64 = 3;
230pub const CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_SENSITIVE: u64 = 4;
231pub const CRYPTO_PWHASH_ARGON2ID_PASSWD_MAX: usize = 4294967295;
232pub const CRYPTO_PWHASH_ARGON2ID_PASSWD_MIN: usize = 0;
233pub const CRYPTO_PWHASH_ARGON2ID_SALTBYTES_MAX: usize = 0xFFFFFFFF;
234pub const CRYPTO_PWHASH_ARGON2ID_SALTBYTES_MIN: usize = 8;
235pub const CRYPTO_PWHASH_ARGON2ID_SALTBYTES: usize = 16;
236pub const CRYPTO_PWHASH_ARGON2ID_STRBYTES: usize = 128;
237pub const CRYPTO_PWHASH_ARGON2ID_STRPREFIX: &str = "$argon2id$";
238
239pub const CRYPTO_PWHASH_ALG_ARGON2I13: usize = CRYPTO_PWHASH_ARGON2I_ALG_ARGON2I13;
240pub const CRYPTO_PWHASH_ALG_ARGON2ID13: usize = CRYPTO_PWHASH_ARGON2ID_ALG_ARGON2ID13;
241pub const CRYPTO_PWHASH_ALG_DEFAULT: usize = CRYPTO_PWHASH_ALG_ARGON2ID13;
242pub const CRYPTO_PWHASH_BYTES_MAX: usize = CRYPTO_PWHASH_ARGON2ID_BYTES_MAX;
243pub const CRYPTO_PWHASH_BYTES_MIN: usize = CRYPTO_PWHASH_ARGON2ID_BYTES_MIN;
244pub const CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE: usize = CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_INTERACTIVE;
245pub const CRYPTO_PWHASH_MEMLIMIT_MAX: usize = CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MAX;
246pub const CRYPTO_PWHASH_MEMLIMIT_MIN: usize = CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MIN;
247pub const CRYPTO_PWHASH_MEMLIMIT_MODERATE: usize = CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_MODERATE;
248pub const CRYPTO_PWHASH_MEMLIMIT_SENSITIVE: usize = CRYPTO_PWHASH_ARGON2ID_MEMLIMIT_SENSITIVE;
249pub const CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE: u64 = CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_INTERACTIVE;
250pub const CRYPTO_PWHASH_OPSLIMIT_MAX: u64 = CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MAX;
251pub const CRYPTO_PWHASH_OPSLIMIT_MIN: u64 = CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MIN;
252pub const CRYPTO_PWHASH_OPSLIMIT_MODERATE: u64 = CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_MODERATE;
253pub const CRYPTO_PWHASH_OPSLIMIT_SENSITIVE: u64 = CRYPTO_PWHASH_ARGON2ID_OPSLIMIT_SENSITIVE;
254pub const CRYPTO_PWHASH_PASSWD_MAX: usize = CRYPTO_PWHASH_ARGON2ID_PASSWD_MAX;
255pub const CRYPTO_PWHASH_PASSWD_MIN: usize = CRYPTO_PWHASH_ARGON2ID_PASSWD_MIN;
256pub const CRYPTO_PWHASH_SALTBYTES_MAX: usize = CRYPTO_PWHASH_ARGON2ID_SALTBYTES_MAX;
257pub const CRYPTO_PWHASH_SALTBYTES_MIN: usize = CRYPTO_PWHASH_ARGON2ID_SALTBYTES_MIN;
258pub const CRYPTO_PWHASH_SALTBYTES: usize = CRYPTO_PWHASH_ARGON2ID_SALTBYTES;
259pub const CRYPTO_PWHASH_STRBYTES: usize = CRYPTO_PWHASH_ARGON2ID_STRBYTES;
260pub const CRYPTO_PWHASH_STRPREFIX: &str = CRYPTO_PWHASH_ARGON2ID_STRPREFIX;