22 |
#endif |
#endif |
23 |
|
|
24 |
#include <windows.h> |
#include <windows.h> |
|
#include <windows.h> |
|
25 |
|
|
26 |
#include "../resource.h" |
#include "resource.h" |
27 |
#include "wptTypes.h" |
#include "wptTypes.h" |
28 |
#include "wptW32API.h" |
#include "wptW32API.h" |
29 |
#include "wptVersion.h" |
#include "wptVersion.h" |
38 |
#include "wptFileManager.h" |
#include "wptFileManager.h" |
39 |
#include "wptContext.h" |
#include "wptContext.h" |
40 |
#include "wptCardEdit.h" |
#include "wptCardEdit.h" |
41 |
|
#include "wptCrypto.h" |
42 |
|
|
43 |
|
#define MIN_GPG_VER "1.4.2" /* Minimal GPG version. */ |
|
#define MIN_GPG_VER "1.4.3" /* Minimal GPG version. */ |
|
44 |
#define MIN_GPGME_VER "1.2.0" /* Minimal GPGME version. */ |
#define MIN_GPGME_VER "1.2.0" /* Minimal GPGME version. */ |
|
#define MIN_PTD_VER "0.8.1" /* Minimal PTD version. */ |
|
45 |
|
|
46 |
|
|
47 |
HINSTANCE glob_hinst; /* global instance for the dialogs */ |
HINSTANCE glob_hinst; /* global instance for the dialogs */ |
126 |
defkey = get_gnupg_default_key (); |
defkey = get_gnupg_default_key (); |
127 |
if (defkey) |
if (defkey) |
128 |
err = gpg_keycache_find_key (kc, defkey, 0, &key); |
err = gpg_keycache_find_key (kc, defkey, 0, &key); |
129 |
|
else |
130 |
|
msg_box (NULL, _("No useable secret key found."), _("WinPT Error"), MB_ERR); |
131 |
free_if_alloc (defkey); |
free_if_alloc (defkey); |
132 |
return err? -1 : 0; |
return err? -1 : 0; |
133 |
} |
} |
171 |
static int |
static int |
172 |
check_crypto_engine (void) |
check_crypto_engine (void) |
173 |
{ |
{ |
174 |
int ma=1, mi=4, pa=3; /* GPG 1.4.3 */ |
int ma=1, mi=4, pa=2; /* GPG 1.4.2 */ |
175 |
int rc; |
int rc; |
176 |
|
|
177 |
rc = check_gnupg_engine (&ma, &mi, &pa); |
rc = check_gnupg_engine (&ma, &mi, &pa); |
187 |
ma, mi, pa); |
ma, mi, pa); |
188 |
return rc; |
return rc; |
189 |
} |
} |
190 |
/* We enable smartcard support for GPG: 1.9 or >= 1.4 */ |
/* We enable smartcard support for GPG: >= 2 or >= 1.4.3 */ |
191 |
if (ma >= 1 && mi >= 4) |
if (ma > 1 || pa >= 3) |
192 |
scard_support = 1; |
scard_support = 1; |
193 |
|
|
194 |
gpgver[0] = ma; |
gpgver[0] = ma; |
238 |
|
|
239 |
char* multi_gnupg_path (void); |
char* multi_gnupg_path (void); |
240 |
|
|
241 |
|
const char * fm_get_file_type (const char *fname, int *r_type); |
242 |
|
|
243 |
/* Main entry point. */ |
/* Main entry point. */ |
244 |
int WINAPI |
int WINAPI |
245 |
WinMain (HINSTANCE hinst, HINSTANCE hprev, LPSTR cmdline, int showcmd) |
WinMain (HINSTANCE hinst, HINSTANCE hprev, LPSTR cmdline, int showcmd) |
246 |
{ |
{ |
247 |
WNDCLASS wc = {0, winpt_main_proc, 0, 0, hinst, 0, 0, 0, 0, PGM_NAME}; |
WNDCLASS wc = {0, winpt_main_proc, 0, 0, hinst, 0, 0, 0, 0, PGM_NAME}; |
248 |
HACCEL accel_tab; |
HACCEL accel_tab; |
249 |
int rc, ec, created = 0, use_cwd = 0, nfiles = 0; |
int rc, ec, created = 0, nfiles = 0; |
250 |
int first_start = 0, start_gpgprefs = 0; |
int first_start = 0, start_gpgprefs = 0; |
251 |
int winpt_inst_found = 0; |
int winpt_inst_found = 0; |
252 |
const char *s; |
const char *s; |
255 |
|
|
256 |
glob_hinst = hinst; |
glob_hinst = hinst; |
257 |
|
|
258 |
#ifdef _DEBUG |
if (cmdline && stristr (cmdline, "--stop")) { |
259 |
gpg_set_debug_mode (1); |
hwnd = FindWindow ("WinPT", "WinPT"); |
260 |
debug = 1; |
if (hwnd != NULL) |
261 |
#endif |
PostMessage (hwnd, WM_DESTROY, 0, 0); |
|
|
|
|
s = PTD_get_version (); |
|
|
if (strcmp (s, MIN_PTD_VER)) { |
|
|
log_box (_("Privacy Tray Dynamic (PTD)"), MB_ERR, |
|
|
_("Please update your PTD.dll to the newest version, " |
|
|
"the version (%s) you use is too old."), s); |
|
262 |
return 0; |
return 0; |
263 |
} |
} |
264 |
|
|
265 |
|
#ifdef _DEBUG |
266 |
|
gpg_set_debug_mode (1); |
267 |
|
debug = 1; |
268 |
|
#endif |
269 |
|
|
270 |
if (gpg_md_selftest ()) { |
if (gpg_md_selftest ()) { |
271 |
msg_box (NULL, _("Cryptographic selftest failed."), |
msg_box (NULL, _("Cryptographic selftest failed."), |
309 |
get_reg_winpt_prefs (®_prefs); |
get_reg_winpt_prefs (®_prefs); |
310 |
if (!reg_prefs.no_hotkeys) |
if (!reg_prefs.no_hotkeys) |
311 |
hotkeys_modify (); |
hotkeys_modify (); |
312 |
|
gnupg_load_config (); |
313 |
} |
} |
314 |
|
|
315 |
rc = gnupg_check_homedir (); |
rc = gnupg_check_homedir (); |
318 |
_("GPG home directory is not set correctly.\n" |
_("GPG home directory is not set correctly.\n" |
319 |
"Please check the GPG registry settings:\n%s."), |
"Please check the GPG registry settings:\n%s."), |
320 |
winpt_strerror (rc)); |
winpt_strerror (rc)); |
321 |
const char * s = get_fileopen_dlg (GetActiveWindow (), |
s = get_fileopen_dlg (GetActiveWindow (), |
322 |
_("Select GPG Public Keyring"), |
_("Select GPG Public Keyring"), |
323 |
_("GPG Keyrings (*.gpg)\0*.gpg\0\0"), |
_("GPG Keyrings (*.gpg)\0*.gpg\0\0"), |
324 |
NULL); |
NULL); |
325 |
if (s != NULL) { |
if (s != NULL) { |
326 |
size_t n; |
size_t n; |
327 |
char * p = strrchr (s, '\\'); |
char * p = strrchr (s, '\\'); |
397 |
|
|
398 |
if (cmdline && stristr (cmdline, "--wipe-freespace")) { |
if (cmdline && stristr (cmdline, "--wipe-freespace")) { |
399 |
dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_SPACE_SECDEL, |
dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_SPACE_SECDEL, |
400 |
GetDesktopWindow(), space_wipefrees_dlg_proc, NULL, |
GetDesktopWindow(), space_wipefrees_dlg_proc, 0, |
401 |
_("Wipe Free Space"), IDS_WINPT_SPACE_SECDEL); |
_("Wipe Free Space"), IDS_WINPT_SPACE_SECDEL); |
402 |
free_gnupg_table (); |
free_gnupg_table (); |
403 |
return 0; |
return 0; |
410 |
update_keycache (GetDesktopWindow ()); |
update_keycache (GetDesktopWindow ()); |
411 |
if (stristr (cmdline, "keymanager")) |
if (stristr (cmdline, "keymanager")) |
412 |
dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_KEYMISC, |
dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_KEYMISC, |
413 |
GetDesktopWindow(), keymanager_dlg_proc, NULL, |
GetDesktopWindow(), keymanager_dlg_proc, 0, |
414 |
_("Key Manager"), IDS_WINPT_KEYMISC); |
_("Key Manager"), IDS_WINPT_KEYMISC); |
415 |
else { |
else { |
416 |
gpg_card_t crd = gpg_card_load (); |
gpg_card_t crd = gpg_card_load (); |
478 |
|
|
479 |
if (start_gpgprefs) { |
if (start_gpgprefs) { |
480 |
char *ring; |
char *ring; |
481 |
size_t size = 0; |
|
482 |
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, hwnd, |
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, hwnd, |
483 |
gpgprefs_dlg_proc, NULL); |
gpgprefs_dlg_proc, 0); |
484 |
ring = get_gnupg_keyring (0, !NO_STRICT); |
ring = get_gnupg_keyring (0, !NO_STRICT); |
485 |
if (gnupg_access_keyring (0) == -1 && get_file_size (ring) == 0) |
if (gnupg_access_keyring (0) == -1 && get_file_size (ring) == 0) |
486 |
first_start = 1; /* The keyring is empty! */ |
first_start = 1; /* The keyring is empty! */ |
494 |
start: |
start: |
495 |
h = GetDesktopWindow (); |
h = GetDesktopWindow (); |
496 |
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, h, |
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, h, |
497 |
gpgprefs_dlg_proc, NULL); |
gpgprefs_dlg_proc, 0); |
498 |
DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_FIRST, h, |
DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_FIRST, h, |
499 |
first_run_dlg_proc, (LPARAM)&fs); |
first_run_dlg_proc, (LPARAM)&fs); |
500 |
switch (fs.choice) { |
switch (fs.choice) { |
537 |
"WinPT", MB_INFO|MB_YESNO); |
"WinPT", MB_INFO|MB_YESNO); |
538 |
if (ec == IDYES) { |
if (ec == IDYES) { |
539 |
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, hwnd, |
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_GPGPREFS, hwnd, |
540 |
gpgprefs_dlg_proc, NULL); |
gpgprefs_dlg_proc, 0); |
541 |
update_keycache (hwnd); |
update_keycache (hwnd); |
542 |
} |
} |
543 |
else { |
else { |
559 |
} |
} |
560 |
if (count_insecure_elgkeys ()) |
if (count_insecure_elgkeys ()) |
561 |
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd, |
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_ELGWARN, glob_hwnd, |
562 |
elgamal_warn_dlg_proc, NULL); |
elgamal_warn_dlg_proc, 0); |
563 |
} |
} |
564 |
|
|
565 |
accel_tab = LoadAccelerators (glob_hinst, (LPCTSTR)IDR_WINPT_ACCELERATOR); |
accel_tab = LoadAccelerators (glob_hinst, (LPCTSTR)IDR_WINPT_ACCELERATOR); |