static inline bool check_stupid() { uint8_t res[8]; mg_decrypt_fw(g_cipher, 8, res, g_key); if(is_full_ascii(res)) return g_notify(g_user, g_key, res); return false; }
static bool check_key(uint8_t key[NWZ_KEY_SIZE]) { struct upg_header_t hdr; mg_decrypt_fw(g_keysig_search.enc_buf, sizeof(hdr.sig), (void *)&hdr, key); if(is_full_ascii(hdr.sig)) { /* the signature looks correct, so decrypt the header futher to be sure */ mg_decrypt_fw(g_keysig_search.enc_buf, sizeof(hdr), (void *)&hdr, key); /* we expect the number of files to be small and the padding to be 0 */ if(hdr.nr_files == 0 || hdr.nr_files > 10 || hdr.pad != 0) return false; cprintf(RED, " Found key: %.8s (sig=%.8s, nr_files=%u)\n", key, hdr.sig, (unsigned)hdr.nr_files); pthread_mutex_lock(&g_keysig_search.mutex); g_keysig_search.found_keysig = true; memcpy(g_keysig_search.key, key, NWZ_KEY_SIZE); memcpy(g_keysig_search.sig, hdr.sig, NWZ_SIG_SIZE); pthread_mutex_unlock(&g_keysig_search.mutex); consumer_stop(); return true; } return false; }