/[winpt]/trunk/MyGPGME/decrypt.c
ViewVC logotype

Diff of /trunk/MyGPGME/decrypt.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 9 by twoaday, Wed Apr 13 11:10:53 2005 UTC revision 22 by twoaday, Wed Aug 10 11:33:35 2005 UTC
# Line 46  struct decrypt_result_s { Line 46  struct decrypt_result_s {
46      int file_done;      int file_done;
47      char keyid[16+1];      char keyid[16+1];
48      char cardno[32+1];      char cardno[32+1];
49      void * last_pw_handle;      void *last_pw_handle;
50      char * userid_hint;      char *userid_hint;
51      char * passphrase_info;      char *passphrase_info;
52      char * file_name;          char *file_name;
53        struct {
54            int mode;
55            long times;
56            char *name;
57        } plain;
58  };  };
59    
60    
# Line 69  gpgme_decrypt_get_sig_ctx (gpgme_ctx_t c Line 74  gpgme_decrypt_get_sig_ctx (gpgme_ctx_t c
74    
75    
76  void  void
77  gpgme_decrypt_get_status( gpgme_ctx_t ctx, char * keyid,  gpgme_decrypt_get_status (gpgme_ctx_t ctx, char * keyid,
78                            gpgme_op_flags_t * r_flags )                            gpgme_op_flags_t * r_flags)
79  {  {
80      gpgme_op_flags_t flags = 0;      gpgme_op_flags_t flags = 0;
81      _decrypt_result_t res;          _decrypt_result_t res;    
82    
83      if( !keyid )      if (!keyid)
84          return;          return;
85      if( ctx->result_type != RESULT_TYPE_DECRYPT )      if (ctx->result_type != RESULT_TYPE_DECRYPT)
86          return;          return;
87      if( !ctx->result.decrypt->okay      if (!ctx->result.decrypt->okay
88          && ctx->result.decrypt->no_seckey ) {          && ctx->result.decrypt->no_seckey) {
89          strcpy( keyid, ctx->result.decrypt->keyid );          strcpy (keyid, ctx->result.decrypt->keyid);
90          flags |= GPGME_OPFLAG_NOSECKEY;          flags |= GPGME_OPFLAG_NOSECKEY;
91      }      }
92      res = ctx->result.decrypt;        res = ctx->result.decrypt;  
# Line 95  gpgme_decrypt_get_status( gpgme_ctx_t ct Line 100  gpgme_decrypt_get_status( gpgme_ctx_t ct
100    
101    
102  void  void
103  _gpgme_release_decrypt_result( _decrypt_result_t res )  _gpgme_release_decrypt_result (_decrypt_result_t res)
104  {  {
105      if( res ) {      if (res) {
106          safe_free( res->passphrase_info );          safe_free (res->passphrase_info);
107          safe_free( res->userid_hint );          safe_free (res->userid_hint);
108          gpgme_sig_release( res->sig );          safe_free (res->file_name);
109          safe_free( res );          safe_free (res->plain.name);
110            gpgme_sig_release(res->sig);
111            safe_free (res);
112      }      }
113  } /* _gpgme_release_decrypt_result */  } /* _gpgme_release_decrypt_result */
114    
# Line 181  decrypt_status_handler (gpgme_ctx_t ctx, Line 188  decrypt_status_handler (gpgme_ctx_t ctx,
188              return;              return;
189          }          }
190      }      }
   
191      assert (ctx->result_type == RESULT_TYPE_DECRYPT);      assert (ctx->result_type == RESULT_TYPE_DECRYPT);
192    
193      if (code == STATUS_GOODSIG || code == STATUS_REVKEYSIG      if (code == STATUS_GOODSIG || code == STATUS_REVKEYSIG
# Line 238  decrypt_status_handler (gpgme_ctx_t ctx, Line 244  decrypt_status_handler (gpgme_ctx_t ctx,
244      case STATUS_NO_PUBKEY:      case STATUS_NO_PUBKEY:
245          sig->sigstat = GPGME_SIG_STAT_NOKEY;          sig->sigstat = GPGME_SIG_STAT_NOKEY;
246          break;          break;
247    
248        case STATUS_PLAINTEXT:
249            i=0;
250            while (args[i] && args[i] == ' ')
251                i++;
252            ctx->result.decrypt->plain.mode = strtoul (args+i, NULL, 10);
253            while (args[i] && args[i] != ' ')
254                i++;
255            i++;
256            ctx->result.decrypt->plain.times = strtoul (args+i, NULL, 10);
257            while (args[i] && args[i] != ' ')
258                i++;
259            i++;
260            safe_free (ctx->result.decrypt->plain.name);
261            if (args[i]) {
262                p = ctx->result.decrypt->plain.name = strdup (args+i);
263                if (!p)
264                    ctx->out_of_core = 1;
265            }
266            break;
267                    
268      case STATUS_VALIDSIG:      case STATUS_VALIDSIG:
269          p = fpr;          p = fpr;
# Line 306  decrypt_status_handler (gpgme_ctx_t ctx, Line 332  decrypt_status_handler (gpgme_ctx_t ctx,
332          if (*args == '3') {          if (*args == '3') {
333              safe_free (ctx->result.decrypt->file_name);              safe_free (ctx->result.decrypt->file_name);
334              p = ctx->result.decrypt->file_name = strdup (args+2);              p = ctx->result.decrypt->file_name = strdup (args+2);
335              if( !p ) {              if (!p) {
336                  ctx->out_of_core = 1;                  ctx->out_of_core = 1;
337                  return;                  return;
338              }              }
# Line 318  decrypt_status_handler (gpgme_ctx_t ctx, Line 344  decrypt_status_handler (gpgme_ctx_t ctx,
344    
345      case STATUS_FILE_DONE:      case STATUS_FILE_DONE:
346          ctx->result.decrypt->file_done++;          ctx->result.decrypt->file_done++;
347          if( ctx->cb.interactiv )          if (ctx->cb.interactiv)
348              ctx->cb.interactiv( ctx->cb.interactiv_value, code, NULL, NULL );              ctx->cb.interactiv (ctx->cb.interactiv_value, code, NULL, NULL);
349          break;          break;
350    
351      case STATUS_CARDCTRL:      case STATUS_CARDCTRL:
# Line 549  file_decrypt_start( gpgme_ctx_t ctx, con Line 575  file_decrypt_start( gpgme_ctx_t ctx, con
575    
576    
577  static gpgme_error_t  static gpgme_error_t
578  decrypt_start( gpgme_ctx_t ctx, gpgme_data_t ciph, gpgme_data_t plain )  decrypt_start (gpgme_ctx_t ctx, gpgme_data_t ciph, gpgme_data_t plain)
579  {  {
580      int rc = 0;      int rc = 0;
581            
582      fail_on_pending_request( ctx );      fail_on_pending_request (ctx);
583      ctx->pending = 1;      ctx->pending = 1;
584            
585      _gpgme_release_result( ctx );      _gpgme_release_result (ctx);
586      ctx->out_of_core = 0;      ctx->out_of_core = 0;
587            
588      /* create a process object */      /* create a process object */
# Line 565  decrypt_start( gpgme_ctx_t ctx, gpgme_da Line 591  decrypt_start( gpgme_ctx_t ctx, gpgme_da
591      if( rc )      if( rc )
592          goto leave;          goto leave;
593            
594      _gpgme_gpg_set_status_handler( ctx->gpg, decrypt_status_handler, ctx );      _gpgme_gpg_set_status_handler (ctx->gpg, decrypt_status_handler, ctx);
595      if( ctx->use_logging )      if (ctx->use_logging)
596          _gpgme_gpg_set_logging_handler( ctx->gpg, ctx );          _gpgme_gpg_set_logging_handler (ctx->gpg, ctx);
597      if( ctx->cb.passphrase ) {      if (ctx->cb.passphrase) {
598          rc = _gpgme_gpg_set_command_handler( ctx->gpg, decrypt_command_handler, ctx );          rc = _gpgme_gpg_set_command_handler (ctx->gpg, decrypt_command_handler, ctx);
599          if ( rc )          if (rc)
600              goto leave;              goto leave;
601      }      }
602      else if( ctx->passphrase_value ) {      else if( ctx->passphrase_value ) {
# Line 705  gpgme_op_files_decrypt( gpgme_ctx_t ctx, Line 731  gpgme_op_files_decrypt( gpgme_ctx_t ctx,
731    
732    
733  gpgme_error_t  gpgme_error_t
734  gpgme_op_clip_decrypt( gpgme_ctx_t ctx )  gpgme_op_clip_decrypt (gpgme_ctx_t ctx)
735  {  {
736      gpgme_error_t err;      gpgme_error_t err;
737      gpgme_data_t ciph = NULL;      gpgme_data_t ciph = NULL;
738      gpgme_data_t plain = NULL;      gpgme_data_t plain = NULL;
739            
740      err = gpgme_data_new_from_clipboard (&ciph);      err = gpgme_data_new_from_clipboard (&ciph);
741      if( !err )                  if (!err)
742          err = gpgme_data_new( &plain );          err = gpgme_data_new (&plain);
743      if( !err )      if (!err)
744          err = gpgme_op_decrypt( ctx, ciph, plain );              err = gpgme_op_decrypt (ctx, ciph, plain);
   
     gpgme_data_release_and_set_clipboard( plain );  
     gpgme_data_release( ciph );  
745    
746        gpgme_data_release_and_set_clipboard (plain);
747        gpgme_data_release (ciph);
748      return err;      return err;
749  } /* gpgme_op_clip_decrypt */  } /* gpgme_op_clip_decrypt */

Legend:
Removed from v.9  
changed lines
  Added in v.22

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26