15 std::string display_time(
time_t seconds);
23 #define SET_CRACK_TIME(a, val) \
25 toret.crack_times_seconds.a = val; \
26 toret.crack_times_display.a = display_time(toret.crack_times_seconds.a); \
30 SET_CRACK_TIME(online_throttling_100_per_hour, guesses / (100.0 / 3600));
32 SET_CRACK_TIME(offline_slow_hashing_1e4_per_second, guesses / 1e4);
33 SET_CRACK_TIME(offline_fast_hashing_1e10_per_second, guesses / 1e10);
37 toret.
score = guesses_to_score(guesses);
45 if (guesses < 1e3 + DELTA) {
49 else if (guesses < 1e6 + DELTA) {
53 else if (guesses < 1e8 + DELTA) {
57 else if (guesses < 1e10 + DELTA) {
69 std::string display_time(
time_t seconds) {
70 auto minute =
static_cast<time_t>(60);
71 auto hour = minute * 60;
73 auto month = day * 31;
74 auto year = month * 12;
75 auto century = year * 100;
78 std::string display_str;
80 std::tie(display_num, display_str) = [&] () -> std::pair<time_t, std::string> {
82 return {0,
"less than a second"};
84 if (seconds < minute) {
86 return {base,
"second"};
88 else if (seconds < hour) {
90 return {base,
"minute"};
92 else if (seconds < day) {
94 return {base,
"hour"};
96 else if (seconds < month) {
100 else if (seconds < year) {
102 return {base,
"month"};
104 else if (seconds < century) {
106 return {base,
"year"};
109 return {0,
"centuries"};
114 std::ostringstream os;
115 os << display_num <<
" " << display_str;
116 display_str = os.str();
118 if (display_num != 1) {