1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-11-22 16:18:09 +00:00

Cleaned up data_t, only contexts left

This commit is contained in:
jsteube 2016-09-29 23:49:33 +02:00
parent 12a2d6d2a0
commit 133c9295f5
14 changed files with 158 additions and 169 deletions

View File

@ -12,7 +12,7 @@
static const char INDUCT_DIR[] = "induct";
int induct_ctx_init (induct_ctx_t *induct_ctx, const user_options_t *user_options, const folder_config_t *folder_config, const time_t proc_start);
int induct_ctx_init (induct_ctx_t *induct_ctx, const user_options_t *user_options, const folder_config_t *folder_config, const status_ctx_t *status_ctx);
void induct_ctx_scan (induct_ctx_t *induct_ctx);
void induct_ctx_cleanup (induct_ctx_t *induct_ctx);
void induct_ctx_destroy (induct_ctx_t *induct_ctx);

View File

@ -41,7 +41,7 @@ void opencl_ctx_destroy (opencl_ctx_t *opencl_ctx);
int opencl_ctx_devices_init (opencl_ctx_t *opencl_ctx, const user_options_t *user_options);
void opencl_ctx_devices_destroy (opencl_ctx_t *opencl_ctx);
void opencl_ctx_devices_update_power (opencl_ctx_t *opencl_ctx, const user_options_t *user_options, const user_options_extra_t *user_options_extra);
void opencl_ctx_devices_update_power (opencl_ctx_t *opencl_ctx, const user_options_t *user_options, const user_options_extra_t *user_options_extra, status_ctx_t *status_ctx);
void opencl_ctx_devices_kernel_loops (opencl_ctx_t *opencl_ctx, const user_options_extra_t *user_options_extra, const hashconfig_t *hashconfig, const hashes_t *hashes, straight_ctx_t *straight_ctx, combinator_ctx_t *combinator_ctx, mask_ctx_t *mask_ctx);
int opencl_session_begin (opencl_ctx_t *opencl_ctx, hashconfig_t *hashconfig, const hashes_t *hashes, const straight_ctx_t *straight_ctx, const user_options_t *user_options, const user_options_extra_t *user_options_extra, const folder_config_t *folder_config, const bitmap_ctx_t *bitmap_ctx, const tuning_db_t *tuning_db);

View File

@ -23,8 +23,8 @@
#include <windows.h>
#endif // _WIN
void welcome_screen (const user_options_t *user_options, const time_t proc_start);
void goodbye_screen (const user_options_t *user_options, const time_t proc_start, const time_t proc_stop);
void welcome_screen (const user_options_t *user_options, const status_ctx_t *status_ctx);
void goodbye_screen (const user_options_t *user_options, const status_ctx_t *status_ctx);
int setup_console ();

View File

@ -721,9 +721,6 @@ typedef struct
int force_jit_compilation;
hc_thread_mutex_t mux_dispatcher;
hc_thread_mutex_t mux_counter;
} opencl_ctx_t;
#if defined (__APPLE__)
@ -1219,26 +1216,68 @@ typedef struct
typedef struct
{
/**
* main status
*/
u32 devices_status;
/**
* thread control
*/
bool run_main_level1;
bool run_main_level2;
bool run_main_level3;
bool run_thread_level1;
bool run_thread_level2;
bool shutdown_inner;
bool shutdown_outer;
hc_thread_mutex_t mux_dispatcher;
hc_thread_mutex_t mux_counter;
hc_thread_mutex_t mux_hwmon;
hc_thread_mutex_t mux_display;
/**
* workload
*/
u64 words_cnt;
u64 words_cur;
u64 words_base;
/**
* progress
*/
u64 *words_progress_done; // progress number of words done per salt
u64 *words_progress_rejected; // progress number of words rejected per salt
u64 *words_progress_restored; // progress number of words restored per salt
/**
* timer
*/
time_t runtime_start;
time_t runtime_stop;
time_t prepare_start;
time_t prepare_time;
time_t proc_start;
time_t proc_stop;
hc_timer_t timer_running; // timer on current dict
hc_timer_t timer_paused; // timer on current dict
double ms_paused; // timer on current dict
} status_ctx_t;
typedef struct
{
/**
* migrated
*/
bitmap_ctx_t *bitmap_ctx;
combinator_ctx_t *combinator_ctx;
cpt_ctx_t *cpt_ctx;
@ -1261,35 +1300,6 @@ typedef struct
user_options_extra_t *user_options_extra;
user_options_t *user_options;
/**
* threads
*/
bool shutdown_inner;
bool shutdown_outer;
/**
* status, timer
*/
time_t runtime_start;
time_t runtime_stop;
time_t prepare_start;
time_t prepare_time;
time_t proc_start;
time_t proc_stop;
u64 words_cnt;
u64 words_cur;
u64 words_base;
hc_timer_t timer_running; // timer on current dict
hc_timer_t timer_paused; // timer on current dict
double ms_paused; // timer on current dict
} hc_global_data_t;
#endif // _TYPES_H

View File

@ -75,12 +75,12 @@ static u32 get_power (opencl_ctx_t *opencl_ctx, hc_device_param_t *device_param)
return device_param->kernel_power;
}
static uint get_work (opencl_ctx_t *opencl_ctx, const user_options_t *user_options, hc_device_param_t *device_param, const u64 max)
static uint get_work (opencl_ctx_t *opencl_ctx, status_ctx_t *status_ctx, const user_options_t *user_options, hc_device_param_t *device_param, const u64 max)
{
hc_thread_mutex_lock (opencl_ctx->mux_dispatcher);
hc_thread_mutex_lock (status_ctx->mux_dispatcher);
const u64 words_cur = data.words_cur;
const u64 words_base = (user_options->limit == 0) ? data.words_base : MIN (user_options->limit, data.words_base);
const u64 words_cur = status_ctx->words_cur;
const u64 words_base = (user_options->limit == 0) ? status_ctx->words_base : MIN (user_options->limit, status_ctx->words_base);
device_param->words_off = words_cur;
@ -102,9 +102,9 @@ static uint get_work (opencl_ctx_t *opencl_ctx, const user_options_t *user_optio
work = MIN (work, max);
data.words_cur += work;
status_ctx->words_cur += work;
hc_thread_mutex_unlock (opencl_ctx->mux_dispatcher);
hc_thread_mutex_unlock (status_ctx->mux_dispatcher);
return work;
}
@ -133,11 +133,11 @@ void *thread_calc_stdin (void *p)
while (status_ctx->run_thread_level1 == true)
{
hc_thread_mutex_lock (opencl_ctx->mux_dispatcher);
hc_thread_mutex_lock (status_ctx->mux_dispatcher);
if (feof (stdin) != 0)
{
hc_thread_mutex_unlock (opencl_ctx->mux_dispatcher);
hc_thread_mutex_unlock (status_ctx->mux_dispatcher);
break;
}
@ -184,14 +184,14 @@ void *thread_calc_stdin (void *p)
{
if ((line_len < hashconfig->pw_min) || (line_len > hashconfig->pw_max))
{
hc_thread_mutex_lock (opencl_ctx->mux_counter);
hc_thread_mutex_lock (status_ctx->mux_counter);
for (uint salt_pos = 0; salt_pos < hashes->salts_cnt; salt_pos++)
{
status_ctx->words_progress_rejected[salt_pos] += straight_ctx->kernel_rules_cnt;
}
hc_thread_mutex_unlock (opencl_ctx->mux_counter);
hc_thread_mutex_unlock (status_ctx->mux_counter);
continue;
}
@ -204,7 +204,7 @@ void *thread_calc_stdin (void *p)
while (status_ctx->run_thread_level1 == false) break;
}
hc_thread_mutex_unlock (opencl_ctx->mux_dispatcher);
hc_thread_mutex_unlock (status_ctx->mux_dispatcher);
while (status_ctx->run_thread_level1 == false) break;
@ -267,7 +267,7 @@ void *thread_calc (void *p)
{
while (status_ctx->run_thread_level1 == true)
{
const uint work = get_work (opencl_ctx, user_options, device_param, -1u);
const uint work = get_work (opencl_ctx, status_ctx, user_options, device_param, -1u);
if (work == 0) break;
@ -379,7 +379,7 @@ void *thread_calc (void *p)
while (max)
{
const uint work = get_work (opencl_ctx, user_options, device_param, max);
const uint work = get_work (opencl_ctx, status_ctx, user_options, device_param, max);
if (work == 0) break;
@ -424,14 +424,14 @@ void *thread_calc (void *p)
{
max++;
hc_thread_mutex_lock (opencl_ctx->mux_counter);
hc_thread_mutex_lock (status_ctx->mux_counter);
for (uint salt_pos = 0; salt_pos < hashes->salts_cnt; salt_pos++)
{
status_ctx->words_progress_rejected[salt_pos] += straight_ctx->kernel_rules_cnt;
}
hc_thread_mutex_unlock (opencl_ctx->mux_counter);
hc_thread_mutex_unlock (status_ctx->mux_counter);
continue;
}
@ -445,14 +445,14 @@ void *thread_calc (void *p)
{
max++;
hc_thread_mutex_lock (opencl_ctx->mux_counter);
hc_thread_mutex_lock (status_ctx->mux_counter);
for (uint salt_pos = 0; salt_pos < hashes->salts_cnt; salt_pos++)
{
status_ctx->words_progress_rejected[salt_pos] += combinator_ctx->combs_cnt;
}
hc_thread_mutex_unlock (opencl_ctx->mux_counter);
hc_thread_mutex_unlock (status_ctx->mux_counter);
continue;
}

View File

@ -57,9 +57,6 @@ extern hc_global_data_t data;
extern int SUPPRESS_OUTPUT;
extern hc_thread_mutex_t mux_hwmon;
extern hc_thread_mutex_t mux_display;
extern const int DEFAULT_BENCHMARK_ALGORITHMS_CNT;
extern const int DEFAULT_BENCHMARK_ALGORITHMS_BUF[];
@ -82,25 +79,25 @@ static int inner2_loop (status_ctx_t *status_ctx, user_options_t *user_options,
status_progress_reset (status_ctx, hashes);
data.words_cur = 0;
status_ctx->words_cur = 0;
restore_data_t *rd = restore_ctx->rd;
if (rd->words_cur)
{
data.words_cur = rd->words_cur;
status_ctx->words_cur = rd->words_cur;
user_options->skip = 0;
}
if (user_options->skip)
{
data.words_cur = user_options->skip;
status_ctx->words_cur = user_options->skip;
user_options->skip = 0;
}
data.ms_paused = 0;
status_ctx->ms_paused = 0;
opencl_session_reset (opencl_ctx);
@ -137,11 +134,11 @@ static int inner2_loop (status_ctx_t *status_ctx, user_options_t *user_options,
return -1;
}
data.words_cnt = count_words (wl_data, user_options, user_options_extra, straight_ctx, combinator_ctx, fd2, straight_ctx->dict, dictstat_ctx);
status_ctx->words_cnt = count_words (wl_data, user_options, user_options_extra, straight_ctx, combinator_ctx, fd2, straight_ctx->dict, dictstat_ctx);
fclose (fd2);
if (data.words_cnt == 0)
if (status_ctx->words_cnt == 0)
{
logfile_sub_msg ("STOP");
@ -165,7 +162,7 @@ static int inner2_loop (status_ctx_t *status_ctx, user_options_t *user_options,
return -1;
}
data.words_cnt = count_words (wl_data, user_options, user_options_extra, straight_ctx, combinator_ctx, fd2, combinator_ctx->dict1, dictstat_ctx);
status_ctx->words_cnt = count_words (wl_data, user_options, user_options_extra, straight_ctx, combinator_ctx, fd2, combinator_ctx->dict1, dictstat_ctx);
fclose (fd2);
}
@ -180,12 +177,12 @@ static int inner2_loop (status_ctx_t *status_ctx, user_options_t *user_options,
return -1;
}
data.words_cnt = count_words (wl_data, user_options, user_options_extra, straight_ctx, combinator_ctx, fd2, combinator_ctx->dict2, dictstat_ctx);
status_ctx->words_cnt = count_words (wl_data, user_options, user_options_extra, straight_ctx, combinator_ctx, fd2, combinator_ctx->dict2, dictstat_ctx);
fclose (fd2);
}
if (data.words_cnt == 0)
if (status_ctx->words_cnt == 0)
{
logfile_sub_msg ("STOP");
@ -215,11 +212,11 @@ static int inner2_loop (status_ctx_t *status_ctx, user_options_t *user_options,
return -1;
}
data.words_cnt = count_words (wl_data, user_options, user_options_extra, straight_ctx, combinator_ctx, fd2, straight_ctx->dict, dictstat_ctx);
status_ctx->words_cnt = count_words (wl_data, user_options, user_options_extra, straight_ctx, combinator_ctx, fd2, straight_ctx->dict, dictstat_ctx);
fclose (fd2);
if (data.words_cnt == 0)
if (status_ctx->words_cnt == 0)
{
logfile_sub_msg ("STOP");
@ -231,7 +228,7 @@ static int inner2_loop (status_ctx_t *status_ctx, user_options_t *user_options,
logfile_sub_string (mask_ctx->mask);
}
u64 words_base = data.words_cnt;
u64 words_base = status_ctx->words_cnt;
if (user_options_extra->attack_kern == ATTACK_KERN_STRAIGHT)
{
@ -255,7 +252,7 @@ static int inner2_loop (status_ctx_t *status_ctx, user_options_t *user_options,
}
}
data.words_base = words_base;
status_ctx->words_base = words_base;
if (user_options->keyspace == true)
{
@ -264,34 +261,34 @@ static int inner2_loop (status_ctx_t *status_ctx, user_options_t *user_options,
return 0;
}
if (data.words_cur > data.words_base)
if (status_ctx->words_cur > status_ctx->words_base)
{
log_error ("ERROR: Restore value greater keyspace");
return -1;
}
if (data.words_cur)
if (status_ctx->words_cur)
{
if (user_options_extra->attack_kern == ATTACK_KERN_STRAIGHT)
{
for (uint i = 0; i < hashes->salts_cnt; i++)
{
status_ctx->words_progress_restored[i] = data.words_cur * straight_ctx->kernel_rules_cnt;
status_ctx->words_progress_restored[i] = status_ctx->words_cur * straight_ctx->kernel_rules_cnt;
}
}
else if (user_options_extra->attack_kern == ATTACK_KERN_COMBI)
{
for (uint i = 0; i < hashes->salts_cnt; i++)
{
status_ctx->words_progress_restored[i] = data.words_cur * combinator_ctx->combs_cnt;
status_ctx->words_progress_restored[i] = status_ctx->words_cur * combinator_ctx->combs_cnt;
}
}
else if (user_options_extra->attack_kern == ATTACK_KERN_BF)
{
for (uint i = 0; i < hashes->salts_cnt; i++)
{
status_ctx->words_progress_restored[i] = data.words_cur * mask_ctx->bfs_cnt;
status_ctx->words_progress_restored[i] = status_ctx->words_cur * mask_ctx->bfs_cnt;
}
}
}
@ -331,7 +328,7 @@ static int inner2_loop (status_ctx_t *status_ctx, user_options_t *user_options,
* autotune modified kernel_accel, which modifies opencl_ctx->kernel_power_all
*/
opencl_ctx_devices_update_power (opencl_ctx, user_options, user_options_extra);
opencl_ctx_devices_update_power (opencl_ctx, user_options, user_options_extra, status_ctx);
/**
* Begin loopback recording
@ -363,15 +360,15 @@ static int inner2_loop (status_ctx_t *status_ctx, user_options_t *user_options,
* Prepare cracking stats
*/
hc_timer_set (&data.timer_running);
hc_timer_set (&status_ctx->timer_running);
time_t runtime_start;
time (&runtime_start);
data.runtime_start = runtime_start;
status_ctx->runtime_start = runtime_start;
data.prepare_time = runtime_start - data.prepare_start;
status_ctx->prepare_time = runtime_start - status_ctx->prepare_start;
/**
* create cracker threads
@ -415,12 +412,12 @@ static int inner2_loop (status_ctx_t *status_ctx, user_options_t *user_options,
time (&runtime_stop);
data.runtime_stop = runtime_stop;
status_ctx->runtime_stop = runtime_stop;
logfile_sub_uint (runtime_start);
logfile_sub_uint (runtime_stop);
time (&data.prepare_start);
time (&status_ctx->prepare_start);
logfile_sub_msg ("STOP");
@ -684,7 +681,7 @@ static int inner1_loop (status_ctx_t *status_ctx, user_options_t *user_options,
sp_tbl_to_css (mask_ctx->root_table_buf, mask_ctx->markov_table_buf, mask_ctx->root_css_buf, mask_ctx->markov_css_buf, user_options->markov_threshold, uniq_tbls);
data.words_cnt = sp_get_sum (0, mask_ctx->css_cnt, mask_ctx->root_css_buf);
status_ctx->words_cnt = sp_get_sum (0, mask_ctx->css_cnt, mask_ctx->root_css_buf);
// copy + args
@ -1190,7 +1187,7 @@ static int outer_loop (status_ctx_t *status_ctx, user_options_t *user_options, u
* setup prepare timer
*/
time (&data.prepare_start);
time (&status_ctx->prepare_start);
/**
* setup variables and buffers depending on hash_mode
@ -1503,7 +1500,7 @@ static int outer_loop (status_ctx_t *status_ctx, user_options_t *user_options, u
hc_thread_t *inner_threads = (hc_thread_t *) mycalloc (10, sizeof (hc_thread_t));
data.shutdown_inner = false;
status_ctx->shutdown_inner = false;
/**
* Outfile remove
@ -1577,7 +1574,7 @@ static int outer_loop (status_ctx_t *status_ctx, user_options_t *user_options, u
// wait for inner threads
data.shutdown_inner = true;
status_ctx->shutdown_inner = true;
for (uint thread_idx = 0; thread_idx < inner_threads_cnt; thread_idx++)
{
@ -1656,21 +1653,6 @@ int main (int argc, char **argv)
setup_umask ();
/**
* Real init
*/
memset (&data, 0, sizeof (hc_global_data_t));
time_t proc_start;
time (&proc_start);
data.proc_start = proc_start;
hc_thread_mutex_init (mux_display);
hc_thread_mutex_init (mux_hwmon);
/**
* status init
*/
@ -1773,7 +1755,7 @@ int main (int argc, char **argv)
* - this is giving us a visual header before preparations start, so we do not need to clear them afterwards
*/
welcome_screen (user_options, proc_start);
welcome_screen (user_options, status_ctx);
/**
* logfile init
@ -1809,7 +1791,7 @@ int main (int argc, char **argv)
data.induct_ctx = induct_ctx;
const int rc_induct_ctx_init = induct_ctx_init (induct_ctx, user_options, folder_config, proc_start);
const int rc_induct_ctx_init = induct_ctx_init (induct_ctx, user_options, folder_config, status_ctx);
if (rc_induct_ctx_init == -1) return -1;
@ -1947,7 +1929,7 @@ int main (int argc, char **argv)
hc_thread_t *outer_threads = (hc_thread_t *) mycalloc (10, sizeof (hc_thread_t));
data.shutdown_outer = false;
status_ctx->shutdown_outer = false;
if (user_options->keyspace == false && user_options->benchmark == false && user_options->stdout_flag == false)
{
@ -1996,7 +1978,7 @@ int main (int argc, char **argv)
// wait for outer threads
data.shutdown_outer = true;
status_ctx->shutdown_outer = true;
for (uint thread_idx = 0; thread_idx < outer_threads_cnt; thread_idx++)
{
@ -2010,11 +1992,6 @@ int main (int argc, char **argv)
user_options->quiet = false;
}
// destroy others mutex
hc_thread_mutex_delete (mux_display);
hc_thread_mutex_delete (mux_hwmon);
// free memory
debugfile_destroy (debugfile_ctx);
@ -2041,20 +2018,20 @@ int main (int argc, char **argv)
opencl_ctx_devices_destroy (opencl_ctx);
opencl_ctx_destroy (opencl_ctx);
restore_ctx_destroy (restore_ctx);
time_t proc_stop;
time (&status_ctx->proc_stop);
time (&proc_stop);
logfile_top_uint (proc_start);
logfile_top_uint (proc_stop);
logfile_top_uint (status_ctx->proc_start);
logfile_top_uint (status_ctx->proc_stop);
logfile_top_msg ("STOP");
logfile_destroy (logfile_ctx);
goodbye_screen (user_options, proc_start, proc_stop);
goodbye_screen (user_options, status_ctx);
user_options_destroy (user_options);
@ -2065,8 +2042,6 @@ int main (int argc, char **argv)
if (status_ctx->devices_status == STATUS_EXHAUSTED) rc_final = 1;
if (status_ctx->devices_status == STATUS_CRACKED) rc_final = 0;
opencl_ctx_destroy (opencl_ctx);
status_ctx_destroy (status_ctx);
return rc_final;

View File

@ -21,7 +21,7 @@ static int sort_by_mtime (const void *p1, const void *p2)
return s2.st_mtime - s1.st_mtime;
}
int induct_ctx_init (induct_ctx_t *induct_ctx, const user_options_t *user_options, const folder_config_t *folder_config, const time_t proc_start)
int induct_ctx_init (induct_ctx_t *induct_ctx, const user_options_t *user_options, const folder_config_t *folder_config, const status_ctx_t *status_ctx)
{
induct_ctx->enabled = false;
@ -47,7 +47,7 @@ int induct_ctx_init (induct_ctx_t *induct_ctx, const user_options_t *user_option
{
char *root_directory_mv = (char *) mymalloc (HCBUFSIZ_TINY);
snprintf (root_directory_mv, HCBUFSIZ_TINY - 1, "%s/%s.induct.%d", folder_config->session_dir, user_options->session, (int) proc_start);
snprintf (root_directory_mv, HCBUFSIZ_TINY - 1, "%s/%s.induct.%d", folder_config->session_dir, user_options->session, (int) status_ctx->proc_start);
if (rename (root_directory, root_directory_mv) != 0)
{

View File

@ -112,7 +112,7 @@ void *thread_monitor (void *p)
u32 remove_left = user_options->remove_timer;
u32 status_left = user_options->status_timer;
while (data.shutdown_inner == false)
while (status_ctx->shutdown_inner == false)
{
hc_sleep (sleep_time);
@ -291,15 +291,15 @@ void *thread_monitor (void *p)
}
}
if ((runtime_check == true) && (data.runtime_start > 0))
if ((runtime_check == true) && (status_ctx->runtime_start > 0))
{
double ms_paused = data.ms_paused;
double ms_paused = status_ctx->ms_paused;
if (status_ctx->devices_status == STATUS_PAUSED)
{
double ms_paused_tmp = 0;
hc_timer_get (data.timer_paused, ms_paused_tmp);
hc_timer_get (status_ctx->timer_paused, ms_paused_tmp);
ms_paused += ms_paused_tmp;
}
@ -308,7 +308,7 @@ void *thread_monitor (void *p)
time (&runtime_cur);
int runtime_left = data.proc_start + user_options->runtime + data.prepare_time + (ms_paused / 1000) - runtime_cur;
int runtime_left = status_ctx->proc_start + user_options->runtime + status_ctx->prepare_time + (ms_paused / 1000) - runtime_cur;
if (runtime_left <= 0)
{

View File

@ -1299,11 +1299,11 @@ int run_cracker (opencl_ctx_t *opencl_ctx, hc_device_param_t *device_param, hash
u64 perf_sum_all = (u64) pws_cnt * (u64) innerloop_left;
hc_thread_mutex_lock (opencl_ctx->mux_counter);
hc_thread_mutex_lock (status_ctx->mux_counter);
status_ctx->words_progress_done[salt_pos] += perf_sum_all;
hc_thread_mutex_unlock (opencl_ctx->mux_counter);
hc_thread_mutex_unlock (status_ctx->mux_counter);
/**
* speed
@ -1359,9 +1359,6 @@ int opencl_ctx_init (opencl_ctx_t *opencl_ctx, const user_options_t *user_option
if (user_options->left == true) return 0;
if (user_options->keyspace == true) return 0;
hc_thread_mutex_init (opencl_ctx->mux_dispatcher);
hc_thread_mutex_init (opencl_ctx->mux_counter);
opencl_ctx->ocl = (OCL_PTR *) mymalloc (sizeof (OCL_PTR));
hc_device_param_t *devices_param = (hc_device_param_t *) mycalloc (DEVICES_MAX, sizeof (hc_device_param_t));
@ -1534,9 +1531,6 @@ void opencl_ctx_destroy (opencl_ctx_t *opencl_ctx)
myfree (opencl_ctx->platform_devices);
hc_thread_mutex_delete (opencl_ctx->mux_counter);
hc_thread_mutex_delete (opencl_ctx->mux_dispatcher);
myfree (opencl_ctx);
}
@ -2454,7 +2448,7 @@ void opencl_ctx_devices_destroy (opencl_ctx_t *opencl_ctx)
opencl_ctx->need_xnvctrl = 0;
}
void opencl_ctx_devices_update_power (opencl_ctx_t *opencl_ctx, const user_options_t *user_options, const user_options_extra_t *user_options_extra)
void opencl_ctx_devices_update_power (opencl_ctx_t *opencl_ctx, const user_options_t *user_options, const user_options_extra_t *user_options_extra, status_ctx_t *status_ctx)
{
u32 kernel_power_all = 0;
@ -2473,7 +2467,7 @@ void opencl_ctx_devices_update_power (opencl_ctx_t *opencl_ctx, const user_optio
if ((user_options_extra->wordlist_mode == WL_MODE_FILE) || (user_options_extra->wordlist_mode == WL_MODE_MASK))
{
if (data.words_base < kernel_power_all)
if (status_ctx->words_base < kernel_power_all)
{
if (user_options->quiet == false)
{

View File

@ -74,7 +74,7 @@ void *thread_outfile_remove (void *p)
uint check_left = outfile_check_timer; // or 1 if we want to check it at startup
while (data.shutdown_inner == false)
while (status_ctx->shutdown_inner == false)
{
hc_sleep (1);

View File

@ -40,7 +40,7 @@ u64 get_lowest_words_done (const restore_ctx_t *restore_ctx, const opencl_ctx_t
// It's possible that a device's workload isn't finished right after a restore-case.
// In that case, this function would return 0 and overwrite the real restore point
// There's also data.words_cur which is set to rd->words_cur but it changes while
// There's also status_ctx->words_cur which is set to rd->words_cur but it changes while
// the attack is running therefore we should stick to rd->words_cur.
// Note that -s influences rd->words_cur we should keep a close look on that.

View File

@ -233,7 +233,7 @@ void status_display_machine_readable (status_ctx_t *status_ctx, opencl_ctx_t *op
* counter
*/
u64 progress_total = data.words_cnt * hashes->salts_cnt;
u64 progress_total = status_ctx->words_cnt * hashes->salts_cnt;
u64 all_done = 0;
u64 all_rejected = 0;
@ -253,7 +253,7 @@ void status_display_machine_readable (status_ctx_t *status_ctx, opencl_ctx_t *op
if (user_options->skip)
{
progress_skip = MIN (user_options->skip, data.words_base) * hashes->salts_cnt;
progress_skip = MIN (user_options->skip, status_ctx->words_base) * hashes->salts_cnt;
if (user_options_extra->attack_kern == ATTACK_KERN_STRAIGHT) progress_skip *= straight_ctx->kernel_rules_cnt;
else if (user_options_extra->attack_kern == ATTACK_KERN_COMBI) progress_skip *= combinator_ctx->combs_cnt;
@ -262,7 +262,7 @@ void status_display_machine_readable (status_ctx_t *status_ctx, opencl_ctx_t *op
if (user_options->limit)
{
progress_end = MIN (user_options->limit, data.words_base) * hashes->salts_cnt;
progress_end = MIN (user_options->limit, status_ctx->words_base) * hashes->salts_cnt;
if (user_options_extra->attack_kern == ATTACK_KERN_STRAIGHT) progress_end *= straight_ctx->kernel_rules_cnt;
else if (user_options_extra->attack_kern == ATTACK_KERN_COMBI) progress_end *= combinator_ctx->combs_cnt;
@ -323,7 +323,7 @@ void status_display (status_ctx_t *status_ctx, opencl_ctx_t *opencl_ctx, const h
}
// in this case some required buffers are free'd, ascii_digest() would run into segfault
if (data.shutdown_inner == 1) return;
if (status_ctx->shutdown_inner == 1) return;
if (user_options->machine_readable == true)
{
@ -625,15 +625,15 @@ void status_display (status_ctx_t *status_ctx, opencl_ctx_t *opencl_ctx, const h
double ms_running = 0;
hc_timer_get (data.timer_running, ms_running);
hc_timer_get (status_ctx->timer_running, ms_running);
double ms_paused = data.ms_paused;
double ms_paused = status_ctx->ms_paused;
if (status_ctx->devices_status == STATUS_PAUSED)
{
double ms_paused_tmp = 0;
hc_timer_get (data.timer_paused, ms_paused_tmp);
hc_timer_get (status_ctx->timer_paused, ms_paused_tmp);
ms_paused += ms_paused_tmp;
}
@ -674,7 +674,7 @@ void status_display (status_ctx_t *status_ctx, opencl_ctx_t *opencl_ctx, const h
format_timer_display (&tm_run, display_run, sizeof (tm_run));
char *start = ctime (&data.proc_start);
char *start = ctime (&status_ctx->proc_start);
size_t start_len = strlen (start);
@ -693,7 +693,7 @@ void status_display (status_ctx_t *status_ctx, opencl_ctx_t *opencl_ctx, const h
* counters
*/
u64 progress_total = data.words_cnt * hashes->salts_cnt;
u64 progress_total = status_ctx->words_cnt * hashes->salts_cnt;
u64 all_done = 0;
u64 all_rejected = 0;
@ -715,7 +715,7 @@ void status_display (status_ctx_t *status_ctx, opencl_ctx_t *opencl_ctx, const h
+ status_ctx->words_progress_rejected[salt_pos]
+ status_ctx->words_progress_restored[salt_pos];
const u64 left = data.words_cnt - all;
const u64 left = status_ctx->words_cnt - all;
progress_noneed += left;
}
@ -728,7 +728,7 @@ void status_display (status_ctx_t *status_ctx, opencl_ctx_t *opencl_ctx, const h
if (user_options->skip)
{
progress_skip = MIN (user_options->skip, data.words_base) * hashes->salts_cnt;
progress_skip = MIN (user_options->skip, status_ctx->words_base) * hashes->salts_cnt;
if (user_options_extra->attack_kern == ATTACK_KERN_STRAIGHT) progress_skip *= straight_ctx->kernel_rules_cnt;
else if (user_options_extra->attack_kern == ATTACK_KERN_COMBI) progress_skip *= combinator_ctx->combs_cnt;
@ -737,7 +737,7 @@ void status_display (status_ctx_t *status_ctx, opencl_ctx_t *opencl_ctx, const h
if (user_options->limit)
{
progress_end = MIN (user_options->limit, data.words_base) * hashes->salts_cnt;
progress_end = MIN (user_options->limit, status_ctx->words_base) * hashes->salts_cnt;
if (user_options_extra->attack_kern == ATTACK_KERN_STRAIGHT) progress_end *= straight_ctx->kernel_rules_cnt;
else if (user_options_extra->attack_kern == ATTACK_KERN_COMBI) progress_end *= combinator_ctx->combs_cnt;
@ -819,13 +819,13 @@ void status_display (status_ctx_t *status_ctx, opencl_ctx_t *opencl_ctx, const h
#if defined (_WIN)
__time64_t runtime_left = data.proc_start + user_options->runtime + data.prepare_time + (ms_paused / 1000) - runtime_cur;
__time64_t runtime_left = status_ctx->proc_start + user_options->runtime + status_ctx->prepare_time + (ms_paused / 1000) - runtime_cur;
tmp = _gmtime64 (&runtime_left);
#else
time_t runtime_left = data.proc_start + user_options->runtime + data.prepare_time + (ms_paused / 1000) - runtime_cur;
time_t runtime_left = status_ctx->proc_start + user_options->runtime + status_ctx->prepare_time + (ms_paused / 1000) - runtime_cur;
tmp = gmtime (&runtime_left);
@ -958,7 +958,7 @@ void status_display (status_ctx_t *status_ctx, opencl_ctx_t *opencl_ctx, const h
u64 restore_point = get_lowest_words_done (restore_ctx, opencl_ctx);
u64 restore_total = data.words_base;
u64 restore_total = status_ctx->words_base;
double percent_restore = 0;
@ -1160,7 +1160,7 @@ void status_benchmark (status_ctx_t *status_ctx, opencl_ctx_t *opencl_ctx, const
return;
}
if (data.shutdown_inner == 1) return;
if (status_ctx->shutdown_inner == 1) return;
if (user_options->machine_readable == true)
{
@ -1283,12 +1283,22 @@ int status_ctx_init (status_ctx_t *status_ctx)
status_ctx->run_thread_level1 = true;
status_ctx->run_thread_level2 = true;
hc_thread_mutex_init (status_ctx->mux_dispatcher);
hc_thread_mutex_init (status_ctx->mux_counter);
hc_thread_mutex_init (status_ctx->mux_display);
hc_thread_mutex_init (status_ctx->mux_hwmon);
time (&status_ctx->proc_start);
return 0;
}
void status_ctx_destroy (status_ctx_t *status_ctx)
{
hc_thread_mutex_delete (status_ctx->mux_dispatcher);
hc_thread_mutex_delete (status_ctx->mux_counter);
hc_thread_mutex_delete (status_ctx->mux_display);
hc_thread_mutex_delete (status_ctx->mux_hwmon);
myfree (status_ctx);
}

View File

@ -38,7 +38,7 @@ extern const char *version_tag;
const char *PROMPT = "[s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => ";
void welcome_screen (const user_options_t *user_options, const time_t proc_start)
void welcome_screen (const user_options_t *user_options, const status_ctx_t *status_ctx)
{
if (user_options->quiet == true) return;
if (user_options->keyspace == true) return;
@ -55,7 +55,7 @@ void welcome_screen (const user_options_t *user_options, const time_t proc_start
}
else
{
log_info ("# %s (%s) %s", PROGNAME, version_tag, ctime (&proc_start));
log_info ("# %s (%s) %s", PROGNAME, version_tag, ctime (&status_ctx->proc_start));
}
}
else if (user_options->restore == true)
@ -70,7 +70,7 @@ void welcome_screen (const user_options_t *user_options, const time_t proc_start
}
}
void goodbye_screen (const user_options_t *user_options, const time_t proc_start, const time_t proc_stop)
void goodbye_screen (const user_options_t *user_options, const status_ctx_t *status_ctx)
{
if (user_options->quiet == true) return;
if (user_options->keyspace == true) return;
@ -78,8 +78,8 @@ void goodbye_screen (const user_options_t *user_options, const time_t proc_start
if (user_options->show == true) return;
if (user_options->left == true) return;
log_info_nn ("Started: %s", ctime (&proc_start));
log_info_nn ("Stopped: %s", ctime (&proc_stop));
log_info_nn ("Started: %s", ctime (&status_ctx->proc_start));
log_info_nn ("Stopped: %s", ctime (&status_ctx->proc_stop));
}
int setup_console ()
@ -155,7 +155,7 @@ void *thread_keypress (void *p)
tty_break ();
while (data.shutdown_outer == false)
while (status_ctx->shutdown_outer == false)
{
int ch = tty_getchar ();

View File

@ -51,7 +51,7 @@ BOOL WINAPI sigHandler_default (DWORD sig)
* function otherwise it is too late (e.g. after returning from this function)
*/
myabort (data.opencl_ctx);
myabort (data.status_ctx);
SetConsoleCtrlHandler (NULL, TRUE);
@ -63,7 +63,7 @@ BOOL WINAPI sigHandler_default (DWORD sig)
case CTRL_LOGOFF_EVENT:
case CTRL_SHUTDOWN_EVENT:
myabort (data.opencl_ctx);
myabort (data.status_ctx);
SetConsoleCtrlHandler (NULL, TRUE);
@ -79,7 +79,7 @@ BOOL WINAPI sigHandler_benchmark (DWORD sig)
{
case CTRL_CLOSE_EVENT:
myquit (data.opencl_ctx);
myquit (data.status_ctx);
SetConsoleCtrlHandler (NULL, TRUE);
@ -91,7 +91,7 @@ BOOL WINAPI sigHandler_benchmark (DWORD sig)
case CTRL_LOGOFF_EVENT:
case CTRL_SHUTDOWN_EVENT:
myquit (data.opencl_ctx);
myquit (data.status_ctx);
SetConsoleCtrlHandler (NULL, TRUE);
@ -198,7 +198,7 @@ void SuspendThreads (status_ctx_t *status_ctx)
{
if (status_ctx->devices_status != STATUS_RUNNING) return;
hc_timer_set (&data.timer_paused);
hc_timer_set (&status_ctx->timer_paused);
status_ctx->devices_status = STATUS_PAUSED;
@ -211,9 +211,9 @@ void ResumeThreads (status_ctx_t *status_ctx)
double ms_paused;
hc_timer_get (data.timer_paused, ms_paused);
hc_timer_get (status_ctx->timer_paused, ms_paused);
data.ms_paused += ms_paused;
status_ctx->ms_paused += ms_paused;
status_ctx->devices_status = STATUS_RUNNING;