LCOV - code coverage report
Current view: top level - src - decrypt-verify.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 28 41 68.3 %
Date: 2016-09-12 12:35:26 Functions: 3 4 75.0 %

          Line data    Source code
       1             : /* decrypt-verify.c - Decrypt and verify function.
       2             :    Copyright (C) 2000 Werner Koch (dd9jn)
       3             :    Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
       4             : 
       5             :    This file is part of GPGME.
       6             : 
       7             :    GPGME is free software; you can redistribute it and/or modify it
       8             :    under the terms of the GNU Lesser General Public License as
       9             :    published by the Free Software Foundation; either version 2.1 of
      10             :    the License, or (at your option) any later version.
      11             : 
      12             :    GPGME is distributed in the hope that it will be useful, but
      13             :    WITHOUT ANY WARRANTY; without even the implied warranty of
      14             :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      15             :    Lesser General Public License for more details.
      16             : 
      17             :    You should have received a copy of the GNU Lesser General Public
      18             :    License along with this program; if not, write to the Free Software
      19             :    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
      20             :    02111-1307, USA.  */
      21             : 
      22             : #if HAVE_CONFIG_H
      23             : #include <config.h>
      24             : #endif
      25             : 
      26             : #include "debug.h"
      27             : #include "gpgme.h"
      28             : #include "ops.h"
      29             : 
      30             : 
      31             : static gpgme_error_t
      32         122 : decrypt_verify_status_handler (void *priv, gpgme_status_code_t code,
      33             :                                char *args)
      34             : {
      35             :   gpgme_error_t err;
      36             : 
      37         122 :   err = _gpgme_progress_status_handler (priv, code, args);
      38         122 :   if (!err)
      39         122 :     err = _gpgme_decrypt_status_handler (priv, code, args);
      40         122 :   if (!err)
      41         122 :       err = _gpgme_verify_status_handler (priv, code, args);
      42         122 :   return err;
      43             : }
      44             : 
      45             : 
      46             : static gpgme_error_t
      47           7 : decrypt_verify_start (gpgme_ctx_t ctx, int synchronous,
      48             :                       gpgme_data_t cipher, gpgme_data_t plain)
      49             : {
      50             :   gpgme_error_t err;
      51             : 
      52           7 :   err = _gpgme_op_reset (ctx, synchronous);
      53           7 :   if (err)
      54           0 :     return err;
      55             : 
      56           7 :   err = _gpgme_op_decrypt_init_result (ctx);
      57           7 :   if (err)
      58           0 :     return err;
      59             : 
      60           7 :   err = _gpgme_op_verify_init_result (ctx);
      61           7 :   if (err)
      62           0 :     return err;
      63             : 
      64           7 :   if (!cipher)
      65           0 :     return gpg_error (GPG_ERR_NO_DATA);
      66           7 :   if (!plain)
      67           0 :     return gpg_error (GPG_ERR_INV_VALUE);
      68             : 
      69           7 :   if (ctx->passphrase_cb)
      70             :     {
      71           3 :       err = _gpgme_engine_set_command_handler
      72             :         (ctx->engine, _gpgme_passphrase_command_handler, ctx, NULL);
      73           3 :       if (err)
      74           0 :         return err;
      75             :     }
      76             : 
      77           7 :   _gpgme_engine_set_status_handler (ctx->engine,
      78             :                                     decrypt_verify_status_handler, ctx);
      79             : 
      80           7 :   return _gpgme_engine_op_decrypt_verify (ctx->engine, cipher, plain);
      81             : }
      82             : 
      83             : 
      84             : /* Decrypt ciphertext CIPHER and make a signature verification within
      85             :    CTX and store the resulting plaintext in PLAIN.  */
      86             : gpgme_error_t
      87           0 : gpgme_op_decrypt_verify_start (gpgme_ctx_t ctx, gpgme_data_t cipher,
      88             :                                gpgme_data_t plain)
      89             : {
      90             :   gpgme_error_t err;
      91             : 
      92           0 :   TRACE_BEG2 (DEBUG_CTX, "gpgme_op_decrypt_verify_start", ctx,
      93             :               "cipher=%p, plain=%p", cipher, plain);
      94             : 
      95           0 :   if (!ctx)
      96           0 :     return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
      97             : 
      98           0 :   err = decrypt_verify_start (ctx, 0, cipher, plain);
      99           0 :   return TRACE_ERR (err);
     100             : }
     101             : 
     102             : 
     103             : /* Decrypt ciphertext CIPHER and make a signature verification within
     104             :    CTX and store the resulting plaintext in PLAIN.  */
     105             : gpgme_error_t
     106           7 : gpgme_op_decrypt_verify (gpgme_ctx_t ctx, gpgme_data_t cipher,
     107             :                          gpgme_data_t plain)
     108             : {
     109             :   gpgme_error_t err;
     110             : 
     111           7 :   TRACE_BEG2 (DEBUG_CTX, "gpgme_op_decrypt_verify", ctx,
     112             :               "cipher=%p, plain=%p", cipher, plain);
     113             : 
     114           7 :   if (!ctx)
     115           0 :     return TRACE_ERR (gpg_error (GPG_ERR_INV_VALUE));
     116             : 
     117           7 :   err = decrypt_verify_start (ctx, 1, cipher, plain);
     118           7 :   if (!err)
     119           7 :     err = _gpgme_wait_one (ctx);
     120           7 :   return TRACE_ERR (err);
     121             : }

Generated by: LCOV version 1.11