/[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 2 by twoaday, Mon Jan 31 11:02:21 2005 UTC revision 21 by twoaday, Wed Jul 27 11:17:44 2005 UTC
# Line 1  Line 1 
1  /* decrypt.c -  decrypt functions  /* decrypt.c -  decrypt functions
2   *      Copyright (C) 2000 Werner Koch (dd9jn)   *      Copyright (C) 2000 Werner Koch (dd9jn)
3   *      Copyright (C) 2001-2004 Timo Schulz   *      Copyright (C) 2001-2005 Timo Schulz
4   *   *
5   * This file is part of MyGPGME.   * This file is part of MyGPGME.
6   *   *
# 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 98  void Line 103  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 164  add_signature( gpgme_ctx_t ctx ) Line 171  add_signature( gpgme_ctx_t ctx )
171    
172    
173  static void  static void
174  decrypt_status_handler( gpgme_ctx_t ctx, gpg_status_code_t code, char *args )  decrypt_status_handler (gpgme_ctx_t ctx, gpg_status_code_t code, char *args)
175  {    {  
176      static gpgme_sig_t sig = NULL;      static gpgme_sig_t sig = NULL;
177      static char keyid[16+1];      static char keyid[16+1];
# Line 196  decrypt_status_handler( gpgme_ctx_t ctx, Line 203  decrypt_status_handler( gpgme_ctx_t ctx,
203      _gpgme_pass_status_handler (code, args, &ctx->result.decrypt->bad_passphrase,      _gpgme_pass_status_handler (code, args, &ctx->result.decrypt->bad_passphrase,
204                                  &ctx->result.decrypt->no_data,                                  &ctx->result.decrypt->no_data,
205                                  &ctx->result.decrypt->passphrase_info);                                  &ctx->result.decrypt->passphrase_info);
206      if (sig)      if (sig && (code >= STATUS_TRUST_UNDEFINED && code <= STATUS_TRUST_ULTIMATE)) {
207          _gpgme_sigtrust_status_handler (code, args, &sig->trust);          _gpgme_sigtrust_status_handler (code, args, &sig->trust);
208            DEBUG1("sig_trust: %d", sig->trust);
209        }
210    
211      switch( code ) {      switch (code) {
212      case STATUS_EOF:      case STATUS_EOF:
213          break;          break;
214                    
215      case STATUS_USERID_HINT:      case STATUS_USERID_HINT:
216          safe_free( ctx->result.decrypt->userid_hint );          safe_free (ctx->result.decrypt->userid_hint);
217          p = ctx->result.decrypt->userid_hint = strdup( args );          p = ctx->result.decrypt->userid_hint = strdup (args);
218          if (!p) {          if (!p) {
219              ctx->out_of_core = 1;              ctx->out_of_core = 1;
220              return;              return;
# Line 225  decrypt_status_handler( gpgme_ctx_t ctx, Line 234  decrypt_status_handler( gpgme_ctx_t ctx,
234          break;          break;
235                    
236      case STATUS_SIG_ID:      case STATUS_SIG_ID:
237          DEBUG0( "Plaintext was signed!\n" );          DEBUG0 ("Plaintext was signed!\n");
238          break;          break;
239                    
240      case STATUS_NO_SECKEY:      case STATUS_NO_SECKEY:
241          ctx->result.decrypt->no_seckey++;          ctx->result.decrypt->no_seckey++;
242          strncpy( ctx->result.decrypt->keyid, args, 16 );          strncpy (ctx->result.decrypt->keyid, args, 16);
243          break;          break;
244                    
245      case STATUS_NO_PUBKEY:      case STATUS_NO_PUBKEY:
246          sig->sigstat = GPGME_SIG_STAT_NOKEY;          sig->sigstat = GPGME_SIG_STAT_NOKEY;
247          break;          break;
248    
249        case STATUS_PLAINTEXT:
250            i=0;
251            while (args[i] && args[i] == ' ')
252                i++;
253            ctx->result.decrypt->plain.mode = strtoul (args+i, NULL, 10);
254            while (args[i] && args[i] != ' ')
255                i++;
256            i++;
257            ctx->result.decrypt->plain.times = strtoul (args+i, NULL, 10);
258            while (args[i] && args[i] != ' ')
259                i++;
260            i++;
261            safe_free (ctx->result.decrypt->plain.name);
262            if (args[i]) {
263                p = ctx->result.decrypt->plain.name = strdup (args+i);
264                if (!p)
265                    ctx->out_of_core = 1;
266            }
267            break;
268                    
269      case STATUS_VALIDSIG:      case STATUS_VALIDSIG:
270          p = fpr;          p = fpr;
# Line 254  decrypt_status_handler( gpgme_ctx_t ctx, Line 283  decrypt_status_handler( gpgme_ctx_t ctx,
283                    
284      case STATUS_GOODSIG:      case STATUS_GOODSIG:
285      case STATUS_BADSIG:      case STATUS_BADSIG:
286          if( code == STATUS_GOODSIG )          if (code == STATUS_GOODSIG)
287              sig->sigstat = GPGME_SIG_STAT_GOOD;              sig->sigstat = GPGME_SIG_STAT_GOOD;
288          else          else
289              sig->sigstat = GPGME_SIG_STAT_BAD;              sig->sigstat = GPGME_SIG_STAT_BAD;
# Line 283  decrypt_status_handler( gpgme_ctx_t ctx, Line 312  decrypt_status_handler( gpgme_ctx_t ctx,
312              return;              return;
313          }          }
314          j=0;          j=0;
315          while( args[i] )          while (args[i])
316              p[j++] = args[i++];              p[j++] = args[i++];
317          p[j++] = '\0';          p[j++] = '\0';
318          break;          break;
# Line 304  decrypt_status_handler( gpgme_ctx_t ctx, Line 333  decrypt_status_handler( gpgme_ctx_t ctx,
333          if (*args == '3') {          if (*args == '3') {
334              safe_free (ctx->result.decrypt->file_name);              safe_free (ctx->result.decrypt->file_name);
335              p = ctx->result.decrypt->file_name = strdup (args+2);              p = ctx->result.decrypt->file_name = strdup (args+2);
336              if( !p ) {              if (!p) {
337                  ctx->out_of_core = 1;                  ctx->out_of_core = 1;
338                  return;                  return;
339              }              }
# Line 316  decrypt_status_handler( gpgme_ctx_t ctx, Line 345  decrypt_status_handler( gpgme_ctx_t ctx,
345    
346      case STATUS_FILE_DONE:      case STATUS_FILE_DONE:
347          ctx->result.decrypt->file_done++;          ctx->result.decrypt->file_done++;
348          if( ctx->cb.interactiv )          if (ctx->cb.interactiv)
349              ctx->cb.interactiv( ctx->cb.interactiv_value, code, NULL, NULL );              ctx->cb.interactiv (ctx->cb.interactiv_value, code, NULL, NULL);
350          break;          break;
351    
352      case STATUS_CARDCTRL:      case STATUS_CARDCTRL:
# Line 551  decrypt_start( gpgme_ctx_t ctx, gpgme_da Line 580  decrypt_start( gpgme_ctx_t ctx, gpgme_da
580  {  {
581      int rc = 0;      int rc = 0;
582            
583      fail_on_pending_request( ctx );      fail_on_pending_request (ctx);
584      ctx->pending = 1;      ctx->pending = 1;
585            
586      _gpgme_release_result( ctx );      _gpgme_release_result (ctx);
587      ctx->out_of_core = 0;      ctx->out_of_core = 0;
588            
589      /* create a process object */      /* create a process object */
# Line 636  get_decrypt_result( gpgme_ctx_t ctx ) Line 665  get_decrypt_result( gpgme_ctx_t ctx )
665      else if( !res->okay || !res->no_data )      else if( !res->okay || !res->no_data )
666          err = mk_error( No_Data );          err = mk_error( No_Data );
667      else if( gpgme_get_process_rc( ctx ) )      else if( gpgme_get_process_rc( ctx ) )
668          err = mk_error( Interal_GPG_Problem );          err = mk_error( Internal_GPG_Problem );
669      return err;      return err;
670  } /* get_decrypt_result */  } /* get_decrypt_result */
671    

Legend:
Removed from v.2  
changed lines
  Added in v.21

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26