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

Diff of /trunk/Src/wptKeyPropsDlg.cpp

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

revision 208 by twoaday, Mon May 1 12:22:18 2006 UTC revision 225 by twoaday, Tue Jun 6 13:37:59 2006 UTC
# Line 22  Line 22 
22  #endif  #endif
23    
24  #include <windows.h>  #include <windows.h>
25    #include <assert.h>
26    
27  #include "resource.h"  #include "resource.h"
28  #include "wptErrors.h"  #include "wptErrors.h"
# Line 41  Line 42 
42  static int  static int
43  do_check_key (gpgme_key_t key)  do_check_key (gpgme_key_t key)
44  {  {
45      int okay = 0;      int invalid = 0;
46      okay = key->expired;  
47      if (!okay)      invalid = key->expired;
48          okay = key->revoked;      if (!invalid)
49      return okay;          invalid = key->revoked;
50        return invalid;
51  }  }
52    
53    
# Line 83  get_photo_tmpname (HWND dlg) Line 85  get_photo_tmpname (HWND dlg)
85      char name[64];      char name[64];
86    
87      _snprintf (name, sizeof (name)-1, "winpt_photo_%08lX.tmp", (DWORD)dlg);      _snprintf (name, sizeof (name)-1, "winpt_photo_%08lX.tmp", (DWORD)dlg);
88      get_temp_name (buf, DIM (buf), name);      get_temp_name (buf, DIM (buf)-1, name);
89      return buf;      return buf;
90  }  }
91    
# Line 107  keyprops_load_photo (HWND dlg, gpgme_key Line 109  keyprops_load_photo (HWND dlg, gpgme_key
109      DWORD imglen = 0;      DWORD imglen = 0;
110      int pos=0;      int pos=0;
111    
112      winpt_get_pubkey (key->subkeys->keyid, &k);      if (winpt_get_pubkey (key->subkeys->keyid, &k))
113            BUG (0);
114      img = k.ext->attrib.d;      img = k.ext->attrib.d;
115      imglen = k.ext->attrib.len;      imglen = k.ext->attrib.len;
116      if (!k.ext->attrib.validity)      if (img && !k.ext->attrib.validity)
117          get_uat_validity (key->subkeys->keyid, &k.ext->attrib.validity);          get_uat_validity (key->subkeys->keyid, &k.ext->attrib.validity);
118      *r_valid = k.ext->attrib.validity;      *r_valid = k.ext->attrib.validity;
119    
# Line 121  keyprops_load_photo (HWND dlg, gpgme_key Line 124  keyprops_load_photo (HWND dlg, gpgme_key
124    
125      f = fopen (get_photo_tmpname (dlg), "wb");      f = fopen (get_photo_tmpname (dlg), "wb");
126      if (f) {      if (f) {
         //for (pos = 0; img[pos] != 0x10; pos++)  
         //      ;  
127          pos += 16;          pos += 16;
128          fwrite (img + pos, 1, imglen - pos, f);          fwrite (img + pos, 1, imglen - pos, f);
129          fclose (f);          fclose (f);
# Line 154  keyprops_show_photo (HWND dlg) Line 155  keyprops_show_photo (HWND dlg)
155  static const char*  static const char*
156  get_validity (gpgme_key_t key)  get_validity (gpgme_key_t key)
157  {  {
158      int val;      if (key->expired)
     val = key->expired;  
     if (val)  
159          return _("Expired");              return _("Expired");    
160      val = key->revoked;      if (key->revoked)
     if (val)  
161          return _("Revoked");          return _("Revoked");
162      val = key->disabled;      if (key->disabled)
     if (val)  
163          return _("Disabled");          return _("Disabled");
164        if (key->invalid)
165            return _("Invalid");
166      return get_key_trust2 (NULL, key->uids->validity, 0, 0);      return get_key_trust2 (NULL, key->uids->validity, 0, 0);
167  }  }
168    
# Line 174  get_pref_cipher (winpt_key_t k) Line 173  get_pref_cipher (winpt_key_t k)
173  {  {
174      if (k->is_v3)      if (k->is_v3)
175          return "IDEA";          return "IDEA";
176      if (!k->ext->sym_prefs)      if (!k->ext || !k->ext->sym_prefs)
177          return "3DES";          return "3DES";
178      switch (*k->ext->sym_prefs) {      switch (*k->ext->sym_prefs) {
179      case 1: return "IDEA";      case 1: return "IDEA";
180      case 2: return "3DES";      case 2: return "3DES";
181      case 3: return "CAST5";      case 3: return "CAST5";
182      case 4: return "Blowfish";      case 4: return "Blowfish";
183      case 7:      case 7: return "AES128";
184      case 8:      case 8: return "AES192";
185      case 9: return "AES";      case 9: return "AES256";
186      case 10:return "Twofish";      case 10:return "Twofish";
187      }      }
188      return "Unknown";      return "Unknown";
# Line 195  static bool Line 194  static bool
194  check_for_desig_rev (gpgme_key_t key)  check_for_desig_rev (gpgme_key_t key)
195  {  {
196      winpt_key_s k;      winpt_key_s k;
197    
198      memset (&k, 0, sizeof (k));      memset (&k, 0, sizeof (k));
199      if (!winpt_get_pubkey (key->subkeys->keyid, &k))      if (!winpt_get_pubkey (key->subkeys->keyid, &k))
200          return k.ext->gloflags.has_desig_rev? true : false;          return k.ext->gloflags.has_desig_rev? true : false;
# Line 210  get_card_type (winpt_key_t k) Line 210  get_card_type (winpt_key_t k)
210    
211      if (!k->ext || !k->ext->card_type)      if (!k->ext || !k->ext->card_type)
212          return "";          return "";
213      _snprintf (buf, sizeof (buf)-1, _("Card-Type: %s\r\n"), k->ext->card_type);      _snprintf (buf, DIM (buf)-1, _("Card-Type: %s\r\n"), k->ext->card_type);
214      return buf;      return buf;
215  }  }
216    
217    
218    /* Return 1 if at least one user-ID is valid. */
219    static int
220    key_is_valid (gpgme_key_t key)
221    {
222        gpgme_user_id_t u;
223    
224        for (u=key->uids; u; u=u->next) {
225            if (u->validity >= GPGME_VALIDITY_MARGINAL)
226                return 1;
227        }
228        return 0;
229    }
230    
231    
232    
233  /* Display the key information for key @k.  /* Display the key information for key @k.
234     Return value: gpgme key on success. */     Return value: gpgme key on success. */
235  static void  static void
236  display_key_info (HWND dlg, winpt_key_t k, gpgme_key_t *r_key)  display_key_info (HWND dlg, winpt_key_t k)
237  {  {
238      gpgme_key_t key;      gpgme_key_t key;
239      struct winpt_key_s pk, sk;      struct winpt_key_s sk;
240      char info[512];      char info[512];
241      const char *inf;      const char *inf;
242      DWORD created, expires;      DWORD created, expires;
243    
244      memset (&pk, 0, sizeof (pk));      gpg_keycache_update_attr (k->ext, KC_ATTR_PREFSYM, 0);
245      if (winpt_get_pubkey (k->keyid, &pk))      memset (&sk, 0, sizeof (sk));
         BUG (0);  
     gpg_keycache_update_attr (pk.ext, KC_ATTR_PREFSYM, 0);  
     memset (&sk, 0, sizeof (sk));        
246      if (k->key_pair && !winpt_get_seckey (k->keyid, &sk))      if (k->key_pair && !winpt_get_seckey (k->keyid, &sk))
247          k->is_protected = sk.is_protected;          k->is_protected = sk.is_protected;
248      key = pk.ext->key;      key = k->ext->key;
249      created = key->subkeys->timestamp;      created = key->subkeys->timestamp;
250      expires = key->subkeys->expires;      expires = key->subkeys->expires;
251      _snprintf (info, DIM (info)-1,      _snprintf (info, DIM (info)-1,
252                 _("Type: %s\r\n"                 _("Type: %s\r\n"
253                 "Key ID: %s\r\n"                 "Key ID: 0x%s\r\n"
254                 "Algorithm: %s\r\n"                 "Algorithm: %s\r\n"
255                 "Size: %s bits\r\n"                 "Size: %s bits\r\n"
256                 "Created: %s\r\n"                 "Created: %s\r\n"
# Line 253  display_key_info (HWND dlg, winpt_key_t Line 265  display_key_info (HWND dlg, winpt_key_t
265                 get_key_created (created),                 get_key_created (created),
266                 get_key_expire_date (expires),                 get_key_expire_date (expires),
267                 get_validity (key),                 get_validity (key),
268                 get_pref_cipher (&pk),                 get_pref_cipher (k),
269                 get_card_type (&sk));                 get_card_type (&sk));
270    
271      SetDlgItemText (dlg, IDC_KEYPROPS_INFO, info);      SetDlgItemText (dlg, IDC_KEYPROPS_INFO, info);
272      SetDlgItemText (dlg, IDC_KEYPROPS_FPR, get_key_fpr (key));        SetDlgItemText (dlg, IDC_KEYPROPS_FPR, get_key_fpr (key));  
273      inf = ownertrust_to_string (key->owner_trust, k->key_pair);      inf = ownertrust_to_string (key->owner_trust, k->key_pair);
274      SetDlgItemText (dlg, IDC_KEYPROPS_OT, inf);      SetDlgItemText (dlg, IDC_KEYPROPS_OT, inf);
275    }
276    
277    
278    /* Context to store associated data of the dialog. */
279    struct prop_info_s {
280        winpt_key_t key;
281    };
282    
283    
284    static void
285    on_init_dialog (HWND dlg, WPARAM wparam, LPARAM lparam)
286    {
287        gpgme_validity_t valid;
288    
289      *r_key = key;      winpt_key_t k = (winpt_key_t)lparam;
290        SetWindowText (dlg, _("Key Properties"));
291        SetDlgItemText (dlg, IDC_KEYPROPS_OT_CHANGE, _("&Change"));
292        SetDlgItemText (dlg, IDC_KEYPROPS_REVOKERS, _("&Revokers"));
293        SetDlgItemText (dlg, IDC_KEYPROPS_CHANGE_PWD, _("Change &Password"));
294        SetDlgItemText (dlg, IDC_KEYPROPS_OTINF, _("Ownertrust"));  
295        
296        display_key_info (dlg, k);
297        if (!keyprops_load_photo (dlg, k->ctx, &valid)) {
298            k->has_photo = 1;
299            if (valid < GPGME_VALIDITY_MARGINAL)
300                SetDlgItemText (dlg, IDC_KEYPROPS_IMGINF, _("Photo-ID not validated."));
301        }    
302        if (k->key_pair)
303            EnableWindow (GetDlgItem (dlg, IDC_KEYPROPS_CHANGE_PWD), TRUE);
304        if (check_for_desig_rev (k->ctx))
305            EnableWindow (GetDlgItem (dlg, IDC_KEYPROPS_REVOKERS), TRUE);
306        if (do_check_key (k->ctx))
307            EnableWindow (GetDlgItem (dlg, IDC_KEYPROPS_OT_CHANGE), FALSE);
308        center_window (dlg, NULL);  
309        SetForegroundWindow (dlg);
310  }  }
311    
312    
# Line 269  display_key_info (HWND dlg, winpt_key_t Line 314  display_key_info (HWND dlg, winpt_key_t
314  BOOL CALLBACK  BOOL CALLBACK
315  keyprops_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  keyprops_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
316  {  {
317      static winpt_key_t k;      struct prop_info_s *prop = NULL;
     static gpgme_key_t key;  
     gpgme_validity_t valid;  
318      const char *inf;      const char *inf;
319      int rc;      int rc;
320            
321      /* XXX: static variable (k) prevent that the dialog can      if (msg != WM_INITDIALOG &&
322              be opened twice. */          (prop = (prop_info_s*)GetWindowLong (dlg, GWL_USERDATA)) == NULL)
323            return FALSE;
324    
325      switch (msg) {      switch (msg) {
326      case WM_INITDIALOG:      case WM_INITDIALOG:
327          if (!lparam)          assert (lparam != NULL);
328              dlg_fatal_error (dlg, "Could not get dialog param!");          prop = new struct prop_info_s;
329          k = (winpt_key_t)lparam;          prop->key = (winpt_key_t)lparam;
330          SetWindowText (dlg, _("Key Properties"));          SetWindowLong (dlg, GWL_USERDATA, (LONG)prop);
331          SetDlgItemText (dlg, IDC_KEYPROPS_OT_CHANGE, _("&Change"));          on_init_dialog (dlg, wparam, lparam);
         SetDlgItemText (dlg, IDC_KEYPROPS_REVOKERS, _("&Revokers"));  
         SetDlgItemText (dlg, IDC_KEYPROPS_CHANGE_PWD, _("Change &Password"));  
         SetDlgItemText (dlg, IDC_KEYPROPS_OTINF, _("Ownertrust"));  
           
         display_key_info (dlg, k, &key);  
         if (!keyprops_load_photo (dlg, key, &valid)) {  
             k->has_photo = 1;    
             if (valid < GPGME_VALIDITY_MARGINAL)  
                 SetDlgItemText (dlg, IDC_KEYPROPS_IMGINF, _("Photo-ID not validated."));  
         }  
         if (k->key_pair)  
             EnableWindow (GetDlgItem (dlg, IDC_KEYPROPS_CHANGE_PWD), TRUE);  
         if (check_for_desig_rev (key))  
             EnableWindow (GetDlgItem (dlg, IDC_KEYPROPS_REVOKERS), TRUE);  
         if (key->revoked || key->expired)  
             EnableWindow (GetDlgItem (dlg, IDC_KEYPROPS_OT_CHANGE), FALSE);  
         center_window (dlg, NULL);  
         SetForegroundWindow (dlg);        
332          return TRUE;          return TRUE;
333    
334      case WM_DESTROY:      case WM_DESTROY:
335          remove (get_photo_tmpname (dlg));          remove (get_photo_tmpname (dlg));
336            delete prop;prop=NULL;
337            SetWindowLong (dlg, GWL_USERDATA, 0);
338          break;          break;
339                
340      case WM_PAINT:      case WM_PAINT:
341          if (k->has_photo)          if (prop->key->has_photo)
342              keyprops_show_photo (dlg);              keyprops_show_photo (dlg);
343          break;          break;
   
     case WM_SYSCOMMAND:  
         if (LOWORD (wparam) == SC_CLOSE)  
             EndDialog (dlg, FALSE);  
         return FALSE;  
344                    
345      case WM_COMMAND:      case WM_COMMAND:
346          switch (LOWORD (wparam)) {          switch (LOWORD (wparam)) {
# Line 329  keyprops_dlg_proc (HWND dlg, UINT msg, W Line 353  keyprops_dlg_proc (HWND dlg, UINT msg, W
353              return TRUE;              return TRUE;
354                            
355          case IDC_KEYPROPS_OT_CHANGE:          case IDC_KEYPROPS_OT_CHANGE:
356              if (do_check_key (key)) {              if (do_check_key (prop->key->ctx)) {
357                  msg_box (dlg, _("The status of this key is 'revoked' or 'expired'.\n"                  msg_box (dlg, _("The status of this key is 'revoked' or 'expired'.\n"
358                                  "You cannot change the ownertrust of such keys."),                                  "You cannot change the ownertrust of such keys."),
359                                  _("WinPT Warning"), MB_ERR);                                  _("WinPT Warning"), MB_ERR);
360                  return TRUE;                  return TRUE;
361              }              }
362              if (!k->key_pair && key->uids->validity < 3) {              if (!prop->key->key_pair && !key_is_valid (prop->key->ctx)) {
363                  rc = msg_box (dlg, _("This is a non-valid key.\n"                  rc = msg_box (dlg, _("This is a non-valid key.\n"
364                                       "Modifying the ownertrust has no effect on such keys.\n\n"                                       "Modifying the ownertrust has no effect on such keys.\n\n"
365                                       "Do you really want to continue?"),                                       "Do you really want to continue?"),
# Line 346  keyprops_dlg_proc (HWND dlg, UINT msg, W Line 370  keyprops_dlg_proc (HWND dlg, UINT msg, W
370              rc = dialog_box_param (glob_hinst,              rc = dialog_box_param (glob_hinst,
371                                     (LPCSTR)IDD_WINPT_KEYEDIT_OWNERTRUST,                                     (LPCSTR)IDD_WINPT_KEYEDIT_OWNERTRUST,
372                                      dlg, keyedit_ownertrust_dlg_proc,                                      dlg, keyedit_ownertrust_dlg_proc,
373                                     (LPARAM)k, _("Change Ownertrust"),                                     (LPARAM)prop->key, _("Change Ownertrust"),
374                                      IDS_WINPT_KEYEDIT_OWNERTRUST);                                      IDS_WINPT_KEYEDIT_OWNERTRUST);
375              if (rc == FALSE) /* Cancel */              if (rc == FALSE) /* Cancel */
376                  return TRUE;                  return TRUE;
377    
378              inf = ownertrust_to_string (k->callback.new_val, k->key_pair);              inf = ownertrust_to_string (prop->key->callback.new_val,
379                                            prop->key->key_pair);
380              SetDlgItemText (dlg, IDC_KEYPROPS_OT, inf);              SetDlgItemText (dlg, IDC_KEYPROPS_OT, inf);
381              msg_box (dlg, _("Ownertrust successfully changed."),              msg_box (dlg, _("Ownertrust successfully changed."),
382                       _("GnuPG Status"), MB_OK);                       _("GnuPG Status"), MB_OK);
383              k->update = 1;              prop->key->update = 1;
384              return TRUE;              return TRUE;
385                            
386          case IDC_KEYPROPS_CHANGE_PWD:          case IDC_KEYPROPS_CHANGE_PWD:
387              keyedit_change_passwd (k, dlg);                      keyedit_change_passwd (prop->key, dlg);        
388              return TRUE;              return TRUE;
389    
390          case IDC_KEYPROPS_REVOKERS:          case IDC_KEYPROPS_REVOKERS:
391              k->update = dialog_box_param (              prop->key->update = dialog_box_param (glob_hinst,
392                  glob_hinst, (LPCTSTR)IDD_WINPT_KEYREVOKERS, dlg,                                            (LPCTSTR)IDD_WINPT_KEYREVOKERS, dlg,
393                  key_revokers_dlg_proc, (LPARAM)k,                                            key_revokers_dlg_proc, (LPARAM)prop->key,
394                  _("Key Revokers"), IDS_WINPT_KEY_REVOKERS);                                            _("Key Revokers"),
395                                              IDS_WINPT_KEY_REVOKERS);
396                UpdateWindow (dlg);
397              break;              break;
398          }          }
399      }      }

Legend:
Removed from v.208  
changed lines
  Added in v.225

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26