op_sign_file_next (int (*pass_cb)(void *, const char*, const char*, int, int), void *pass_cb_value,
op_sign_file_next (gpgme_passphrase_cb_t pass_cb, void *pass_cb_value,
op_sign_file_next (int (*pass_cb)(void *, const char*, const char*, int, int),	           void *pass_cb_value,	           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;    err = gpgme_data_new_from_file (&in, infile, 1);    if (err)	return err;        err = gpgme_new (&ctx);    if (err)	goto fail;    gpgme_set_armor (ctx, 1);    gpgme_set_passphrase_cb (ctx, pass_cb, pass_cb_value);    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);        return err;}