1 /*
2 Written in the D programming language.
3 For git maintenance (ensure at least one congruent line with originating C header):
4 #define crypto_pwhash_H
5 */
6
7 module deimos.sodium.crypto_pwhash;
8
9 import deimos.sodium.crypto_pwhash_argon2i : crypto_pwhash_argon2i_ALG_ARGON2I13;
10
11 import deimos.sodium.crypto_pwhash_argon2id: crypto_pwhash_argon2id_ALG_ARGON2ID13,
12 crypto_pwhash_argon2id_BYTES_MIN,
13 crypto_pwhash_argon2id_BYTES_MAX,
14 crypto_pwhash_argon2id_PASSWD_MIN,
15 crypto_pwhash_argon2id_PASSWD_MAX,
16 crypto_pwhash_argon2id_SALTBYTES,
17 crypto_pwhash_argon2id_STRBYTES,
18 crypto_pwhash_argon2id_STRPREFIX,
19 crypto_pwhash_argon2id_OPSLIMIT_MIN,
20 crypto_pwhash_argon2id_OPSLIMIT_MAX,
21 crypto_pwhash_argon2id_MEMLIMIT_MIN,
22 crypto_pwhash_argon2id_MEMLIMIT_MAX,
23 crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE,
24 crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE,
25 crypto_pwhash_argon2id_OPSLIMIT_MODERATE,
26 crypto_pwhash_argon2id_MEMLIMIT_MODERATE,
27 crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE,
28 crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE;
29
30
31 extern(C) pure @nogc :
32
33 alias crypto_pwhash_ALG_ARGON2I13 = crypto_pwhash_argon2i_ALG_ARGON2I13;
34
35 int crypto_pwhash_alg_argon2i13() @trusted;
36
37 alias crypto_pwhash_ALG_ARGON2ID13 = crypto_pwhash_argon2id_ALG_ARGON2ID13;
38
39 int crypto_pwhash_alg_argon2id13() @trusted;
40
41
42 alias crypto_pwhash_ALG_DEFAULT = crypto_pwhash_ALG_ARGON2ID13;
43
44 int crypto_pwhash_alg_default() @trusted;
45
46 alias crypto_pwhash_BYTES_MIN = crypto_pwhash_argon2id_BYTES_MIN;
47
48 size_t crypto_pwhash_bytes_min() @trusted;
49
50 alias crypto_pwhash_BYTES_MAX = crypto_pwhash_argon2id_BYTES_MAX;
51
52 size_t crypto_pwhash_bytes_max() @trusted;
53
54 alias crypto_pwhash_PASSWD_MIN = crypto_pwhash_argon2id_PASSWD_MIN;
55
56 size_t crypto_pwhash_passwd_min() @trusted;
57
58 alias crypto_pwhash_PASSWD_MAX = crypto_pwhash_argon2id_PASSWD_MAX;
59
60 size_t crypto_pwhash_passwd_max() @trusted;
61
62 alias crypto_pwhash_SALTBYTES = crypto_pwhash_argon2id_SALTBYTES;
63
64 size_t crypto_pwhash_saltbytes() @trusted;
65
66 alias crypto_pwhash_STRBYTES = crypto_pwhash_argon2id_STRBYTES;
67
68 size_t crypto_pwhash_strbytes() @trusted;
69
70 alias crypto_pwhash_STRPREFIX = crypto_pwhash_argon2id_STRPREFIX;
71
72 const(char)* crypto_pwhash_strprefix() @trusted;
73
74 alias crypto_pwhash_OPSLIMIT_MIN = crypto_pwhash_argon2id_OPSLIMIT_MIN;
75
76 size_t crypto_pwhash_opslimit_min() @trusted;
77
78 alias crypto_pwhash_OPSLIMIT_MAX = crypto_pwhash_argon2id_OPSLIMIT_MAX;
79
80 size_t crypto_pwhash_opslimit_max() @trusted;
81
82 alias crypto_pwhash_MEMLIMIT_MIN = crypto_pwhash_argon2id_MEMLIMIT_MIN;
83
84 size_t crypto_pwhash_memlimit_min() @trusted;
85
86 alias crypto_pwhash_MEMLIMIT_MAX = crypto_pwhash_argon2id_MEMLIMIT_MAX;
87
88 size_t crypto_pwhash_memlimit_max() @trusted;
89
90 alias crypto_pwhash_OPSLIMIT_INTERACTIVE = crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE;
91
92 size_t crypto_pwhash_opslimit_interactive() @trusted;
93
94 alias crypto_pwhash_MEMLIMIT_INTERACTIVE = crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE;
95
96 size_t crypto_pwhash_memlimit_interactive() @trusted;
97
98 alias crypto_pwhash_OPSLIMIT_MODERATE = crypto_pwhash_argon2id_OPSLIMIT_MODERATE;
99
100 size_t crypto_pwhash_opslimit_moderate() @trusted;
101
102 alias crypto_pwhash_MEMLIMIT_MODERATE = crypto_pwhash_argon2id_MEMLIMIT_MODERATE;
103
104 size_t crypto_pwhash_memlimit_moderate() @trusted;
105
106 alias crypto_pwhash_OPSLIMIT_SENSITIVE = crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE;
107
108 size_t crypto_pwhash_opslimit_sensitive() @trusted;
109
110 alias crypto_pwhash_MEMLIMIT_SENSITIVE = crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE;
111
112 size_t crypto_pwhash_memlimit_sensitive() @trusted;
113
114 /*
115 * With this function, do not forget to store all parameters, including the
116 * algorithm identifier in order to produce deterministic output.
117 * The crypto_pwhash_* definitions, including crypto_pwhash_ALG_DEFAULT,
118 * may change.
119 */
120 int crypto_pwhash(ubyte* out_, ulong outlen,
121 const(char*) passwd, ulong passwdlen,
122 const(ubyte*) salt,
123 ulong opslimit, size_t memlimit, int alg) nothrow; // __attribute__ ((warn_unused_result)) __attribute__ ((nonnull));
124
125 /*
126 * The output string already includes all the required parameters, including
127 * the algorithm identifier. The string is all that has to be stored in
128 * order to verify a password.
129 */
130 int crypto_pwhash_str(ref char[crypto_pwhash_STRBYTES] out_,
131 const(char*) passwd, ulong passwdlen,
132 ulong opslimit, size_t memlimit) nothrow; // __attribute__ ((warn_unused_result)) __attribute__ ((nonnull));
133
134 int crypto_pwhash_str_alg(ref char[crypto_pwhash_STRBYTES] out_,
135 const(char*) passwd, ulong passwdlen,
136 ulong opslimit, size_t memlimit, int alg) nothrow; // __attribute__ ((warn_unused_result)) __attribute__ ((nonnull));
137
138 int crypto_pwhash_str_verify(ref const(char[crypto_pwhash_STRBYTES]) str,
139 const(char*) passwd,
140 ulong passwdlen) nothrow; // __attribute__ ((warn_unused_result)) __attribute__ ((nonnull));
141
142 int crypto_pwhash_str_needs_rehash(ref const(char[crypto_pwhash_STRBYTES]) str,
143 ulong opslimit, size_t memlimit) nothrow; // __attribute__ ((warn_unused_result)) __attribute__ ((nonnull));
144
145 enum crypto_pwhash_PRIMITIVE = "argon2i";
146
147 const(char)* crypto_pwhash_primitive() nothrow @trusted; // __attribute__ ((warn_unused_result))