/[winpt]/trunk/Src/wptSymEnc.cpp
ViewVC logotype

Diff of /trunk/Src/wptSymEnc.cpp

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

revision 2 by twoaday, Mon Jan 31 11:02:21 2005 UTC revision 24 by twoaday, Sat Oct 8 10:43:08 2005 UTC
# Line 1  Line 1 
1  /* wptSymEnc.cpp - Symmetric encryption support  /* wptSymEnc.cpp - Symmetric encryption support
2   *      Copyright (C) 2002, 2003, 2004 Timo Schulz   *      Copyright (C) 2002, 2003, 2004, 2005 Timo Schulz
3   *   *
4   * This file is part of WinPT.   * This file is part of WinPT.
5   *   *
# Line 29  Line 29 
29  #include "wptTypes.h"  #include "wptTypes.h"
30  #include "wptErrors.h"  #include "wptErrors.h"
31    
32    
33    /* Simple passphrase callback. The hook pointer is the passphrase itself.
34       Return value: 0 on success. */
35    gpgme_error_t
36    sym_passphrase_cb (void *hook, const char *hint, const char *pass_inf,
37                       int prev_was_bad, int fd)
38    {
39        const char *pass = (const char*)hook;
40        HANDLE hd = (HANDLE)fd;
41        DWORD n;
42    
43        if (!pass)
44            return gpg_error (GPG_ERR_INV_ARG);
45    
46        if (!WriteFile (hd, pass, strlen (pass), &n, NULL))
47            log_debug ("sym_passphrase_cb: WriteFile() failed ec=%d\n", w32_errno);
48        if (!WriteFile (hd, "\n", 1, &n, NULL))
49            log_debug ("sym_passphrase_cb: WriteFile() failed ec=%d\n", w32_errno);
50        
51        return 0;
52    }
53    
54    
55    /* Perform symmetric encryption on the current clipboard data.
56       Return 0 for success. */
57  int  int
58  gpgme_encrypt_symmetric (void)  gpg_encrypt_symmetric (void)
59  {  {
60      gpgme_ctx_t ctx;      gpgme_ctx_t ctx;
61        gpgme_data_t plain=NULL;
62        gpgme_data_t ciph=NULL;
63      gpgme_error_t rc;      gpgme_error_t rc;
64      char * pass = NULL;      char *pass = NULL;
65      int cancel = 0;      int cancel = 0;
66            
67      pass = request_passphrase2 (_("Symmetric Encryption"), &cancel);      pass = request_passphrase2 (_("Symmetric Encryption"), 0, &cancel);
68      if (cancel)      if (cancel)
69          return WPTERR_GENERAL;          return 0;
70      rc = gpgme_new (&ctx);      rc = gpgme_new (&ctx);
71      if (rc)      if (rc)
72          BUG (0);          goto leave;
73      gpgme_set_passphrase (ctx, pass);      rc = gpg_data_new_from_clipboard (&plain, 0);
74      rc = gpgme_op_clip_symenc (ctx);      if (rc)
75      sfree_if_alloc (pass);          goto leave;
76        rc = gpgme_data_new (&ciph);
77        gpgme_set_armor (ctx, 1);
78    
79        gpgme_set_passphrase_cb (ctx, sym_passphrase_cb, pass);
80    
81        rc = gpgme_op_encrypt (ctx, NULL, (gpgme_encrypt_flags_t)0, plain, ciph);    
82      if (rc)      if (rc)
83          msg_box (NULL, gpgme_strerror (rc), _("Symmetric Encryption"), MB_ERR);          msg_box (NULL, gpgme_strerror (rc), _("Symmetric Encryption"), MB_ERR);
84      else      else {
85          show_msg (GetDesktopWindow (), 1500, _("GnuPG Status: Finished"));          show_msg (GetDesktopWindow (), 1500, _("GnuPG Status: Finished"));
86            gpg_data_release_and_set_clipboard (ciph, 1);
87            ciph = NULL;
88        }
89    
90    leave:
91        if (plain)
92            gpgme_data_release (plain);
93        if (ciph)
94            gpgme_data_release (ciph);
95      gpgme_release (ctx);      gpgme_release (ctx);
96        sfree_if_alloc (pass);
97      return rc? WPTERR_GENERAL : 0;      return rc? WPTERR_GENERAL : 0;
 } /* gpgme_encrypt_symmetric */  
98    }

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26