From ba8cd6894265bf2095a604d86df0278fb37fff11 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 25 Jan 2021 14:31:17 +0100 Subject: [PATCH] hf mf hardnested - NUM_SUMS is 19, making loop iterator smaller --- client/src/cmdhfmfhard.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/client/src/cmdhfmfhard.c b/client/src/cmdhfmfhard.c index d75e6b0a3..9061868eb 100644 --- a/client/src/cmdhfmfhard.c +++ b/client/src/cmdhfmfhard.c @@ -575,7 +575,7 @@ static void init_nonce_memory(void) { nonces[i].num = 0; nonces[i].Sum = 0; nonces[i].first = NULL; - for (uint16_t j = 0; j < NUM_SUMS; j++) { + for (uint8_t j = 0; j < NUM_SUMS; j++) { nonces[i].sum_a8_guess[j].sum_a8_idx = j; nonces[i].sum_a8_guess[j].prob = 0.0; } @@ -679,7 +679,7 @@ static float sum_probability(uint16_t i_K, uint16_t n, uint16_t k) { double p_T_is_k_when_S_is_K = p_hypergeometric(i_K, n, k); double p_S_is_K = p_K[i_K]; double p_T_is_k = 0; - for (uint16_t i = 0; i < NUM_SUMS; i++) { + for (uint8_t i = 0; i < NUM_SUMS; i++) { p_T_is_k += p_K[i] * p_hypergeometric(i, n, k); } return (p_T_is_k_when_S_is_K * p_S_is_K / p_T_is_k); @@ -1044,7 +1044,7 @@ static void estimate_sum_a8(void) { if (first_byte_num == 256) { for (uint16_t i = 0; i < 256; i++) { if (nonces[i].sum_a8_guess_dirty) { - for (uint16_t j = 0; j < NUM_SUMS; j++) { + for (uint8_t j = 0; j < NUM_SUMS; j++) { uint16_t sum_a8_idx = nonces[i].sum_a8_guess[j].sum_a8_idx; nonces[i].sum_a8_guess[j].prob = sum_probability(sum_a8_idx, nonces[i].num, nonces[i].Sum); } @@ -1102,7 +1102,7 @@ static int read_nonce_file(char *filename) { sprintf(progress_string, "Target Block=%d, Keytype=%c", trgBlockNo, trgKeyType == 0 ? 'A' : 'B'); hardnested_print_progress(num_acquired_nonces, progress_string, (float)(1LL << 47), 0); - for (uint16_t i = 0; i < NUM_SUMS; i++) { + for (uint8_t i = 0; i < NUM_SUMS; i++) { if (first_byte_Sum == sums[i]) { first_byte_Sum = i; break; @@ -1152,14 +1152,20 @@ __attribute__((force_align_arg_pointer)) return NULL; } for (uint16_t i = first_byte; i <= last_byte; i++) { + if (nonces[i].BitFlips[bitflip] == 0 && nonces[i].BitFlips[bitflip ^ 0x100] == 0 && nonces[i].first != NULL && nonces[i ^ (bitflip & 0xff)].first != NULL) { + uint8_t parity1 = (nonces[i].first->par_enc) >> 3; // parity of first byte uint8_t parity2 = (nonces[i ^ (bitflip & 0xff)].first->par_enc) >> 3; // parity of nonce with bits flipped + if ((parity1 == parity2 && !(bitflip & 0x100)) // bitflip || (parity1 != parity2 && (bitflip & 0x100))) { // not bitflip + nonces[i].BitFlips[bitflip] = 1; + for (odd_even_t odd_even = EVEN_STATE; odd_even <= ODD_STATE; odd_even++) { + if (bitflip_bitarrays[odd_even][bitflip] != NULL) { uint32_t old_count = nonces[i].num_states_bitarray[odd_even]; nonces[i].num_states_bitarray[odd_even] = count_bitarray_AND(nonces[i].states_bitarray[odd_even], bitflip_bitarrays[odd_even][bitflip]); @@ -1344,7 +1350,7 @@ static void simulate_acquire_nonces(void) { if (first_byte_num == 256) { if (hardnested_stage == CHECK_1ST_BYTES) { - for (uint16_t i = 0; i < NUM_SUMS; i++) { + for (uint8_t i = 0; i < NUM_SUMS; i++) { if (first_byte_Sum == sums[i]) { first_byte_Sum = i; break; @@ -1471,7 +1477,7 @@ static int acquire_nonces(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_ if (first_byte_num == 256) { if (hardnested_stage == CHECK_1ST_BYTES) { - for (uint16_t i = 0; i < NUM_SUMS; i++) { + for (uint8_t i = 0; i < NUM_SUMS; i++) { if (first_byte_Sum == sums[i]) { first_byte_Sum = i; break;