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

Diff of /trunk/Src/wptGPGME.cpp

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

revision 231 by twoaday, Tue Jun 20 09:18:44 2006 UTC revision 351 by twoaday, Thu Dec 1 20:10:25 2011 UTC
# Line 12  Line 12 
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14   * General Public License for more details.   * General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License  
  * along with WinPT; if not, write to the Free Software Foundation,  
  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA  
15   */   */
16  #ifdef HAVE_CONFIG_H  #ifdef HAVE_CONFIG_H
17  #include <config.h>  #include <config.h>
# Line 38  Line 34 
34    
35  #include "openpgp.h"  #include "openpgp.h"
36    
37  BOOL CALLBACK  keycache_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam);  BOOL CALLBACK  keycache_dlg_proc (HWND dlg, UINT msg, WPARAM wparam,
38                                      LPARAM lparam);
39  void progress_cleanup (progress_filter_s * pfx);  void progress_cleanup (progress_filter_s * pfx);
40    
41  /* Global GPG key cache contexts. */  /* Global GPG key cache contexts. */
# Line 46  static gpg_keycache_t pub = NULL; Line 43  static gpg_keycache_t pub = NULL;
43  static gpg_keycache_t sec = NULL;  static gpg_keycache_t sec = NULL;
44  static char *gpg_secring = NULL;  static char *gpg_secring = NULL;
45    
46    struct keycache_s *key_list = NULL;
47    
48    
49    /* Return 1 if no cache is available.
50       This can be the case if WinPT were run in command line mode. */
51  int  int
52  keycache_not_available (void)  keycache_not_available (void)
53  {  {
# Line 58  keycache_not_available (void) Line 59  keycache_not_available (void)
59  void  void
60  keycache_release (int cleanup)  keycache_release (int cleanup)
61  {  {
     int n = gpg_keycache_get_size (pub);  
62      char tmpbuf[64];      char tmpbuf[64];
63        int n = gpg_keycache_get_size (pub);
64    
65      /* XXX: update the value when the cache has changed. */      /* XXX: update the value when the cache has changed. */
66      sprintf (tmpbuf, "%d", n);      _snprintf (tmpbuf, DIM (tmpbuf)-1, "%d", n);
67      set_reg_key (HKEY_CURRENT_USER, "Software\\WinPT", "nKeys", tmpbuf);      set_reg_key (HKEY_CURRENT_USER, "Software\\WinPT", "nKeys", tmpbuf);
68    
69      if (pub) {      if (pub) {
# Line 102  keycache_init (const char *pubring, cons Line 103  keycache_init (const char *pubring, cons
103  {  {
104      struct progress_filter_s pfx;      struct progress_filter_s pfx;
105      gpgme_error_t err;      gpgme_error_t err;
106      int val = 0;      int val;
107      char *p;      char *p;
108    
109      if (secring != NULL) {      if (secring != NULL) {
110          free_if_alloc (gpg_secring);          free_if_alloc (gpg_secring);
111          gpg_secring = get_gnupg_keyring (0, NO_STRICT);          gpg_secring = get_gnupg_keyring (0, NO_STRICT);
112            log_debug ("keycache_init: secring path '%s'\r\n", gpg_secring);
113      }      }
114            
115        val = 0;
116      p = get_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "nKeys");      p = get_reg_entry (HKEY_CURRENT_USER, "Software\\WinPT", "nKeys");
117      if (p && *p != ' ') {      if (p && *p != ' ') {
118          val = atoi (p);          val = atoi (p);
119          free_if_alloc (p);                free_if_alloc (p);
120      }      }
121    
122      memset (&pfx, 0, sizeof (pfx));      memset (&pfx, 0, sizeof (pfx));
# Line 137  keycache_init (const char *pubring, cons Line 140  keycache_init (const char *pubring, cons
140          gpg_keycache_sync (pub, sec);          gpg_keycache_sync (pub, sec);
141      if (val != 0)      if (val != 0)
142          progress_cleanup (&pfx);          progress_cleanup (&pfx);
143        
144      return err;      return err;
145  }  }
146    
# Line 161  static gpgme_error_t Line 165  static gpgme_error_t
165  get_key_from_cache (const char *keyid, int secret, gpgme_key_t *r_key,  get_key_from_cache (const char *keyid, int secret, gpgme_key_t *r_key,
166                      struct keycache_s **c)                      struct keycache_s **c)
167  {  {
     gpg_keycache_t cache;  
168      gpgme_error_t err;      gpgme_error_t err;
169      int mode = secret? KEYCACHE_PRV : KEYCACHE_PUB;      
   
170      if (!keyid)      if (!keyid)
171          return gpg_error (GPG_ERR_INV_VALUE);          return gpg_error (GPG_ERR_INV_VALUE);
172      if (r_key)      if (r_key)
173          *r_key = NULL;          *r_key = NULL;
174      cache = keycache_get_ctx (mode);      
175        int mode = secret? KEYCACHE_PRV : KEYCACHE_PUB;
176        gpg_keycache_t cache = keycache_get_ctx (mode);
177      if (!c)      if (!c)
178          err = gpg_keycache_find_key (cache, keyid, 0, r_key);          err = gpg_keycache_find_key (cache, keyid, 0, r_key);
179      else      else
# Line 250  get_seckey (const char *keyid, gpgme_key Line 254  get_seckey (const char *keyid, gpgme_key
254  }  }
255    
256    
   
257  /* Map the signature summary in @sum to signature status table index.  /* Map the signature summary in @sum to signature status table index.
258     Return value: index to table. */     Return value: index to table. */
259  static int  static int
260  sigsum_to_index (gpgme_sigsum_t sum)  sigsum_to_index (gpgme_sigsum_t sum)
261  {  {
262      if ((sum & GPGME_SIGSUM_VALID) && (sum & GPGME_SIGSUM_KEY_REVOKED))      if (sum & GPGME_SIGSUM_RED)
263            return 2;
264        else if (sum & GPGME_SIGSUM_SIG_EXPIRED)
265            return 8;
266        else if (sum & GPGME_SIGSUM_KEY_REVOKED)
267          return 7;          return 7;
268      if ((sum & GPGME_SIGSUM_VALID) && (sum & GPGME_SIGSUM_SIG_EXPIRED))      else if (sum & GPGME_SIGSUM_KEY_EXPIRED)
269          return 6;          return 6;
270      if (sum & GPGME_SIGSUM_GREEN)      else if (sum & GPGME_SIGSUM_GREEN)
271          return 1;          return 1;
     else if (sum & GPGME_SIGSUM_RED)  
         return 2;  
272      else if (sum & GPGME_SIGSUM_KEY_MISSING)      else if (sum & GPGME_SIGSUM_KEY_MISSING)
273          return 3;          return 3;
274      return 0;      return 0;
275  }  }
276    
277    
278  /* Return a humand readable description for the signature status @sum. */  /* Return a humand readable description for the signature status @sum.
279       Warning: this function does not consider the validity of the key. */
280  const char*  const char*
281  get_gpg_sigstat (gpgme_sigsum_t sum)  get_gpg_sigstat (gpgme_sigsum_t sum)
282  {  {
# Line 281  get_gpg_sigstat (gpgme_sigsum_t sum) Line 287  get_gpg_sigstat (gpgme_sigsum_t sum)
287          _("The signature could not be checked due to a missing key"),          _("The signature could not be checked due to a missing key"),
288          _("No valid OpenPGP signature"),          _("No valid OpenPGP signature"),
289          _("Signature Error"),          _("Signature Error"),
290          _("Good Signature (Expired Key)"),          _("Good signature (Expired Key)"),
291          _("Good Signature (Revoked Key)"),          _("Good signature (Revoked Key)"),
292            _("Good signature (Expired)"),
293          NULL          NULL
294      };      };
295      const unsigned int mask = 8;      const unsigned int mask = 9;
296    
297      return gpg_sigstat[sigsum_to_index (sum) % mask];      return gpg_sigstat[sigsum_to_index (sum) % mask];
298  }  }
299    
300    
301    /* Return true if at least one secret key is available. */
302  bool  bool
303  secret_key_available (void)  secret_key_available (void)
304  {  {

Legend:
Removed from v.231  
changed lines
  Added in v.351

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26