示例#1
0
GRG_TMPFILE
grg_tmpfile_gen (const GRG_CTX gctx)
{
	GRG_TMPFILE tf;
	char tmpname[] = "/tmp/___-XXXXXX";
	grg_crypt_algo ca;

	if (!gctx)
		return NULL;

	tf = (GRG_TMPFILE) malloc (sizeof (struct _grg_tmpfile));
	if (!tf)
		return NULL;

	ca = grg_ctx_get_crypt_algo (gctx);

	memcpy (tmpname + 5, gctx->header, HEADER_LEN);
	tf->tmpfd = mkstemp (tmpname);
	unlink (tmpname);
	memcpy (tmpname, "/tmp/___-XXXXXX", 15);

	if (tf->tmpfd < 0)
	{
		free (tf);
		return NULL;
	}

	tf->crypt =
		mcrypt_module_open (grg2mcrypt (ca), NULL, MCRYPT_CFB, NULL);
	if (tf->crypt == MCRYPT_FAILED)
	{
		close (tf->tmpfd);
		free (tf);
		return NULL;
	}

	tf->dKey = grg_get_key_size_static (ca);
	tf->key = grg_rnd_seq (gctx, tf->dKey);
	if(!tf->key)
	{
		close (tf->tmpfd);
		free (tf);
		return NULL;
	}

	tf->dIV = grg_get_block_size_static (ca);
	tf->IV = grg_rnd_seq (gctx, tf->dIV);
	if(!tf->IV)
	{
		close (tf->tmpfd);
		free (tf);
		return NULL;
	}

	tf->rwmode = WRITEABLE;

	return tf;
}
static void
update_crypto_label (void)
{
	gchar *lbltxt;
	guint key, block;

	block = grg_get_block_size_static (tmp_pref_crypto);
	key = grg_get_key_size_static (tmp_pref_crypto);
	lbltxt = g_strdup_printf (_(" Block size: %d bits"), block * 8);
	gtk_label_set_text (GTK_LABEL (crypto_block_lbl), lbltxt);
	g_free (lbltxt);
	lbltxt = g_strdup_printf (_(" Key length: %d bits"), key * 8);
	gtk_label_set_text (GTK_LABEL (crypto_key_lbl), lbltxt);
	g_free (lbltxt);
}