struct decrypt_key_s *hd;  err = gpgme_data_new_from_file (&in, infile, 1); if (err) return err;
op_sign_file (int mode, const char *infile, const char *outfile){    gpgme_data_t in=NULL;    gpgme_data_t out=NULL;    gpgme_ctx_t ctx=NULL;    gpgme_error_t err;    struct decrypt_key_s *hd;    err = gpgme_data_new_from_file (&in, infile, 1);    if (err)	return err;    hd = xcalloc (1, sizeof *hd);    err = gpgme_new (&ctx);    if (err)	goto fail;    gpgme_set_passphrase_cb (ctx, passphrase_callback_box, hd);    err = gpgme_data_new (&out);    if (err)	goto fail;    err = gpgme_op_sign (ctx, in, out, mode);    if (!err)	err = data_to_file (&out, outfile);fail:    if (in != NULL)	gpgme_data_release (in);    if (out != NULL)	gpgme_data_release (out);    if (ctx != NULL)	gpgme_release (ctx);    xfree (hd);    return err;}