1 |
/* wptGPGME.cpp - WinPT GPGME interface |
/* wptGPGME.cpp - WinPT GPGME interface |
2 |
* Copyright (C) 2001-2004 Timo Schulz |
* Copyright (C) 2001-2005 Timo Schulz |
3 |
* |
* |
4 |
* This file is part of WinPT. |
* This file is part of WinPT. |
5 |
* |
* |
41 |
static gpgme_keycache_t pub = NULL; |
static gpgme_keycache_t pub = NULL; |
42 |
static gpgme_keycache_t sec = NULL; |
static gpgme_keycache_t sec = NULL; |
43 |
static unsigned int reload = 0; |
static unsigned int reload = 0; |
44 |
|
static char *gpg_secring = NULL; |
45 |
|
|
46 |
void |
void |
47 |
keycache_reload (HWND dlg) |
keycache_reload (HWND dlg) |
48 |
{ |
{ |
49 |
refresh_cache_s rcs = {0}; |
refresh_cache_s rcs; |
50 |
|
|
51 |
|
memset (&rcs, 0, sizeof rcs); |
52 |
rcs.kr_reload = rcs.kr_update = 1; |
rcs.kr_reload = rcs.kr_update = 1; |
53 |
/*rcs.tr_update = 1;*/ |
rcs.tr_update = 0; |
54 |
DialogBoxParam( glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, dlg, |
DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, dlg, |
55 |
keycache_dlg_proc, (LPARAM)&rcs ); |
keycache_dlg_proc, (LPARAM)&rcs); |
56 |
} /* keycache_reload */ |
} /* keycache_reload */ |
57 |
|
|
58 |
void |
void |
61 |
int n = gpgme_keycache_count (pub); |
int n = gpgme_keycache_count (pub); |
62 |
char tmpbuf[64]; |
char tmpbuf[64]; |
63 |
|
|
64 |
|
/* XXX: update the value when the cache has changed. */ |
65 |
sprintf (tmpbuf, "%d", n); |
sprintf (tmpbuf, "%d", n); |
66 |
set_reg_key (HKEY_CURRENT_USER, "Software\\WinPT", "nKeys", tmpbuf); |
set_reg_key (HKEY_CURRENT_USER, "Software\\WinPT", "nKeys", tmpbuf); |
67 |
|
|
68 |
if (pub) { |
if (pub) { |
69 |
gpgme_keycache_release( pub ); |
gpgme_keycache_release (pub); |
70 |
pub = NULL; |
pub = NULL; |
71 |
} |
} |
72 |
if (sec) { |
if (sec) { |
73 |
gpgme_keycache_release( sec ); |
gpgme_keycache_release (sec); |
74 |
sec = NULL; |
sec = NULL; |
75 |
} |
} |
76 |
} /* keycache_release */ |
} /* keycache_release */ |
80 |
keycache_update (int is_sec, const char *keyid) |
keycache_update (int is_sec, const char *keyid) |
81 |
{ |
{ |
82 |
gpgme_keycache_t ctx = pub; |
gpgme_keycache_t ctx = pub; |
83 |
|
gpgme_error_t err; |
84 |
|
|
85 |
if (is_sec) |
if (is_sec) |
86 |
ctx = sec; |
ctx = sec; |
87 |
return gpgme_keycache_update_key (ctx, is_sec, pub, keyid); |
err = gpgme_keycache_update_key (ctx, is_sec, pub, keyid); |
88 |
|
if (is_sec) |
89 |
|
gpgme_keycache_prepare_single (ctx, keyid, NULL, gpg_secring); |
90 |
|
return err; |
91 |
} |
} |
92 |
|
|
93 |
|
/* XXX: cache_keyring_names must be called then the GPG homedir changes! */ |
94 |
|
|
95 |
gpgme_error_t |
gpgme_error_t |
96 |
keycache_init (const char *pubring, const char * secring) |
keycache_init (const char *pubring, const char * secring) |
100 |
int val = 0; |
int val = 0; |
101 |
char * p; |
char * p; |
102 |
|
|
103 |
|
if (secring != NULL) { |
104 |
|
free_if_alloc (gpg_secring); |
105 |
|
gpg_secring = get_gnupg_keyring (0, NO_STRICT); |
106 |
|
} |
107 |
|
|
108 |
if (reload) { |
if (reload) { |
109 |
keycache_release (); |
keycache_release (); |
110 |
reload = 0; |
reload = 0; |
113 |
if (p && *p != ' ') { |
if (p && *p != ' ') { |
114 |
val = atoi (p); |
val = atoi (p); |
115 |
free_if_alloc (p); |
free_if_alloc (p); |
116 |
memset (&pfx, 0, sizeof pfx); |
memset (&pfx, 0, sizeof (pfx)); |
117 |
} |
} |
118 |
|
|
119 |
err = gpgme_keycache_new (&pub); |
err = gpgme_keycache_new (&pub); |
153 |
|
|
154 |
|
|
155 |
gpgme_keycache_t |
gpgme_keycache_t |
156 |
keycache_get_ctx( int is_pub ) |
keycache_get_ctx (int is_pub) |
157 |
{ |
{ |
158 |
return is_pub? pub : sec; |
return is_pub? pub : sec; |
159 |
} /* keycache_get_ctx */ |
} /* keycache_get_ctx */ |
208 |
|
|
209 |
|
|
210 |
int |
int |
211 |
get_pubkey( const char *keyid, gpgme_key_t *ret_key ) |
get_pubkey (const char *keyid, gpgme_key_t *ret_key) |
212 |
{ |
{ |
213 |
int rc = 0; |
int rc = 0; |
214 |
|
|
215 |
if( pub && sec ) |
if (pub && sec) |
216 |
rc = get_key( keyid, ret_key, 0 ); |
rc = get_key (keyid, ret_key, 0); |
217 |
else |
else |
218 |
rc = get_key2( keyid, ret_key, 0 ); |
rc = get_key2 (keyid, ret_key, 0); |
219 |
return rc; |
return rc; |
220 |
} /* get_pubkey */ |
} /* get_pubkey */ |
221 |
|
|