Example #1
0
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);
}
Example #2
0
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);
}
Example #3
0
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);
}
Example #4
0
static void save_digest_format(GKeyFile *keyfile)
{
	g_key_file_set_integer(keyfile, "digest", "format", gui_get_digest_format());
}