2004-06-23 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / gpgme / encrypt-sign.c
index 67c01c0..ae4b594 100644 (file)
 static gpgme_error_t
 encrypt_sign_status_handler (void *priv, gpgme_status_code_t code, char *args)
 {
-  return _gpgme_progress_status_handler (priv, code, args)
-    || _gpgme_encrypt_status_handler (priv, code, args)
-    || _gpgme_sign_status_handler (priv, code, args);
+  gpgme_error_t err;
+
+  err = _gpgme_progress_status_handler (priv, code, args);
+  if (!err)
+    err = _gpgme_encrypt_status_handler (priv, code, args);
+  if (!err)
+    err = _gpgme_sign_status_handler (priv, code, args);
+  return err;
 }
 
 
 static gpgme_error_t
-encrypt_sign_start (gpgme_ctx_t ctx, int synchronous, gpgme_user_id_t recp,
+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;
@@ -46,6 +52,11 @@ encrypt_sign_start (gpgme_ctx_t ctx, int synchronous, gpgme_user_id_t recp,
   if (err)
     return err;
 
+  if (!plain)
+    return gpg_error (GPG_ERR_NO_DATA);
+  if (!cipher || !recp)
+    return gpg_error (GPG_ERR_INV_VALUE);
+
   err = _gpgme_op_encrypt_init_result (ctx);
   if (err)
     return err;
@@ -54,16 +65,10 @@ encrypt_sign_start (gpgme_ctx_t ctx, int synchronous, gpgme_user_id_t recp,
   if (err)
     return err;
 
-  if (!plain)
-    return GPGME_No_Data;
-  if (!cipher)
-    return GPGME_Invalid_Value;
-
   if (ctx->passphrase_cb)
     {
-      err = _gpgme_engine_set_command_handler (ctx->engine,
-                                              _gpgme_passphrase_command_handler,
-                                              ctx, NULL);
+      err = _gpgme_engine_set_command_handler
+       (ctx->engine, _gpgme_passphrase_command_handler, ctx, NULL);
       if (err)
        return err;
     }
@@ -71,8 +76,9 @@ encrypt_sign_start (gpgme_ctx_t ctx, int synchronous, gpgme_user_id_t recp,
   _gpgme_engine_set_status_handler (ctx->engine,
                                    encrypt_sign_status_handler, ctx);
   
-  return _gpgme_engine_op_encrypt_sign (ctx->engine, recp, plain, cipher,
-                                       ctx->use_armor, ctx /* FIXME */);
+  return _gpgme_engine_op_encrypt_sign (ctx->engine, recp, flags, plain,
+                                       cipher, ctx->use_armor,
+                                       ctx /* FIXME */);
 }
 
 
@@ -80,10 +86,11 @@ encrypt_sign_start (gpgme_ctx_t ctx, int synchronous, gpgme_user_id_t recp,
    store the resulting ciphertext in CIPHER.  Also sign the ciphertext
    with the signers in CTX.  */
 gpgme_error_t
-gpgme_op_encrypt_sign_start (gpgme_ctx_t ctx, gpgme_user_id_t recp,
-                             gpgme_data_t plain, gpgme_data_t cipher)
+gpgme_op_encrypt_sign_start (gpgme_ctx_t ctx, gpgme_key_t recp[],
+                            gpgme_encrypt_flags_t flags,
+                            gpgme_data_t plain, gpgme_data_t cipher)
 {
-  return encrypt_sign_start (ctx, 0, recp, plain, cipher);
+  return encrypt_sign_start (ctx, 0, recp, flags, plain, cipher);
 }
 
 
@@ -91,10 +98,11 @@ gpgme_op_encrypt_sign_start (gpgme_ctx_t ctx, gpgme_user_id_t recp,
    store the resulting ciphertext in CIPHER.  Also sign the ciphertext
    with the signers in CTX.  */
 gpgme_error_t
-gpgme_op_encrypt_sign (gpgme_ctx_t ctx, gpgme_user_id_t recp,
+gpgme_op_encrypt_sign (gpgme_ctx_t ctx, gpgme_key_t recp[],
+                      gpgme_encrypt_flags_t flags,
                       gpgme_data_t plain, gpgme_data_t cipher)
 {
-  gpgme_error_t err = encrypt_sign_start (ctx, 1, recp, plain, cipher);
+  gpgme_error_t err = encrypt_sign_start (ctx, 1, recp, flags, plain, cipher);
   if (!err)
     err = _gpgme_wait_one (ctx);
   return err;