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

Diff of /trunk/Src/wptKeyEditDlgs.cpp

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

revision 11 by twoaday, Mon Apr 4 06:59:24 2005 UTC revision 12 by twoaday, Thu Apr 14 12:56:25 2005 UTC
# Line 36  Line 36 
36  #include "wptKeyManager.h"  #include "wptKeyManager.h"
37  #include "wptRegistry.h"  #include "wptRegistry.h"
38    
   
39  enum keyedit_commands {      enum keyedit_commands {    
40      CMD_ADDKEY = 0,      CMD_ADDKEY = 0,
41      CMD_ADDUID,      CMD_ADDUID,
# Line 151  do_add_new_subkey (listview_ctrl_t lv, K Line 150  do_add_new_subkey (listview_ctrl_t lv, K
150  {  {
151      char info[128], keyid[32];      char info[128], keyid[32];
152      const char * expdate, * s;      const char * expdate, * s;
153        int n;
154            
155      expdate = keygen->expire? get_key_expire_date (keygen->expire) : _("Never");      expdate = keygen->expire? get_key_expire_date (keygen->expire) : _("Never");
156      _snprintf( info, sizeof info-1, "%d-bit %s",      _snprintf (info, sizeof info-1, "%d-bit %s",
157          keygen->bits, gpgme_key_expand_attr( GPGME_ATTR_ALGO, keygen->algo ) );                 keygen->bits,
158      _snprintf( keyid, sizeof keyid-1, "0x%s", keygen->fpr+32 );                 gpgme_key_expand_attr (GPGME_ATTR_ALGO, keygen->algo));
159      listview_add_item( lv, "" );      _snprintf (keyid, sizeof keyid-1, "0x%s", keygen->fpr+32);
160      listview_add_sub_item( lv, 0, 0, info );      n = listview_count_items (lv, 0);
161      listview_add_sub_item( lv, 0, 1, keyid );      listview_add_item_pos (lv, n);
162      listview_add_sub_item( lv, 0, 2, get_key_created( time(NULL) ) );      listview_add_sub_item (lv, n, 0, info);
163      listview_add_sub_item( lv, 0, 3, expdate );      listview_add_sub_item (lv, n, 1, keyid);
164      if( flags & KM_FLAG_REVOKED ) s = _("Revoked");          listview_add_sub_item (lv, n, 2, get_key_created (time (NULL)));
165      else if( flags & KM_FLAG_EXPIRED ) s = _("Expired");      listview_add_sub_item (lv, n, 3, expdate);
166        if (flags & KM_FLAG_REVOKED) s = _("Revoked");      
167        else if (flags & KM_FLAG_EXPIRED) s = _("Expired");
168      else s = _("OK");      else s = _("OK");
169      listview_add_sub_item( lv, 0, 4, s );      listview_add_sub_item (lv, n, 4, s);
170  } /* do_add_new_subkey */  } /* do_add_new_subkey */
171    
172    
# Line 460  keyedit_adduid_dlg_proc( HWND dlg, UINT Line 462  keyedit_adduid_dlg_proc( HWND dlg, UINT
462    
463    
464  BOOL CALLBACK  BOOL CALLBACK
465  keyedit_addsubkey_dlg_proc( HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam )  keyedit_addsubkey_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
466  {  {
467      static KEYEDIT_CB * ctx;      static KEYEDIT_CB * ctx;
468      static KEYGEN_CB * keygen;      static KEYGEN_CB * keygen;
# Line 487  keyedit_addsubkey_dlg_proc( HWND dlg, UI Line 489  keyedit_addsubkey_dlg_proc( HWND dlg, UI
489          listbox_add_string( lb, "RSA (sign only)");          listbox_add_string( lb, "RSA (sign only)");
490          listbox_add_string( lb, "RSA (encrypt only)" );          listbox_add_string( lb, "RSA (encrypt only)" );
491          SetDlgItemInt( dlg, IDC_ADDSUBKEY_VALID, 0, FALSE );          SetDlgItemInt( dlg, IDC_ADDSUBKEY_VALID, 0, FALSE );
492          SetDlgItemInt( dlg, IDC_ADDSUBKEY_SIZE, 2048, FALSE );          SetDlgItemInt( dlg, IDC_ADDSUBKEY_SIZE, DFAULT_KEYSIZE, FALSE );
493          SetForegroundWindow( dlg );          SetForegroundWindow( dlg );
494          return FALSE;          return FALSE;
495                    
# Line 520  keyedit_addsubkey_dlg_proc( HWND dlg, UI Line 522  keyedit_addsubkey_dlg_proc( HWND dlg, UI
522                  msg_box( dlg, _("Please enter the keysize."), _("Add Subkey"), MB_ERR );                  msg_box( dlg, _("Please enter the keysize."), _("Add Subkey"), MB_ERR );
523                  return FALSE;                  return FALSE;
524              }              }
525              else if( index == 2 && size != 1024 ) {              else if (index == 2 && size != 1024) {
526                  msg_box( dlg,_("DSS uses a fixed keysize of 1024. Size changed."), _("Add Subkey"), MB_INFO );                  msg_box( dlg,_("DSS uses a fixed keysize of 1024. Size changed."), _("Add Subkey"), MB_INFO );
527                  size = 1024;                  size = 1024;
528              }              }
529              else if( size > 4096 ) {              else if (size > 4096) {
530                  msg_box( dlg, _("Chosen size should be between 1024 and 4096. Size changed."), _("Add Subkey"), MB_ERR );                  int id;
531                  size = 4096;                  msg_box (dlg, _("Chosen size must be between 1024 and 4096."), _("Add Subkey"), MB_ERR);
532                    id = msg_box (dlg, _("Do you really need such a large key?"), _("Add Subkey"), MB_QUEST_ASK);
533                    if (id == IDNO)
534                        size = DFAULT_KEYSIZE;
535                    else
536                        size = 4096;
537                    SetDlgItemInt (dlg, IDC_ADDSUBKEY_SIZE, size, TRUE);
538              }              }
539              else if( size < 1024 ) {              else if (size < 1024) {
540                  msg_box( dlg, _("Keys with a size of less then 1024 are considered insecure.\n"                  msg_box( dlg, _("Keys with a size of less then 1024 are considered insecure.\n"
541                                  "Size changed to 1024!"), _("Add Subkey"), MB_INFO );                                  "Size changed to 1024!"), _("Add Subkey"), MB_INFO );
542                  size = 1024;                  size = 1024;
543              }              }
544              valid = GetDlgItemInt( dlg, IDC_ADDSUBKEY_VALID, NULL, TRUE );              valid = GetDlgItemInt (dlg, IDC_ADDSUBKEY_VALID, NULL, TRUE);
545              if( valid < 0 ) {              if (valid < 0) {
546                  msg_box( dlg, _("Please enter the days the key is valid."), _("Add Subkey"), MB_ERR );                  msg_box( dlg, _("Please enter the days the key is valid."), _("Add Subkey"), MB_ERR );
547                  return FALSE;                  return FALSE;
548              }              }
# Line 624  keyedit_add_userid (winpt_key_t k, HWND Line 632  keyedit_add_userid (winpt_key_t k, HWND
632  } /* keyedit_add_userid */  } /* keyedit_add_userid */
633    
634    
635    char*
636    get_subkey_fingerprint (gpgme_ctx_t ctx, const char *keyid)
637    {
638        static char fpr[40];
639        const char *s;
640        gpgme_error_t err;
641        gpgme_key_t key, main;
642        int n;
643    
644        /* XXX: this is very slow and complicated */
645        err = gpgme_op_keylist_start (ctx, keyid, 0);
646        if (err)
647            return NULL;
648        err = gpgme_op_keylist_next (ctx, &key);
649        if (err)
650            return NULL;
651        
652        n = gpgme_key_count_items (key, GPGME_ATTR_KEYID);
653        s = gpgme_key_get_string_attr (key, GPGME_ATTR_FPR, NULL, n-1);
654        strcpy (fpr, s);
655    
656        get_pubkey (keyid, &main);
657        gpgme_key_append (main, key, n-1);
658    
659        gpgme_key_release (key);
660        return fpr;
661    }
662    
663    
664  BOOL  BOOL
665  keyedit_add_subkey (winpt_key_t k, HWND dlg, listview_ctrl_t lv)  keyedit_add_subkey (winpt_key_t k, HWND dlg, listview_ctrl_t lv)
666  {  {
# Line 648  keyedit_add_subkey (winpt_key_t k, HWND Line 685  keyedit_add_subkey (winpt_key_t k, HWND
685      if( ec )      if( ec )
686          BUG( dlg );          BUG( dlg );
687            
688      memset( &keygen, 0, sizeof keygen );      memset (&keygen, 0, sizeof (keygen));
689      memset( &cb, 0, sizeof cb );      memset (&cb, 0, sizeof (cb));
690      cb.ek = ek;      cb.ek = ek;
691      cb.pass = k->is_protected? pass : NULL;          cb.pass = k->is_protected? pass : NULL;
692      cb.opaque = &keygen;      cb.opaque = &keygen;
693      dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYEDIT_ADDSUBKEY,          dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYEDIT_ADDSUBKEY,    
694                        dlg, keyedit_addsubkey_dlg_proc,                        dlg, keyedit_addsubkey_dlg_proc,
# Line 662  keyedit_add_subkey (winpt_key_t k, HWND Line 699  keyedit_add_subkey (winpt_key_t k, HWND
699          return FALSE;          return FALSE;
700      }      }
701    
702      ec = gpgme_new( &ctx );      ec = gpgme_new (&ctx);
703      if( ec )      if (ec)
704          BUG( dlg );          BUG (dlg);
705      gpgme_enable_logging( ctx );      gpgme_enable_logging (ctx);
706      gpgme_set_edit_ctx( ctx, ek, GPGME_EDITKEY_ADDKEY );      gpgme_set_edit_ctx (ctx, ek, GPGME_EDITKEY_ADDKEY);
707      gpgme_set_progress_cb( ctx, keygen_cb, NULL );      gpgme_set_progress_cb (ctx, keygen_cb, NULL);
708      keygen_cb_dlg_create ();      keygen_cb_dlg_create ();
709            
710      ec = gpgme_op_editkey( ctx, k->keyid );      ec = gpgme_op_editkey (ctx, k->keyid);
711      keygen.fpr = (char *)gpgme_control (ctx, GPGME_CTRL_FPR, -1);      keygen.fpr = get_subkey_fingerprint (ctx, k->keyid);
712      keygen_cb_dlg_destroy ();      keygen_cb_dlg_destroy ();
713      keygen_cb (NULL, NULL, 0, 0, 0); /* flush */      keygen_cb (NULL, NULL, 0, 0, 0); /* flush */
714      if( ec )      if (ec)
715          gpgme_show_error( dlg, ec, ctx, _("Add Subkey"), MB_ERR );          gpgme_show_error (dlg, ec, ctx, _("Add Subkey"), MB_ERR);
716      else {            else {      
717          msg_box( dlg, _("Subkey successfully added."), _("GnuPG Status"), MB_OK );          msg_box (dlg, _("Subkey successfully added."), _("GnuPG Status"), MB_OK);
718          if( lv )          if (lv)
719              do_add_new_subkey( lv, &keygen, k->flags );              do_add_new_subkey (lv, &keygen, k->flags);
720          keycache_set_reload( 1 );          keycache_set_reload (1);
721      }      }
722      free_if_alloc( pass );      free_if_alloc (pass);
723      gpgme_editkey_release( ek );      gpgme_editkey_release (ek);
724      gpgme_release( ctx );      gpgme_release (ctx);
725            
726      return ec? FALSE : TRUE;      return ec? FALSE : TRUE;
727  } /* keyedit_add_subkey */  } /* keyedit_add_subkey */

Legend:
Removed from v.11  
changed lines
  Added in v.12

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26