void gtkhash_hash_file_finish_cb(G_GNUC_UNUSED void *data) { const bool stop = gtkhash_hash_file_get_stop(&hash_priv.file_data); switch (gui_get_view()) { case GUI_VIEW_FILE: { if (stop) break; for (int i = 0; i < HASH_FUNCS_N; i++) { const char *digest = gtkhash_hash_func_get_digest(&hash.funcs[i], gui_get_digest_format()); gtk_entry_set_text(gui.hash_widgets[i].entry_file, digest); } break; } case GUI_VIEW_FILE_LIST: { g_assert(hash_priv.uris); g_assert(hash_priv.uris->data); if (stop) break; for (int i = 0; i < HASH_FUNCS_N; i++) { const char *digest = gtkhash_hash_func_get_digest(&hash.funcs[i], gui_get_digest_format()); list_set_digest(hash_priv.uris->data, i, digest); } g_free(hash_priv.uris->data); hash_priv.uris = g_slist_delete_link(hash_priv.uris, hash_priv.uris); if (hash_priv.uris) { hash_file_start(hash_priv.uris->data); return; } break; } default: g_assert_not_reached(); } gui_set_state(GUI_STATE_IDLE); }
void hash_string(void) { const char *str = gtk_entry_get_text(gui.entry_text); const enum digest_format_e digest_format = gui_get_digest_format(); size_t key_size = 0; const uint8_t *hmac_key = gui_get_hmac_key(&key_size); gtkhash_hash_string(hash.funcs, str, digest_format, hmac_key, key_size); }
void list_check_digests(const unsigned int row) { GtkTreeIter iter; if (!gtk_tree_model_iter_nth_child(gui.treemodel, &iter, NULL, row)) return; GValue value = G_VALUE_INIT; gtk_tree_model_get_value(gui.treemodel, &iter, COL_CHECK, &value); const char *check = g_value_get_string(&value); if (!*check) { g_value_unset(&value); gtk_list_store_set(gui.liststore, &iter, COL_ICON_NAME, "", -1); return; } const enum digest_format_e format = gui_get_digest_format(); bool match = false; for (int i = 0; (i < HASH_FUNCS_N) && !match; i++) { if (!hash.funcs[i].enabled) continue; GValue digest = G_VALUE_INIT; gtk_tree_model_get_value(gui.treemodel, &iter, list_priv.hash_cols[i], &digest); switch (format) { case DIGEST_FORMAT_HEX_LOWER: case DIGEST_FORMAT_HEX_UPPER: if (g_ascii_strcasecmp(g_value_get_string(&digest), check) == 0) match = true; break; case DIGEST_FORMAT_BASE64: if (strcmp(g_value_get_string(&digest), check) == 0) match = true; break; default: g_assert_not_reached(); } g_value_unset(&digest); } g_value_unset(&value); // XXX: maybe use ✓ and ✖ instead gtk_list_store_set(gui.liststore, &iter, COL_ICON_NAME, match ? "gtk-yes" : "gtk-no", -1); }
static void save_digest_format(GKeyFile *keyfile) { g_key_file_set_integer(keyfile, "digest", "format", gui_get_digest_format()); }