From 567e6481d767af60390d649897b897a8b0e7e9a5 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 22 May 2013 15:30:12 +0100 Subject: Allow symmetric encryption with gpgme_op_encrypt_sign. * src/encrypt-sign.c (encrypt_sym_status_handler): New. (encrypt_sign_start): Handle recp == NULL case. * src/engine-gpg.c (gpg_encrypt_sign): Implement symmetric encryption. * tests/gpg/t-encrypt-sign.c (main): Add a test case for this. -- Co-authored-by: Kyle L. Huff GnuPG-bug-id: 1440 --- src/encrypt-sign.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'src/encrypt-sign.c') diff --git a/src/encrypt-sign.c b/src/encrypt-sign.c index cb0ea619..4f484e90 100644 --- a/src/encrypt-sign.c +++ b/src/encrypt-sign.c @@ -46,20 +46,39 @@ encrypt_sign_status_handler (void *priv, gpgme_status_code_t code, char *args) } +static gpgme_error_t +encrypt_sym_status_handler (void *priv, gpgme_status_code_t code, char *args) +{ + gpgme_error_t err; + + err = _gpgme_progress_status_handler (priv, code, args); + if (!err) + err = _gpgme_sign_status_handler (priv, code, args); + if (!err) + err = _gpgme_passphrase_status_handler (priv, code, args); + return err; +} + + static gpgme_error_t encrypt_sign_start (gpgme_ctx_t ctx, int synchronous, gpgme_key_t recp[], gpgme_encrypt_flags_t flags, gpgme_data_t plain, gpgme_data_t cipher) { gpgme_error_t err; + int symmetric; err = _gpgme_op_reset (ctx, synchronous); if (err) return err; + symmetric = !recp; + if (!plain) return gpg_error (GPG_ERR_NO_DATA); - if (!cipher || !recp) + if (!cipher) + return gpg_error (GPG_ERR_INV_VALUE); + if (recp && !*recp) return gpg_error (GPG_ERR_INV_VALUE); err = _gpgme_op_encrypt_init_result (ctx); @@ -79,7 +98,10 @@ encrypt_sign_start (gpgme_ctx_t ctx, int synchronous, gpgme_key_t recp[], } _gpgme_engine_set_status_handler (ctx->engine, - encrypt_sign_status_handler, ctx); + symmetric + ? encrypt_sym_status_handler + : encrypt_sign_status_handler, + ctx); return _gpgme_engine_op_encrypt_sign (ctx->engine, recp, flags, plain, cipher, ctx->use_armor, -- cgit v1.2.3