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

Diff of /trunk/Src/wptKeygenDlg.cpp

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

revision 48 by werner, Mon Oct 31 21:14:11 2005 UTC revision 201 by twoaday, Sat Apr 22 18:30:24 2006 UTC
# Line 91  static const char key_params_one_with_co Line 91  static const char key_params_one_with_co
91          "Key-Length: %d\n"          "Key-Length: %d\n"
92          "Key-Usage: %s\n"                "Key-Usage: %s\n"      
93          "Name-Real: %s\n"                "Name-Real: %s\n"      
         "Name-Email: %s\n"  
94          "Name-Comment: %s\n"          "Name-Comment: %s\n"
95            "Name-Email: %s\n"
96          "Expire-Date: %s\n"          "Expire-Date: %s\n"
97          "Passphrase: %s\n"          "Passphrase: %s\n"
98          "</GnupgKeyParms>\n";          "</GnupgKeyParms>\n";
# Line 119  gpg_genkey_params (int keytype, int bits Line 119  gpg_genkey_params (int keytype, int bits
119      if (keytype == GPG_KEYGEN_NONE)      if (keytype == GPG_KEYGEN_NONE)
120          return NULL;          return NULL;
121            
122      if( comment && *comment ) {      size = strlen (user) + strlen (email) + strlen (passphrase) + addsize + 48;
123          size = strlen (key_params_with_comment)      if (comment && *comment)
124              + 16          size += strlen (key_params_with_comment) + strlen (comment);
125              + strlen( user )      else
126              + addsize          size += strlen (key_params);
127              + strlen( comment )      if (expdate)
128              + strlen( email )          size += strlen (expdate) + 1;
129              +  strlen( passphrase ) + 32;      p = new char[size+1];
130      }      if (!p)
131      else {          BUG (0);
132          size = strlen( key_params )      /* XXX: simply the whole switch-case code. */
133              + 16      if (comment && *comment) {
             + strlen( user )  
             + strlen( email )  
             + strlen( passphrase )  
             + addsize  
             + 32;  
     }  
     if( expdate )  
         size += strlen( expdate );  
     p = (char *)malloc( size+1 );  
     if( !p )  
         return NULL;  
     if( comment && *comment ) {  
134          switch( keytype ) {          switch( keytype ) {
135          case GPG_KEYGEN_DSA_ELG:          case GPG_KEYGEN_DSA_ELG:
136              sprintf (p, key_params_with_comment,              sprintf (p, key_params_with_comment,
# Line 184  gpg_genkey_params (int keytype, int bits Line 172  gpg_genkey_params (int keytype, int bits
172              break;              break;
173                            
174          default:          default:
175              if (p)              free_if_alloc (p);
                 free (p);  
             p = NULL;  
176              break;              break;
177          }          }
178      }      }
# Line 232  gpg_genkey_params (int keytype, int bits Line 218  gpg_genkey_params (int keytype, int bits
218              break;              break;
219                            
220          default:          default:
221              if (p)              free_if_alloc (p);
                 free (p);  
             p = NULL;  
222              break;              break;
223          }          }
224      }      }
# Line 261  gpg_genkey (const char *params, gpgme_pr Line 245  gpg_genkey (const char *params, gpgme_pr
245      err = gpgme_op_genkey (ctx, params, NULL, NULL);      err = gpgme_op_genkey (ctx, params, NULL, NULL);
246      if (!err) {      if (!err) {
247          res = gpgme_op_genkey_result (ctx);          res = gpgme_op_genkey_result (ctx);
248          *fpr = res->fpr? strdup (res->fpr) : NULL;          *fpr = res->fpr? m_strdup (res->fpr) : NULL;
249      }      }
250      gpgme_release (ctx);      gpgme_release (ctx);
251      return err;      return err;
# Line 289  clear_dlg_fields (HWND dlg) Line 273  clear_dlg_fields (HWND dlg)
273  static void  static void
274  backup_keyrings (HWND dlg)  backup_keyrings (HWND dlg)
275  {  {
276        const char *name;
277        char *path = NULL;
278        char *keyring = NULL;
279      int id;      int id;
     char *path = NULL, *keyring = NULL;  
     const char * name;  
280            
281      path = get_gnupg_path ();      path = get_gnupg_path ();
282      if (!path)      if (!path)
# Line 304  backup_keyrings (HWND dlg) Line 289  backup_keyrings (HWND dlg)
289                     "Backup your keyrings now?"),                     "Backup your keyrings now?"),
290                   _("WARNING - Important hint" ), MB_YESNO);                   _("WARNING - Important hint" ), MB_YESNO);
291      if (id == IDYES) {      if (id == IDYES) {
292          name = get_filename_dlg( dlg, 1, _("Destination for Public Keyring"), NULL, "pubring.gpg" );          name = get_filesave_dlg (dlg, _("Destination for Public Keyring"),
293                                     NULL, "pubring.gpg");
294          if( name ) {          if( name ) {
295              keyring = make_filename( path, "pubring", "gpg" );              keyring = make_filename (path, "pubring", "gpg");
296              if( !CopyFile( keyring, name, FALSE ) )              if( !CopyFile (keyring, name, FALSE))
297                  log_box( _("Key Generation"), MB_ERR,                  log_box (_("Key Generation"), MB_ERR,
298                           _("Could not copy %s -> %s"), keyring, name );                               _("Could not copy %s -> %s"), keyring, name);
299              free_if_alloc( keyring );              free_if_alloc (keyring);
300          }          }
301          name = get_filename_dlg( dlg, 1, _("Destination for Secret Keyring"), NULL, "secring.gpg" );          name = get_filesave_dlg (dlg, _("Destination for Secret Keyring"),
302                                     NULL, "secring.gpg");
303          if( name ) {          if( name ) {
304              keyring = make_filename( path, "secring", "gpg" );              keyring = make_filename (path, "secring", "gpg");
305              if( !CopyFile( keyring, name, FALSE ) )              if (!CopyFile (keyring, name, FALSE))
306                  log_box( _("Key Generation"), MB_ERR,                  log_box (_("Key Generation"), MB_ERR,
307                           _("Could not copy %s -> %s"), keyring, name );                           _("Could not copy %s -> %s"), keyring, name);
308              free_if_alloc( keyring );              free_if_alloc (keyring);
309          }          }
310      }      }
311      free_if_alloc( path );      free_if_alloc (path);
312  }  }
313    
314    
# Line 329  backup_keyrings (HWND dlg) Line 316  backup_keyrings (HWND dlg)
316  static void  static void
317  fill_keytype_box (HWND dlg)  fill_keytype_box (HWND dlg)
318  {  {
319      HWND cb = GetDlgItem (dlg, IDC_KEYGEN_KEYTYPE );      HWND cb = GetDlgItem (dlg, IDC_KEYGEN_KEYTYPE);
320    
321  #define addstr( cb, str ) \  #define addstr(cb, str) \
322      SendMessage( (cb), CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)(str) )      SendMessage ((cb), CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)(str))
323      addstr( cb, _("DSA and ELG (default)") );      addstr (cb, _("DSA and ELG (default)"));
324      addstr( cb, _("DSA and RSA") );      addstr (cb, _("DSA and RSA"));
325      addstr( cb, _("DSA sign only") );      addstr (cb, _("DSA sign only"));
326      addstr( cb, _("RSA sign only") );      addstr (cb, _("RSA sign only"));
327      addstr( cb, _("RSA sign and encrypt") );      addstr (cb, _("RSA sign and encrypt"));
328      addstr( cb, _("RSA and RSA (PGP)") );      addstr (cb, _("RSA and RSA (PGP)") );
329      SendMessage( cb, CB_SETCURSEL, 0, 0 );      SendMessage (cb, CB_SETCURSEL, 0, 0);
330  #undef addstr  #undef addstr
331  }  }
332    
# Line 355  keygen_check_date (SYSTEMTIME *st) Line 342  keygen_check_date (SYSTEMTIME *st)
342      if (st->wYear > t.wYear || st->wMonth > t.wMonth)      if (st->wYear > t.wYear || st->wMonth > t.wMonth)
343          return 1;          return 1;
344      else if (st->wYear < t.wYear || st->wMonth < t.wMonth || st->wDay < t.wDay)      else if (st->wYear < t.wYear || st->wMonth < t.wMonth || st->wDay < t.wDay)
345          return 0;                return 0;
346      return 1;      return 1;
347  }  }
348    
# Line 368  keygen_dlg_proc (HWND dlg, UINT msg, WPA Line 355  keygen_dlg_proc (HWND dlg, UINT msg, WPA
355      SYSTEMTIME st;      SYSTEMTIME st;
356      gpgme_error_t err;      gpgme_error_t err;
357      char name[128] = {0}, email[128] = {0}, comment[128] = {0};      char name[128] = {0}, email[128] = {0}, comment[128] = {0};
358      char pwd[128], pwd2[128];      char *pwd;
359      char t[64], *expire = NULL, *fpr=NULL;      char t[64], *expire = NULL, *fpr=NULL;
360      int bits, use_comment, keytype = 0;          int bits, use_comment, keytype = 0;
361      char * p;        int cancel = 0;
362        char *p;
363            
364      switch ( msg ) {      switch ( msg ) {
365      case WM_INITDIALOG:      case WM_INITDIALOG:
366          if (lparam != NULL)          if (lparam != 0)
367              ctx = (genkey_s *)lparam;              ctx = (genkey_s *)lparam;
368          SetWindowText( dlg, _("Key Generation") );          SetWindowText (dlg, _("Key Generation"));
369          SetDlgItemText( dlg, IDC_KEYGEN_INFO,          SetDlgItemText(dlg, IDC_KEYGEN_INFO,
370                          _("NOTE: Key generation can be a lengthy process! Please wait until "                          _("NOTE: Key generation can be a lengthy process! Please wait until "
371                            "you get the message that key generation was finished.") );                            "you get the message that key generation was finished."));
372          SetDlgItemText( dlg, IDC_KEYGEN_SUBKEYINF, _("Subkey size in &bits"));          SetDlgItemText (dlg, IDC_KEYGEN_SUBKEYINF, _("Subkey size in &bits"));
373          SetDlgItemText( dlg, IDC_KEYGEN_NAMEINF, _("&Real name") );          SetDlgItemText (dlg, IDC_KEYGEN_NAMEINF, _("&Real name"));
374          SetDlgItemText( dlg, IDC_KEYGEN_COMMINF, _("&Comment (optional)") );          SetDlgItemText (dlg, IDC_KEYGEN_COMMINF, _("&Comment (optional)"));
375          SetDlgItemText( dlg, IDC_KEYGEN_EMAILINF, _("Email &address") );          SetDlgItemText (dlg, IDC_KEYGEN_EMAILINF, _("Email &address"));
376          SetDlgItemText( dlg, IDC_KEYGEN_EXPINF, _("&Expire date"));          SetDlgItemText (dlg, IDC_KEYGEN_EXPINF, _("&Expire date"));
377          SetDlgItemText( dlg, IDC_KEYGEN_PWDINF, _("&Passphrase") );          SetDlgItemText (dlg, IDC_KEYGEN_KEYTYPEINF, _("Key &type"));
         SetDlgItemText( dlg, IDC_KEYGEN_REPWDINF, _("&Repeat passphrase") );  
         SetDlgItemText( dlg, IDC_KEYGEN_KEYTYPEINF, _("Key &type") );  
378          SetDlgItemText (dlg, IDC_KEYGEN_EXPNEVER, _("&Never"));          SetDlgItemText (dlg, IDC_KEYGEN_EXPNEVER, _("&Never"));
379          SetDlgItemText (dlg, IDC_KEYGEN_HIDEPWD, _("&Hide Typing"));          SetDlgItemText (dlg, IDCANCEL, _("&Cancel"));
380    
381          SetDlgItemInt (dlg, IDC_KEYGEN_SUBKEYBITS, 2048, FALSE);          SetDlgItemInt (dlg, IDC_KEYGEN_SUBKEYBITS, DFAULT_KEYSIZE, FALSE);
382          CheckDlgButton (dlg, IDC_KEYGEN_HIDEPWD, BST_CHECKED);          CheckDlgButton (dlg, IDC_KEYGEN_HIDEPWD, BST_CHECKED);
383          CheckDlgButton (dlg, IDC_KEYGEN_EXPNEVER, BST_CHECKED);          CheckDlgButton (dlg, IDC_KEYGEN_EXPNEVER, BST_CHECKED);
384          EnableWindow (GetDlgItem (dlg, IDC_KEYGEN_EXPDATE), FALSE);          EnableWindow (GetDlgItem (dlg, IDC_KEYGEN_EXPDATE), FALSE);
# Line 402  keygen_dlg_proc (HWND dlg, UINT msg, WPA Line 388  keygen_dlg_proc (HWND dlg, UINT msg, WPA
388          return TRUE;          return TRUE;
389                    
390      case WM_SYSCOMMAND:      case WM_SYSCOMMAND:
391          if (LOWORD (wparam) == SC_CLOSE) {          if (LOWORD (wparam) == SC_CLOSE)
             SetDlgItemText (dlg, IDC_KEYGEN_PASSPHRASE, "");  
             SetDlgItemText (dlg, IDC_KEYGEN_PWDCHECK, "");  
392              EndDialog (dlg, TRUE);              EndDialog (dlg, TRUE);
         }  
393          return FALSE;          return FALSE;
394                    
395      case WM_COMMAND:      case WM_COMMAND:
# Line 415  keygen_dlg_proc (HWND dlg, UINT msg, WPA Line 398  keygen_dlg_proc (HWND dlg, UINT msg, WPA
398              int never = IsDlgButtonChecked (dlg, IDC_KEYGEN_EXPNEVER);              int never = IsDlgButtonChecked (dlg, IDC_KEYGEN_EXPNEVER);
399              EnableWindow (GetDlgItem (dlg, IDC_KEYGEN_EXPDATE), !never);              EnableWindow (GetDlgItem (dlg, IDC_KEYGEN_EXPDATE), !never);
400          }          }
         if (HIWORD (wparam) == BN_CLICKED  
             && LOWORD (wparam) == IDC_KEYGEN_HIDEPWD) {  
             HWND hwnd_a = GetDlgItem (dlg, IDC_KEYGEN_PASSPHRASE);  
             HWND hwnd_b = GetDlgItem (dlg, IDC_KEYGEN_PWDCHECK);  
             int hide = IsDlgButtonChecked (dlg, IDC_KEYGEN_HIDEPWD);  
             SendMessage (hwnd_a, EM_SETPASSWORDCHAR, hide? '*' : 0, 0);  
             SetFocus (hwnd_a);  
             SendMessage (hwnd_b, EM_SETPASSWORDCHAR, hide? '*' : 0, 0);  
             SetFocus (hwnd_b);  
         }  
401    
402          switch( LOWORD( wparam ) ) {          switch (LOWORD (wparam)) {
403          case IDOK:          case IDOK:
404              bits = GetDlgItemInt (dlg, IDC_KEYGEN_SUBKEYBITS, NULL, FALSE);              bits = GetDlgItemInt (dlg, IDC_KEYGEN_SUBKEYBITS, NULL, FALSE);
405              if (bits < 1024 || bits > 4096) {              if (bits < 1024 || bits > 4096) {
# Line 435  keygen_dlg_proc (HWND dlg, UINT msg, WPA Line 408  keygen_dlg_proc (HWND dlg, UINT msg, WPA
408                  return FALSE;                  return FALSE;
409              }              }
410              if (bits > DFAULT_KEYSIZE) {              if (bits > DFAULT_KEYSIZE) {
411                  int id = msg_box (dlg, _("Do you really need such a large key?"),                  int id = msg_box (dlg, _("Do you really need such a large key?"),
412                                    _("Key Generation"), MB_YESNO);                                    _("Key Generation"), MB_YESNO);
413                  if (id == IDNO)                  if (id == IDNO)
414                      bits = DFAULT_KEYSIZE;                      bits = DFAULT_KEYSIZE;
415              }              }
416              if( !GetDlgItemText( dlg, IDC_KEYGEN_NAME, name, sizeof name - 1 ) ) {              if (!GetDlgItemText (dlg, IDC_KEYGEN_NAME, name, sizeof (name) - 1)) {
417                  msg_box( dlg, _("Please enter the name."), _("Key Generation"), MB_ERR );                  msg_box( dlg, _("Please enter the name."), _("Key Generation"), MB_ERR);
418                  return FALSE;                  return FALSE;
419              }              }
420              if (strchr (name, '@')) {              if (strchr (name, '@')) {
# Line 449  keygen_dlg_proc (HWND dlg, UINT msg, WPA Line 422  keygen_dlg_proc (HWND dlg, UINT msg, WPA
422                           _("Key Generation"), MB_INFO);                           _("Key Generation"), MB_INFO);
423                  return FALSE;                  return FALSE;
424              }              }
425              if( !GetDlgItemText(dlg, IDC_KEYGEN_EMAIL, email, sizeof email -1 )              if (!GetDlgItemText (dlg, IDC_KEYGEN_EMAIL, email, sizeof (email) -1)
426                  || !strchr( email, '@') ) {                  || check_email_address (email)) {
427                  msg_box( dlg, _("Please enter a valid email address."),                  msg_box (dlg, _("Please enter a valid email address."),
428                           _("Key Generation"), MB_ERR );                           _("Key Generation"), MB_ERR);
429                  return FALSE;                  return FALSE;
430              }              }
431              use_comment = GetDlgItemText( dlg, IDC_KEYGEN_COMMENT, comment, sizeof comment -1 );              use_comment = GetDlgItemText(dlg, IDC_KEYGEN_COMMENT,
432              if( use_comment > 0 && strchr( comment, '@' ) ) {                                           comment, sizeof (comment) -1);
433                  msg_box( dlg, _("Please do NOT enter the email address in the comment field."),              if (use_comment > 0 && strchr (comment, '@')) {
434                           _("Key Generation"), MB_INFO );                  msg_box (dlg, _("Please do NOT enter the email address in the comment field."),
435                             _("Key Generation"), MB_INFO);
436                  return FALSE;                  return FALSE;
437              }              }
438              keytype = SendDlgItemMessage (dlg, IDC_KEYGEN_KEYTYPE, CB_GETCURSEL, 0, 0) + 1;              keytype = SendDlgItemMessage (dlg, IDC_KEYGEN_KEYTYPE, CB_GETCURSEL, 0, 0) + 1;
# Line 469  keygen_dlg_proc (HWND dlg, UINT msg, WPA Line 443  keygen_dlg_proc (HWND dlg, UINT msg, WPA
443                  _snprintf (t, DIM (t)-1, "%04d-%02d-%02d", st.wYear, st.wMonth, st.wDay);                  _snprintf (t, DIM (t)-1, "%04d-%02d-%02d", st.wYear, st.wMonth, st.wDay);
444                  expire = t;                  expire = t;
445              }              }
446                
447              if( !GetDlgItemText( dlg, IDC_KEYGEN_PASSPHRASE, pwd, sizeof pwd -1 ) ) {              pwd = request_passphrase2 (_("Key Generation"), PASSDLG_STRICT, &cancel);
448                  msg_box( dlg, _("Please enter the passphrase."),              if (cancel) {
449                           _("Key Generation"), MB_ERR );                  sfree_if_alloc (pwd);
                 return FALSE;  
             }  
             else if (check_passwd_quality (pwd, 0)) {  
                 int id = msg_box( dlg, _("Your passphrase should be at least 8 characters"  
                                          " long\nand should contain non-alphabetic characters."  
                                          "\n\nStill proceed?"),  
                                     _("Key Generation"), MB_ICONWARNING|MB_YESNO );  
                 if( id == IDNO ) {  
                     SetDlgItemText( dlg, IDC_KEYGEN_PASSPHRASE, "" );  
                     SetDlgItemText( dlg, IDC_KEYGEN_PWDCHECK, "" );  
                     return FALSE;  
                 }  
             }  
             if( !GetDlgItemText( dlg, IDC_KEYGEN_PWDCHECK, pwd2, sizeof pwd2 -1 ) ) {  
                 msg_box( dlg, _("Please repeat the passphrase."),  
                          _("Key Generation"), MB_ERR );  
                 return FALSE;  
             }  
             if( strcmp( pwd, pwd2 ) ) {  
                 msg_box( dlg,  _("Passphrases are NOT identical!" ),  
                          _("Key Generation"), MB_ERR );  
                 wipememory (pwd, sizeof (pwd));  
                 wipememory (pwd2, sizeof (pwd2));  
                 return FALSE;  
             }  
             if( is_8bit_string( pwd ) ) {  
                 msg_box( dlg, _("The passphrase contains 8-bit characters.\n"  
                                 "It is not suggested to use charset specific characters."),  
                          _("Key Generation"), MB_ERR );  
                 wipememory (pwd, sizeof (pwd));  
                 wipememory (pwd2, sizeof (pwd2));  
                 SetDlgItemText( dlg, IDC_KEYGEN_PASSPHRASE, "" );  
                 SetDlgItemText( dlg, IDC_KEYGEN_PWDCHECK, "" );  
450                  return FALSE;                  return FALSE;
451              }              }
452                                                if (!pwd) {
453              if( !use_comment && !strlen( comment ) ) {                  msg_box (dlg, _("Please enter the passphrase."),
454                             _("Key Generation"), MB_ERR);
455                    return FALSE;
456                }
457    
458                if (!use_comment && !strlen (comment)) {
459                  char *utf8_name;                  char *utf8_name;
460                  utf8_name = wincp_to_utf8 (name, strlen (name));                  utf8_name = native_to_utf8 (name);
461                  if( !utf8_name )                  if (!utf8_name)
462                      BUG( dlg );                      BUG (0);
463                  p = gpg_genkey_params( keytype, bits, utf8_name, NULL, email, expire, pwd );                  p = gpg_genkey_params (keytype, bits, utf8_name, NULL,
464                  free( utf8_name );                                         email, expire, pwd);
465                    free_if_alloc (utf8_name);
466              }              }
467              else {              else {
468                  char *utf8_name, *utf8_comment;                  char *utf8_name, *utf8_comment;
469                  utf8_name = wincp_to_utf8 (name, strlen (name));                  utf8_name = native_to_utf8 (name);
470                  utf8_comment = wincp_to_utf8 (comment, strlen (comment));                                utf8_comment = native_to_utf8 (comment);
471                  if( !utf8_name || !utf8_comment )                  if( !utf8_name || !utf8_comment )
472                      BUG( dlg );                      BUG (0);
473                  p = gpg_genkey_params( keytype, bits, utf8_name, utf8_comment, email, expire, pwd );                  p = gpg_genkey_params (keytype, bits, utf8_name, utf8_comment,
474                  free( utf8_name );                                         email, expire, pwd);
475                  free( utf8_comment );                  free_if_alloc (utf8_name);
476                    free_if_alloc (utf8_comment);
477              }              }
478              keygen_cb_dlg_create( );              keygen_cb_dlg_create ();
479              err = gpg_genkey (p, keygen_cb, &fpr);              err = gpg_genkey (p, keygen_cb, &fpr);
480              wipememory (pwd, sizeof (pwd));                  sfree_if_alloc (pwd);
481              wipememory (pwd2, sizeof (pwd2));              if (p) {
             if( p ) {  
482                  wipememory (p, strlen (p));  /* burn the passphrase! */                  wipememory (p, strlen (p));  /* burn the passphrase! */
483                  free (p);                  free_if_alloc (p);
484              }              }
485              keygen_cb_dlg_destroy ();              keygen_cb_dlg_destroy ();
486              keygen_cb (NULL, NULL, 0, 0, 0); /* flush */              keygen_cb (NULL, NULL, 0, 0, 0); /* flush */
487              if( err ) {              if (err) {
488                  if (fpr)                  free_if_alloc (fpr);
489                      free (fpr);                  msg_box (dlg, gpgme_strerror (err), _("Key Generation"), MB_ERR);
                 msg_box (dlg, gpgme_strerror( err ), _("Key Generation"), MB_ERR);  
490                  return FALSE;                  return FALSE;
491              }              }
492              status_box( dlg, _("Key Generation completed"), _("GnuPG Status") );              status_box (dlg, _("Key Generation completed"), _("GnuPG Status"));
493                            
494              keycache_update (0, fpr);              keycache_update (0, fpr);
495              keycache_update (1, fpr);              keycache_update (1, fpr);
496              if (ctx->first_start == 0 && ctx != NULL)              free_if_alloc (fpr);            
                 get_pubkey (fpr, &ctx->newkey);  
             if (fpr)  
                 free (fpr);  
497    
498              clear_dlg_fields (dlg);              clear_dlg_fields (dlg);
499              backup_keyrings (dlg);              backup_keyrings (dlg);
500                if (ctx)
501                    ctx->cancel = 0;
502              EndDialog (dlg, TRUE);              EndDialog (dlg, TRUE);
503              return TRUE;              return TRUE;
504                            
505          case IDCANCEL:          case IDCANCEL:
506              SetDlgItemText (dlg, IDC_KEYGEN_PASSPHRASE, "");              if (ctx)
507              SetDlgItemText (dlg, IDC_KEYGEN_PWDCHECK, "");                  ctx->cancel = 1;
508              EndDialog (dlg, FALSE);              EndDialog (dlg, FALSE);        
509              return FALSE;              return FALSE;
510          }          }
511          break;          break;
# Line 594  keygen_wizard_dlg_proc (HWND dlg, UINT m Line 539  keygen_wizard_dlg_proc (HWND dlg, UINT m
539          SetDlgItemText (dlg, IDC_KEYWIZARD_TEXT1INF, _("Every key pair must have a name associated with it. The name and\nemail address let your correspondents that your public key they are\nusing belongs to us."));          SetDlgItemText (dlg, IDC_KEYWIZARD_TEXT1INF, _("Every key pair must have a name associated with it. The name and\nemail address let your correspondents that your public key they are\nusing belongs to us."));
540          SetDlgItemText (dlg, IDC_KEYWIZARD_TEXT2INF, _("By accosiating an email address with your key pair, you will enable WinPT to assist your correspondents in selecting the correct public\nkey when communicating with you."));          SetDlgItemText (dlg, IDC_KEYWIZARD_TEXT2INF, _("By accosiating an email address with your key pair, you will enable WinPT to assist your correspondents in selecting the correct public\nkey when communicating with you."));
541          SetWindowText (dlg, _("Key Generation Wizard"));          SetWindowText (dlg, _("Key Generation Wizard"));
542            SetDlgItemText (dlg, IDCANCEL, _("&Cancel"));
543            SetDlgItemText (dlg, IDC_KEYWIZARD_EXPERT, _("E&xpert"));
544          SetForegroundWindow (dlg);          SetForegroundWindow (dlg);
545          center_window (dlg, NULL);          center_window (dlg, NULL);
546          break;          break;
# Line 606  keygen_wizard_dlg_proc (HWND dlg, UINT m Line 553  keygen_wizard_dlg_proc (HWND dlg, UINT m
553          switch( LOWORD( wparam ) ) {          switch( LOWORD( wparam ) ) {
554          case IDC_KEYWIZARD_EXPERT:          case IDC_KEYWIZARD_EXPERT:
555              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_KEYGEN, dlg,              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_KEYGEN, dlg,
556                              keygen_dlg_proc, NULL);                              keygen_dlg_proc, 0);
557              EndDialog (dlg, TRUE);              EndDialog (dlg, TRUE);
558              break;              break;
559    
# Line 621  keygen_wizard_dlg_proc (HWND dlg, UINT m Line 568  keygen_wizard_dlg_proc (HWND dlg, UINT m
568                           _("Key Generation Wizard"), MB_WARN);                           _("Key Generation Wizard"), MB_WARN);
569                  return FALSE;                  return FALSE;
570              }              }
571              if( !GetDlgItemText( dlg, IDC_KEYWIZARD_EMAIL, email, sizeof email-1 )              if (!GetDlgItemText(dlg, IDC_KEYWIZARD_EMAIL, email, sizeof email-1 )
572                  || !strchr( email, '@' ) ) {                  || check_email_address (email)) {
573                  msg_box( dlg, _("Please enter a valid email address."),                  msg_box (dlg, _("Please enter a valid email address."),
574                           _("Key Generation Wizard"), MB_ERR );                           _("Key Generation Wizard"), MB_ERR);
575                  return FALSE;                  return FALSE;
576              }              }
577              if (strchr (email, '<') || strchr (email, '>')) {              if (strchr (email, '<') || strchr (email, '>')) {
# Line 635  keygen_wizard_dlg_proc (HWND dlg, UINT m Line 582  keygen_wizard_dlg_proc (HWND dlg, UINT m
582              pass = request_passphrase2 (_("Key Generation"), PASSDLG_STRICT, &cancel);              pass = request_passphrase2 (_("Key Generation"), PASSDLG_STRICT, &cancel);
583              if (cancel)              if (cancel)
584                  return FALSE;                  return FALSE;
585              utf8_name = wincp_to_utf8 (name, strlen (name));              utf8_name = native_to_utf8 (name);
586              if( !utf8_name )              if (!utf8_name)
587                  BUG( NULL );                  BUG (0);
588              if (IsDlgButtonChecked (dlg, IDC_KEYWIZARD_USERSA))              if (IsDlgButtonChecked (dlg, IDC_KEYWIZARD_USERSA))
589                  pubkey_algo = GPG_KEYGEN_DSA_RSA;                  pubkey_algo = GPG_KEYGEN_DSA_RSA;
590              p = gpg_genkey_params (pubkey_algo, DFAULT_KEYSIZE, utf8_name,              p = gpg_genkey_params (pubkey_algo, DFAULT_KEYSIZE, utf8_name,
591                                       NULL, email, NULL, pass);                                       NULL, email, NULL, pass);
592              free( utf8_name );              free_if_alloc (utf8_name);
593              keygen_cb_dlg_create();              keygen_cb_dlg_create();
594              err = gpg_genkey (p, keygen_cb, &fpr);              err = gpg_genkey (p, keygen_cb, &fpr);
595              keygen_cb_dlg_destroy();              keygen_cb_dlg_destroy();
596              keygen_cb( NULL, NULL, 0, 0, 0 );              keygen_cb (NULL, NULL, 0, 0, 0);
597              if( p ) {              if (p) {
598                  memset( p, 0, strlen( p ) );                  wipememory (p, strlen (p));
599                  free( p );                  free_if_alloc (p);
600              }              }
601              sfree_if_alloc (pass);              sfree_if_alloc (pass);
602              if( err ) {              if (err) {
603                  msg_box( dlg, gpgme_strerror( err ), _("Key Generation Wizard"), MB_ERR );                  msg_box (dlg, gpgme_strerror( err ), _("Key Generation Wizard"), MB_ERR);
604                  if (fpr)                  free_if_alloc (fpr);
                     free (fpr);  
605                  return FALSE;                  return FALSE;
606              }              }
607              status_box( dlg, _("Key Generation completed"), _("GnuPG Status") );              status_box( dlg, _("Key Generation completed"), _("GnuPG Status") );
608                            
609              keycache_update (0, fpr);              keycache_update (0, fpr);
610              keycache_update (1, fpr);              keycache_update (1, fpr);
611              if (ctx->first_start == 0 && ctx != NULL)              free_if_alloc (fpr);
612                  get_pubkey (fpr, &ctx->newkey);  
             if (fpr)  
                 free (fpr);  
613              backup_keyrings (dlg);              backup_keyrings (dlg);
614                if (ctx)
615                    ctx->cancel = 0;            
616              EndDialog (dlg, TRUE);              EndDialog (dlg, TRUE);
617              break;              break;
618    
619          case IDCANCEL:          case IDCANCEL:
620              EndDialog( dlg, FALSE );              if (ctx)
621                    ctx->cancel = 1;
622                EndDialog (dlg, FALSE);
623              break;              break;
624          }          }
625          break;          break;

Legend:
Removed from v.48  
changed lines
  Added in v.201

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26