aboutsummaryrefslogtreecommitdiffstats
path: root/gpgme/sign.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--gpgme/sign.c51
1 files changed, 20 insertions, 31 deletions
diff --git a/gpgme/sign.c b/gpgme/sign.c
index 68f68559..f416d104 100644
--- a/gpgme/sign.c
+++ b/gpgme/sign.c
@@ -182,50 +182,39 @@ _gpgme_sign_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
static GpgmeError
_gpgme_op_sign_start (GpgmeCtx ctx, int synchronous,
- GpgmeData in, GpgmeData out,
+ GpgmeData plain, GpgmeData sig,
GpgmeSigMode mode)
{
- GpgmeError err = 0;
+ GpgmeError err;
+
+ err = _gpgme_op_reset (ctx, synchronous);
+ if (err)
+ return err;
- if (mode != GPGME_SIG_MODE_NORMAL
- && mode != GPGME_SIG_MODE_DETACH
+ if (mode != GPGME_SIG_MODE_NORMAL && mode != GPGME_SIG_MODE_DETACH
&& mode != GPGME_SIG_MODE_CLEAR)
return GPGME_Invalid_Value;
- err = _gpgme_op_reset (ctx, synchronous);
- if (err)
- goto leave;
+ if (!plain)
+ return GPGME_No_Data;
+ if (!sig)
+ return GPGME_Invalid_Value;
- /* Check the supplied data. */
- if (!in)
+ if (ctx->passphrase_cb)
{
- err = GPGME_No_Data;
- goto leave;
+ err = _gpgme_engine_set_command_handler (ctx->engine,
+ _gpgme_passphrase_command_handler,
+ ctx, NULL);
+ if (err)
+ return err;
}
- if (!out)
- {
- err = GPGME_Invalid_Value;
- goto leave;
- }
-
- err = _gpgme_passphrase_start (ctx);
- if (err)
- goto leave;
_gpgme_engine_set_status_handler (ctx->engine, _gpgme_sign_status_handler,
ctx);
- err = _gpgme_engine_op_sign (ctx->engine, in, out, mode, ctx->use_armor,
- ctx->use_textmode, ctx->include_certs,
- ctx /* FIXME */);
-
- leave:
- if (err)
- {
- _gpgme_engine_release (ctx->engine);
- ctx->engine = NULL;
- }
- return err;
+ return _gpgme_engine_op_sign (ctx->engine, plain, sig, mode, ctx->use_armor,
+ ctx->use_textmode, ctx->include_certs,
+ ctx /* FIXME */);
}
GpgmeError