1 /**
2 * Author......: See docs/credits.txt
3 * License.....: MIT
4 */
5
6 #include "common.h"
7 #include "types.h"
8 #include "modules.h"
9 #include "bitops.h"
10 #include "convert.h"
11 #include "shared.h"
12
13 static const u32 ATTACK_EXEC = ATTACK_EXEC_OUTSIDE_KERNEL;
14 static const u32 DGST_POS0 = 0;
15 static const u32 DGST_POS1 = 1;
16 static const u32 DGST_POS2 = 2;
17 static const u32 DGST_POS3 = 3;
18 static const u32 DGST_SIZE = DGST_SIZE_4_8;
19 static const u32 HASH_CATEGORY = HASH_CATEGORY_FDE;
20 static const char *HASH_NAME = "AES Crypt (SHA256)";
21 static const u64 KERN_TYPE = 22400;
22 static const u32 OPTI_TYPE = 0;
23 static const u64 OPTS_TYPE = OPTS_TYPE_PT_GENERATE_LE
24 | OPTS_TYPE_POST_AMP_UTF16LE;
25 static const u32 SALT_TYPE = SALT_TYPE_EMBEDDED;
26 static const char *ST_PASS = "hashcat";
27 static const char *ST_HASH = "$aescrypt$1*efc648908ca7ec727f37f3316dfd885c*eff5c87a35545406a57b56de57bd0554*3a66401271aec08cbd10cf2070332214093a33f36bd0dced4a4bb09fab817184*6a3c49fea0cafb19190dc4bdadb787e73b1df244c51780beef912598bd3bdf7e";
28
module_attack_exec(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)29 u32 module_attack_exec (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ATTACK_EXEC; }
module_dgst_pos0(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)30 u32 module_dgst_pos0 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS0; }
module_dgst_pos1(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)31 u32 module_dgst_pos1 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS1; }
module_dgst_pos2(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)32 u32 module_dgst_pos2 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS2; }
module_dgst_pos3(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)33 u32 module_dgst_pos3 (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_POS3; }
module_dgst_size(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)34 u32 module_dgst_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return DGST_SIZE; }
module_hash_category(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)35 u32 module_hash_category (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_CATEGORY; }
module_hash_name(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)36 const char *module_hash_name (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return HASH_NAME; }
module_kern_type(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)37 u64 module_kern_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return KERN_TYPE; }
module_opti_type(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)38 u32 module_opti_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTI_TYPE; }
module_opts_type(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)39 u64 module_opts_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return OPTS_TYPE; }
module_salt_type(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)40 u32 module_salt_type (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return SALT_TYPE; }
module_st_hash(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)41 const char *module_st_hash (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_HASH; }
module_st_pass(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)42 const char *module_st_pass (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra) { return ST_PASS; }
43
44 #define ITERATION_AESCRYPT 0x2000
45 #define SALT_LEN_AESCRYPT 16
46 #define IV_LEN_AESCRYPT 16
47 #define KEY_LEN_AESCRYPT 32
48
49 typedef struct aescrypt
50 {
51 u32 iv[4];
52 u32 key[8];
53
54 } aescrypt_t;
55
56 typedef struct aescrypt_tmp
57 {
58 u32 pass[80];
59 int len;
60
61 } aescrypt_tmp_t;
62
63 static const char *SIGNATURE_AESCRYPT = "$aescrypt$";
64
module_pw_max(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)65 u32 module_pw_max (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
66 {
67 const u32 pw_max = 128;
68
69 return pw_max;
70 }
71
module_unstable_warning(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra,MAYBE_UNUSED const hc_device_param_t * device_param)72 bool module_unstable_warning (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hc_device_param_t *device_param)
73 {
74 // Intel(R) Xeon(R) W-3223 CPU @ 3.50GHz; OpenCL C 1.2; 11.3.1; 20E241
75 if ((device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE) && (device_param->opencl_device_type & CL_DEVICE_TYPE_CPU))
76 {
77 return true;
78 }
79
80 return false;
81 }
82
module_jit_build_options(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra,MAYBE_UNUSED const hashes_t * hashes,MAYBE_UNUSED const hc_device_param_t * device_param)83 char *module_jit_build_options (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra, MAYBE_UNUSED const hashes_t *hashes, MAYBE_UNUSED const hc_device_param_t *device_param)
84 {
85 char *jit_build_options = NULL;
86
87 // Extra treatment for Apple systems
88 if (device_param->opencl_platform_vendor_id == VENDOR_ID_APPLE)
89 {
90 return jit_build_options;
91 }
92
93 // NVIDIA GPU
94 if (device_param->opencl_device_vendor_id == VENDOR_ID_NV)
95 {
96 hc_asprintf (&jit_build_options, "-D _unroll");
97 }
98
99 // HIP
100 if (device_param->opencl_device_vendor_id == VENDOR_ID_AMD_USE_HIP)
101 {
102 hc_asprintf (&jit_build_options, "-D _unroll");
103 }
104
105 // ROCM
106 if ((device_param->opencl_device_vendor_id == VENDOR_ID_AMD) && (device_param->has_vperm == true))
107 {
108 hc_asprintf (&jit_build_options, "-D _unroll");
109 }
110
111 return jit_build_options;
112 }
113
module_esalt_size(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)114 u64 module_esalt_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
115 {
116 const u64 esalt_size = (const u64) sizeof (aescrypt_t);
117
118 return esalt_size;
119 }
120
module_tmp_size(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const user_options_t * user_options,MAYBE_UNUSED const user_options_extra_t * user_options_extra)121 u64 module_tmp_size (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const user_options_t *user_options, MAYBE_UNUSED const user_options_extra_t *user_options_extra)
122 {
123 const u64 tmp_size = (const u64) sizeof (aescrypt_tmp_t);
124
125 return tmp_size;
126 }
127
module_hash_decode(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED void * digest_buf,MAYBE_UNUSED salt_t * salt,MAYBE_UNUSED void * esalt_buf,MAYBE_UNUSED void * hook_salt_buf,MAYBE_UNUSED hashinfo_t * hash_info,const char * line_buf,MAYBE_UNUSED const int line_len)128 int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED void *digest_buf, MAYBE_UNUSED salt_t *salt, MAYBE_UNUSED void *esalt_buf, MAYBE_UNUSED void *hook_salt_buf, MAYBE_UNUSED hashinfo_t *hash_info, const char *line_buf, MAYBE_UNUSED const int line_len)
129 {
130 u32 *digest = (u32 *) digest_buf;
131
132 aescrypt_t *aescrypt = (aescrypt_t *) esalt_buf;
133
134 token_t token;
135
136 token.token_cnt = 6;
137
138 token.signatures_cnt = 1;
139 token.signatures_buf[0] = SIGNATURE_AESCRYPT;
140
141 token.len[0] = 10;
142 token.attr[0] = TOKEN_ATTR_FIXED_LENGTH
143 | TOKEN_ATTR_VERIFY_SIGNATURE;
144
145 token.sep[1] = '*';
146 token.len_min[1] = 1;
147 token.len_max[1] = 1;
148 token.attr[1] = TOKEN_ATTR_VERIFY_LENGTH
149 | TOKEN_ATTR_VERIFY_DIGIT;
150
151 token.sep[2] = '*';
152 token.len_min[2] = 32;
153 token.len_max[2] = 32;
154 token.attr[2] = TOKEN_ATTR_VERIFY_LENGTH
155 | TOKEN_ATTR_VERIFY_HEX;
156
157 token.sep[3] = '*';
158 token.len_min[3] = 32;
159 token.len_max[3] = 32;
160 token.attr[3] = TOKEN_ATTR_VERIFY_LENGTH
161 | TOKEN_ATTR_VERIFY_HEX;
162
163 token.sep[4] = '*';
164 token.len_min[4] = 64;
165 token.len_max[4] = 64;
166 token.attr[4] = TOKEN_ATTR_VERIFY_LENGTH
167 | TOKEN_ATTR_VERIFY_HEX;
168
169 token.sep[5] = '*';
170 token.len_min[5] = 64;
171 token.len_max[5] = 64;
172 token.attr[5] = TOKEN_ATTR_VERIFY_LENGTH
173 | TOKEN_ATTR_VERIFY_HEX;
174
175 const int rc_tokenizer = input_tokenizer ((const u8 *) line_buf, line_len, &token);
176
177 if (rc_tokenizer != PARSER_OK) return (rc_tokenizer);
178
179 // version
180
181 const u8 *version_pos = token.buf[1];
182
183 const u32 version = hc_strtoul ((const char *) version_pos, NULL, 10);
184
185 if (version != 1) return PARSER_SALT_VALUE;
186
187 // salt
188
189 const u8 *salt_pos = token.buf[2];
190
191 salt->salt_buf[0] = hex_to_u32 (salt_pos + 0);
192 salt->salt_buf[1] = hex_to_u32 (salt_pos + 8);
193 salt->salt_buf[2] = hex_to_u32 (salt_pos + 16);
194 salt->salt_buf[3] = hex_to_u32 (salt_pos + 24);
195
196 salt->salt_buf[0] = byte_swap_32 (salt->salt_buf[0]);
197 salt->salt_buf[1] = byte_swap_32 (salt->salt_buf[1]);
198 salt->salt_buf[2] = byte_swap_32 (salt->salt_buf[2]);
199 salt->salt_buf[3] = byte_swap_32 (salt->salt_buf[3]);
200
201 salt->salt_len = SALT_LEN_AESCRYPT;
202
203 salt->salt_iter = ITERATION_AESCRYPT - 1;
204
205 // IV
206
207 const u8 *iv_pos = token.buf[3];
208
209 aescrypt->iv[0] = hex_to_u32 (iv_pos + 0);
210 aescrypt->iv[1] = hex_to_u32 (iv_pos + 8);
211 aescrypt->iv[2] = hex_to_u32 (iv_pos + 16);
212 aescrypt->iv[3] = hex_to_u32 (iv_pos + 24);
213
214 aescrypt->iv[0] = byte_swap_32 (aescrypt->iv[0]);
215 aescrypt->iv[1] = byte_swap_32 (aescrypt->iv[1]);
216 aescrypt->iv[2] = byte_swap_32 (aescrypt->iv[2]);
217 aescrypt->iv[3] = byte_swap_32 (aescrypt->iv[3]);
218
219 // key
220
221 const u8 *key_pos = token.buf[4];
222
223 for (u32 i = 0, j = 0; i < 8; i += 1, j += 8)
224 {
225 aescrypt->key[i] = hex_to_u32 (key_pos + j);
226
227 aescrypt->key[i] = byte_swap_32 (aescrypt->key[i]);
228 }
229
230 // digest
231
232 const u8 *hmac_pos = token.buf[5];
233
234 for (u32 i = 0, j = 0; i < 8; i += 1, j += 8)
235 {
236 digest[i] = hex_to_u32 (hmac_pos + j);
237
238 digest[i] = byte_swap_32 (digest[i]);
239 }
240
241 return (PARSER_OK);
242 }
243
module_hash_encode(MAYBE_UNUSED const hashconfig_t * hashconfig,MAYBE_UNUSED const void * digest_buf,MAYBE_UNUSED const salt_t * salt,MAYBE_UNUSED const void * esalt_buf,MAYBE_UNUSED const void * hook_salt_buf,MAYBE_UNUSED const hashinfo_t * hash_info,char * line_buf,MAYBE_UNUSED const int line_size)244 int module_hash_encode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSED const void *digest_buf, MAYBE_UNUSED const salt_t *salt, MAYBE_UNUSED const void *esalt_buf, MAYBE_UNUSED const void *hook_salt_buf, MAYBE_UNUSED const hashinfo_t *hash_info, char *line_buf, MAYBE_UNUSED const int line_size)
245 {
246 const u32 *digest = (const u32 *) digest_buf;
247
248 aescrypt_t *aescrypt = (aescrypt_t *) esalt_buf;
249
250 // salt
251
252 #define SALT_HEX_LEN SALT_LEN_AESCRYPT * 2 + 1
253
254 char salt_buf[SALT_HEX_LEN] = { 0 };
255
256 for (u32 i = 0, j = 0; i < SALT_LEN_AESCRYPT / 4; i += 1, j += 8)
257 {
258 snprintf (salt_buf + j, SALT_HEX_LEN - j, "%08x", salt->salt_buf[i]);
259 }
260
261 // iv
262
263 #define IV_HEX_LEN IV_LEN_AESCRYPT * 2 + 1
264
265 char iv_buf[IV_HEX_LEN] = { 0 };
266
267 for (u32 i = 0, j = 0; i < IV_LEN_AESCRYPT / 4; i += 1, j += 8)
268 {
269 snprintf (iv_buf + j, IV_HEX_LEN - j, "%08x", aescrypt->iv[i]);
270 }
271
272 // key
273
274 #define KEY_HEX_LEN KEY_LEN_AESCRYPT * 2 + 1
275
276 char key_buf[KEY_HEX_LEN] = { 0 };
277
278 for (u32 i = 0, j = 0; i < KEY_LEN_AESCRYPT / 4; i += 1, j += 8)
279 {
280 snprintf (key_buf + j, KEY_HEX_LEN - j, "%08x", aescrypt->key[i]);
281 }
282
283 // output
284
285 int line_len = snprintf (line_buf, line_size, "%s%i*%s*%s*%s*%08x%08x%08x%08x%08x%08x%08x%08x",
286 SIGNATURE_AESCRYPT,
287 1,
288 salt_buf,
289 iv_buf,
290 key_buf,
291 digest[0],
292 digest[1],
293 digest[2],
294 digest[3],
295 digest[4],
296 digest[5],
297 digest[6],
298 digest[7]);
299
300 return line_len;
301 }
302
module_init(module_ctx_t * module_ctx)303 void module_init (module_ctx_t *module_ctx)
304 {
305 module_ctx->module_context_size = MODULE_CONTEXT_SIZE_CURRENT;
306 module_ctx->module_interface_version = MODULE_INTERFACE_VERSION_CURRENT;
307
308 module_ctx->module_attack_exec = module_attack_exec;
309 module_ctx->module_benchmark_esalt = MODULE_DEFAULT;
310 module_ctx->module_benchmark_hook_salt = MODULE_DEFAULT;
311 module_ctx->module_benchmark_mask = MODULE_DEFAULT;
312 module_ctx->module_benchmark_salt = MODULE_DEFAULT;
313 module_ctx->module_build_plain_postprocess = MODULE_DEFAULT;
314 module_ctx->module_deep_comp_kernel = MODULE_DEFAULT;
315 module_ctx->module_deprecated_notice = MODULE_DEFAULT;
316 module_ctx->module_dgst_pos0 = module_dgst_pos0;
317 module_ctx->module_dgst_pos1 = module_dgst_pos1;
318 module_ctx->module_dgst_pos2 = module_dgst_pos2;
319 module_ctx->module_dgst_pos3 = module_dgst_pos3;
320 module_ctx->module_dgst_size = module_dgst_size;
321 module_ctx->module_dictstat_disable = MODULE_DEFAULT;
322 module_ctx->module_esalt_size = module_esalt_size;
323 module_ctx->module_extra_buffer_size = MODULE_DEFAULT;
324 module_ctx->module_extra_tmp_size = MODULE_DEFAULT;
325 module_ctx->module_extra_tuningdb_block = MODULE_DEFAULT;
326 module_ctx->module_forced_outfile_format = MODULE_DEFAULT;
327 module_ctx->module_hash_binary_count = MODULE_DEFAULT;
328 module_ctx->module_hash_binary_parse = MODULE_DEFAULT;
329 module_ctx->module_hash_binary_save = MODULE_DEFAULT;
330 module_ctx->module_hash_decode_potfile = MODULE_DEFAULT;
331 module_ctx->module_hash_decode_zero_hash = MODULE_DEFAULT;
332 module_ctx->module_hash_decode = module_hash_decode;
333 module_ctx->module_hash_encode_status = MODULE_DEFAULT;
334 module_ctx->module_hash_encode_potfile = MODULE_DEFAULT;
335 module_ctx->module_hash_encode = module_hash_encode;
336 module_ctx->module_hash_init_selftest = MODULE_DEFAULT;
337 module_ctx->module_hash_mode = MODULE_DEFAULT;
338 module_ctx->module_hash_category = module_hash_category;
339 module_ctx->module_hash_name = module_hash_name;
340 module_ctx->module_hashes_count_min = MODULE_DEFAULT;
341 module_ctx->module_hashes_count_max = MODULE_DEFAULT;
342 module_ctx->module_hlfmt_disable = MODULE_DEFAULT;
343 module_ctx->module_hook_extra_param_size = MODULE_DEFAULT;
344 module_ctx->module_hook_extra_param_init = MODULE_DEFAULT;
345 module_ctx->module_hook_extra_param_term = MODULE_DEFAULT;
346 module_ctx->module_hook12 = MODULE_DEFAULT;
347 module_ctx->module_hook23 = MODULE_DEFAULT;
348 module_ctx->module_hook_salt_size = MODULE_DEFAULT;
349 module_ctx->module_hook_size = MODULE_DEFAULT;
350 module_ctx->module_jit_build_options = module_jit_build_options;
351 module_ctx->module_jit_cache_disable = MODULE_DEFAULT;
352 module_ctx->module_kernel_accel_max = MODULE_DEFAULT;
353 module_ctx->module_kernel_accel_min = MODULE_DEFAULT;
354 module_ctx->module_kernel_loops_max = MODULE_DEFAULT;
355 module_ctx->module_kernel_loops_min = MODULE_DEFAULT;
356 module_ctx->module_kernel_threads_max = MODULE_DEFAULT;
357 module_ctx->module_kernel_threads_min = MODULE_DEFAULT;
358 module_ctx->module_kern_type = module_kern_type;
359 module_ctx->module_kern_type_dynamic = MODULE_DEFAULT;
360 module_ctx->module_opti_type = module_opti_type;
361 module_ctx->module_opts_type = module_opts_type;
362 module_ctx->module_outfile_check_disable = MODULE_DEFAULT;
363 module_ctx->module_outfile_check_nocomp = MODULE_DEFAULT;
364 module_ctx->module_potfile_custom_check = MODULE_DEFAULT;
365 module_ctx->module_potfile_disable = MODULE_DEFAULT;
366 module_ctx->module_potfile_keep_all_hashes = MODULE_DEFAULT;
367 module_ctx->module_pwdump_column = MODULE_DEFAULT;
368 module_ctx->module_pw_max = module_pw_max;
369 module_ctx->module_pw_min = MODULE_DEFAULT;
370 module_ctx->module_salt_max = MODULE_DEFAULT;
371 module_ctx->module_salt_min = MODULE_DEFAULT;
372 module_ctx->module_salt_type = module_salt_type;
373 module_ctx->module_separator = MODULE_DEFAULT;
374 module_ctx->module_st_hash = module_st_hash;
375 module_ctx->module_st_pass = module_st_pass;
376 module_ctx->module_tmp_size = module_tmp_size;
377 module_ctx->module_unstable_warning = module_unstable_warning;
378 module_ctx->module_warmup_disable = MODULE_DEFAULT;
379 }
380