[Winpt-commits] r260 - in trunk: . Doc Doc/website Include Po Src

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Wed Aug 16 12:01:40 CEST 2006


Author: twoaday
Date: 2006-08-16 12:01:30 +0200 (Wed, 16 Aug 2006)
New Revision: 260

Modified:
   trunk/Doc/website/download.html
   trunk/Doc/website/index.html
   trunk/Doc/website/screenshots.html
   trunk/Doc/winpt.texi
   trunk/Include/wptCard.h
   trunk/Include/wptFileManager.h
   trunk/Include/wptGPG.h
   trunk/Include/wptGPGME.h
   trunk/Include/wptKeyEdit.h
   trunk/Include/wptKeylist.h
   trunk/NEWS
   trunk/Po/ChangeLog
   trunk/Po/de.po
   trunk/Po/jp.po
   trunk/Po/pt_BR.po
   trunk/README
   trunk/Src/ChangeLog
   trunk/Src/WinPT-en.rc
   trunk/Src/WinPT.cpp
   trunk/Src/resource.h
   trunk/Src/wptCardDlg.cpp
   trunk/Src/wptCardEdit.cpp
   trunk/Src/wptCardEditCB.cpp
   trunk/Src/wptClipEncryptDlg.cpp
   trunk/Src/wptClipSignEncDlg.cpp
   trunk/Src/wptFileManager.cpp
   trunk/Src/wptFirstRunDlg.cpp
   trunk/Src/wptGPGME.cpp
   trunk/Src/wptGPGMEWrapper.cpp
   trunk/Src/wptHTTP.cpp
   trunk/Src/wptKeyCache.cpp
   trunk/Src/wptKeyEdit.cpp
   trunk/Src/wptKeyEditCB.cpp
   trunk/Src/wptKeyManager.cpp
   trunk/Src/wptKeylist.cpp
   trunk/Src/wptPassphraseCB.cpp
   trunk/Src/wptUtil.cpp
   trunk/THANKS
   trunk/TODO
   trunk/configure.ac
Log:


Modified: trunk/Doc/website/download.html
===================================================================
--- trunk/Doc/website/download.html	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Doc/website/download.html	2006-08-16 10:01:30 UTC (rev 260)
@@ -53,25 +53,19 @@
           </p>          </td>
         <td width="710" align="left" valign="top"> 
 	<p class="style2">Remember that you need GnuPG installed on your computer to use WinPT. You can get GnuPG for free from the <a href="http://www.gnupg.org" target="_blank">GnuPG website</a>. </p>
-          <p class="style4">The latest version of WinPT is 1.0.0pre3.</p>
+          <p class="style4">The latest version of WinPT is 1.0.0.</p>
 	  
           <p class="style2">
-	  Latest <b>binary</b> version: <a href="http://wald.intevation.org/frs/download.php/261/winpt-1.0.0pre3-exe.zip">download</a>&nbsp;
-	  <a href="http://wald.intevation.org/frs/download.php/262/winpt-1.0.0pre3-exe.zip.sig">signature</a>
-	  &nbsp;<br>sha1sum: <tt>3b68d9de8da7527d65c1139fb2ca93eabd33ba24</tt>
+	  Latest <b>binary</b> version: <a href="http://wald.intevation.org/frs/download.php/263/winpt-1.0.0-exe.zip">download</a>&nbsp;
+	  <a href="http://wald.intevation.org/frs/download.php/264/winpt-1.0.0-exe.zip.sig">signature</a>
+	  &nbsp;<br>sha1sum: <tt>89c5f5c46700cb61c2f9d7c5f8ed4b364f2ba757</tt>
 	  </p>
 	 
-          <p class="style2"><b>Source</b> code: <a href="http://wald.intevation.org/frs/download.php/259/winpt-1.0.0pre3.tar.bz2">download</a>&nbsp;
-	  <a href="http://wald.intevation.org/frs/download.php/260/winpt-1.0.0pre3.tar.bz2.sig">signature</a>
-	  &nbsp;<br>sha1sum: <tt>356092c58ff4519d26e433b602992793f77fc761</tt>
+          <p class="style2"><b>Source</b> code: <a href="http://wald.intevation.org/frs/download.php/265/winpt-1.0.0.tar.bz2">download</a>&nbsp;
+	  <a href="http://wald.intevation.org/frs/download.php/266/winpt-1.0.0.tar.bz2.sig">signature</a>
+	  &nbsp;<br>sha1sum: <tt>7a3589a0ce3a81e3b94547ffdd76bf53d51e919f</tt>
 	  </p>
 	  
-	  <!-- uncomment this only if we need a special gpg version
-	  <p class="style2">
-	  <u>Required</u> GnuPG <a href="gpg.exe.zip">binary</a> (<a href="gpg.exe.zip.sig">signature</a>) for the current WinPT version
-	  </p>
-	  -->
-	  
           <p class="style2">As well as the basic WinPT downloads, you can also download:</p>
 	  
           <p class="style2">

Modified: trunk/Doc/website/index.html
===================================================================
--- trunk/Doc/website/index.html	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Doc/website/index.html	2006-08-16 10:01:30 UTC (rev 260)
@@ -65,7 +65,7 @@
 	<p class="style2">
 	WinPT is designed to make life easier for people who want encryption, and to make security less 
 	daunting for people who are new to securing data. </p>
-	<p class="style4">The latest version of WinPT is 1.0.0pre3. You can download it from <a href="download.html">here</a>.</p>
+	<p class="style4">The latest version of WinPT is 1.0.0. You can download it from <a href="download.html">here</a>.</p>
 	<p class="style3">
 	WinPT is licensed under the GNU GPL, and can be freely used, redistributed or modified.
 	It is is distributed in the hope that it will be useful, 

Modified: trunk/Doc/website/screenshots.html
===================================================================
--- trunk/Doc/website/screenshots.html	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Doc/website/screenshots.html	2006-08-16 10:01:30 UTC (rev 260)
@@ -2,7 +2,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-<title>WinPT</title>
+<title>Windows Privacy Tray - WinPT</title>
 <style type="text/css">
 <!--
 .style1 {

Modified: trunk/Doc/winpt.texi
===================================================================
--- trunk/Doc/winpt.texi	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Doc/winpt.texi	2006-08-16 10:01:30 UTC (rev 260)
@@ -8,7 +8,7 @@
 
 Copyright (C) 2006 Timo Schulz
 
-Version 1.0.0
+Version 1.1.0
 
 @settitle WinPT - The Windows Privacy Tray; a free GPG front-end
 
@@ -118,6 +118,12 @@
 
 To enable keyring backups, the user can either decide to use the GPG home directory as the backup
 folder or any other folder. In the latter case, a folder needs to be chosen.
+The program makes the backup before it terminates and thus it is very important that the keyrings 
+are stil accessable at this moment. For example if you use an USB flash drive to store your keyrings, 
+you should unplug it after the the icon disappeared at the task bar.
+By default the secret keyring will not be backuped, if you wish that the secret keyring should be 
+also backuped, and this usually means the backup folder cannot be accessed by other people, you need 
+to mark "Backup includes secret keyring".
 
 @subsection Getting the Source of the Program
 As free software, according to the GNU General Public License, WinPT also offers the source code
@@ -192,7 +198,7 @@
 Example: Row - row - row your boat, gently down the stream
 Passphrase: "R - r - ryb,gdts"
 
-Never write down or passphrase or share it among other people!
+Never write down your passphrase or share it among other people!
 
 @section Keyserver Access
 
@@ -359,7 +365,6 @@
 passphrase. The program issues a warning which should be read carefully.
 
 @subsection Adding a new Secondary Key
-
 For most users the existing keys in the key pair are enough and no extra key is needed. But there
 are some exceptions.
 
@@ -487,6 +492,16 @@
 After you refreshed or imported a lot of new keys, either from a file or the keyserver, it is a
 good idea to re-verify the signature in the keyring. This speeds up listing operations.
 
+ at subsection Refresh one or more Public Keys from the Keyserver
+From time to time it can be useful to refresh keys from the keyring. The reason for this is,
+that the key might contain new subkeys, user IDs and or new signatures. It is also possible
+that the expiration date of a key has been updated or other preferences were changed. And
+maybe even the worst case, that a key has been compromised and is now revoked.
+If you want to update a single key, select it and right click on it. Then select the item
+"Refresh from the Keyserver" in the popup menu. If you do not select any key, the Key Manager
+assumes that you want to refresh all keys in the keyring. Please bear in mind that this
+can be a lengthy process if you have a lot of keys in your keyring.
+
 @subsection WinPT Website
 If you want to check for updates or general information about the Windows Privacy Tray program,
 you can select this menu item.

Modified: trunk/Include/wptCard.h
===================================================================
--- trunk/Include/wptCard.h	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Include/wptCard.h	2006-08-16 10:01:30 UTC (rev 260)
@@ -1,5 +1,5 @@
-/* wptCard.h
- *	Copyright (C) 2003, 2004, 2005 Timo Schulz
+/* wptCard.h - common card definitions
+ *	Copyright (C) 2003-2006 Timo Schulz
  *
  * This file is part of WinPT.
  *
@@ -43,11 +43,15 @@
 };
 
 
+/* Number of fingerprint items. */
+#define N_CARD_FPR 3
+
 /* openpgp card context. */
 struct gpg_card_s {
     char *aid;		/* appID */
     char *card_type;
     char *version;	/* version */
+    int  ver[2];	/* version [maj:min] */
     char *vendor;	/* vendor */
     char *serial;	/* serial number */
     char *surname;	/* card users surname */
@@ -59,13 +63,14 @@
     int force_pin;
     char *maxpinlen[3];
     int sig_count;	/* signature counter */
-    char *ca_fpr[3];	/* CA fingerprints */    
-    char *fpr[3];	/* key fingerprints */
-    long fpr_created[3];/* fingerprint timestamps. */
-    char *fpr_created_str[3];
+    char *ca_fpr[N_CARD_FPR];		/* CA fingerprints */    
+    char *fpr[N_CARD_FPR];		/* key fingerprints */
+    long fpr_created[N_CARD_FPR];	/* fingerprint timestamps. */
+    char *fpr_created_str[N_CARD_FPR];  /* string fingerprints, can be NULL. */
 };
 typedef struct gpg_card_s *gpg_card_t;
 
+
 /* PIN callback context. */
 struct pin_cb_ctx_s {
     int which;		/* which command to execute. */

Modified: trunk/Include/wptFileManager.h
===================================================================
--- trunk/Include/wptFileManager.h	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Include/wptFileManager.h	2006-08-16 10:01:30 UTC (rev 260)
@@ -69,7 +69,7 @@
 struct fm_state_s {
     gpgme_ctx_t ctx;		/* currently used gpgme context. */
     gpgme_key_t *recp;		/* selected recipients. */
-    int		n_recp;		/* number of recipients. */
+    size_t	n_recp;		/* number of recipients. */
     char *output;		/* output file name. */
     char *opaque;
     int cancel;			/* 1=if user cancelled operation. */

Modified: trunk/Include/wptGPG.h
===================================================================
--- trunk/Include/wptGPG.h	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Include/wptGPG.h	2006-08-16 10:01:30 UTC (rev 260)
@@ -36,7 +36,8 @@
 enum setup_t {
     SETUP_KEYGEN    = 1,
     SETUP_IMPORT    = 2,
-    SETUP_EXISTING  = 3
+    SETUP_EXISTING  = 3,
+    SETUP_CARDGEN   = 4
 };
 
 enum gpg_cmd_t {
@@ -92,10 +93,10 @@
 char* get_gnupg_config (void);
 char* get_gnupg_keyring_from_options (const char *fname, int pub);
 int check_gnupg_config (const char *fname, int *secrings, int *pubrings);
-char* get_gnupg_path( void );
-int check_gnupg_prog( void );
+char* get_gnupg_path (void);
+int check_gnupg_prog (void);
 int gnupg_access_files (void);
-char* get_gnupg_prog( void );
+char* get_gnupg_prog (void);
 char* get_gnupg_keyring (int pub, int strict);
 char* get_gnupg_cfgfile (void);
 int set_gnupg_options( const char *buf, size_t buflen );

Modified: trunk/Include/wptGPGME.h
===================================================================
--- trunk/Include/wptGPGME.h	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Include/wptGPGME.h	2006-08-16 10:01:30 UTC (rev 260)
@@ -34,9 +34,15 @@
     bool getArmor (void);
     void setArmor (bool val);
 
+    /* export */
     gpgme_error_t exportToBuffer (const char *patt, char **outdata);
     gpgme_error_t exportToFile (const char *patt, const char *outfile);
     gpgme_error_t exportToClipboard (const char *patt);
+
+    /* import */
+    gpgme_error_t	  importFromFile (const char *file);
+    gpgme_error_t	  importFromClipboard (void);
+    gpgme_import_result_t importGetResult (void);
 };
 
 #endif /*WPT_GPGME_H*/

Modified: trunk/Include/wptKeyEdit.h
===================================================================
--- trunk/Include/wptKeyEdit.h	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Include/wptKeyEdit.h	2006-08-16 10:01:30 UTC (rev 260)
@@ -49,7 +49,8 @@
     GPG_EDITKEY_REVUID  = 24,
     GPG_EDITKEY_CLEAN	= 25,
     GPG_EDITKEY_NOTATION= 26,
-    GPG_EDITKEY_MINIMIZE= 27
+    GPG_EDITKEY_MINIMIZE= 27,
+    GPG_EDITKEY_ADDCARDKEY=28
 };
 
 /* Reasons for revocations. */
@@ -95,9 +96,9 @@
 
     bool key_has_passwd;
 
-    int sig_index;
-    int key_index;
-    int uid_index;
+    int sig_index;  /* signature index. */
+    int key_index;  /* key index. */
+    int uid_index;  /* userid index. */
 
     int valid;
 
@@ -130,7 +131,8 @@
     void clearPassphrase (void);
 
     void setNoPassphrase (bool val);
-    void setPassphrase (const char *pass);
+    void setPassphrase (const char *_pass);
+    void setPassphrase2 (const char *_pass2);
     void setKey (gpgme_key_t key);
     void setKeyID (const char *keyid);
     void setLocalUser (gpgme_key_t locusr);
@@ -172,8 +174,9 @@
     gpgme_error_t setPreferredKeyserver (int uid_index, const char *url);
     gpgme_error_t cleanKey (void);
     gpgme_error_t minimizeKey (void);
-      
 
+    gpgme_error_t addCardKey (int type);
+
     gpgme_error_t getUseridInfo (gpg_uid_info_t *r_uinf);
 
     gpgme_error_t getDesignatedRevoker (gpg_desig_rev_t *r_rev);

Modified: trunk/Include/wptKeylist.h
===================================================================
--- trunk/Include/wptKeylist.h	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Include/wptKeylist.h	2006-08-16 10:01:30 UTC (rev 260)
@@ -120,9 +120,9 @@
 void keylist_upd_key (listview_ctrl_t lv, int pos, 
 		      struct keycache_s *ctx, gpgme_key_t key);
 void keylist_upd_col (listview_ctrl_t lv, int col);
-gpgme_key_t* keylist_get_recipients( listview_ctrl_t lv, 
-				        int *r_force_trust, int *r_count );
-gpgme_key_t* keylist_enum_recipients( listview_ctrl_t lv,  int listype, int *r_count );
+gpgme_key_t* keylist_get_recipients (listview_ctrl_t lv, 
+				        int *r_force_trust, size_t *r_count);
+gpgme_key_t* keylist_enum_recipients (listview_ctrl_t lv,  int listype, size_t *r_count);
 int keylist_sort( listview_ctrl_t lv, int sortby );
 
 /*-- wptImportList.cpp --*/

Modified: trunk/NEWS
===================================================================
--- trunk/NEWS	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/NEWS	2006-08-16 10:01:30 UTC (rev 260)
@@ -896,7 +896,7 @@
 [updated translations: Japanese, German, Portuguese(BR)]
 
 
-Noteworthy changes in version 1.0.0 (unreleased)
+Noteworthy changes in version 1.0.0 (2006-08-10)
 ================================================
 
 * Bug fix in file name handling for the MAPI feature.
@@ -924,3 +924,10 @@
 
 [updated translation: Slovak, German]
 
+
+Noteworthy changes in version 1.0.1 (unreleased)
+================================================
+
+* Allow to generate a key on a smart card on the first start.
+
+* Some polishing for the smart card related dialogs.

Modified: trunk/Po/ChangeLog
===================================================================
--- trunk/Po/ChangeLog	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Po/ChangeLog	2006-08-16 10:01:30 UTC (rev 260)
@@ -1,8 +1,12 @@
-2007-08-05  Timo Schulz  <ts at g10code.de>
+2006-08-11  Timo Schulz  <ts at g10code.de>
 
+	* de.po: Updated.
+	
+2006-08-05  Timo Schulz  <ts at g10code.de>
+
 	* sk.po: Updated by Martin Lukac.
 	
-2007-07-30  Timo Schulz  <ts at g10code.de>
+2006-07-30  Timo Schulz  <ts at g10code.de>
 
 	* sk.po: New by Martin Lukac.
 	

Modified: trunk/Po/de.po
===================================================================
--- trunk/Po/de.po	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Po/de.po	2006-08-16 10:01:30 UTC (rev 260)
@@ -14,7 +14,7 @@
 msgstr ""
 "Project-Id-Version: WinPT 1.0.0\n"
 "Report-Msgid-Bugs-To: winpt at freakmail.de\n"
-"POT-Creation-Date: 2006-08-05 12:29+0200\n"
+"POT-Creation-Date: 2006-08-11 22:27+0200\n"
 "PO-Revision-Date: 2005-12-28 16:10+0100\n"
 "Last-Translator: Timo Schulz <ts at g10code.de>\n"
 "Language-Team: DE <twoaday at freakmail.de>\n"
@@ -37,7 +37,7 @@
 #: Src/WinPT.cpp:196 Src/WinPT.cpp:278 Src/WinPT.cpp:282 Src/WinPT.cpp:483
 #: Src/WinPT.cpp:492 Src/WinPT.cpp:499 Src/WinPT.cpp:539 Src/WinPT.cpp:567
 #: Src/WinPT.cpp:576 Src/WinPT.cpp:580 Src/WinPT.cpp:597 Src/WinPT.cpp:665
-#: Src/WinPT.cpp:678 Src/WinPT.cpp:725 Src/WinPT.cpp:760 Src/WinPT.cpp:779
+#: Src/WinPT.cpp:678 Src/WinPT.cpp:725 Src/WinPT.cpp:767 Src/WinPT.cpp:786
 #: Src/wptCommonDlg.cpp:220 Src/wptErrors.cpp:141 Src/wptGPG.cpp:926
 #: Src/wptGPG.cpp:938 Src/wptGPG.cpp:948 Src/wptGPG.cpp:959
 #: Src/wptMainProc.cpp:343 Src/wptMainProc.cpp:516
@@ -162,7 +162,7 @@
 msgid "Could not create window"
 msgstr "Konnte Fenster nicht erstellen"
 
-#: Src/WinPT.cpp:758
+#: Src/WinPT.cpp:765
 msgid ""
 "The keycache was not initialized or is empty.\n"
 "Please check your GPG config (keyrings, pathes...)"
@@ -170,7 +170,7 @@
 "Der Schlüsselcache wurde nicht initialisiert oder ist leer.\n"
 "Bitte überprüfen Sie die Konfiguration von GPG (Schlüsselbunde, Pfade)"
 
-#: Src/WinPT.cpp:761
+#: Src/WinPT.cpp:768
 msgid ""
 "It seems that GPG is not configured properly.\n"
 "Do you want to start the GPG preferences dialog?"
@@ -178,7 +178,7 @@
 "GPG ist nicht richtig konfiguriert.\n"
 "Den GPG-Einstellungsdialog starten?"
 
-#: Src/WinPT.cpp:780
+#: Src/WinPT.cpp:787
 #, c-format
 msgid ""
 "Default key (from the GPG config file) could not be found.\n"
@@ -260,68 +260,68 @@
 msgid "&Help"
 msgstr "&Hilfe"
 
-#: Src/wptCardDlg.cpp:141 Src/wptMainProc.cpp:392
+#: Src/wptCardDlg.cpp:149 Src/wptMainProc.cpp:392
 msgid "Card Manager"
 msgstr "Kartenmanager"
 
-#: Src/wptCardDlg.cpp:177
+#: Src/wptCardDlg.cpp:185
 msgid "No Fingerprint"
 msgstr "Kein Fingerabdruck"
 
-#: Src/wptCardDlg.cpp:207
+#: Src/wptCardDlg.cpp:216
 msgid "No OpenPGP smart card detected."
 msgstr "Keine OpenPGP-Smartcard gefunden."
 
-#: Src/wptCardDlg.cpp:326
+#: Src/wptCardDlg.cpp:340
 msgid "No PINs found."
 msgstr "Keine PINs gefunden."
 
-#: Src/wptCardDlg.cpp:326 Src/wptCardDlg.cpp:340 Src/wptCardDlg.cpp:345
-#: Src/wptCardDlg.cpp:351 Src/wptCardDlg.cpp:363 Src/wptCardDlg.cpp:377
-#: Src/wptCardDlg.cpp:506 Src/wptCardDlg.cpp:611 Src/wptCardDlg.cpp:616
-#: Src/wptCardDlg.cpp:622 Src/wptCardDlg.cpp:629 Src/wptCardDlg.cpp:634
-#: Src/wptCardDlg.cpp:642 Src/wptCardDlg.cpp:664 Src/wptCardDlg.cpp:691
-#: Src/wptCardDlg.cpp:696 Src/wptCardDlg.cpp:699 Src/wptCardDlg.cpp:724
-#: Src/wptCardDlg.cpp:726 Src/wptCardDlg.cpp:731 Src/wptCardDlg.cpp:736
-#: Src/wptCardDlg.cpp:800 Src/wptCardDlg.cpp:815 Src/wptCardDlg.cpp:818
+#: Src/wptCardDlg.cpp:340 Src/wptCardDlg.cpp:351 Src/wptCardDlg.cpp:356
+#: Src/wptCardDlg.cpp:362 Src/wptCardDlg.cpp:374 Src/wptCardDlg.cpp:388
+#: Src/wptCardDlg.cpp:523 Src/wptCardDlg.cpp:624 Src/wptCardDlg.cpp:629
+#: Src/wptCardDlg.cpp:635 Src/wptCardDlg.cpp:642 Src/wptCardDlg.cpp:648
+#: Src/wptCardDlg.cpp:656 Src/wptCardDlg.cpp:677 Src/wptCardDlg.cpp:703
+#: Src/wptCardDlg.cpp:708 Src/wptCardDlg.cpp:711 Src/wptCardDlg.cpp:737
+#: Src/wptCardDlg.cpp:739 Src/wptCardDlg.cpp:744 Src/wptCardDlg.cpp:749
+#: Src/wptCardDlg.cpp:813 Src/wptCardDlg.cpp:826 Src/wptCardDlg.cpp:829
 #: Src/wptMainProc.cpp:263
 msgid "Card Edit"
 msgstr "Karten-Editor"
 
-#: Src/wptCardDlg.cpp:339
+#: Src/wptCardDlg.cpp:350
 msgid "Only plain ASCII is currently allowed."
 msgstr "Aktuell ist nur 7bit-ASCII-Text erlaubt."
 
-#: Src/wptCardDlg.cpp:344
+#: Src/wptCardDlg.cpp:355
 msgid "Only alphabetic characters are allowed."
 msgstr "Nur alphanumerische sind Zeichen zulässig."
 
-#: Src/wptCardDlg.cpp:351
+#: Src/wptCardDlg.cpp:362
 msgid "Invalid URL."
 msgstr "Ungültige URL."
 
-#: Src/wptCardDlg.cpp:364
+#: Src/wptCardDlg.cpp:375
 #, c-format
 msgid "Could not modify card attribute: %s"
 msgstr "Konnte Attribute auf der Karte nicht ändern: %s"
 
-#: Src/wptCardDlg.cpp:377
+#: Src/wptCardDlg.cpp:388
 msgid "Card attribute changed."
 msgstr "Karteneinstellung geändert."
 
-#: Src/wptCardDlg.cpp:417
+#: Src/wptCardDlg.cpp:428
 msgid "Please enter the 'Admin PIN'"
 msgstr "Bitte 'Admin PIN' eingeben"
 
-#: Src/wptCardDlg.cpp:419
+#: Src/wptCardDlg.cpp:430
 msgid "Please enter the 'User PIN'"
 msgstr "Bitte 'Benutzer PIN' eingeben"
 
-#: Src/wptCardDlg.cpp:421 Src/wptPINDlg.cpp:51
+#: Src/wptCardDlg.cpp:432 Src/wptPINDlg.cpp:51
 msgid "Please enter the PIN"
 msgstr "Bitte PIN eingeben"
 
-#: Src/wptCardDlg.cpp:425
+#: Src/wptCardDlg.cpp:436
 #, c-format
 msgid ""
 "%s\n"
@@ -332,8 +332,46 @@
 "Name: %s %s\n"
 "Serien-Nr: %s\n"
 
+#: Src/wptCardDlg.cpp:479 Src/wptCardDlg.cpp:595 Src/wptKeyEditDlgs.cpp:503
+msgid "&Name"
+msgstr "&Name"
+
+#: Src/wptCardDlg.cpp:480
+msgid "&Language"
+msgstr "&Sprache"
+
+#: Src/wptCardDlg.cpp:481
+msgid "&Key-URL"
+msgstr "&Schlüssel-URL"
+
+#: Src/wptCardDlg.cpp:482
+msgid "&Login"
+msgstr "&Login"
+
+#: Src/wptCardDlg.cpp:483
+msgid "&Sex"
+msgstr "&Geschlecht"
+
+#: Src/wptCardDlg.cpp:484 Src/wptCommonDlg.cpp:252 Src/wptKeyEditDlgs.cpp:2154
+#: Src/wptPassphraseDlg.cpp:105 Src/wptPINDlg.cpp:55
+msgid "&OK"
+msgstr "&OK"
+
+#: Src/wptCardDlg.cpp:485 Src/wptGPGOptDlg.cpp:59
+msgid "&Exit"
+msgstr "&Beenden"
+
+#: Src/wptCardDlg.cpp:486
+msgid "&New keys"
+msgstr "&Neue Schlüssel"
+
+# c:\oss\winpt-gpgme\src\wptCardDlg.cpp:766
+#: Src/wptCardDlg.cpp:487
+msgid "Change &PIN"
+msgstr "&PIN Ändern"
+
 # c:\oss\winpt-gpgme\src\wptCardDlg.cpp:522
-#: Src/wptCardDlg.cpp:505
+#: Src/wptCardDlg.cpp:522
 msgid ""
 "This operation will override the keys on the card.\n"
 "Continue?"
@@ -341,73 +379,73 @@
 "Diese Operation wird die Schlüssel auf der Karte überschreiben.\n"
 "Trotzdem fortfahren?"
 
-#: Src/wptCardDlg.cpp:580 Src/wptKeyEditDlgs.cpp:503
-msgid "&Name"
-msgstr "&Name"
+#: Src/wptCardDlg.cpp:594
+msgid "Pubkey algorithm"
+msgstr "Pubkey Algorithmus"
 
-#: Src/wptCardDlg.cpp:581 Src/wptKeygenDlg.cpp:375
+#: Src/wptCardDlg.cpp:596 Src/wptKeygenDlg.cpp:375
 msgid "&Comment (optional)"
 msgstr "&Kommentar (optional)"
 
-#: Src/wptCardDlg.cpp:582 Src/wptKeygenDlg.cpp:377
+#: Src/wptCardDlg.cpp:597 Src/wptKeygenDlg.cpp:377
 msgid "&Expire date"
 msgstr "&Ablaufdatum"
 
-#: Src/wptCardDlg.cpp:583
+#: Src/wptCardDlg.cpp:598
 msgid "Off-card passphrase"
 msgstr "\"Off-card\" Passwort"
 
-#: Src/wptCardDlg.cpp:584 Src/wptKeyEditDlgs.cpp:640 Src/wptKeygenDlg.cpp:379
+#: Src/wptCardDlg.cpp:599 Src/wptKeyEditDlgs.cpp:640 Src/wptKeygenDlg.cpp:379
 msgid "&Never"
 msgstr "&Niemals"
 
-#: Src/wptCardDlg.cpp:585 Src/wptKeygenDlg.cpp:376
+#: Src/wptCardDlg.cpp:600 Src/wptKeygenDlg.cpp:376
 msgid "Email &address"
 msgstr "E-Mail-&Adresse"
 
-#: Src/wptCardDlg.cpp:586
+#: Src/wptCardDlg.cpp:601
 msgid "Overwrite old keys on the card"
 msgstr "Alte Schlüssel auf der Karte überschreiben?"
 
-#: Src/wptCardDlg.cpp:587
+#: Src/wptCardDlg.cpp:602
 msgid "Make off-card backup of encryption key"
 msgstr "Externes Backup des Verschlüsselungs-Schlüssel"
 
-#: Src/wptCardDlg.cpp:588 Src/wptKeyManagerDlg.cpp:1795
+#: Src/wptCardDlg.cpp:603 Src/wptKeyManagerDlg.cpp:1795
 msgid "Card Key Generation"
 msgstr "Karten-Schlüsselerzeugung"
 
-#: Src/wptCardDlg.cpp:611
+#: Src/wptCardDlg.cpp:624
 msgid "Please enter your name."
 msgstr "Bitte Namen eingeben."
 
-#: Src/wptCardDlg.cpp:615
+#: Src/wptCardDlg.cpp:628
 msgid "Name must be at least 5 characters long."
 msgstr "Der Name muss mindestens 5 Zeichen lang sein."
 
-#: Src/wptCardDlg.cpp:621
+#: Src/wptCardDlg.cpp:634
 msgid "Please enter your e-mail address."
 msgstr "Bitte E-Mail-Adresse eingeben."
 
-#: Src/wptCardDlg.cpp:628
+#: Src/wptCardDlg.cpp:641
 msgid "Please enter a valid e-mail address."
 msgstr "Bitte gültige E-Mail-Adresse eingeben."
 
-#: Src/wptCardDlg.cpp:634
+#: Src/wptCardDlg.cpp:647
 msgid "Please enter an off-card passphrase."
 msgstr "Bitte ein Passwort eingeben für \"off-card\"."
 
 # c:\oss\winpt-gpgme\src\wptCardDlg.cpp:649
-#: Src/wptCardDlg.cpp:641
+#: Src/wptCardDlg.cpp:655
 msgid "Please use plain ASCII charset for the fields."
 msgstr "Bitte nur den 7-bit ASCII Zeichensatz verwenden."
 
-#: Src/wptCardDlg.cpp:663 Src/wptKeyEditDlgs.cpp:1363 Src/wptKeygenDlg.cpp:457
+#: Src/wptCardDlg.cpp:676 Src/wptKeyEditDlgs.cpp:1363 Src/wptKeygenDlg.cpp:457
 msgid "The date you have chosen has already passed."
 msgstr "Das gewählte Datum liegt in der Vergangenheit."
 
 # c:\oss\winpt-gpgme\src\wptCardDlg.cpp:696
-#: Src/wptCardDlg.cpp:689
+#: Src/wptCardDlg.cpp:701
 msgid ""
 "Operation was canceled. It seems that there are existing\n"
 "keys on the cards. You need to mark the 'Overwrite' flag."
@@ -415,45 +453,45 @@
 "Operation wurde abgebrochen. Es scheinen noch Schlüssel\n"
 "auf der Karte zu existieren. Bitte 'Überschreiben' markieren."
 
-#: Src/wptCardDlg.cpp:698
+#: Src/wptCardDlg.cpp:710
 msgid "Keys successfully created."
 msgstr "Schlüssel erfolgreich erstellt."
 
-#: Src/wptCardDlg.cpp:724
+#: Src/wptCardDlg.cpp:737
 msgid "Please enter the old card PIN."
 msgstr "Bitte alte Karten-PIN eingeben."
 
-#: Src/wptCardDlg.cpp:726
+#: Src/wptCardDlg.cpp:739
 msgid "Please enter the new card PIN."
 msgstr "Bitte neue Karten-PIN eingeben."
 
-#: Src/wptCardDlg.cpp:731
+#: Src/wptCardDlg.cpp:744
 msgid "Admin PIN must be at least 8 characters."
 msgstr "Die 'Admin PIN' muss mindestens 8 Zeichen lang sein."
 
-#: Src/wptCardDlg.cpp:736
+#: Src/wptCardDlg.cpp:749
 msgid "PIN must be at least 6 characters."
 msgstr "Die 'Benutzer PIN' muss mindestens 6 Zeichen lang sein."
 
 # c:\oss\winpt-gpgme\src\wptCardDlg.cpp:766
-#: Src/wptCardDlg.cpp:759
+#: Src/wptCardDlg.cpp:772
 msgid "Change Card PIN"
 msgstr "Karten PIN Ändern"
 
-#: Src/wptCardDlg.cpp:799 Src/wptPassphraseDlg.cpp:256
+#: Src/wptCardDlg.cpp:812 Src/wptPassphraseDlg.cpp:256
 msgid "Passphrases do not match. Please try again."
 msgstr "Passwörter nicht identisch. Versuchen Sie es erneut."
 
-#: Src/wptCardDlg.cpp:817
+#: Src/wptCardDlg.cpp:828
 msgid "PIN successfully changed."
 msgstr "PIN erfolgreich geändert."
 
 # c:\oss\winpt-gpgme\src\wptCardEdit.cpp:315
-#: Src/wptCardEdit.cpp:321
+#: Src/wptCardEdit.cpp:329
 msgid "Please insert the card and click OK or Cancel to abort."
 msgstr "Bitte Karte einlegen und OK oder Abbrechen anclicken."
 
-#: Src/wptCardEdit.cpp:322
+#: Src/wptCardEdit.cpp:330
 msgid "GPG Card Status"
 msgstr "GPG Kartenstatus"
 
@@ -592,7 +630,7 @@
 #: Src/wptClipDecryptDlg.cpp:269 Src/wptClipEncryptDlg.cpp:216
 #: Src/wptClipSignDlg.cpp:119 Src/wptClipSignDlg.cpp:265
 #: Src/wptClipSignEncDlg.cpp:190 Src/wptKeyManager.cpp:304
-#: Src/wptKeyManager.cpp:802 Src/wptKeyManager.cpp:994 Src/wptSymEnc.cpp:94
+#: Src/wptKeyManager.cpp:766 Src/wptKeyManager.cpp:958 Src/wptSymEnc.cpp:94
 msgid "GnuPG Status: Finished"
 msgstr "GnuPG-Status: Abgeschlossen"
 
@@ -755,7 +793,7 @@
 msgid "Signing key:"
 msgstr "Signierer Schlüssel:"
 
-#: Src/wptClipSignEncDlg.cpp:159 Src/wptKeylist.cpp:1207
+#: Src/wptClipSignEncDlg.cpp:159 Src/wptKeylist.cpp:1209
 msgid "No key was selected."
 msgstr "Kein Schlüssel ausgewählt."
 
@@ -862,11 +900,6 @@
 msgid "Please select a language"
 msgstr "Bitte eine Sprache auswählen"
 
-#: Src/wptCommonDlg.cpp:252 Src/wptKeyEditDlgs.cpp:2154
-#: Src/wptPassphraseDlg.cpp:105 Src/wptPINDlg.cpp:55
-msgid "&OK"
-msgstr "&OK"
-
 #: Src/wptErrors.cpp:47
 #, c-format
 msgid "Could not locate GPG.exe in %s."
@@ -1227,8 +1260,9 @@
 #: Src/wptFileManagerDlg.cpp:245 Src/wptImportList.cpp:404
 #: Src/wptImportList.cpp:411 Src/wptImportList.cpp:421
 #: Src/wptImportList.cpp:429 Src/wptImportList.cpp:438
-#: Src/wptKeyManager.cpp:478 Src/wptKeyManager.cpp:489
-#: Src/wptKeyManager.cpp:617 Src/wptKeyserverDlg.cpp:222
+#: Src/wptKeyManager.cpp:458 Src/wptKeyManager.cpp:469
+#: Src/wptKeyManager.cpp:563 Src/wptKeyManager.cpp:582
+#: Src/wptKeyserverDlg.cpp:222
 msgid "Import"
 msgstr "Importieren"
 
@@ -1328,12 +1362,12 @@
 msgstr "Bitte wählen Sie wenigstens einen Empfänger."
 
 #: Src/wptFileManagerDlg.cpp:210 Src/wptFileStatDlg.cpp:283
-#: Src/wptKeyManager.cpp:442
+#: Src/wptKeyManager.cpp:426
 msgid "No valid OpenPGP data found."
 msgstr "Keine gültigen OpenPGP-Daten gefunden."
 
 #: Src/wptFileManagerDlg.cpp:210 Src/wptFileManagerDlg.cpp:225
-#: Src/wptKeyManager.cpp:467
+#: Src/wptKeyManager.cpp:451
 msgid "Key Import"
 msgstr "Schlüsselimport"
 
@@ -1381,8 +1415,8 @@
 
 #: Src/wptFileManagerDlg.cpp:328 Src/wptKeyEditDlgs.cpp:1288
 #: Src/wptKeyEditDlgs.cpp:1339 Src/wptKeyEditDlgs.cpp:1412
-#: Src/wptKeyManager.cpp:722 Src/wptKeyManager.cpp:823
-#: Src/wptKeyManager.cpp:856 Src/wptKeyManagerDlg.cpp:1672
+#: Src/wptKeyManager.cpp:686 Src/wptKeyManager.cpp:787
+#: Src/wptKeyManager.cpp:820 Src/wptKeyManagerDlg.cpp:1672
 #: Src/wptKeyManagerDlg.cpp:1688 Src/wptKeyManagerDlg.cpp:1716
 #: Src/wptKeyManagerDlg.cpp:1727 Src/wptKeyManagerDlg.cpp:1742
 #: Src/wptKeyManagerDlg.cpp:1855 Src/wptKeyManagerDlg.cpp:1874
@@ -1685,38 +1719,42 @@
 msgid "Invalid backup mode %d"
 msgstr "Ungültiger Sicherungsmethode %d"
 
-#: Src/wptGPGME.cpp:278
+#: Src/wptGPGME.cpp:282
 msgid "Error during verification process"
 msgstr "Fehler während Verifikation"
 
-#: Src/wptGPGME.cpp:279
+#: Src/wptGPGME.cpp:283
 msgid "The signature is good"
 msgstr "Die Signatur is gut"
 
-#: Src/wptGPGME.cpp:280
+#: Src/wptGPGME.cpp:284
 msgid "The signature is BAD!"
 msgstr "Die Signatur ist nicht gültig!"
 
-#: Src/wptGPGME.cpp:281
+#: Src/wptGPGME.cpp:285
 msgid "The signature could not be checked due to a missing key"
 msgstr "Die Signature konnte durch fehlenden Key nicht geprüft werden"
 
-#: Src/wptGPGME.cpp:282
+#: Src/wptGPGME.cpp:286
 msgid "No valid OpenPGP signature"
 msgstr "Keine gültige OpenPGP Signatur"
 
-#: Src/wptGPGME.cpp:283
+#: Src/wptGPGME.cpp:287
 msgid "Signature Error"
 msgstr "Fehler in Signatur"
 
-#: Src/wptGPGME.cpp:284
-msgid "Good Signature (Expired Key)"
+#: Src/wptGPGME.cpp:288
+msgid "Good signature (Expired Key)"
 msgstr "Gültige Signature (Abgelaufener Schlüssel)"
 
-#: Src/wptGPGME.cpp:285
-msgid "Good Signature (Revoked Key)"
+#: Src/wptGPGME.cpp:289
+msgid "Good signature (Revoked Key)"
 msgstr "Gültige Signatur (Widerrufener Schlüssel)"
 
+#: Src/wptGPGME.cpp:290
+msgid "Good signature (Expired)"
+msgstr "Gültige Signature (Abgelaufen)"
+
 #: Src/wptGPGOptDlg.cpp:50 Src/wptGPGOptDlg.cpp:100
 msgid "Could not load GnuPG config file!"
 msgstr "Konnte GnuPG Konfigurationsdatei nicht laden!"
@@ -1736,10 +1774,6 @@
 msgid "&Load"
 msgstr "&Laden"
 
-#: Src/wptGPGOptDlg.cpp:59
-msgid "&Exit"
-msgstr "&Beenden"
-
 #: Src/wptGPGOptDlg.cpp:72
 msgid "The 'gpg.conf' file is not loaded."
 msgstr "Die 'gpg.conf' wurde nicht geladen"
@@ -1850,18 +1884,17 @@
 #: Src/wptKeyManager.cpp:331 Src/wptKeyManager.cpp:338
 #: Src/wptKeyManager.cpp:340 Src/wptKeyManager.cpp:361
 #: Src/wptKeyManager.cpp:370 Src/wptKeyManager.cpp:374
-#: Src/wptKeyManager.cpp:394 Src/wptKeyManager.cpp:435
-#: Src/wptKeyManager.cpp:440 Src/wptKeyManager.cpp:443
-#: Src/wptKeyManager.cpp:448 Src/wptKeyManager.cpp:454
-#: Src/wptKeyManager.cpp:459 Src/wptKeyManager.cpp:587
-#: Src/wptKeyManager.cpp:595 Src/wptKeyManager.cpp:722
-#: Src/wptKeyManager.cpp:750 Src/wptKeyManager.cpp:759
-#: Src/wptKeyManager.cpp:770 Src/wptKeyManager.cpp:796
-#: Src/wptKeyManager.cpp:823 Src/wptKeyManager.cpp:828
-#: Src/wptKeyManager.cpp:851 Src/wptKeyManager.cpp:856
-#: Src/wptKeyManager.cpp:870 Src/wptKeyManager.cpp:930
-#: Src/wptKeyManager.cpp:935 Src/wptKeyManager.cpp:992
-#: Src/wptKeyManager.cpp:1025 Src/wptKeyManager.cpp:1109
+#: Src/wptKeyManager.cpp:394 Src/wptKeyManager.cpp:419
+#: Src/wptKeyManager.cpp:424 Src/wptKeyManager.cpp:427
+#: Src/wptKeyManager.cpp:432 Src/wptKeyManager.cpp:438
+#: Src/wptKeyManager.cpp:443 Src/wptKeyManager.cpp:686
+#: Src/wptKeyManager.cpp:714 Src/wptKeyManager.cpp:723
+#: Src/wptKeyManager.cpp:734 Src/wptKeyManager.cpp:760
+#: Src/wptKeyManager.cpp:787 Src/wptKeyManager.cpp:792
+#: Src/wptKeyManager.cpp:815 Src/wptKeyManager.cpp:820
+#: Src/wptKeyManager.cpp:834 Src/wptKeyManager.cpp:894
+#: Src/wptKeyManager.cpp:899 Src/wptKeyManager.cpp:956
+#: Src/wptKeyManager.cpp:989 Src/wptKeyManager.cpp:1073
 #: Src/wptKeyManagerDlg.cpp:1324 Src/wptKeyManagerDlg.cpp:1335
 #: Src/wptKeyManagerDlg.cpp:1345 Src/wptKeyManagerDlg.cpp:1650
 #: Src/wptKeyManagerDlg.cpp:1673 Src/wptKeyManagerDlg.cpp:1688
@@ -2897,7 +2930,7 @@
 msgid "Invalid User ID"
 msgstr "Ungültige Benutzerkennung"
 
-#: Src/wptKeylist.cpp:1034
+#: Src/wptKeylist.cpp:1035
 #, c-format
 msgid ""
 "It is NOT certain that the key belongs to the person\n"
@@ -2912,11 +2945,11 @@
 "\n"
 "\"%s\" trotzdem benutzen?"
 
-#: Src/wptKeylist.cpp:1042 Src/wptKeylist.cpp:1104
+#: Src/wptKeylist.cpp:1043 Src/wptKeylist.cpp:1106
 msgid "Recipients"
 msgstr "Empfänger"
 
-#: Src/wptKeylist.cpp:1105
+#: Src/wptKeylist.cpp:1107
 #, c-format
 msgid ""
 "KeyID %s.\n"
@@ -2925,7 +2958,7 @@
 "Schlüssel ID %s.\n"
 "Wollen Sie wirklich einen widerrufenen Schlüssel exportieren?"
 
-#: Src/wptKeylist.cpp:1207
+#: Src/wptKeylist.cpp:1209
 msgid "Secret Key List"
 msgstr "Liste der geheimen Schlüssel"
 
@@ -2959,11 +2992,11 @@
 msgid "Key(s) successfully saved in '%s'."
 msgstr "Schlüssel erfolgreich in '%s' gespeichert."
 
-#: Src/wptKeyManager.cpp:447
+#: Src/wptKeyManager.cpp:431
 msgid "No valid OpenPGP keys found."
 msgstr "Keine gültigen OpenPGP-Schlüssel gefunden."
 
-#: Src/wptKeyManager.cpp:452
+#: Src/wptKeyManager.cpp:436
 msgid ""
 "The key you want to import is dash escaped.\n"
 "Do you want to extract the key?"
@@ -2971,11 +3004,11 @@
 "Der Schlüssel ist \"dash escaped\".\n"
 "Möchten Sie den Schlüssel extrahieren?"
 
-#: Src/wptKeyManager.cpp:458
+#: Src/wptKeyManager.cpp:442
 msgid "Cannot import dash escaped OpenPGP keys."
 msgstr "Kann keine beschädigten OpenPGP-Schlüssel importieren."
 
-#: Src/wptKeyManager.cpp:487 Src/wptKeyManager.cpp:615
+#: Src/wptKeyManager.cpp:467 Src/wptKeyManager.cpp:580
 msgid ""
 "Key without a self signature was dectected!\n"
 "(This key is NOT usable for encryption, etc)\n"
@@ -2983,43 +3016,39 @@
 "Schlüssel ohne Eigensignatur erkannt!\n"
 "(Dieser Schlüssel ist für Verschlüsselung, etc. NICHT verwendbar)\n"
 
-#: Src/wptKeyManager.cpp:516 Src/wptKeyManager.cpp:523
-#: Src/wptKeyManager.cpp:532
+#: Src/wptKeyManager.cpp:496 Src/wptKeyManager.cpp:503
+#: Src/wptKeyManager.cpp:512
 msgid "Key Import HTTP"
 msgstr "Schlüssel Import HTTP"
 
 # c:\oss\winpt-gpgme\src\wptKeyManager.cpp:448
-#: Src/wptKeyManager.cpp:516
+#: Src/wptKeyManager.cpp:496
 #, c-format
 msgid "Invalid HTTP URL: %s"
 msgstr "Ungültige HTTP URL: %s"
 
-#: Src/wptKeyManager.cpp:533
+#: Src/wptKeyManager.cpp:513
 #, c-format
 msgid "Could not fetch key from URL: %s"
 msgstr "Konnte Schlüssel von der URL: %s nicht runterladen"
 
-#: Src/wptKeyManager.cpp:562
+#: Src/wptKeyManager.cpp:541
 msgid "Choose Name of the Key File"
 msgstr "Namen der Schlüsseldatei auswählen"
 
-#: Src/wptKeyManager.cpp:575
+#: Src/wptKeyManager.cpp:554
 msgid "File Import"
 msgstr "Dateiimport"
 
-#: Src/wptKeyManager.cpp:586
-msgid "Could not read key-data from file."
-msgstr "Konnte Schlüsseldaten nicht aus Datei lesen."
-
-#: Src/wptKeyManager.cpp:727
+#: Src/wptKeyManager.cpp:691
 msgid "Do you really want to confirm each key?"
 msgstr "Wollen Sie wirklich jeden Schlüssel bestätigen?"
 
-#: Src/wptKeyManager.cpp:728
+#: Src/wptKeyManager.cpp:692
 msgid "Delete Confirmation"
 msgstr "Löschen Bestätigen"
 
-#: Src/wptKeyManager.cpp:751
+#: Src/wptKeyManager.cpp:715
 #, c-format
 msgid ""
 "Do you really want to delete this key?\n"
@@ -3031,7 +3060,7 @@
 "%s"
 
 # c:\oss\winpt-gpgme\src\wptKeyManager.cpp:605
-#: Src/wptKeyManager.cpp:760
+#: Src/wptKeyManager.cpp:724
 #, c-format
 msgid ""
 "Do you really want to delete this KEY PAIR?\n"
@@ -3048,7 +3077,7 @@
 "\n"
 "%s"
 
-#: Src/wptKeyManager.cpp:767
+#: Src/wptKeyManager.cpp:731
 msgid ""
 "The actual secret key is stored on a smartcard.\n"
 "Only the public key and the secret key \n"
@@ -3058,51 +3087,51 @@
 "Nur der öffentliche Schlüssel und der Zeiger auf den geheimen\n"
 "Schlüssel werden gelöscht.\n"
 
-#: Src/wptKeyManager.cpp:829
+#: Src/wptKeyManager.cpp:793
 #, c-format
 msgid "Do you really want to send '0x%s' to keyserver %s?"
 msgstr "Wollen Sie '0x%s' wirklich zum Schlüsselserver %s senden?"
 
-#: Src/wptKeyManager.cpp:850
+#: Src/wptKeyManager.cpp:814
 msgid "Please only select one key."
 msgstr "Bitte nur einen Schlüssel auswählen."
 
-#: Src/wptKeyManager.cpp:929
+#: Src/wptKeyManager.cpp:893
 msgid "Do you really want to refresh all keys in the keyring?"
 msgstr "Wirklich alle Schlüssel im Schlüsselbund neu laden?"
 
-#: Src/wptKeyManager.cpp:934
+#: Src/wptKeyManager.cpp:898
 msgid "Could not connect to keyserver, abort procedure."
 msgstr ""
 "Verbindung zum Keyserver fehlgeschlagen; Die Prozedur wird abgebrochen."
 
-#: Src/wptKeyManager.cpp:1008
+#: Src/wptKeyManager.cpp:972
 msgid "Search"
 msgstr "Suchen"
 
-#: Src/wptKeyManager.cpp:1008
+#: Src/wptKeyManager.cpp:972
 msgid "Search for:"
 msgstr "Suche nach:"
 
 # c:\oss\winpt-gpgme\src\wptKeyManager.cpp:896
-#: Src/wptKeyManager.cpp:1020
+#: Src/wptKeyManager.cpp:984
 #, c-format
 msgid "String pattern \"%s\" not found."
 msgstr "Zeichenkette \"%s\" nicht gefunden."
 
-#: Src/wptKeyManager.cpp:1086 Src/wptKeyRevokeDlg.cpp:85
+#: Src/wptKeyManager.cpp:1050 Src/wptKeyRevokeDlg.cpp:85
 msgid "0. No reason specified"
 msgstr "0. Kein Grund angeben"
 
-#: Src/wptKeyManager.cpp:1087 Src/wptKeyRevokeDlg.cpp:86
+#: Src/wptKeyManager.cpp:1051 Src/wptKeyRevokeDlg.cpp:86
 msgid "1. Key has been compromised"
 msgstr "1. Der Schlüssel ist nicht mehr sicher"
 
-#: Src/wptKeyManager.cpp:1088 Src/wptKeyRevokeDlg.cpp:87
+#: Src/wptKeyManager.cpp:1052 Src/wptKeyRevokeDlg.cpp:87
 msgid "2. Key is superseded"
 msgstr "2. Der Schlüssel ist veraltet"
 
-#: Src/wptKeyManager.cpp:1089 Src/wptKeyRevokeDlg.cpp:88
+#: Src/wptKeyManager.cpp:1053 Src/wptKeyRevokeDlg.cpp:88
 msgid "3. Key is no longer used"
 msgstr "3. Der Schlüssel wird nicht mehr benutzt"
 
@@ -4286,7 +4315,7 @@
 "\"%s\"\n"
 "%s key, ID %s\n"
 
-#: Src/wptPassphraseCB.cpp:400
+#: Src/wptPassphraseCB.cpp:401
 #, c-format
 msgid ""
 "Please enter the PIN to unlock your secret card key\n"
@@ -4614,6 +4643,9 @@
 msgid "Signed"
 msgstr "Signiert"
 
+#~ msgid "Could not read key-data from file."
+#~ msgstr "Konnte Schlüsseldaten nicht aus Datei lesen."
+
 #~ msgid ""
 #~ "Encrypted with %s key, ID %s.%s\n"
 #~ "Decryption failed: secret key not available."

Modified: trunk/Po/jp.po
===================================================================
--- trunk/Po/jp.po	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Po/jp.po	2006-08-16 10:01:30 UTC (rev 260)
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: WinPT 0.10.2\n"
 "Report-Msgid-Bugs-To: winpt at freakmail.de\n"
-"POT-Creation-Date: 2006-08-05 12:29+0200\n"
+"POT-Creation-Date: 2006-08-11 22:27+0200\n"
 "PO-Revision-Date: 2005-12-22 07:28+0100\n"
 "Last-Translator: Davar Pishva <dpishva at andrew.cmu.edu>\n"
 "Language-Team: jp <jp at li.org>\n"
@@ -38,7 +38,7 @@
 #: Src/WinPT.cpp:196 Src/WinPT.cpp:278 Src/WinPT.cpp:282 Src/WinPT.cpp:483
 #: Src/WinPT.cpp:492 Src/WinPT.cpp:499 Src/WinPT.cpp:539 Src/WinPT.cpp:567
 #: Src/WinPT.cpp:576 Src/WinPT.cpp:580 Src/WinPT.cpp:597 Src/WinPT.cpp:665
-#: Src/WinPT.cpp:678 Src/WinPT.cpp:725 Src/WinPT.cpp:760 Src/WinPT.cpp:779
+#: Src/WinPT.cpp:678 Src/WinPT.cpp:725 Src/WinPT.cpp:767 Src/WinPT.cpp:786
 #: Src/wptCommonDlg.cpp:220 Src/wptErrors.cpp:141 Src/wptGPG.cpp:926
 #: Src/wptGPG.cpp:938 Src/wptGPG.cpp:948 Src/wptGPG.cpp:959
 #: Src/wptMainProc.cpp:343 Src/wptMainProc.cpp:516
@@ -188,7 +188,7 @@
 msgstr "ƒEƒBƒ“ƒh‚ðì¬‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B"
 
 # c:\oss\winpt\src\WinPT.cpp:461
-#: Src/WinPT.cpp:758
+#: Src/WinPT.cpp:765
 msgid ""
 "The keycache was not initialized or is empty.\n"
 "Please check your GPG config (keyrings, pathes...)"
@@ -197,7 +197,7 @@
 "GPG‚±‚¤‚¹‚¢ (ƒL[ƒŠƒ“ƒO, ƒpƒX‚È‚Ç...) ‚ðƒ`ƒFƒbƒN‚µ‚Ä‚­‚¾‚³‚¢B"
 
 # c:\oss\winpt\src\WinPT.cpp:464
-#: Src/WinPT.cpp:761
+#: Src/WinPT.cpp:768
 #, fuzzy
 msgid ""
 "It seems that GPG is not configured properly.\n"
@@ -207,7 +207,7 @@
 "GPGƒJƒXƒ^ƒ€Ý’è‚ðŽÀs‚µ‚Ü‚·H"
 
 # c:\oss\winpt\src\WinPT.cpp:480
-#: Src/WinPT.cpp:780
+#: Src/WinPT.cpp:787
 #, c-format
 msgid ""
 "Default key (from the GPG config file) could not be found.\n"
@@ -297,22 +297,22 @@
 
 # c:\oss\winpt\src\WinPT.cpp:340 c:\oss\winpt\src\wptCardDlg.cpp:98
 # c:\oss\winpt\src\wptCardDlg.cpp:125 c:\oss\winpt\src\wptMainProc.cpp:389
-#: Src/wptCardDlg.cpp:141 Src/wptMainProc.cpp:392
+#: Src/wptCardDlg.cpp:149 Src/wptMainProc.cpp:392
 msgid "Card Manager"
 msgstr "ƒJ[ƒhƒ}ƒl[ƒWƒƒ["
 
 # c:\oss\winpt\src\wptCardDlg.cpp:149
-#: Src/wptCardDlg.cpp:177
+#: Src/wptCardDlg.cpp:185
 msgid "No Fingerprint"
 msgstr "ƒtƒBƒ“ƒK[ƒvƒŠƒ“ƒg‚Í‚ ‚è‚Ü‚¹‚ñ"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:175
-#: Src/wptCardDlg.cpp:207
+#: Src/wptCardDlg.cpp:216
 msgid "No OpenPGP smart card detected."
 msgstr "OpenPGPƒXƒ}[ƒgƒJ[ƒh‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½B"
 
 # c:\oss\winpt\src\wptKeyEditDlgs.cpp:932
-#: Src/wptCardDlg.cpp:326
+#: Src/wptCardDlg.cpp:340
 msgid "No PINs found."
 msgstr "ƒ†[ƒU[ID‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½B"
 
@@ -326,61 +326,61 @@
 # c:\oss\winpt\src\wptCardDlg.cpp:634 c:\oss\winpt\src\wptCardDlg.cpp:639
 # c:\oss\winpt\src\wptCardDlg.cpp:644 c:\oss\winpt\src\wptCardDlg.cpp:695
 # c:\oss\winpt\src\wptCardDlg.cpp:697 c:\oss\winpt\src\wptMainProc.cpp:546
-#: Src/wptCardDlg.cpp:326 Src/wptCardDlg.cpp:340 Src/wptCardDlg.cpp:345
-#: Src/wptCardDlg.cpp:351 Src/wptCardDlg.cpp:363 Src/wptCardDlg.cpp:377
-#: Src/wptCardDlg.cpp:506 Src/wptCardDlg.cpp:611 Src/wptCardDlg.cpp:616
-#: Src/wptCardDlg.cpp:622 Src/wptCardDlg.cpp:629 Src/wptCardDlg.cpp:634
-#: Src/wptCardDlg.cpp:642 Src/wptCardDlg.cpp:664 Src/wptCardDlg.cpp:691
-#: Src/wptCardDlg.cpp:696 Src/wptCardDlg.cpp:699 Src/wptCardDlg.cpp:724
-#: Src/wptCardDlg.cpp:726 Src/wptCardDlg.cpp:731 Src/wptCardDlg.cpp:736
-#: Src/wptCardDlg.cpp:800 Src/wptCardDlg.cpp:815 Src/wptCardDlg.cpp:818
+#: Src/wptCardDlg.cpp:340 Src/wptCardDlg.cpp:351 Src/wptCardDlg.cpp:356
+#: Src/wptCardDlg.cpp:362 Src/wptCardDlg.cpp:374 Src/wptCardDlg.cpp:388
+#: Src/wptCardDlg.cpp:523 Src/wptCardDlg.cpp:624 Src/wptCardDlg.cpp:629
+#: Src/wptCardDlg.cpp:635 Src/wptCardDlg.cpp:642 Src/wptCardDlg.cpp:648
+#: Src/wptCardDlg.cpp:656 Src/wptCardDlg.cpp:677 Src/wptCardDlg.cpp:703
+#: Src/wptCardDlg.cpp:708 Src/wptCardDlg.cpp:711 Src/wptCardDlg.cpp:737
+#: Src/wptCardDlg.cpp:739 Src/wptCardDlg.cpp:744 Src/wptCardDlg.cpp:749
+#: Src/wptCardDlg.cpp:813 Src/wptCardDlg.cpp:826 Src/wptCardDlg.cpp:829
 #: Src/wptMainProc.cpp:263
 msgid "Card Edit"
 msgstr "ƒJ[ƒh•ÒW"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:299
-#: Src/wptCardDlg.cpp:339
+#: Src/wptCardDlg.cpp:350
 msgid "Only plain ASCII is currently allowed."
 msgstr "Œ»Ý‚̓vƒŒ[ƒ“ASCII‚Ì‚Ý‚ªŽg—p‚©‚Ì‚¤‚Å‚·B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:304
-#: Src/wptCardDlg.cpp:344
+#: Src/wptCardDlg.cpp:355
 msgid "Only alphabetic characters are allowed."
 msgstr "ƒAƒ‹ƒtƒ@ƒxƒbƒg‚Ì•¶Žš‚Ì‚Ý‚ªŽg—p‚©‚Ì‚¤‚Å‚·B"
 
 # c:\oss\winpt\src\wptKeyManager.cpp:444
-#: Src/wptCardDlg.cpp:351
+#: Src/wptCardDlg.cpp:362
 msgid "Invalid URL."
 msgstr "–³Œø‚ÈURLB"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:317
-#: Src/wptCardDlg.cpp:364
+#: Src/wptCardDlg.cpp:375
 #, c-format
 msgid "Could not modify card attribute: %s"
 msgstr "ƒJ[ƒh‚Ì‘®«u%sv‚ð•ÏX‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:327
-#: Src/wptCardDlg.cpp:377
+#: Src/wptCardDlg.cpp:388
 msgid "Card attribute changed."
 msgstr "ƒJ[ƒh‚Ì‘®«‚ª•ÏX‚µ‚Ü‚µ‚½B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:362
-#: Src/wptCardDlg.cpp:417
+#: Src/wptCardDlg.cpp:428
 msgid "Please enter the 'Admin PIN'"
 msgstr "'Admin PIN'‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:364
-#: Src/wptCardDlg.cpp:419
+#: Src/wptCardDlg.cpp:430
 msgid "Please enter the 'User PIN'"
 msgstr "'User PIN'‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:366 c:\oss\winpt\src\wptPINDlg.cpp:47
-#: Src/wptCardDlg.cpp:421 Src/wptPINDlg.cpp:51
+#: Src/wptCardDlg.cpp:432 Src/wptPINDlg.cpp:51
 msgid "Please enter the PIN"
 msgstr "ˆÃØ”ԍ†‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:370
-#: Src/wptCardDlg.cpp:425
+#: Src/wptCardDlg.cpp:436
 #, c-format
 msgid ""
 "%s\n"
@@ -391,8 +391,60 @@
 "–¼‘OF %s %s\n"
 "ƒVƒŠƒAƒ‹”ԍ†F %s\n"
 
+# c:\oss\winpt\src\wptKeyEditDlgs.cpp:395
+#: Src/wptCardDlg.cpp:479 Src/wptCardDlg.cpp:595 Src/wptKeyEditDlgs.cpp:503
+msgid "&Name"
+msgstr "–¼‘O(&N)"
+
+# c:\oss\winpt\src\wptKeyPropsDlg.cpp:114
+#: Src/wptCardDlg.cpp:480
+#, fuzzy
+msgid "&Language"
+msgstr "•ÏX(&C)"
+
+#: Src/wptCardDlg.cpp:481
+msgid "&Key-URL"
+msgstr ""
+
+#: Src/wptCardDlg.cpp:482
+msgid "&Login"
+msgstr ""
+
+# c:\oss\winpt\src\wptClipEditDlg.cpp:49 c:\oss\winpt\src\wptGPGOptDlg.cpp:48
+#: Src/wptCardDlg.cpp:483
+#, fuzzy
+msgid "&Sex"
+msgstr "•Û‘¶(&S)"
+
+# c:\oss\winpt\src\wptKeyEditDlgs.cpp:144
+# c:\oss\winpt\src\wptKeyEditDlgs.cpp:166
+# c:\oss\winpt\src\wptKeyEditDlgs.cpp:890
+#: Src/wptCardDlg.cpp:484 Src/wptCommonDlg.cpp:252 Src/wptKeyEditDlgs.cpp:2154
+#: Src/wptPassphraseDlg.cpp:105 Src/wptPINDlg.cpp:55
+msgid "&OK"
+msgstr "&OK"
+
+# c:\oss\winpt\src\wptFileManagerDlg.cpp:364
+# c:\oss\winpt\src\wptMainProc.cpp:400
+#: Src/wptCardDlg.cpp:485 Src/wptGPGOptDlg.cpp:59
+#, fuzzy
+msgid "&Exit"
+msgstr "I—¹"
+
+# c:\oss\winpt\src\wptKeyManager.cpp:603
+#: Src/wptCardDlg.cpp:486
+#, fuzzy
+msgid "&New keys"
+msgstr "V‚µ‚¢ƒTƒuƒL["
+
+# c:\oss\winpt\src\wptKeyEditDlgs.cpp:789
+#: Src/wptCardDlg.cpp:487
+#, fuzzy
+msgid "Change &PIN"
+msgstr "ƒJ[ƒh‚̈Ïؔԍ†‚ð•ÏX‚·‚é"
+
 # c:\oss\winpt\src\wptCardDlg.cpp:451
-#: Src/wptCardDlg.cpp:505
+#: Src/wptCardDlg.cpp:522
 #, fuzzy
 msgid ""
 "This operation will override the keys on the card.\n"
@@ -401,13 +453,14 @@
 "‚±‚Ì‘€ì‚̓J[ƒhã‚É‚ ‚éƒL[‚ðŽw’è•ÏX‚µ‚Ü‚·B\n"
 "‚Ü‚¾‘±‚¯‚Ü‚·‚©H"
 
-# c:\oss\winpt\src\wptKeyEditDlgs.cpp:395
-#: Src/wptCardDlg.cpp:580 Src/wptKeyEditDlgs.cpp:503
-msgid "&Name"
-msgstr "–¼‘O(&N)"
+# c:\oss\winpt\src\wptSigList.cpp:47
+#: Src/wptCardDlg.cpp:594
+#, fuzzy
+msgid "Pubkey algorithm"
+msgstr "ƒAƒ‹ƒSƒŠƒYƒ€"
 
 # c:\oss\winpt\src\wptKeygenDlg.cpp:148
-#: Src/wptCardDlg.cpp:581 Src/wptKeygenDlg.cpp:375
+#: Src/wptCardDlg.cpp:596 Src/wptKeygenDlg.cpp:375
 msgid "&Comment (optional)"
 msgstr "ƒIƒvƒVƒ‡ƒiƒ‹ƒRƒƒ“ƒg(&C)"
 
@@ -416,78 +469,78 @@
 # c:\oss\winpt\src\wptKeyEditDlgs.cpp:886
 # c:\oss\winpt\src\wptKeyEditDlgs.cpp:1141
 # c:\oss\winpt\src\wptKeysigDlg.cpp:192
-#: Src/wptCardDlg.cpp:582 Src/wptKeygenDlg.cpp:377
+#: Src/wptCardDlg.cpp:597 Src/wptKeygenDlg.cpp:377
 msgid "&Expire date"
 msgstr "—LŒøŠúŒÀ(&E)"
 
 # c:\oss\winpt\src\wptKeygenDlg.cpp:152
-#: Src/wptCardDlg.cpp:583
+#: Src/wptCardDlg.cpp:598
 msgid "Off-card passphrase"
 msgstr "ƒJ[ƒhŠOƒpƒXƒtƒŒ[ƒY"
 
 # c:\oss\winpt\src\wptKeygenDlg.cpp:154
-#: Src/wptCardDlg.cpp:584 Src/wptKeyEditDlgs.cpp:640 Src/wptKeygenDlg.cpp:379
+#: Src/wptCardDlg.cpp:599 Src/wptKeyEditDlgs.cpp:640 Src/wptKeygenDlg.cpp:379
 msgid "&Never"
 msgstr "‚Í‚¸‚Í‚È‚¢(&N)"
 
 # c:\oss\winpt\src\wptKeygenDlg.cpp:149
-#: Src/wptCardDlg.cpp:585 Src/wptKeygenDlg.cpp:376
+#: Src/wptCardDlg.cpp:600 Src/wptKeygenDlg.cpp:376
 msgid "Email &address"
 msgstr "ƒ[ƒ‹ƒAƒhƒŒƒX(&A)"
 
 # c:\oss\winpt\src\wptGPG.cpp:872
-#: Src/wptCardDlg.cpp:586
+#: Src/wptCardDlg.cpp:601
 msgid "Overwrite old keys on the card"
 msgstr "ƒJ[ƒhã‚É‚ ‚éŒÃ‚¢ƒL[‚ðã‘‚«‚µ‚Ü‚·‚©H"
 
-#: Src/wptCardDlg.cpp:587
+#: Src/wptCardDlg.cpp:602
 msgid "Make off-card backup of encryption key"
 msgstr "ˆÃ†‰»ƒL[‚̃J[ƒhŠOƒoƒbƒNƒAƒbƒv‚ðì¬"
 
 # c:\oss\winpt\src\wptKeyManagerDlg.cpp:1049
-#: Src/wptCardDlg.cpp:588 Src/wptKeyManagerDlg.cpp:1795
+#: Src/wptCardDlg.cpp:603 Src/wptKeyManagerDlg.cpp:1795
 msgid "Card Key Generation"
 msgstr "ƒJ[ƒhƒL[ì¬"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:537
-#: Src/wptCardDlg.cpp:611
+#: Src/wptCardDlg.cpp:624
 msgid "Please enter your name."
 msgstr "‚ ‚È‚½‚Ì–¼‘O‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:541
-#: Src/wptCardDlg.cpp:615
+#: Src/wptCardDlg.cpp:628
 msgid "Name must be at least 5 characters long."
 msgstr "–¼‘O‚Ì’·‚³‚͍Œá5•¶Žš‚É‚È‚é‚ׂ«‚Å‚·B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:547
-#: Src/wptCardDlg.cpp:621
+#: Src/wptCardDlg.cpp:634
 msgid "Please enter your e-mail address."
 msgstr "‚ ‚È‚½‚Ì“dŽqƒ[ƒ‹ƒAƒhƒŒƒX‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:554
-#: Src/wptCardDlg.cpp:628
+#: Src/wptCardDlg.cpp:641
 msgid "Please enter a valid e-mail address."
 msgstr "—LŒø‚È“dŽqƒ[ƒ‹ƒAƒhƒŒƒX‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B"
 
 # c:\oss\winpt\src\wptKeyEditDlgs.cpp:260
-#: Src/wptCardDlg.cpp:634
+#: Src/wptCardDlg.cpp:647
 msgid "Please enter an off-card passphrase."
 msgstr "ƒJ[ƒhŠOƒpƒXƒtƒŒ[ƒY‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B"
 
-#: Src/wptCardDlg.cpp:641
+#: Src/wptCardDlg.cpp:655
 msgid "Please use plain ASCII charset for the fields."
 msgstr "ƒtƒB[ƒ‹ƒh‚ɃvƒŒ[ƒ“ASCII•¶Žš‚ðŽg‚Á‚Ä‚­‚¾‚³‚¢B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:580
 # c:\oss\winpt\src\wptKeyEditDlgs.cpp:1153
 # c:\oss\winpt\src\wptKeygenDlg.cpp:310
-#: Src/wptCardDlg.cpp:663 Src/wptKeyEditDlgs.cpp:1363 Src/wptKeygenDlg.cpp:457
+#: Src/wptCardDlg.cpp:676 Src/wptKeyEditDlgs.cpp:1363 Src/wptKeygenDlg.cpp:457
 #, fuzzy
 msgid "The date you have chosen has already passed."
 msgstr "‚ ‚È‚½‚Í‘I‚΂ꂽ“ú•t‚ª‰ß‹Ž‚Ì‚à‚Ì‚Å‚·B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:602
-#: Src/wptCardDlg.cpp:689
+#: Src/wptCardDlg.cpp:701
 msgid ""
 "Operation was canceled. It seems that there are existing\n"
 "keys on the cards. You need to mark the 'Overwrite' flag."
@@ -496,48 +549,48 @@
 "ã‘‚«(Overwrite)ƒtƒ‰ƒO‚ðƒ}[ƒN‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:610
-#: Src/wptCardDlg.cpp:698
+#: Src/wptCardDlg.cpp:710
 msgid "Keys successfully created."
 msgstr "ƒL[‚̍쐬‚ɐ¬Œ÷‚µ‚Ü‚µ‚½B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:632
-#: Src/wptCardDlg.cpp:724
+#: Src/wptCardDlg.cpp:737
 msgid "Please enter the old card PIN."
 msgstr "ŒÃ‚¢ƒJ[ƒh‚̈Ïؔԍ†‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:634
-#: Src/wptCardDlg.cpp:726
+#: Src/wptCardDlg.cpp:739
 msgid "Please enter the new card PIN."
 msgstr "V‚µ‚¢ƒJ[ƒh‚̈Ïؔԍ†‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B"
 
 # c:\oss\winpt\src\wptPINDlg.cpp:69
-#: Src/wptCardDlg.cpp:731
+#: Src/wptCardDlg.cpp:744
 #, fuzzy
 msgid "Admin PIN must be at least 8 characters."
 msgstr "ŠÇ—ŽÒˆÃØ”ԍ†'Admin PIN'‚Ì’·‚³‚͍Œá8•¶Žš‚Å‚·B"
 
 # c:\oss\winpt\src\wptPINDlg.cpp:88
-#: Src/wptCardDlg.cpp:736
+#: Src/wptCardDlg.cpp:749
 #, fuzzy
 msgid "PIN must be at least 6 characters."
 msgstr "ƒ†[ƒU[ˆÃØ”ԍ†'User PIN'‚Ì’·‚³‚͍Œá6•¶Žš‚Å‚·B"
 
 # c:\oss\winpt\src\wptKeyEditDlgs.cpp:789
-#: Src/wptCardDlg.cpp:759
+#: Src/wptCardDlg.cpp:772
 msgid "Change Card PIN"
 msgstr "ƒJ[ƒh‚̈Ïؔԍ†‚ð•ÏX‚·‚é"
 
 # c:\oss\winpt\src\wptPassphraseDlg.cpp:146
-#: Src/wptCardDlg.cpp:799 Src/wptPassphraseDlg.cpp:256
+#: Src/wptCardDlg.cpp:812 Src/wptPassphraseDlg.cpp:256
 msgid "Passphrases do not match. Please try again."
 msgstr "ƒpƒXƒtƒŒ[ƒY‚ªƒ}ƒbƒ`‚µ‚Ü‚¹‚ñB‚à‚¤ˆê“xƒgƒ‰ƒC‚µ‚Ä‚­‚¾‚³‚¢B"
 
 # c:\oss\winpt\src\wptCardDlg.cpp:697
-#: Src/wptCardDlg.cpp:817
+#: Src/wptCardDlg.cpp:828
 msgid "PIN successfully changed."
 msgstr "ˆÃØ”ԍ†‚ª³‚µ‚­•ÏX‚µ‚Ü‚µ‚½B"
 
-#: Src/wptCardEdit.cpp:321
+#: Src/wptCardEdit.cpp:329
 msgid "Please insert the card and click OK or Cancel to abort."
 msgstr "ƒJ[ƒh‚ð“ü—Í‚µAOK‚â’†Ž~‚·‚é‚̂ɃLƒƒƒ“ƒZƒ‹‚ð‰Ÿ‚µ‚Ä‚­‚¾‚³‚¢"
 
@@ -556,7 +609,7 @@
 # c:\oss\winpt\src\wptKeyserverDlg.cpp:167
 # c:\oss\winpt\src\wptOwnertrustDlg.cpp:75
 # c:\oss\winpt\src\wptOwnertrustDlg.cpp:89
-#: Src/wptCardEdit.cpp:322
+#: Src/wptCardEdit.cpp:330
 msgid "GPG Card Status"
 msgstr "GnuPG‚̏ó‘Ô"
 
@@ -735,7 +788,7 @@
 #: Src/wptClipDecryptDlg.cpp:269 Src/wptClipEncryptDlg.cpp:216
 #: Src/wptClipSignDlg.cpp:119 Src/wptClipSignDlg.cpp:265
 #: Src/wptClipSignEncDlg.cpp:190 Src/wptKeyManager.cpp:304
-#: Src/wptKeyManager.cpp:802 Src/wptKeyManager.cpp:994 Src/wptSymEnc.cpp:94
+#: Src/wptKeyManager.cpp:766 Src/wptKeyManager.cpp:958 Src/wptSymEnc.cpp:94
 msgid "GnuPG Status: Finished"
 msgstr "GunPG‚̏ó‘ԁFI—¹‚µ‚Ü‚µ‚½"
 
@@ -963,7 +1016,7 @@
 
 # c:\oss\winpt\src\wptClipSignEncDlg.cpp:119
 # c:\oss\winpt\src\wptKeylist.cpp:923
-#: Src/wptClipSignEncDlg.cpp:159 Src/wptKeylist.cpp:1207
+#: Src/wptClipSignEncDlg.cpp:159 Src/wptKeylist.cpp:1209
 msgid "No key was selected."
 msgstr "ƒL[‚ª‘I‘ð‚³‚ê‚Ä‚Ü‚¹‚ñB"
 
@@ -1128,14 +1181,6 @@
 msgid "Please select a language"
 msgstr "Œ¾Œê‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
 
-# c:\oss\winpt\src\wptKeyEditDlgs.cpp:144
-# c:\oss\winpt\src\wptKeyEditDlgs.cpp:166
-# c:\oss\winpt\src\wptKeyEditDlgs.cpp:890
-#: Src/wptCommonDlg.cpp:252 Src/wptKeyEditDlgs.cpp:2154
-#: Src/wptPassphraseDlg.cpp:105 Src/wptPINDlg.cpp:55
-msgid "&OK"
-msgstr "&OK"
-
 # c:\oss\winpt\src\wptErrors.cpp:43
 #: Src/wptErrors.cpp:47
 #, c-format
@@ -1604,8 +1649,9 @@
 #: Src/wptFileManagerDlg.cpp:245 Src/wptImportList.cpp:404
 #: Src/wptImportList.cpp:411 Src/wptImportList.cpp:421
 #: Src/wptImportList.cpp:429 Src/wptImportList.cpp:438
-#: Src/wptKeyManager.cpp:478 Src/wptKeyManager.cpp:489
-#: Src/wptKeyManager.cpp:617 Src/wptKeyserverDlg.cpp:222
+#: Src/wptKeyManager.cpp:458 Src/wptKeyManager.cpp:469
+#: Src/wptKeyManager.cpp:563 Src/wptKeyManager.cpp:582
+#: Src/wptKeyserverDlg.cpp:222
 msgid "Import"
 msgstr "ƒCƒ“ƒ|[ƒg"
 
@@ -1743,14 +1789,14 @@
 # c:\oss\winpt\src\wptFileManagerDlg.cpp:190
 # c:\oss\winpt\src\wptKeyManager.cpp:408
 #: Src/wptFileManagerDlg.cpp:210 Src/wptFileStatDlg.cpp:283
-#: Src/wptKeyManager.cpp:442
+#: Src/wptKeyManager.cpp:426
 msgid "No valid OpenPGP data found."
 msgstr "—LŒø‚ÈOpenPGPƒf[ƒ^‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½B"
 
 # c:\oss\winpt\src\wptClipImportDlg.cpp:180
 # c:\oss\winpt\src\wptKeyManager.cpp:427
 #: Src/wptFileManagerDlg.cpp:210 Src/wptFileManagerDlg.cpp:225
-#: Src/wptKeyManager.cpp:467
+#: Src/wptKeyManager.cpp:451
 msgid "Key Import"
 msgstr "ƒL[‚̃Cƒ“ƒ|[ƒg"
 
@@ -1821,8 +1867,8 @@
 # c:\oss\winpt\src\wptKeyserverSearchDlg.cpp:115
 #: Src/wptFileManagerDlg.cpp:328 Src/wptKeyEditDlgs.cpp:1288
 #: Src/wptKeyEditDlgs.cpp:1339 Src/wptKeyEditDlgs.cpp:1412
-#: Src/wptKeyManager.cpp:722 Src/wptKeyManager.cpp:823
-#: Src/wptKeyManager.cpp:856 Src/wptKeyManagerDlg.cpp:1672
+#: Src/wptKeyManager.cpp:686 Src/wptKeyManager.cpp:787
+#: Src/wptKeyManager.cpp:820 Src/wptKeyManagerDlg.cpp:1672
 #: Src/wptKeyManagerDlg.cpp:1688 Src/wptKeyManagerDlg.cpp:1716
 #: Src/wptKeyManagerDlg.cpp:1727 Src/wptKeyManagerDlg.cpp:1742
 #: Src/wptKeyManagerDlg.cpp:1855 Src/wptKeyManagerDlg.cpp:1874
@@ -2212,45 +2258,53 @@
 msgid "Invalid backup mode %d"
 msgstr "–³Œø‚ȃoƒbƒNƒAƒbƒvƒ‚[ƒh %d"
 
-#: Src/wptGPGME.cpp:278
+#: Src/wptGPGME.cpp:282
 msgid "Error during verification process"
 msgstr "Šm”F’iŠK‚ŃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B"
 
 # c:\oss\winpt\src\wptClipVerifyDlg.cpp:122
-#: Src/wptGPGME.cpp:279
+#: Src/wptGPGME.cpp:283
 msgid "The signature is good"
 msgstr "—LŒø‚ȏ–¼"
 
 # c:\oss\winpt\src\wptClipVerifyDlg.cpp:122
-#: Src/wptGPGME.cpp:280
+#: Src/wptGPGME.cpp:284
 msgid "The signature is BAD!"
 msgstr "–³Œø‚ȏ–¼"
 
-#: Src/wptGPGME.cpp:281
+#: Src/wptGPGME.cpp:285
 msgid "The signature could not be checked due to a missing key"
 msgstr "‚È‚­‚È‚Á‚½ƒL[‚Ì‚½‚ߏ–¼‚ªƒ`ƒFƒbƒN‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B"
 
 # c:\oss\winpt\src\wptFileManagerDlg.cpp:190
 # c:\oss\winpt\src\wptKeyManager.cpp:408
-#: Src/wptGPGME.cpp:282
+#: Src/wptGPGME.cpp:286
 msgid "No valid OpenPGP signature"
 msgstr "—LŒø‚ÈOpenPGP–¼‚ª‚ ‚è‚Ü‚¹‚ñB"
 
 # c:\oss\winpt\src\wptKeysignDlg.cpp:232
-#: Src/wptGPGME.cpp:283
+#: Src/wptGPGME.cpp:287
 msgid "Signature Error"
 msgstr "–¼ƒGƒ‰["
 
 # c:\oss\winpt\src\wptKeysignDlg.cpp:232
-#: Src/wptGPGME.cpp:284
-msgid "Good Signature (Expired Key)"
+#: Src/wptGPGME.cpp:288
+#, fuzzy
+msgid "Good signature (Expired Key)"
 msgstr "—LŒø‚ȏ–¼iŠúŒÀØ‚êƒL[j"
 
 # c:\oss\winpt\src\wptFileManager.cpp:1019
-#: Src/wptGPGME.cpp:285
-msgid "Good Signature (Revoked Key)"
+#: Src/wptGPGME.cpp:289
+#, fuzzy
+msgid "Good signature (Revoked Key)"
 msgstr "—LŒø‚ȏ–¼i–³Œø‚ȃL[j"
 
+# c:\oss\winpt\src\wptKeysignDlg.cpp:232
+#: Src/wptGPGME.cpp:290
+#, fuzzy
+msgid "Good signature (Expired)"
+msgstr "—LŒø‚ȏ–¼iŠúŒÀØ‚êƒL[j"
+
 # c:\oss\winpt\src\wptGPGOptDlg.cpp:44
 #: Src/wptGPGOptDlg.cpp:50 Src/wptGPGOptDlg.cpp:100
 msgid "Could not load GnuPG config file!"
@@ -2274,13 +2328,6 @@
 msgid "&Load"
 msgstr "ƒ[ƒh(&L)"
 
-# c:\oss\winpt\src\wptFileManagerDlg.cpp:364
-# c:\oss\winpt\src\wptMainProc.cpp:400
-#: Src/wptGPGOptDlg.cpp:59
-#, fuzzy
-msgid "&Exit"
-msgstr "I—¹"
-
 # c:\oss\winpt\src\wptGPGOptDlg.cpp:68
 #: Src/wptGPGOptDlg.cpp:72
 msgid "The 'gpg.conf' file is not loaded."
@@ -2483,18 +2530,17 @@
 #: Src/wptKeyManager.cpp:331 Src/wptKeyManager.cpp:338
 #: Src/wptKeyManager.cpp:340 Src/wptKeyManager.cpp:361
 #: Src/wptKeyManager.cpp:370 Src/wptKeyManager.cpp:374
-#: Src/wptKeyManager.cpp:394 Src/wptKeyManager.cpp:435
-#: Src/wptKeyManager.cpp:440 Src/wptKeyManager.cpp:443
-#: Src/wptKeyManager.cpp:448 Src/wptKeyManager.cpp:454
-#: Src/wptKeyManager.cpp:459 Src/wptKeyManager.cpp:587
-#: Src/wptKeyManager.cpp:595 Src/wptKeyManager.cpp:722
-#: Src/wptKeyManager.cpp:750 Src/wptKeyManager.cpp:759
-#: Src/wptKeyManager.cpp:770 Src/wptKeyManager.cpp:796
-#: Src/wptKeyManager.cpp:823 Src/wptKeyManager.cpp:828
-#: Src/wptKeyManager.cpp:851 Src/wptKeyManager.cpp:856
-#: Src/wptKeyManager.cpp:870 Src/wptKeyManager.cpp:930
-#: Src/wptKeyManager.cpp:935 Src/wptKeyManager.cpp:992
-#: Src/wptKeyManager.cpp:1025 Src/wptKeyManager.cpp:1109
+#: Src/wptKeyManager.cpp:394 Src/wptKeyManager.cpp:419
+#: Src/wptKeyManager.cpp:424 Src/wptKeyManager.cpp:427
+#: Src/wptKeyManager.cpp:432 Src/wptKeyManager.cpp:438
+#: Src/wptKeyManager.cpp:443 Src/wptKeyManager.cpp:686
+#: Src/wptKeyManager.cpp:714 Src/wptKeyManager.cpp:723
+#: Src/wptKeyManager.cpp:734 Src/wptKeyManager.cpp:760
+#: Src/wptKeyManager.cpp:787 Src/wptKeyManager.cpp:792
+#: Src/wptKeyManager.cpp:815 Src/wptKeyManager.cpp:820
+#: Src/wptKeyManager.cpp:834 Src/wptKeyManager.cpp:894
+#: Src/wptKeyManager.cpp:899 Src/wptKeyManager.cpp:956
+#: Src/wptKeyManager.cpp:989 Src/wptKeyManager.cpp:1073
 #: Src/wptKeyManagerDlg.cpp:1324 Src/wptKeyManagerDlg.cpp:1335
 #: Src/wptKeyManagerDlg.cpp:1345 Src/wptKeyManagerDlg.cpp:1650
 #: Src/wptKeyManagerDlg.cpp:1673 Src/wptKeyManagerDlg.cpp:1688
@@ -3830,7 +3876,7 @@
 msgstr "–³Œø‚ȃ†[ƒU[ID"
 
 # c:\oss\winpt\src\wptKeylist.cpp:745
-#: Src/wptKeylist.cpp:1034
+#: Src/wptKeylist.cpp:1035
 #, c-format
 msgid ""
 "It is NOT certain that the key belongs to the person\n"
@@ -3846,12 +3892,12 @@
 "‚Ç‚¤‚¹‚±‚ê‚ð \"%s\" Žg—p‚µ‚Ü‚·‚©H"
 
 # c:\oss\winpt\src\wptKeylist.cpp:753 c:\oss\winpt\src\wptKeylist.cpp:820
-#: Src/wptKeylist.cpp:1042 Src/wptKeylist.cpp:1104
+#: Src/wptKeylist.cpp:1043 Src/wptKeylist.cpp:1106
 msgid "Recipients"
 msgstr "ŽóMŽÒ"
 
 # c:\oss\winpt\src\wptKeylist.cpp:819
-#: Src/wptKeylist.cpp:1105
+#: Src/wptKeylist.cpp:1107
 #, c-format
 msgid ""
 "KeyID %s.\n"
@@ -3861,7 +3907,7 @@
 "–{“–‚É–³Œø‚ȃL[‚ðƒGƒLƒXƒ|[ƒg‚µ‚Ü‚·‚©H"
 
 # c:\oss\winpt\src\wptKeylist.cpp:923
-#: Src/wptKeylist.cpp:1207
+#: Src/wptKeylist.cpp:1209
 msgid "Secret Key List"
 msgstr "”é–§Œ®‚̈ꗗ‚Ђ傤"
 
@@ -3901,12 +3947,12 @@
 msgstr "ƒL[‚𐳂µ‚­'%s'‚É•Û‘¶‚·‚邱‚Æ‚ªo—ˆ‚Ü‚µ‚½B"
 
 # c:\oss\winpt\src\wptKeyManager.cpp:412
-#: Src/wptKeyManager.cpp:447
+#: Src/wptKeyManager.cpp:431
 msgid "No valid OpenPGP keys found."
 msgstr "—LŒø‚ÈOpenPGPƒf[ƒ^‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½B"
 
 # c:\oss\winpt\src\wptKeyManager.cpp:416
-#: Src/wptKeyManager.cpp:452
+#: Src/wptKeyManager.cpp:436
 #, fuzzy
 msgid ""
 "The key you want to import is dash escaped.\n"
@@ -3916,13 +3962,13 @@
 "ƒL[‚ðˆø‚­o‚µ‚½‚¢‚Å‚µ‚傤‚©H"
 
 # c:\oss\winpt\src\wptKeyManager.cpp:422
-#: Src/wptKeyManager.cpp:458
+#: Src/wptKeyManager.cpp:442
 msgid "Cannot import dash escaped OpenPGP keys."
 msgstr "ƒ_ƒbƒVƒ…ƒGƒXƒP[ƒvƒhOpenPGPƒL[‚ðƒCƒ“ƒ|[ƒg‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚¹‚ñB"
 
 # c:\oss\winpt\src\wptFileManager.cpp:1285
 # c:\oss\winpt\src\wptKeyManager.cpp:513
-#: Src/wptKeyManager.cpp:487 Src/wptKeyManager.cpp:615
+#: Src/wptKeyManager.cpp:467 Src/wptKeyManager.cpp:580
 msgid ""
 "Key without a self signature was dectected!\n"
 "(This key is NOT usable for encryption, etc)\n"
@@ -3933,51 +3979,46 @@
 # c:\oss\winpt\src\wptKeyManager.cpp:444
 # c:\oss\winpt\src\wptKeyManager.cpp:455
 # c:\oss\winpt\src\wptKeyManager.cpp:468
-#: Src/wptKeyManager.cpp:516 Src/wptKeyManager.cpp:523
-#: Src/wptKeyManager.cpp:532
+#: Src/wptKeyManager.cpp:496 Src/wptKeyManager.cpp:503
+#: Src/wptKeyManager.cpp:512
 msgid "Key Import HTTP"
 msgstr "ƒL[ƒCƒ“ƒ|[ƒg‚ÌHTTP"
 
 # c:\oss\winpt\src\wptKeyManager.cpp:444
-#: Src/wptKeyManager.cpp:516
+#: Src/wptKeyManager.cpp:496
 #, c-format
 msgid "Invalid HTTP URL: %s"
 msgstr "–³Œø‚ÈHTTP URL: %s"
 
 # c:\oss\winpt\src\wptMAPI.cpp:348
-#: Src/wptKeyManager.cpp:533
+#: Src/wptKeyManager.cpp:513
 #, c-format
 msgid "Could not fetch key from URL: %s"
 msgstr "URL'%s'‚æ‚èƒL[‚ðŽæ‚èo‚·‚±‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B"
 
 # c:\oss\winpt\src\wptKeyManagerDlg.cpp:1082
-#: Src/wptKeyManager.cpp:562
+#: Src/wptKeyManager.cpp:541
 msgid "Choose Name of the Key File"
 msgstr "ƒL[ƒtƒ@ƒCƒ‹‚É–¼‘O‚ð‘I‘ð‚·‚é"
 
 # c:\oss\winpt\src\wptFileManagerDlg.cpp:182
 # c:\oss\winpt\src\wptFileManagerDlg.cpp:190
 # c:\oss\winpt\src\wptKeyManager.cpp:490
-#: Src/wptKeyManager.cpp:575
+#: Src/wptKeyManager.cpp:554
 msgid "File Import"
 msgstr "ƒtƒ@ƒCƒ‹‚̃Cƒ“ƒ|[ƒg"
 
-# c:\oss\winpt\src\wptKeyManager.cpp:500
-#: Src/wptKeyManager.cpp:586
-msgid "Could not read key-data from file."
-msgstr "ƒL[‚̃f[ƒ^‚ðƒtƒ@ƒCƒ‹‚©‚ç“Ç‚Þ‚±‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B"
-
 # c:\oss\winpt\src\wptKeyManager.cpp:733
-#: Src/wptKeyManager.cpp:727
+#: Src/wptKeyManager.cpp:691
 msgid "Do you really want to confirm each key?"
 msgstr "‚·‚ׂẴL[‚ð–{“–‚ÉŠm”F‚µ‚½‚¢‚Å‚·‚©H"
 
-#: Src/wptKeyManager.cpp:728
+#: Src/wptKeyManager.cpp:692
 msgid "Delete Confirmation"
 msgstr "Šm”F‚ðíœ‚·‚é"
 
 # c:\oss\winpt\src\wptKeyManager.cpp:1092
-#: Src/wptKeyManager.cpp:751
+#: Src/wptKeyManager.cpp:715
 #, c-format
 msgid ""
 "Do you really want to delete this key?\n"
@@ -3989,7 +4030,7 @@
 "%s"
 
 # c:\oss\winpt\src\wptKeyManager.cpp:577
-#: Src/wptKeyManager.cpp:760
+#: Src/wptKeyManager.cpp:724
 #, c-format
 msgid ""
 "Do you really want to delete this KEY PAIR?\n"
@@ -4007,7 +4048,7 @@
 "%s"
 
 # c:\oss\winpt\src\wptKeyManager.cpp:585
-#: Src/wptKeyManager.cpp:767
+#: Src/wptKeyManager.cpp:731
 msgid ""
 "The actual secret key is stored on a smartcard.\n"
 "Only the public key and the secret key \n"
@@ -4018,58 +4059,58 @@
 "íœ‚³‚ê‚Ü‚·B\n"
 
 # c:\oss\winpt\src\wptKeyManager.cpp:636
-#: Src/wptKeyManager.cpp:829
+#: Src/wptKeyManager.cpp:793
 #, c-format
 msgid "Do you really want to send '0x%s' to keyserver %s?"
 msgstr "'0x%s' ‚ð–{“–‚ɃL[ƒT[ƒo[ %s ‚É‘—M‚µ‚½‚¢‚Å‚·‚©H"
 
 # c:\oss\winpt\src\wptKeyManager.cpp:661
-#: Src/wptKeyManager.cpp:850
+#: Src/wptKeyManager.cpp:814
 msgid "Please only select one key."
 msgstr "‚ЂƂ‚̃L[‚¾‚¯‚ð‘I‚ñ‚Å‚­‚¾‚³‚¢B"
 
 # c:\oss\winpt\src\wptKeyManager.cpp:733
-#: Src/wptKeyManager.cpp:929
+#: Src/wptKeyManager.cpp:893
 msgid "Do you really want to refresh all keys in the keyring?"
 msgstr "ƒL[ƒŠƒ“ƒO‚É‚ ‚é‚·‚ׂẴL[‚ð–{“–‚ɃŠƒtƒŒƒbƒVƒ…‚µ‚½‚¢‚Å‚·‚ªH"
 
 # c:\oss\winpt\src\wptKeyManager.cpp:727
-#: Src/wptKeyManager.cpp:934
+#: Src/wptKeyManager.cpp:898
 msgid "Could not connect to keyserver, abort procedure."
 msgstr "ƒL[ƒT[ƒo[‚ɐڑ±‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B’†Ž~‚µ‚Ü‚·‚©H"
 
 # c:\oss\winpt\src\wptKeyserverDlg.cpp:304
-#: Src/wptKeyManager.cpp:1008
+#: Src/wptKeyManager.cpp:972
 msgid "Search"
 msgstr "ŒŸõ"
 
 # c:\oss\winpt\src\wptKeyserverDlg.cpp:304
-#: Src/wptKeyManager.cpp:1008
+#: Src/wptKeyManager.cpp:972
 msgid "Search for:"
 msgstr "ŒŸõ‚·‚邱‚ƁF"
 
-#: Src/wptKeyManager.cpp:1020
+#: Src/wptKeyManager.cpp:984
 #, c-format
 msgid "String pattern \"%s\" not found."
 msgstr "ŽŸ‚Ì•¶Žšƒpƒ^[ƒ“‚ª\"%s\" Œ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½B"
 
 # c:\oss\winpt\src\wptKeyRevokeDlg.cpp:74
-#: Src/wptKeyManager.cpp:1086 Src/wptKeyRevokeDlg.cpp:85
+#: Src/wptKeyManager.cpp:1050 Src/wptKeyRevokeDlg.cpp:85
 msgid "0. No reason specified"
 msgstr "0. ——R‚Í–¾Ž¦‚³‚ê‚Ä‚¢‚Ü‚¹‚ñB"
 
 # c:\oss\winpt\src\wptKeyRevokeDlg.cpp:75
-#: Src/wptKeyManager.cpp:1087 Src/wptKeyRevokeDlg.cpp:86
+#: Src/wptKeyManager.cpp:1051 Src/wptKeyRevokeDlg.cpp:86
 msgid "1. Key has been compromised"
 msgstr "1. ƒL[‚͐M—p‚Å‚«‚È‚­‚È‚Á‚Ä‚¢‚Ü‚·B"
 
 # c:\oss\winpt\src\wptKeyRevokeDlg.cpp:76
-#: Src/wptKeyManager.cpp:1088 Src/wptKeyRevokeDlg.cpp:87
+#: Src/wptKeyManager.cpp:1052 Src/wptKeyRevokeDlg.cpp:87
 msgid "2. Key is superseded"
 msgstr "2. ƒL[‚Í”pŽ~‚³‚ê‚Ä‚¢‚Ü‚·B"
 
 # c:\oss\winpt\src\wptKeyRevokeDlg.cpp:77
-#: Src/wptKeyManager.cpp:1089 Src/wptKeyRevokeDlg.cpp:88
+#: Src/wptKeyManager.cpp:1053 Src/wptKeyRevokeDlg.cpp:88
 msgid "3. Key is no longer used"
 msgstr "3. ƒL[‚Í‚à‚Í‚âŽg‚í‚ê‚Ä‚¢‚Ü‚¹‚ñ "
 
@@ -5588,7 +5629,7 @@
 "%s ƒL[, ID %s\n"
 
 # c:\oss\winpt\src\wptPassphraseCB.cpp:283
-#: Src/wptPassphraseCB.cpp:400
+#: Src/wptPassphraseCB.cpp:401
 #, c-format
 msgid ""
 "Please enter the PIN to unlock your secret card key\n"
@@ -5986,6 +6027,10 @@
 msgid "Signed"
 msgstr "–¼‚µ‚Ü‚µ‚½"
 
+# c:\oss\winpt\src\wptKeyManager.cpp:500
+#~ msgid "Could not read key-data from file."
+#~ msgstr "ƒL[‚̃f[ƒ^‚ðƒtƒ@ƒCƒ‹‚©‚ç“Ç‚Þ‚±‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½B"
+
 # c:\oss\winpt\src\wptClipDecryptDlg.cpp:130
 # c:\oss\winpt\src\wptFileManager.cpp:997
 #~ msgid ""

Modified: trunk/Po/pt_BR.po
===================================================================
--- trunk/Po/pt_BR.po	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Po/pt_BR.po	2006-08-16 10:01:30 UTC (rev 260)
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: WinPT 1.0.0\n"
 "Report-Msgid-Bugs-To: winpt at freakmail.de\n"
-"POT-Creation-Date: 2006-08-05 12:29+0200\n"
+"POT-Creation-Date: 2006-08-11 22:27+0200\n"
 "PO-Revision-Date: 2006-06-14 22:00-0300\n"
 "Last-Translator: Eduardo S. Dobay <edudobay at gmail.com>\n"
 "Language-Team: Brazilian Portuguese <ldp-br at bazar.conectiva.com.br>\n"
@@ -27,7 +27,7 @@
 #: Src/WinPT.cpp:196 Src/WinPT.cpp:278 Src/WinPT.cpp:282 Src/WinPT.cpp:483
 #: Src/WinPT.cpp:492 Src/WinPT.cpp:499 Src/WinPT.cpp:539 Src/WinPT.cpp:567
 #: Src/WinPT.cpp:576 Src/WinPT.cpp:580 Src/WinPT.cpp:597 Src/WinPT.cpp:665
-#: Src/WinPT.cpp:678 Src/WinPT.cpp:725 Src/WinPT.cpp:760 Src/WinPT.cpp:779
+#: Src/WinPT.cpp:678 Src/WinPT.cpp:725 Src/WinPT.cpp:767 Src/WinPT.cpp:786
 #: Src/wptCommonDlg.cpp:220 Src/wptErrors.cpp:141 Src/wptGPG.cpp:926
 #: Src/wptGPG.cpp:938 Src/wptGPG.cpp:948 Src/wptGPG.cpp:959
 #: Src/wptMainProc.cpp:343 Src/wptMainProc.cpp:516
@@ -145,7 +145,7 @@
 msgid "Could not create window"
 msgstr "Não foi possível criar a janela"
 
-#: Src/WinPT.cpp:758
+#: Src/WinPT.cpp:765
 msgid ""
 "The keycache was not initialized or is empty.\n"
 "Please check your GPG config (keyrings, pathes...)"
@@ -153,7 +153,7 @@
 "O cache de chaves não foi inicializado ou está vazio.\n"
 "Por favor verifique sua configuração do GPG (chaveiros, diretórios...)"
 
-#: Src/WinPT.cpp:761
+#: Src/WinPT.cpp:768
 #, fuzzy
 msgid ""
 "It seems that GPG is not configured properly.\n"
@@ -162,7 +162,7 @@
 "Parece que o GPG não está configurado corretamente.\n"
 "Você deseja iniciar a janela de preferências do GPG?"
 
-#: Src/WinPT.cpp:780
+#: Src/WinPT.cpp:787
 #, c-format
 msgid ""
 "Default key (from the GPG config file) could not be found.\n"
@@ -244,68 +244,68 @@
 msgid "&Help"
 msgstr "A&juda"
 
-#: Src/wptCardDlg.cpp:141 Src/wptMainProc.cpp:392
+#: Src/wptCardDlg.cpp:149 Src/wptMainProc.cpp:392
 msgid "Card Manager"
 msgstr "Gerenciador de cartões"
 
-#: Src/wptCardDlg.cpp:177
+#: Src/wptCardDlg.cpp:185
 msgid "No Fingerprint"
 msgstr "Nenhuma impressão digital"
 
-#: Src/wptCardDlg.cpp:207
+#: Src/wptCardDlg.cpp:216
 msgid "No OpenPGP smart card detected."
 msgstr "Nenhum smart card do OpenPGP detectado."
 
-#: Src/wptCardDlg.cpp:326
+#: Src/wptCardDlg.cpp:340
 msgid "No PINs found."
 msgstr "Nenhum PIN encontrado."
 
-#: Src/wptCardDlg.cpp:326 Src/wptCardDlg.cpp:340 Src/wptCardDlg.cpp:345
-#: Src/wptCardDlg.cpp:351 Src/wptCardDlg.cpp:363 Src/wptCardDlg.cpp:377
-#: Src/wptCardDlg.cpp:506 Src/wptCardDlg.cpp:611 Src/wptCardDlg.cpp:616
-#: Src/wptCardDlg.cpp:622 Src/wptCardDlg.cpp:629 Src/wptCardDlg.cpp:634
-#: Src/wptCardDlg.cpp:642 Src/wptCardDlg.cpp:664 Src/wptCardDlg.cpp:691
-#: Src/wptCardDlg.cpp:696 Src/wptCardDlg.cpp:699 Src/wptCardDlg.cpp:724
-#: Src/wptCardDlg.cpp:726 Src/wptCardDlg.cpp:731 Src/wptCardDlg.cpp:736
-#: Src/wptCardDlg.cpp:800 Src/wptCardDlg.cpp:815 Src/wptCardDlg.cpp:818
+#: Src/wptCardDlg.cpp:340 Src/wptCardDlg.cpp:351 Src/wptCardDlg.cpp:356
+#: Src/wptCardDlg.cpp:362 Src/wptCardDlg.cpp:374 Src/wptCardDlg.cpp:388
+#: Src/wptCardDlg.cpp:523 Src/wptCardDlg.cpp:624 Src/wptCardDlg.cpp:629
+#: Src/wptCardDlg.cpp:635 Src/wptCardDlg.cpp:642 Src/wptCardDlg.cpp:648
+#: Src/wptCardDlg.cpp:656 Src/wptCardDlg.cpp:677 Src/wptCardDlg.cpp:703
+#: Src/wptCardDlg.cpp:708 Src/wptCardDlg.cpp:711 Src/wptCardDlg.cpp:737
+#: Src/wptCardDlg.cpp:739 Src/wptCardDlg.cpp:744 Src/wptCardDlg.cpp:749
+#: Src/wptCardDlg.cpp:813 Src/wptCardDlg.cpp:826 Src/wptCardDlg.cpp:829
 #: Src/wptMainProc.cpp:263
 msgid "Card Edit"
 msgstr "Editar cartão"
 
-#: Src/wptCardDlg.cpp:339
+#: Src/wptCardDlg.cpp:350
 msgid "Only plain ASCII is currently allowed."
 msgstr "Apenas ASCII puro é permitido atualmente."
 
-#: Src/wptCardDlg.cpp:344
+#: Src/wptCardDlg.cpp:355
 msgid "Only alphabetic characters are allowed."
 msgstr "Apenas caracteres alfabéticos são permitidos."
 
-#: Src/wptCardDlg.cpp:351
+#: Src/wptCardDlg.cpp:362
 msgid "Invalid URL."
 msgstr "URL inválida."
 
-#: Src/wptCardDlg.cpp:364
+#: Src/wptCardDlg.cpp:375
 #, c-format
 msgid "Could not modify card attribute: %s"
 msgstr "Não foi possível modificar o atributo do cartão: %s"
 
-#: Src/wptCardDlg.cpp:377
+#: Src/wptCardDlg.cpp:388
 msgid "Card attribute changed."
 msgstr "Atributo do cartão modificado."
 
-#: Src/wptCardDlg.cpp:417
+#: Src/wptCardDlg.cpp:428
 msgid "Please enter the 'Admin PIN'"
 msgstr "Por favor entre com o 'PIN do Administrador'"
 
-#: Src/wptCardDlg.cpp:419
+#: Src/wptCardDlg.cpp:430
 msgid "Please enter the 'User PIN'"
 msgstr "Por favor entre com o 'PIN do Usuário'"
 
-#: Src/wptCardDlg.cpp:421 Src/wptPINDlg.cpp:51
+#: Src/wptCardDlg.cpp:432 Src/wptPINDlg.cpp:51
 msgid "Please enter the PIN"
 msgstr "Por favor entre com o PIN"
 
-#: Src/wptCardDlg.cpp:425
+#: Src/wptCardDlg.cpp:436
 #, c-format
 msgid ""
 "%s\n"
@@ -316,8 +316,50 @@
 "Nome: %s %s\n"
 "Nº Serial: %s\n"
 
-#: Src/wptCardDlg.cpp:505
+#: Src/wptCardDlg.cpp:479 Src/wptCardDlg.cpp:595 Src/wptKeyEditDlgs.cpp:503
+msgid "&Name"
+msgstr "&Nome"
+
+#: Src/wptCardDlg.cpp:480
 #, fuzzy
+msgid "&Language"
+msgstr "&Alterar"
+
+#: Src/wptCardDlg.cpp:481
+msgid "&Key-URL"
+msgstr ""
+
+#: Src/wptCardDlg.cpp:482
+msgid "&Login"
+msgstr ""
+
+#: Src/wptCardDlg.cpp:483
+#, fuzzy
+msgid "&Sex"
+msgstr "&Salvar"
+
+#: Src/wptCardDlg.cpp:484 Src/wptCommonDlg.cpp:252 Src/wptKeyEditDlgs.cpp:2154
+#: Src/wptPassphraseDlg.cpp:105 Src/wptPINDlg.cpp:55
+msgid "&OK"
+msgstr "&OX"
+
+#: Src/wptCardDlg.cpp:485 Src/wptGPGOptDlg.cpp:59
+#, fuzzy
+msgid "&Exit"
+msgstr "Sair"
+
+#: Src/wptCardDlg.cpp:486
+#, fuzzy
+msgid "&New keys"
+msgstr "Novas subchaves"
+
+#: Src/wptCardDlg.cpp:487
+#, fuzzy
+msgid "Change &PIN"
+msgstr "Mudar PIN do cartão"
+
+#: Src/wptCardDlg.cpp:522
+#, fuzzy
 msgid ""
 "This operation will override the keys on the card.\n"
 "Continue?"
@@ -325,72 +367,73 @@
 "Esta operação irá sobrescrever as chaves no cartão.\n"
 "Prosseguir?"
 
-#: Src/wptCardDlg.cpp:580 Src/wptKeyEditDlgs.cpp:503
-msgid "&Name"
-msgstr "&Nome"
+#: Src/wptCardDlg.cpp:594
+#, fuzzy
+msgid "Pubkey algorithm"
+msgstr "Algoritmo"
 
-#: Src/wptCardDlg.cpp:581 Src/wptKeygenDlg.cpp:375
+#: Src/wptCardDlg.cpp:596 Src/wptKeygenDlg.cpp:375
 msgid "&Comment (optional)"
 msgstr "&Comentário (opcional)"
 
-#: Src/wptCardDlg.cpp:582 Src/wptKeygenDlg.cpp:377
+#: Src/wptCardDlg.cpp:597 Src/wptKeygenDlg.cpp:377
 msgid "&Expire date"
 msgstr "Data de &expiração"
 
-#: Src/wptCardDlg.cpp:583
+#: Src/wptCardDlg.cpp:598
 msgid "Off-card passphrase"
 msgstr "Frase secreta fora do cartão"
 
-#: Src/wptCardDlg.cpp:584 Src/wptKeyEditDlgs.cpp:640 Src/wptKeygenDlg.cpp:379
+#: Src/wptCardDlg.cpp:599 Src/wptKeyEditDlgs.cpp:640 Src/wptKeygenDlg.cpp:379
 msgid "&Never"
 msgstr "&Nunca"
 
-#: Src/wptCardDlg.cpp:585 Src/wptKeygenDlg.cpp:376
+#: Src/wptCardDlg.cpp:600 Src/wptKeygenDlg.cpp:376
 msgid "Email &address"
 msgstr "Endereço de &e-mail"
 
-#: Src/wptCardDlg.cpp:586
+#: Src/wptCardDlg.cpp:601
 msgid "Overwrite old keys on the card"
 msgstr "Sobrescrever chaves antigas no cartão"
 
-#: Src/wptCardDlg.cpp:587
+#: Src/wptCardDlg.cpp:602
 msgid "Make off-card backup of encryption key"
 msgstr "Fazer backup da chave de cifragem fora do cartão"
 
-#: Src/wptCardDlg.cpp:588 Src/wptKeyManagerDlg.cpp:1795
+#: Src/wptCardDlg.cpp:603 Src/wptKeyManagerDlg.cpp:1795
 msgid "Card Key Generation"
 msgstr "Geração da chave do cartão"
 
-#: Src/wptCardDlg.cpp:611
+#: Src/wptCardDlg.cpp:624
 msgid "Please enter your name."
 msgstr "Por favor entre com seu nome."
 
-#: Src/wptCardDlg.cpp:615
+#: Src/wptCardDlg.cpp:628
 msgid "Name must be at least 5 characters long."
 msgstr "O nome deve ter pelo menos 5 caracteres."
 
-#: Src/wptCardDlg.cpp:621
+#: Src/wptCardDlg.cpp:634
 msgid "Please enter your e-mail address."
 msgstr "Por favor entre com seu endereço de e-mail."
 
-#: Src/wptCardDlg.cpp:628
+#: Src/wptCardDlg.cpp:641
 msgid "Please enter a valid e-mail address."
 msgstr "Por favor coloque um endereço de e-mail válido."
 
-#: Src/wptCardDlg.cpp:634
+#: Src/wptCardDlg.cpp:647
 msgid "Please enter an off-card passphrase."
 msgstr "Por favor coloque uma frase secreta fora do cartão."
 
-#: Src/wptCardDlg.cpp:641
+#: Src/wptCardDlg.cpp:655
 msgid "Please use plain ASCII charset for the fields."
 msgstr "Por favor use caracteres ASCII puros para os campos."
 
-#: Src/wptCardDlg.cpp:663 Src/wptKeyEditDlgs.cpp:1363 Src/wptKeygenDlg.cpp:457
+#: Src/wptCardDlg.cpp:676 Src/wptKeyEditDlgs.cpp:1363 Src/wptKeygenDlg.cpp:457
 #, fuzzy
 msgid "The date you have chosen has already passed."
 msgstr "A data escolhida está no passado."
 
-#: Src/wptCardDlg.cpp:689
+#: Src/wptCardDlg.cpp:701
 msgid ""
 "Operation was canceled. It seems that there are existing\n"
 "keys on the cards. You need to mark the 'Overwrite' flag."
@@ -398,45 +441,45 @@
 "A operação foi cancelada. Parece que há chaves\n"
 "existentes nos cartões. Você precisa marcar a opção 'Sobrescrever'."
 
-#: Src/wptCardDlg.cpp:698
+#: Src/wptCardDlg.cpp:710
 msgid "Keys successfully created."
 msgstr "Chaves criadas com sucesso."
 
-#: Src/wptCardDlg.cpp:724
+#: Src/wptCardDlg.cpp:737
 msgid "Please enter the old card PIN."
 msgstr "Por favor coloque o PIN antigo do cartão."
 
-#: Src/wptCardDlg.cpp:726
+#: Src/wptCardDlg.cpp:739
 msgid "Please enter the new card PIN."
 msgstr "Por favor coloque o PIN novo do cartão."
 
-#: Src/wptCardDlg.cpp:731
+#: Src/wptCardDlg.cpp:744
 #, fuzzy
 msgid "Admin PIN must be at least 8 characters."
 msgstr "'PIN do administrador' deve ter pelo menos 8 caracteres."
 
-#: Src/wptCardDlg.cpp:736
+#: Src/wptCardDlg.cpp:749
 #, fuzzy
 msgid "PIN must be at least 6 characters."
 msgstr "'PIN do usuário' deve ter pelo menos 6 caracteres."
 
-#: Src/wptCardDlg.cpp:759
+#: Src/wptCardDlg.cpp:772
 msgid "Change Card PIN"
 msgstr "Mudar PIN do cartão"
 
-#: Src/wptCardDlg.cpp:799 Src/wptPassphraseDlg.cpp:256
+#: Src/wptCardDlg.cpp:812 Src/wptPassphraseDlg.cpp:256
 msgid "Passphrases do not match. Please try again."
 msgstr "Frases não coincidem. Por favor tente de novo."
 
-#: Src/wptCardDlg.cpp:817
+#: Src/wptCardDlg.cpp:828
 msgid "PIN successfully changed."
 msgstr "PIN alterado com sucesso."
 
-#: Src/wptCardEdit.cpp:321
+#: Src/wptCardEdit.cpp:329
 msgid "Please insert the card and click OK or Cancel to abort."
 msgstr "Por favor insira o cartão e clique OK ou Cancelar para abortar."
 
-#: Src/wptCardEdit.cpp:322
+#: Src/wptCardEdit.cpp:330
 msgid "GPG Card Status"
 msgstr "Estado do cartão GPG"
 
@@ -570,7 +613,7 @@
 #: Src/wptClipDecryptDlg.cpp:269 Src/wptClipEncryptDlg.cpp:216
 #: Src/wptClipSignDlg.cpp:119 Src/wptClipSignDlg.cpp:265
 #: Src/wptClipSignEncDlg.cpp:190 Src/wptKeyManager.cpp:304
-#: Src/wptKeyManager.cpp:802 Src/wptKeyManager.cpp:994 Src/wptSymEnc.cpp:94
+#: Src/wptKeyManager.cpp:766 Src/wptKeyManager.cpp:958 Src/wptSymEnc.cpp:94
 msgid "GnuPG Status: Finished"
 msgstr "Estado do GnuPG: Concluído"
 
@@ -733,7 +776,7 @@
 msgid "Signing key:"
 msgstr "Chave para assinatura:"
 
-#: Src/wptClipSignEncDlg.cpp:159 Src/wptKeylist.cpp:1207
+#: Src/wptClipSignEncDlg.cpp:159 Src/wptKeylist.cpp:1209
 msgid "No key was selected."
 msgstr "Nenhuma chave foi selecionada."
 
@@ -839,11 +882,6 @@
 msgid "Please select a language"
 msgstr "Por favor selecione uma língua"
 
-#: Src/wptCommonDlg.cpp:252 Src/wptKeyEditDlgs.cpp:2154
-#: Src/wptPassphraseDlg.cpp:105 Src/wptPINDlg.cpp:55
-msgid "&OK"
-msgstr "&OX"
-
 #: Src/wptErrors.cpp:47
 #, c-format
 msgid "Could not locate GPG.exe in %s."
@@ -1204,8 +1242,9 @@
 #: Src/wptFileManagerDlg.cpp:245 Src/wptImportList.cpp:404
 #: Src/wptImportList.cpp:411 Src/wptImportList.cpp:421
 #: Src/wptImportList.cpp:429 Src/wptImportList.cpp:438
-#: Src/wptKeyManager.cpp:478 Src/wptKeyManager.cpp:489
-#: Src/wptKeyManager.cpp:617 Src/wptKeyserverDlg.cpp:222
+#: Src/wptKeyManager.cpp:458 Src/wptKeyManager.cpp:469
+#: Src/wptKeyManager.cpp:563 Src/wptKeyManager.cpp:582
+#: Src/wptKeyserverDlg.cpp:222
 msgid "Import"
 msgstr "Importar"
 
@@ -1305,12 +1344,12 @@
 msgstr "Por favor selecione ao menos um destinatário."
 
 #: Src/wptFileManagerDlg.cpp:210 Src/wptFileStatDlg.cpp:283
-#: Src/wptKeyManager.cpp:442
+#: Src/wptKeyManager.cpp:426
 msgid "No valid OpenPGP data found."
 msgstr "Nenhum dado OpenPGP válido encontrado."
 
 #: Src/wptFileManagerDlg.cpp:210 Src/wptFileManagerDlg.cpp:225
-#: Src/wptKeyManager.cpp:467
+#: Src/wptKeyManager.cpp:451
 msgid "Key Import"
 msgstr "Importat chave"
 
@@ -1358,8 +1397,8 @@
 
 #: Src/wptFileManagerDlg.cpp:328 Src/wptKeyEditDlgs.cpp:1288
 #: Src/wptKeyEditDlgs.cpp:1339 Src/wptKeyEditDlgs.cpp:1412
-#: Src/wptKeyManager.cpp:722 Src/wptKeyManager.cpp:823
-#: Src/wptKeyManager.cpp:856 Src/wptKeyManagerDlg.cpp:1672
+#: Src/wptKeyManager.cpp:686 Src/wptKeyManager.cpp:787
+#: Src/wptKeyManager.cpp:820 Src/wptKeyManagerDlg.cpp:1672
 #: Src/wptKeyManagerDlg.cpp:1688 Src/wptKeyManagerDlg.cpp:1716
 #: Src/wptKeyManagerDlg.cpp:1727 Src/wptKeyManagerDlg.cpp:1742
 #: Src/wptKeyManagerDlg.cpp:1855 Src/wptKeyManagerDlg.cpp:1874
@@ -1652,42 +1691,49 @@
 msgid "Invalid backup mode %d"
 msgstr "Modo de backup %d inválido"
 
-#: Src/wptGPGME.cpp:278
+#: Src/wptGPGME.cpp:282
 #, fuzzy
 msgid "Error during verification process"
 msgstr "Erro durante o processo de verificação."
 
-#: Src/wptGPGME.cpp:279
+#: Src/wptGPGME.cpp:283
 #, fuzzy
 msgid "The signature is good"
 msgstr "A assinatura está boa."
 
-#: Src/wptGPGME.cpp:280
+#: Src/wptGPGME.cpp:284
 msgid "The signature is BAD!"
 msgstr "A assinatura está RUIM!"
 
-#: Src/wptGPGME.cpp:281
+#: Src/wptGPGME.cpp:285
 #, fuzzy
 msgid "The signature could not be checked due to a missing key"
 msgstr "A assinatura não pôde ser verificada devido à falta de uma chave."
 
-#: Src/wptGPGME.cpp:282
+#: Src/wptGPGME.cpp:286
 #, fuzzy
 msgid "No valid OpenPGP signature"
 msgstr "Assinatura OpenPGP inválida."
 
-#: Src/wptGPGME.cpp:283
+#: Src/wptGPGME.cpp:287
 msgid "Signature Error"
 msgstr "Erro na assinatura"
 
-#: Src/wptGPGME.cpp:284
-msgid "Good Signature (Expired Key)"
+#: Src/wptGPGME.cpp:288
+#, fuzzy
+msgid "Good signature (Expired Key)"
 msgstr "Assinatura boa (chave expirada)"
 
-#: Src/wptGPGME.cpp:285
-msgid "Good Signature (Revoked Key)"
+#: Src/wptGPGME.cpp:289
+#, fuzzy
+msgid "Good signature (Revoked Key)"
 msgstr "Assinatura boa (chave revogada)"
 
+#: Src/wptGPGME.cpp:290
+#, fuzzy
+msgid "Good signature (Expired)"
+msgstr "Assinatura boa (chave expirada)"
+
 #: Src/wptGPGOptDlg.cpp:50 Src/wptGPGOptDlg.cpp:100
 msgid "Could not load GnuPG config file!"
 msgstr "Não foi possível carregar o arquivo de configuração do GnuPG!"
@@ -1706,11 +1752,6 @@
 msgid "&Load"
 msgstr "Ca&rregar"
 
-#: Src/wptGPGOptDlg.cpp:59
-#, fuzzy
-msgid "&Exit"
-msgstr "Sair"
-
 #: Src/wptGPGOptDlg.cpp:72
 msgid "The 'gpg.conf' file is not loaded."
 msgstr "O arquivo 'gpg.conf' não foi carregado."
@@ -1822,18 +1863,17 @@
 #: Src/wptKeyManager.cpp:331 Src/wptKeyManager.cpp:338
 #: Src/wptKeyManager.cpp:340 Src/wptKeyManager.cpp:361
 #: Src/wptKeyManager.cpp:370 Src/wptKeyManager.cpp:374
-#: Src/wptKeyManager.cpp:394 Src/wptKeyManager.cpp:435
-#: Src/wptKeyManager.cpp:440 Src/wptKeyManager.cpp:443
-#: Src/wptKeyManager.cpp:448 Src/wptKeyManager.cpp:454
-#: Src/wptKeyManager.cpp:459 Src/wptKeyManager.cpp:587
-#: Src/wptKeyManager.cpp:595 Src/wptKeyManager.cpp:722
-#: Src/wptKeyManager.cpp:750 Src/wptKeyManager.cpp:759
-#: Src/wptKeyManager.cpp:770 Src/wptKeyManager.cpp:796
-#: Src/wptKeyManager.cpp:823 Src/wptKeyManager.cpp:828
-#: Src/wptKeyManager.cpp:851 Src/wptKeyManager.cpp:856
-#: Src/wptKeyManager.cpp:870 Src/wptKeyManager.cpp:930
-#: Src/wptKeyManager.cpp:935 Src/wptKeyManager.cpp:992
-#: Src/wptKeyManager.cpp:1025 Src/wptKeyManager.cpp:1109
+#: Src/wptKeyManager.cpp:394 Src/wptKeyManager.cpp:419
+#: Src/wptKeyManager.cpp:424 Src/wptKeyManager.cpp:427
+#: Src/wptKeyManager.cpp:432 Src/wptKeyManager.cpp:438
+#: Src/wptKeyManager.cpp:443 Src/wptKeyManager.cpp:686
+#: Src/wptKeyManager.cpp:714 Src/wptKeyManager.cpp:723
+#: Src/wptKeyManager.cpp:734 Src/wptKeyManager.cpp:760
+#: Src/wptKeyManager.cpp:787 Src/wptKeyManager.cpp:792
+#: Src/wptKeyManager.cpp:815 Src/wptKeyManager.cpp:820
+#: Src/wptKeyManager.cpp:834 Src/wptKeyManager.cpp:894
+#: Src/wptKeyManager.cpp:899 Src/wptKeyManager.cpp:956
+#: Src/wptKeyManager.cpp:989 Src/wptKeyManager.cpp:1073
 #: Src/wptKeyManagerDlg.cpp:1324 Src/wptKeyManagerDlg.cpp:1335
 #: Src/wptKeyManagerDlg.cpp:1345 Src/wptKeyManagerDlg.cpp:1650
 #: Src/wptKeyManagerDlg.cpp:1673 Src/wptKeyManagerDlg.cpp:1688
@@ -2866,7 +2906,7 @@
 msgid "Invalid User ID"
 msgstr "ID de usuário inválida"
 
-#: Src/wptKeylist.cpp:1034
+#: Src/wptKeylist.cpp:1035
 #, c-format
 msgid ""
 "It is NOT certain that the key belongs to the person\n"
@@ -2881,11 +2921,11 @@
 "\n"
 "Usar \"%s\" de qualquer jeito?"
 
-#: Src/wptKeylist.cpp:1042 Src/wptKeylist.cpp:1104
+#: Src/wptKeylist.cpp:1043 Src/wptKeylist.cpp:1106
 msgid "Recipients"
 msgstr "Destinatários"
 
-#: Src/wptKeylist.cpp:1105
+#: Src/wptKeylist.cpp:1107
 #, c-format
 msgid ""
 "KeyID %s.\n"
@@ -2894,7 +2934,7 @@
 "ID de chave %s.\n"
 "Você realmente deseja exportar uma chave revogada?"
 
-#: Src/wptKeylist.cpp:1207
+#: Src/wptKeylist.cpp:1209
 msgid "Secret Key List"
 msgstr "Lista de chaves privadas"
 
@@ -2928,11 +2968,11 @@
 msgid "Key(s) successfully saved in '%s'."
 msgstr "Chave(s) salva com sucesso em '%s'."
 
-#: Src/wptKeyManager.cpp:447
+#: Src/wptKeyManager.cpp:431
 msgid "No valid OpenPGP keys found."
 msgstr "Nenhuma chave OpenPGP válida encontrada."
 
-#: Src/wptKeyManager.cpp:452
+#: Src/wptKeyManager.cpp:436
 #, fuzzy
 msgid ""
 "The key you want to import is dash escaped.\n"
@@ -2941,11 +2981,11 @@
 "A chave que você deseja importar contém caracteres de escape.\n"
 "Você deseja extrair a chave?"
 
-#: Src/wptKeyManager.cpp:458
+#: Src/wptKeyManager.cpp:442
 msgid "Cannot import dash escaped OpenPGP keys."
 msgstr "Não é possível importar chaves com caracteres de escape."
 
-#: Src/wptKeyManager.cpp:487 Src/wptKeyManager.cpp:615
+#: Src/wptKeyManager.cpp:467 Src/wptKeyManager.cpp:580
 msgid ""
 "Key without a self signature was dectected!\n"
 "(This key is NOT usable for encryption, etc)\n"
@@ -2953,42 +2993,38 @@
 "Chave sem auto-assinatura detectada!\n"
 "(Esta chave NÃO é utilizável para cifragem, etc)\n"
 
-#: Src/wptKeyManager.cpp:516 Src/wptKeyManager.cpp:523
-#: Src/wptKeyManager.cpp:532
+#: Src/wptKeyManager.cpp:496 Src/wptKeyManager.cpp:503
+#: Src/wptKeyManager.cpp:512
 msgid "Key Import HTTP"
 msgstr "Importação de chave via HTTP"
 
-#: Src/wptKeyManager.cpp:516
+#: Src/wptKeyManager.cpp:496
 #, c-format
 msgid "Invalid HTTP URL: %s"
 msgstr "URL HTTP inválida: %s"
 
-#: Src/wptKeyManager.cpp:533
+#: Src/wptKeyManager.cpp:513
 #, c-format
 msgid "Could not fetch key from URL: %s"
 msgstr "Não foi possível obter a chave da URL: %s"
 
-#: Src/wptKeyManager.cpp:562
+#: Src/wptKeyManager.cpp:541
 msgid "Choose Name of the Key File"
 msgstr "Escolher nome do arquivo de chaves"
 
-#: Src/wptKeyManager.cpp:575
+#: Src/wptKeyManager.cpp:554
 msgid "File Import"
 msgstr "Importar arquivo"
 
-#: Src/wptKeyManager.cpp:586
-msgid "Could not read key-data from file."
-msgstr "Não foi possível ler dados da chave do arquivo."
-
-#: Src/wptKeyManager.cpp:727
+#: Src/wptKeyManager.cpp:691
 msgid "Do you really want to confirm each key?"
 msgstr "Você realmente quer confirmar cada chave?"
 
-#: Src/wptKeyManager.cpp:728
+#: Src/wptKeyManager.cpp:692
 msgid "Delete Confirmation"
 msgstr "Confirmação de exclusão"
 
-#: Src/wptKeyManager.cpp:751
+#: Src/wptKeyManager.cpp:715
 #, c-format
 msgid ""
 "Do you really want to delete this key?\n"
@@ -2999,7 +3035,7 @@
 "\n"
 "%s"
 
-#: Src/wptKeyManager.cpp:760
+#: Src/wptKeyManager.cpp:724
 #, c-format
 msgid ""
 "Do you really want to delete this KEY PAIR?\n"
@@ -3016,7 +3052,7 @@
 "\n"
 "%s"
 
-#: Src/wptKeyManager.cpp:767
+#: Src/wptKeyManager.cpp:731
 msgid ""
 "The actual secret key is stored on a smartcard.\n"
 "Only the public key and the secret key \n"
@@ -3026,49 +3062,49 @@
 "Apenas o lugar reservado para as chaves pública e\n"
 "privada será excluído.\n"
 
-#: Src/wptKeyManager.cpp:829
+#: Src/wptKeyManager.cpp:793
 #, c-format
 msgid "Do you really want to send '0x%s' to keyserver %s?"
 msgstr "Você realmente deseja enviar '0x%s' para o servidor %s?"
 
-#: Src/wptKeyManager.cpp:850
+#: Src/wptKeyManager.cpp:814
 msgid "Please only select one key."
 msgstr "Por favor selecione apenas uma chave."
 
-#: Src/wptKeyManager.cpp:929
+#: Src/wptKeyManager.cpp:893
 msgid "Do you really want to refresh all keys in the keyring?"
 msgstr "Você realmente deseja atualizar todas as chaves do chaveiro?"
 
-#: Src/wptKeyManager.cpp:934
+#: Src/wptKeyManager.cpp:898
 msgid "Could not connect to keyserver, abort procedure."
 msgstr "Não foi possível conectar-se ao servidor, abortando procedimento."
 
-#: Src/wptKeyManager.cpp:1008
+#: Src/wptKeyManager.cpp:972
 msgid "Search"
 msgstr "Localizar"
 
-#: Src/wptKeyManager.cpp:1008
+#: Src/wptKeyManager.cpp:972
 msgid "Search for:"
 msgstr "Procurar por:"
 
-#: Src/wptKeyManager.cpp:1020
+#: Src/wptKeyManager.cpp:984
 #, c-format
 msgid "String pattern \"%s\" not found."
 msgstr "Padrão \"%s\" não encontrado."
 
-#: Src/wptKeyManager.cpp:1086 Src/wptKeyRevokeDlg.cpp:85
+#: Src/wptKeyManager.cpp:1050 Src/wptKeyRevokeDlg.cpp:85
 msgid "0. No reason specified"
 msgstr "0. Nenhuma razão especificada"
 
-#: Src/wptKeyManager.cpp:1087 Src/wptKeyRevokeDlg.cpp:86
+#: Src/wptKeyManager.cpp:1051 Src/wptKeyRevokeDlg.cpp:86
 msgid "1. Key has been compromised"
 msgstr "1. Chave foi comprometida"
 
-#: Src/wptKeyManager.cpp:1088 Src/wptKeyRevokeDlg.cpp:87
+#: Src/wptKeyManager.cpp:1052 Src/wptKeyRevokeDlg.cpp:87
 msgid "2. Key is superseded"
 msgstr "2. Chave foi substituída"
 
-#: Src/wptKeyManager.cpp:1089 Src/wptKeyRevokeDlg.cpp:88
+#: Src/wptKeyManager.cpp:1053 Src/wptKeyRevokeDlg.cpp:88
 msgid "3. Key is no longer used"
 msgstr "3. Chave não é mais usada"
 
@@ -4246,7 +4282,7 @@
 "o usuário: \"%s\"\n"
 "chave %s, ID %s\n"
 
-#: Src/wptPassphraseCB.cpp:400
+#: Src/wptPassphraseCB.cpp:401
 #, c-format
 msgid ""
 "Please enter the PIN to unlock your secret card key\n"
@@ -4572,6 +4608,9 @@
 msgid "Signed"
 msgstr "Assinada"
 
+#~ msgid "Could not read key-data from file."
+#~ msgstr "Não foi possível ler dados da chave do arquivo."
+
 #~ msgid ""
 #~ "Encrypted with %s key, ID %s.%s\n"
 #~ "Decryption failed: secret key not available."

Modified: trunk/README
===================================================================
--- trunk/README	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/README	2006-08-16 10:01:30 UTC (rev 260)
@@ -2,13 +2,6 @@
 			================================
 
 
-Note
------
-
-This is only a quick guide for WinPT. For the moment the program is its own
-documentation. This is subject to change.
-
-
 Bugs and Improvements
 ---------------------
 

Modified: trunk/Src/ChangeLog
===================================================================
--- trunk/Src/ChangeLog	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/ChangeLog	2006-08-16 10:01:30 UTC (rev 260)
@@ -1,3 +1,31 @@
+2006-08-11  Timo Schulz  <ts at g10code.de>
+
+	* wptGPGMEWrapper.cpp (importFromFile): New.
+	(importFromClipboard): New.
+	(importGetResult): New.
+	* wptKeyManager.cpp (km_file_import): Use gpgme wrapper.
+	(km_clip_import): Ditto.
+	* wptKeyEdit.cpp (addCardKey): New.
+	* wptKeyEditCB.cpp (cmd_addcardkey_handler): New.
+	* wptCardEdit.cpp (get_str_timestamp): Use locale date format.
+	* wptCardDlg.cpp (card_edit_dlg_proc): Began to localize dialog.
+	* wptKeyCache.cpp (key_divert_to_card): Adjusted for 'addcardkey'.
+	
+2006-08-10  Timo Schulz  <ts at g10code.de>
+
+	* wptFileManager.cpp (fm_verify_pasted_detsig): '=' should be
+	'=='.
+	* wptGPGME.cpp (sigsum_to_index): Correctly handle expired 
+	keys and signatures.
+	(get_gpg_sigstat): Adjusted code.
+	* wptCardDlg.cpp (card_changepin_dlg_proc): Cleanups.
+	(gpg_card_load): Improved card detection code.
+	* wptFirstRunDlg.cpp (first_run_dlg_proc): Allow to generate
+	a key on a card. Suggested by Achim.
+	* wptUtil.cpp (check_email_address): Add sanity check for
+	the length.
+	* WinPT.cpp (WinMain): Handle cardgen request.
+	
 2006-08-04  Timo Schulz  <ts at g10code.de>
 
 	* wptKeysignDlg.cpp (display_keyinfo): Skip revoked user IDs.

Modified: trunk/Src/WinPT-en.rc
===================================================================
--- trunk/Src/WinPT-en.rc	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/WinPT-en.rc	2006-08-16 10:01:30 UTC (rev 260)
@@ -981,18 +981,20 @@
     GROUPBOX        "",IDC_STATIC,8,81,138,38
 END
 
-IDD_WINPT_FIRST DIALOG DISCARDABLE  0, 0, 195, 77
+IDD_WINPT_FIRST DIALOG DISCARDABLE  0, 0, 195, 98
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
 CAPTION "WinPT First Start"
 FONT 8, "MS Sans Serif"
 BEGIN
-    GROUPBOX        "",IDC_STATIC,6,2,185,34
+    GROUPBOX        "",IDC_STATIC,6,2,185,49
     CONTROL         "&Generate a GnuPG key pair",IDC_FIRST_KEYGEN,"Button",
                     BS_AUTORADIOBUTTON,8,9,149,10
     CONTROL         "&Copy GnuPG keyrings from another location",
                     IDC_FIRST_IMPORT,"Button",BS_AUTORADIOBUTTON,8,22,176,10
-    DEFPUSHBUTTON   "&OK",IDOK,90,57,50,14
-    PUSHBUTTON      "&Cancel",IDCANCEL,142,57,50,14
+    CONTROL         "&Generate key pair on a Smart Card",IDC_FIRST_CARDGEN,
+                    "Button",BS_AUTORADIOBUTTON,8,37,164,7
+    DEFPUSHBUTTON   "&OK",IDOK,90,79,50,14
+    PUSHBUTTON      "&Cancel",IDCANCEL,142,79,50,14
 END
 
 IDD_WINPT_SIGCLASS DIALOG DISCARDABLE  0, 0, 238, 98
@@ -1165,48 +1167,48 @@
 BEGIN
     GROUPBOX        "OpenPGP card",IDC_STATIC,6,7,205,222
     LTEXT           "Application ID",IDC_STATIC,11,20,45,8
-    EDITTEXT        IDC_CEDIT_AID,61,20,145,12,ES_AUTOHSCROLL | WS_DISABLED
+    EDITTEXT        IDC_CEDIT_AID,61,20,145,12,ES_AUTOHSCROLL | ES_READONLY
     LTEXT           "Version",IDC_STATIC,11,35,24,8
     EDITTEXT        IDC_CEDIT_VERSION,61,35,57,12,ES_AUTOHSCROLL | 
-                    WS_DISABLED
+                    ES_READONLY
     LTEXT           "Serial",IDC_STATIC,124,36,18,8
     EDITTEXT        IDC_CEDIT_SERIAL,147,35,59,12,ES_AUTOHSCROLL | 
-                    WS_DISABLED
+                    ES_READONLY
     LTEXT           "Vendor",IDC_STATIC,11,50,24,8
     EDITTEXT        IDC_CEDIT_VENDOR,61,49,145,12,ES_AUTOHSCROLL | 
-                    WS_DISABLED
+                    ES_READONLY
     LTEXT           "Sig count",IDC_STATIC,11,64,31,8
     EDITTEXT        IDC_CEDIT_SIGCOUNT,61,62,56,12,ES_AUTOHSCROLL | 
-                    WS_DISABLED
+                    ES_READONLY
     LTEXT           "Sign-Fingerprint",IDC_STATIC,11,77,50,8
     LTEXT           "Static",IDC_CEDIT_SIG_FPRTIME,131,77,74,9
-    EDITTEXT        IDC_CEDIT_FPR1,11,89,195,12,ES_AUTOHSCROLL | WS_DISABLED
+    EDITTEXT        IDC_CEDIT_FPR1,11,89,195,12,ES_AUTOHSCROLL | ES_READONLY
     LTEXT           "Decrypt-Fingerprint",IDC_STATIC,11,106,60,8
     LTEXT           "Static",IDC_CEDIT_DEC_FPRTIME,131,104,74,9
     EDITTEXT        IDC_CEDIT_FPR2,11,116,195,13,ES_AUTOHSCROLL | 
-                    WS_DISABLED
+                    ES_READONLY
     LTEXT           "Authentication-Fingerprint",IDC_STATIC,11,135,81,8
     LTEXT           "Static",IDC_CEDIT_AUTH_FPRTIME,131,133,75,9
     EDITTEXT        IDC_CEDIT_FPR3,11,146,195,13,ES_AUTOHSCROLL | 
-                    WS_DISABLED
-    LTEXT           "Name",IDC_STATIC,11,164,20,8
+                    ES_READONLY
+    LTEXT           "Name",IDC_CEDIT_NAMEINF,11,164,36,8
     EDITTEXT        IDC_CEDIT_NAME,50,163,83,12,ES_AUTOHSCROLL
     EDITTEXT        IDC_CEDIT_NAME2,136,163,71,12,ES_AUTOHSCROLL
-    LTEXT           "Language",IDC_STATIC,11,181,33,8
+    LTEXT           "Language",IDC_CEDIT_LANGINF,11,181,33,8
     COMBOBOX        IDC_CEDIT_LANG,50,179,30,42,CBS_DROPDOWN | WS_VSCROLL | 
                     WS_TABSTOP
-    EDITTEXT        IDC_CEDIT_LANG2,84,179,16,12,NOT WS_VISIBLE
-    LTEXT           "Sex",IDC_STATIC,102,180,13,8
+    EDITTEXT        IDC_CEDIT_LANG2,81,179,16,12,NOT WS_VISIBLE
+    LTEXT           "Sex",IDC_CEDIT_SEXINF,100,180,22,8
     COMBOBOX        IDC_CEDIT_SEX,123,179,60,53,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
     EDITTEXT        IDC_CEDIT_SEX2,186,179,18,13,ES_AUTOHSCROLL | NOT 
                     WS_VISIBLE
-    LTEXT           "Key-URL",IDC_STATIC,11,199,30,8
+    LTEXT           "Key-URL",IDC_CEDIT_KURLINF,11,199,36,8
     EDITTEXT        IDC_CEDIT_KEYURL,50,197,148,12,ES_AUTOHSCROLL
-    LTEXT           "Login",IDC_STATIC,11,214,18,8
+    LTEXT           "Login",IDC_CEDIT_LOGINF,11,214,36,8
     EDITTEXT        IDC_CEDIT_LOGIN,50,212,105,12,ES_AUTOHSCROLL
-    PUSHBUTTON      "Change &Pin",IDC_CEDIT_CHPIN,6,233,50,15
-    PUSHBUTTON      "&New Keys",IDC_CEDIT_NEWKEYS,6,249,50,13
+    PUSHBUTTON      "Change &PIN",IDC_CEDIT_CHPIN,6,233,50,15
+    PUSHBUTTON      "&New keys",IDC_CEDIT_NEWKEYS,6,249,50,13
     DEFPUSHBUTTON   "&OK",IDOK,107,233,50,14
     PUSHBUTTON      "&Exit",IDCANCEL,161,233,50,14
 END
@@ -1254,7 +1256,7 @@
 CAPTION "Card Key Generation"
 FONT 8, "MS Sans Serif"
 BEGIN
-    LTEXT           "Pubkey algorithm",IDC_STATIC,7,8,55,8
+    LTEXT           "Pubkey algorithm",IDC_CKEYGEN_PKINF,7,8,62,8
     COMBOBOX        IDC_CKEYGEN_ALG,73,5,58,36,CBS_DROPDOWNLIST | 
                     WS_DISABLED | WS_VSCROLL | WS_TABSTOP
     LTEXT           "&Name",IDC_CKEYGEN_NAMEINF,7,23,45,8
@@ -1747,7 +1749,7 @@
         LEFTMARGIN, 2
         RIGHTMARGIN, 192
         TOPMARGIN, 2
-        BOTTOMMARGIN, 72
+        BOTTOMMARGIN, 93
     END
 
     IDD_WINPT_SIGCLASS, DIALOG

Modified: trunk/Src/WinPT.cpp
===================================================================
--- trunk/Src/WinPT.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/WinPT.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -727,6 +727,13 @@
 	    }
 	    break;
 
+	case SETUP_CARDGEN:
+	    rc = DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN,
+				 h, card_keygen_dlg_proc, 0);
+	    if (!rc)
+		goto start;
+	    break;
+
 	case 0: /* Cancel/Abort. */
 	default:
 	    DestroyWindow (hwnd);

Modified: trunk/Src/resource.h
===================================================================
--- trunk/Src/resource.h	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/resource.h	2006-08-16 10:01:30 UTC (rev 260)
@@ -663,6 +663,13 @@
 #define IDC_SHOWPHOTO_IMG               1535
 #define IDC_SIGPROPS_CREATSTR           1537
 #define IDC_SIGPROPS_CREATDATE          1538
+#define IDC_FIRST_CARDGEN               1539
+#define IDC_CKEYGEN_PKINF               1540
+#define IDC_CEDIT_NAMEINF               1541
+#define IDC_CEDIT_LANGINF               1542
+#define IDC_CEDIT_KURLINF               1543
+#define IDC_CEDIT_LOGINF                1544
+#define IDC_CEDIT_SEXINF                1545
 #define ID_GPG_ENCRYPT                  40003
 #define ID_GPG_DECRYPT                  40004
 #define ID_GPG_SIGN                     40005
@@ -857,7 +864,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        251
 #define _APS_NEXT_COMMAND_VALUE         40200
-#define _APS_NEXT_CONTROL_VALUE         1539
+#define _APS_NEXT_CONTROL_VALUE         1546
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif

Modified: trunk/Src/wptCardDlg.cpp
===================================================================
--- trunk/Src/wptCardDlg.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptCardDlg.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -1,5 +1,5 @@
 /* wptCardDlg.cpp - Smart Card support
- *	Copyright (C) 2003, 2004, 2005 Timo Schulz
+ *	Copyright (C) 2003-2006 Timo Schulz
  *	Copyright (C) 2005 g10 Code GmbH
  *
  * This file is part of WinPT.
@@ -44,16 +44,24 @@
 
 int keygen_check_date (SYSTEMTIME * st);
 
-static const char * sex[] = {"Male", "Female", "Undefined", NULL};
-static const char * lang[] = {"Undefined", "cs", "de", "en", "es", "fr", "hu",
+
+#define OPENPGP_APPID "D276000124"
+
+/* Possible values for the sex field. */
+static const char *sex[] = {"Male", "Female", "Undefined", NULL};
+
+/* Predefined languages. */
+static const char *lang[] = {"Undefined", "cs", "de", "en", "es", "fr", "hu",
 			      "it", "nl", "pt", "ro", "ru", "zh", "at", 
 			      NULL};
 
+/* PIN callback context. */
 static pin_cb_ctx_s pincb;
 
+/* Attribute table. */
 struct {
     int ctlid;
-    const char * err;
+    const char *err;
 } attr_tab[] = {
     {IDC_CEDIT_AID,    ""},
     {IDC_CEDIT_VENDOR, "No Vendor"},
@@ -68,33 +76,23 @@
 
 
 
-/* XXX: simplify code. */
-char*
-get_printable_version (const char *version)
-{
-    static char buf[16];
-    char tmp_maj[3]={0}, tmp_min[3]={0};
-
-    strncpy (tmp_maj, version, 2);
-    strncpy (tmp_min, version+2, 2);
-    sprintf (buf, "%d.%d", atoi (tmp_maj), atoi (tmp_min));
-    return buf;
-}
-
 /* Return all card attributes from @card. @n contains
    the number of items which were returned. */
 char**
 card_get_items (gpg_card_t card, int *n)
 {
+    static char printver[16];
     char **p;
 
     *n= 8;
     p = (char **)calloc (*n+1, sizeof (char*));
     if (!p)
 	BUG (0);
+    _snprintf (printver, sizeof (printver)-1, "%d.%d", 
+		card->ver[0], card->ver[1]);
     p[0] = card->aid;
     p[1] = card->vendor;
-    p[2] = get_printable_version (card->version);
+    p[2] = printver;
     p[3] = card->serial;
     p[4] = card->givenname;
     p[5] = card->surname;
@@ -105,21 +103,33 @@
 
 
 static int
-idx_from_lang (const char * _lang)
+idx_from_lang (const char *_lang)
 {
-    const char * s;
+    const char *s;
     int i;
 
     if (!_lang)
 	return 0;
     for (i=0; (s = lang[i]); i++) {
-	if (!strcmp (_lang, s ))
+	if (!strcmp (_lang, s))
 	    return i;
     }
     return 0;
 }
 
 
+static GpgCardEdit*
+create_GpgCardEdit (void)
+{
+    GpgCardEdit *ce;
+
+    ce = new GpgCardEdit ();
+    if (!ce)
+	BUG (0);
+    return ce;
+}
+
+
 /* Check if there is a card in the reader and analyze the
    returned information.
    Return value: card context or NULL on error. */
@@ -131,9 +141,7 @@
     gpg_card_t card = NULL;
     struct card_cb_s cb = {0};
     
-    ce = new GpgCardEdit ();
-    if (!ce)
-	BUG (0);
+    ce = create_GpgCardEdit ();
     memset (&cb, 0, sizeof (cb));
     ce->setCallback (card_callback, &cb);
     err = ce->getCardStatus (&card);
@@ -142,19 +150,19 @@
 	goto leave;
     }
 
-    if (!card->aid || strncmp (card->aid, "D276000124", 10)) {
+    if (!card->aid || 
+	strncmp (card->aid, OPENPGP_APPID, strlen (OPENPGP_APPID))) {
 	msg_box (NULL, winpt_strerror (WPTERR_NOPGPCARD), "WinPT", MB_ERR);
 	gpg_card_release (card);
 	card = NULL;
     }
     else {
 	struct winpt_key_s key;
+
 	memset (&key, 0, sizeof (key));
 	winpt_get_pubkey (card->fpr[1]+32, &key);
 	if (key.ext) {
 	    key.ext->card_type = m_strdup (card->card_type);
-	    if (!key.ext->card_type)
-		BUG (NULL);
 	    /* memory will be released in gpg_keycache_release (). */
 	}
     }
@@ -177,7 +185,7 @@
 	strcpy (buf, _("No Fingerprint"));
     else {
 	memset (buf, 0, sizeof (buf));
-	for( i=0, c=0; i < strlen (fpr); i++) {
+	for (i=0, c=0; i < strlen (fpr); i++) {
 	    dig[0] = fpr[i]; dig[1] = 0;
 	    strcat (buf, dig);
 	    if (++c == 4) {
@@ -197,14 +205,15 @@
 card_status (HWND dlg, gpg_card_t card)
 {
     static int fprbuf[] = {IDC_CEDIT_FPR1, IDC_CEDIT_FPR2, IDC_CEDIT_FPR3, 0};
-    static int fprtime[] = {IDC_CEDIT_SIG_FPRTIME, IDC_CEDIT_DEC_FPRTIME, IDC_CEDIT_AUTH_FPRTIME, 0};
+    static int fprtime[] = {IDC_CEDIT_SIG_FPRTIME, IDC_CEDIT_DEC_FPRTIME, 
+			    IDC_CEDIT_AUTH_FPRTIME, 0};
     const char *s;
     char **attrs;
     char cardinf[128];
     int idx=0, n=0;
 
     if (!card->aid) {
-	msg_box( dlg, _("No OpenPGP smart card detected."), "WinPT", MB_ERR );
+	msg_box (dlg, _("No OpenPGP smart card detected."), "WinPT", MB_ERR);
 	return -1;
     }
     SetDlgItemText (dlg, IDC_CEDIT_AID, card->aid);
@@ -212,15 +221,19 @@
 
     for (idx=0; fprbuf[idx]; idx++) {
 	print_fpr (dlg, fprbuf[idx], card->fpr[idx]);
-	SetDlgItemText (dlg, fprtime[idx], card->fpr_created_str[idx]);
+	s = card->fpr_created_str[idx];
+	if (!s) /* no keys on the card. */
+	    s = "";
+	SetDlgItemText (dlg, fprtime[idx], s);
     }
 
     attrs = card_get_items (card, &n);
     for (idx=1; attr_tab[idx].ctlid; idx++) {
 	s = attrs[idx];
-	SetDlgItemText (dlg, attr_tab[idx].ctlid, s && *s? s : attr_tab[idx].err);
+	SetDlgItemText (dlg, attr_tab[idx].ctlid, 
+			s && *s? s : attr_tab[idx].err);
     }
-    free (attrs);
+    safe_free (attrs);
 
     idx = idx_from_lang (card->lang);    
     SendDlgItemMessage (dlg, IDC_CEDIT_LANG, CB_SETCURSEL, (WPARAM)idx, 0);
@@ -235,9 +248,9 @@
 
     s = card->serial;
     while (s && *s == '0') s++;
-    _snprintf (cardinf, sizeof (cardinf)-1, 
-	       "Card Edit - %s serial no. %s version %s",
-	       card->card_type, s, get_printable_version (card->version));
+    _snprintf (cardinf, sizeof (cardinf)-1,
+	       "Card Edit - %s serial no. %s version %d.%d",
+	       card->card_type, s, card->ver[0], card->ver[1]);
     SetWindowText (dlg, cardinf);
 
     return 0;
@@ -265,6 +278,7 @@
 check_string (const char *str, int flags)
 {
     size_t i;
+
     for (i=0; i < strlen (str); i++) {
 	if (flags & 0x02 && !isalpha (str[i]))
 	    return -1;
@@ -327,11 +341,8 @@
 	return 0;
     }
     
-    ce = new GpgCardEdit ();
-    if (!ce)
-	BUG (NULL);
+    ce = create_GpgCardEdit ();
     ce->setAdminPIN (cb->apin);
-    /*ce->setPIN (cb->upin);*/
     for( i=0; idctl[i].id; i++ ) {
 	if( idctl[i].changed ) {
 	    GetDlgItemText( dlg, idctl[i].id, buf, sizeof (buf)-1 );
@@ -380,7 +391,7 @@
     }
     delete ce;
     return errc;
-} /* do_proc_card_cmds */
+}
 
 
 /* Cleanup pin callback @ctx. */
@@ -404,9 +415,9 @@
 do_askpin (HWND dlg, int which, gpg_card_t card,
 	   struct pin_cb_ctx_s *cb)
 {
-    const char * s, * fmt;
-    const char * n1, * n2, * serial;
-    char * p;
+    const char *s, *fmt;
+    const char *n1, *n2, *serial;
+    char *p;
     size_t n;
 
     if( (which == CARD_ADMIN_PIN && cb->apin) ||
@@ -432,16 +443,13 @@
 	if (!serial)
 	    serial = "No Serial ID";
 	n = strlen( n1 ) + strlen( n2 ) + strlen( fmt ) + strlen( serial ) + 3;
-	p = cb->info_text = new char[strlen( s )+n+1 ];
+	p = cb->info_text = new char[strlen (s)+n+1];
 	if( !p )
 	    BUG (0);
-	sprintf( p, fmt, s, n1, n2, serial );
+	sprintf (p, fmt, s, n1, n2, serial);
     }
-    else {
+    else
 	p = cb->info_text = m_strdup (s);
-	if (!p)
-	    BUG (0);
-    }
     DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_PIN, dlg,
 		    pin_cb_dlg_proc, (LPARAM)cb); 
     if (!cb->apin && !cb->upin) {
@@ -468,6 +476,15 @@
 	prepare_dialog (dlg);
 	if (card_status (dlg, card ))
 	    EndDialog (dlg, TRUE);
+	SetDlgItemText (dlg, IDC_CEDIT_NAMEINF, _("&Name"));
+	SetDlgItemText (dlg, IDC_CEDIT_LANGINF, _("&Language"));
+	SetDlgItemText (dlg, IDC_CEDIT_KURLINF, _("&Key-URL"));
+	SetDlgItemText (dlg, IDC_CEDIT_LOGINF, _("&Login"));
+	SetDlgItemText (dlg, IDC_CEDIT_SEXINF, _("&Sex"));
+	SetDlgItemText (dlg, IDOK, _("&OK"));
+	SetDlgItemText (dlg, IDCANCEL, _("&Exit"));
+	SetDlgItemText (dlg, IDC_CEDIT_NEWKEYS, _("&New keys"));
+	SetDlgItemText (dlg, IDC_CEDIT_CHPIN, _("Change &PIN"));
 	center_window (dlg, NULL);
 	SetForegroundWindow (dlg);
 	return TRUE;
@@ -478,11 +495,11 @@
 	break;
 
     case WM_COMMAND:
-	switch( HIWORD( wparam ) ) {
+	switch (HIWORD (wparam)) {
 	case CBN_KILLFOCUS:
 	case CBN_EDITCHANGE:
 	case CBN_EDITUPDATE:
-	    int ctlid = GetDlgCtrlID( (HWND)lparam );
+	    int ctlid = GetDlgCtrlID ((HWND)lparam);
 	    int dstid = 0;
 
 	    switch (ctlid) {
@@ -524,7 +541,7 @@
 	    break;
 
 	case IDCANCEL:
-	    EndDialog( dlg, FALSE );
+	    EndDialog (dlg, FALSE);
 	    break;
 	}
 	break;
@@ -567,7 +584,6 @@
 
     switch (msg) {
     case WM_INITDIALOG:
-	center_window (dlg, NULL);
 	CheckDlgButton (dlg, IDC_CKEYGEN_REPLACE, BST_CHECKED);
 	CheckDlgButton (dlg, IDC_CKEYGEN_NEVER, BST_CHECKED);
 	CheckDlgButton (dlg, IDC_CKEYGEN_BACKUP, BST_CHECKED);
@@ -575,8 +591,7 @@
 	SendDlgItemMessage (dlg, IDC_CKEYGEN_ALG, CB_ADDSTRING, 0, 
 			    (LPARAM)(const char*)"RSA");
 	SendDlgItemMessage (dlg, IDC_CKEYGEN_ALG, CB_SETCURSEL, 0, 0);
-	SetFocus (GetDlgItem (dlg, IDC_CKEYGEN_NAME));
-	SetForegroundWindow (dlg);
+	SetDlgItemText (dlg, IDC_CKEYGEN_PKINF, _("Pubkey algorithm"));
 	SetDlgItemText (dlg, IDC_CKEYGEN_NAMEINF, _("&Name"));
 	SetDlgItemText (dlg, IDC_CKEYGEN_CMTINF, _("&Comment (optional)"));
 	SetDlgItemText (dlg, IDC_CKEYGEN_EXPDATEINF, _("&Expire date"));
@@ -586,13 +601,11 @@
 	SetDlgItemText (dlg, IDC_CKEYGEN_REPLACE, _("Overwrite old keys on the card"));
 	SetDlgItemText (dlg, IDC_CKEYGEN_BACKUP, _("Make off-card backup of encryption key"));
 	SetWindowText (dlg, _("Card Key Generation"));
+	center_window (dlg, NULL);
+	SetForegroundWindow (dlg);
+	SetFocus (GetDlgItem (dlg, IDC_CKEYGEN_NAME));
 	return FALSE;
 
-    case WM_SYSCOMMAND:
-	if (LOWORD (wparam) == SC_CLOSE)
-	    EndDialog (dlg, TRUE);
-	return FALSE;
-
     case WM_COMMAND:
 	if (HIWORD (wparam) == BN_CLICKED &&
 	    (LOWORD (wparam) == IDC_CKEYGEN_BACKUP) ||
@@ -624,14 +637,15 @@
 	    }
 	    GetDlgItemText (dlg, IDC_CKEYGEN_NAME, name, sizeof (name)-1);
 	    GetDlgItemText (dlg, IDC_CKEYGEN_EMAIL, email, sizeof (email)-1);
-	    if (!strchr (email, '@') || n < 3) {
+	    if (check_email_address (email) || n < 3) {
 		msg_box (dlg, _("Please enter a valid e-mail address."),
 		         _("Card Edit"), MB_ERR);
 		return TRUE;
 	    }
 	    n = GetDlgItemText (dlg, IDC_CKEYGEN_PASS, pass, sizeof (pass)-1);
 	    if (!n && IsDlgButtonChecked (dlg, IDC_CKEYGEN_BACKUP)) {
-		msg_box (dlg, _("Please enter an off-card passphrase."), _("Card Edit"), MB_ERR);
+		msg_box (dlg, _("Please enter an off-card passphrase."), 
+			 _("Card Edit"), MB_ERR);
 		return TRUE;
 	    }
 	    n = item_get_text_length (dlg, IDC_CKEYGEN_COMMENT);
@@ -651,13 +665,12 @@
 		free_pincb (&pincb);
 		return TRUE;
 	    }
-	    ce = new GpgCardEdit ();
-	    if (!ce)
-		BUG (0);
-	    
+	    ce = create_GpgCardEdit ();
+
 	    expires = !IsDlgButtonChecked (dlg, IDC_CKEYGEN_NEVER);
 	    if (expires) {
 		SYSTEMTIME st, ct;
+
 		DateTime_GetSystemtime (GetDlgItem (dlg, IDC_CKEYGEN_VALID), &st);
 		if (!keygen_check_date (&st)) {
 		    msg_box (dlg, _("The date you have chosen has already passed."),
@@ -682,7 +695,6 @@
 	    SetCursor (LoadCursor (NULL, IDC_WAIT));
 	    err = ce->genKey (card_flags, name, email, n? comment: NULL,
 			      expires? valid : 0, NULL);
-	    
 	    SetCursor (LoadCursor (NULL, IDC_ARROW));
 	    
 	    if (gpgme_err_code (err) == GPG_ERR_CANCELED)
@@ -700,11 +712,12 @@
 	    wipememory (pass, sizeof (pass));
 	    free_pincb (&pincb);
 	    delete ce;
+	    EndDialog (dlg, TRUE);
 	    return TRUE;
 
 	case IDCANCEL:
 	    EndDialog (dlg, FALSE);
-	    return FALSE;
+	    return TRUE;
 	}
 	break;
     }
@@ -801,9 +814,7 @@
 		return TRUE;
 	    }
 
-	    ce = new GpgCardEdit ();
-	    if (!ce)
-		BUG (0);
+	    ce = create_GpgCardEdit ();
 	    if (which == CARD_ADMIN_PIN)
 		ce->setAdminPIN (pold);
 	    else

Modified: trunk/Src/wptCardEdit.cpp
===================================================================
--- trunk/Src/wptCardEdit.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptCardEdit.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -25,11 +25,12 @@
 #include <windows.h>
 #include <time.h>
 
-#include "gpgme.h"
+#include "wptGPG.h"
 #include "wptCard.h"
 #include "wptCardEdit.h"
-#include "wptGPG.h"
 #include "wptErrors.h"
+#include "wptTypes.h"
+#include "wptW32API.h"
 
 /* Create a new Smartcard context. */
 static gpgme_error_t
@@ -56,59 +57,63 @@
 
     if (!card)
 	return;
-    if (card->aid)
-	free (card->aid);   
-    if (card->version)
-	free (card->version);
-    if (card->lang)
-	free (card->lang);
-    if (card->login)
-	free (card->login);
-    for (i=0; i < 3; i++) {
-	if (card->fpr[i])
-	    free (card->fpr[i]);
-	if (card->ca_fpr[i])
-	    free (card->ca_fpr[i]);
-	if (card->fpr_created_str[i])
-	    free (card->fpr_created_str[i]);
+    safe_free (card->aid);
+    safe_free (card->version);
+    safe_free (card->lang);
+    safe_free (card->login);
+    for (i=0; i < N_CARD_FPR; i++) {
+	safe_free (card->fpr[i]);	
+	safe_free (card->ca_fpr[i]);
+	safe_free (card->fpr_created_str[i]);
     }
-    if (card->surname)
-	free (card->surname);
-    if (card->givenname)
-	free (card->givenname);
-    if (card->serial)
-	free (card->serial);
-    if (card->vendor)
-	free (card->vendor);
-    if (card->url)
-	free (card->url);
-    if (card->card_type)
-	free (card->card_type);
-    free (card);
+    safe_free (card->surname);
+    safe_free (card->givenname);
+    safe_free (card->serial);
+    safe_free (card->vendor);
+    safe_free (card->url);
+    safe_free (card->card_type);
+    safe_free (card);
 
 }
 
 
 /* Parse the timestamp @long_ts and return a string
-   representation of it (format: YYYY-DD-MM HH:MM:SS). */
+   representation of it (format: depens on locale setting). */
 static char*
 get_str_timestamp (long long_ts)
 {
-    struct tm *tm;
-    char *p, *fmt;
+    char timebuf[64];
+    const char *dat;
 
-    tm = localtime (&long_ts);
-    fmt = "%04d-%02d-%02d %02d:%02d:%02d";
-    p = (char*)calloc (1, strlen (fmt)+32);
-    if (!p)
-	abort ();
-    sprintf (p, fmt,
-	     tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
-	     tm->tm_hour, tm->tm_min, tm->tm_sec);
-    return p;
+    if (long_ts < 1)
+	return strdup ("");
+    dat = get_locale_date (long_ts, timebuf, sizeof (timebuf)-1);
+    if (!dat)
+	return strdup ("");
+
+    return strdup (dat);
 }
 
 
+/* Parse the card version AABB => 0100 */
+static void
+parse_version (gpg_card_t card, const char *ver)
+{
+    char buf[6];
+
+    if (strlen (ver) != 4)
+	return;
+    buf[0] = *ver++;
+    buf[1] = *ver++;
+    buf[2] = 0;
+    buf[3] = *ver++;
+    buf[4] = *ver++;
+    buf[5] = 0;
+    card->ver[0] = atoi (buf);
+    card->ver[1] = atoi (buf+3);
+}
+
+
 /* Colon handler for parsing the GPG card colon output. */
 static gpgme_error_t
 statuscard_colon_handler (gpg_card_t card, char * line)
@@ -194,6 +199,7 @@
 		card->version = strdup (p);
 		if (!card->version)
 		    return gpg_error (GPG_ERR_ENOMEM);
+		parse_version (card, p);
 	    }
 	    break;
 
@@ -277,7 +283,7 @@
 	    break;
 
 	case CARD_Fpr:
-	    if (field > 4 || field == 1) /* max 3 fprs */
+	    if (field > 4 || field == 1) /* max N_CARD_FPR=3 fprs */
 		break;
 	    card->fpr[field-2] = strdup (p);
 	    if (!card->fpr[field-2])
@@ -288,13 +294,15 @@
 	    if (field > 4 || field == 1)
 		break;
 	    card->fpr_created[field-2] = strtoul (p, NULL, 10);
-	    card->fpr_created_str[field-2] = get_str_timestamp (strtoul (p, NULL, 10));
-	    if (!card->fpr_created_str[field-2])
-		return gpg_error (GPG_ERR_ENOMEM);
+	    if (card->fpr_created[field-2] > 0)
+		card->fpr_created_str[field-2] = get_str_timestamp (strtoul (p, NULL, 10));
+	    else
+		card->fpr_created_str[field-2] = NULL;
 	    break;
-	    
+
 	default:
 	    break;
+
 	}
     }
     return 0;
@@ -408,7 +416,7 @@
 
 /* Set the callback to @cb and the hook value to @cb_value. */
 void
-GpgCardEdit::setCallback (const char* (*_cb)(int code, void *opaque),
+GpgCardEdit::setCallback (const char* (*_cb)(int code, void *opaque), 
 			  void *_cb_value)
 {
     this->cb_value = _cb_value;
@@ -628,10 +636,12 @@
 gpgme_error_t
 GpgCardEdit::fetchKey (void)
 {
+    gpgme_error_t err = 0;
+
     if (!this->pin)
 	return gpg_error (GPG_ERR_INV_OBJ);
 
-    return 0;
+    return err;
 }
 
 

Modified: trunk/Src/wptCardEditCB.cpp
===================================================================
--- trunk/Src/wptCardEditCB.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptCardEditCB.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -18,13 +18,13 @@
  * along with this program; if not, gpg_write to the Free Software Foundation, 
  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
  */
+
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
 
 #include <windows.h>
 #include <stdio.h>
-#include <malloc.h>
 #include <string.h>
 #include <stdlib.h>
 
@@ -36,6 +36,7 @@
 #define save_write(val) ((val)? (val) : "")
 static const char *stat_key = "";
 
+
 /* Wrapper to emulate write(). */
 static int
 gpg_write (int fd, const void *buf, size_t buflen)
@@ -43,11 +44,15 @@
     HANDLE hd = (HANDLE)fd;
     DWORD n;
 
-    #if 0 /* debug */
+    /*
+    #ifdef _DEBUG
     MessageBox (NULL, (const char*)buf, stat_key, MB_OK);
     #endif
-    WriteFile (hd, buf, buflen, &n, NULL);
-    WriteFile (hd, "\n", 1, &n, NULL);
+    */
+    if (!WriteFile (hd, buf, buflen, &n, NULL))
+	log_debug ("card gpg_write failed ec=%d\r\n", (int)GetLastError ());
+    if (!WriteFile (hd, "\n", 1, &n, NULL))
+	log_debug ("card gpg_write failed ec=%d\r\n", (int)GetLastError ());
     return n;
 }
 
@@ -80,6 +85,7 @@
 	    c->setResult (GPG_CARDRES_CANCEL);
 	s = "quit\n";
 	gpg_write (fd, s, strlen (s));
+	/* XXX: do we need c->reset()? */
 	return 0;
     }
     return 0;

Modified: trunk/Src/wptClipEncryptDlg.cpp
===================================================================
--- trunk/Src/wptClipEncryptDlg.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptClipEncryptDlg.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -148,8 +148,8 @@
     gpgme_ctx_t ctx=NULL;
     gpgme_error_t err;
     char tmpbuf[64];
-    int force_trust = 0;
-    int n;
+    size_t n;
+    int force_trust = 0;    
     
     switch (msg) {
     case WM_INITDIALOG:

Modified: trunk/Src/wptClipSignEncDlg.cpp
===================================================================
--- trunk/Src/wptClipSignEncDlg.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptClipSignEncDlg.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -103,8 +103,8 @@
     gpgme_ctx_t ctx;
     passphrase_cb_s pwd;
     char *signer = NULL;
+    size_t n;
     int force_trust = 0;
-    int n;
     
     switch (msg) {
     case WM_INITDIALOG:

Modified: trunk/Src/wptFileManager.cpp
===================================================================
--- trunk/Src/wptFileManager.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptFileManager.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -54,7 +54,7 @@
 void progress_cleanup (progress_filter_s *pfx);
 BOOL CALLBACK file_secdel_confirm_dlg_proc (HWND dlg, UINT msg, 
 					    WPARAM wparam, LPARAM lparam);
-char* gpg_keylist_to_pattern (gpgme_key_t *rset, int n);
+char* gpg_keylist_to_pattern (gpgme_key_t *rset, size_t n);
 gpgme_error_t sym_passphrase_cb (void *hook, const char *hint, const char *pass_inf,
 			         int prev_was_bad, int fd);
 void verify_show_signature_state (gpgme_signature_t sig);
@@ -1577,7 +1577,7 @@
            this case */
     fm_state_new (&ctx);
     i = listview_get_curr_pos (lv);
-    if (i= -1) {
+    if (i == -1) {
 	verify_pasted (lv, ctx, dat, i, dlg);
 	fnd = 1;
     }

Modified: trunk/Src/wptFirstRunDlg.cpp
===================================================================
--- trunk/Src/wptFirstRunDlg.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptFirstRunDlg.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -57,6 +57,8 @@
 		choice = SETUP_KEYGEN;
 	    else if (IsDlgButtonChecked (dlg, IDC_FIRST_IMPORT))
 		choice = SETUP_IMPORT;
+	    else if (IsDlgButtonChecked (dlg, IDC_FIRST_CARDGEN))
+		choice = SETUP_CARDGEN;
 	    else
 		choice = 0;
 	    EndDialog (dlg, choice);

Modified: trunk/Src/wptGPGME.cpp
===================================================================
--- trunk/Src/wptGPGME.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptGPGME.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -256,9 +256,13 @@
 static int
 sigsum_to_index (gpgme_sigsum_t sum)
 {
+    /* xxx: gpgme should set _valid if the sig is good but the 
+	    key has been expired; check the code */
+    if ((sum & GPGME_SIGSUM_VALID) && (sum & GPGME_SIGSUM_SIG_EXPIRED))
+	return 8;
     if ((sum & GPGME_SIGSUM_VALID) && (sum & GPGME_SIGSUM_KEY_REVOKED))
 	return 7;
-    if ((sum & GPGME_SIGSUM_VALID) && (sum & GPGME_SIGSUM_SIG_EXPIRED))
+    if ((sum & GPGME_SIGSUM_VALID) && (sum & GPGME_SIGSUM_KEY_EXPIRED))
 	return 6;
     if (sum & GPGME_SIGSUM_GREEN)
 	return 1;
@@ -281,16 +285,18 @@
 	_("The signature could not be checked due to a missing key"),
 	_("No valid OpenPGP signature"),
 	_("Signature Error"),
-	_("Good Signature (Expired Key)"),
-	_("Good Signature (Revoked Key)"),
+	_("Good signature (Expired Key)"),
+	_("Good signature (Revoked Key)"),
+	_("Good signature (Expired)"),
 	NULL
     };
-    const unsigned int mask = 8;
+    const unsigned int mask = 9;
 
     return gpg_sigstat[sigsum_to_index (sum) % mask];
 }
 
 
+/* Return true if at least one secret key is available. */
 bool
 secret_key_available (void)
 {

Modified: trunk/Src/wptGPGMEWrapper.cpp
===================================================================
--- trunk/Src/wptGPGMEWrapper.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptGPGMEWrapper.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -66,6 +66,57 @@
     return gpgme_get_armor (ctx)? true: false;
 }
 
+
+/* Import the keys from the clipboard.
+   Return value: 0 on success. */
+gpgme_error_t
+GPGME::importFromClipboard (void)
+{    
+    gpgme_data_t keydata = NULL;
+    gpgme_error_t err;
+
+    err = gpg_data_new_from_clipboard (&keydata, 0);
+    if (err)
+	return err;
+
+    op_begin ();
+    err = gpgme_op_import (ctx, keydata);
+    op_end ();
+
+    gpgme_data_release (keydata);
+    return err;
+}
+
+
+/* Import the keys from the file @file.
+   Return value: 0 on success. */
+gpgme_error_t
+GPGME::importFromFile (const char *file)
+{
+    gpgme_data_t keydata;
+    gpgme_error_t err;
+
+    err = gpgme_data_new_from_file (&keydata, file, 1);
+    if (err)
+	return err;
+    
+    op_begin ();
+    err = gpgme_op_import (ctx, keydata);
+    op_end ();
+
+    gpgme_data_release (keydata);
+    return err;
+}
+
+
+/* Return the import result for the last GPG operation. */
+gpgme_import_result_t
+GPGME::importGetResult (void)
+{
+    return gpgme_op_import_result (ctx);
+}
+
+
 /* Export key pattern @patt to file @outfile.
    Return value: 0 on success. */
 gpgme_error_t

Modified: trunk/Src/wptHTTP.cpp
===================================================================
--- trunk/Src/wptHTTP.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptHTTP.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -33,7 +33,6 @@
 #include "wptTypes.h"
 #include "wptErrors.h"
 
-#define free_if_malloc(buf) if ((buf)) { free ((buf)); (buf) = NULL; }
 
 /* Empty constructur to allow advanced requests. */
 wHTTP::wHTTP (void)
@@ -85,8 +84,8 @@
 int
 wHTTP::head (const char *_url)
 {
-    free_if_malloc (host);
-    free_if_malloc (url);
+    safe_free (host);
+    safe_free (url);
 
     extractHostInfo (_url, &this->host, &this->url);
     method = HTTP_HEAD;
@@ -102,8 +101,8 @@
 int
 wHTTP::get (const char *_url)
 {
-    free_if_malloc (host);
-    free_if_alloc (url);
+    safe_free (host);
+    safe_free (url);
 
     extractHostInfo (_url, &this->host, &this->url);
 
@@ -278,8 +277,10 @@
             break;
         }
 	n = recv (fd, &c, 1, 0);
-	if (n == -1)
+	if (n == -1) {
+	    this->error = (int)WSAGetLastError ();
 	    break;
+	}
 	if (n == 0 || nbuf == 0 || c == '\n') {
 	    if (n == 0) {
                 if (eof)
@@ -330,7 +331,7 @@
     *_host = strdup (p);
     p = strchr (_url, '/');
     if (!p) {
-	free_if_malloc (*_host);
+	safe_free (*_host);
         return WPTERR_GENERAL;
     }
     *new_url = strdup (p);
@@ -348,7 +349,7 @@
     p = (char*) malloc (strlen (name)+strlen (val)+strlen (fmt)+4);
     sprintf (p, fmt, name, val);
     addHeader (&req_headers, p);
-    free_if_malloc (p);
+    safe_free (p);
 
     return 0;
 }
@@ -416,7 +417,7 @@
     }
     strcat (p, "\r\n");
     n = send (fd, p, strlen (p), 0);
-    free_if_malloc (p);
+    safe_free (p);
     return n > 0? 0 : WPTERR_GENERAL;
 }
 
@@ -469,8 +470,10 @@
     if (strnicmp (val, "text", 4)) { /* binary */
 	do {
 	    n = recv (fd, buf, nlen > 1024? 1024 : nlen, 0);
-	    if (n == -1)
+	    if (n == -1) {
+		this->error = (int)WSAGetLastError ();
 		return SOCKET_ERROR;
+	    }
 	    if (n == 0)
 		break;
 	    nlen -= n;
@@ -480,7 +483,7 @@
     }
 
     do {
-	rc = readLine (buf, 1024, 1, &n, &eof);
+	rc = readLine (buf, sizeof (buf)-1, 1, &n, &eof);
 	if (rc)
 	    return rc;
 	if (n > 0)
@@ -555,8 +558,8 @@
 	free (req_headers);
 	req_headers = h;
     }
-    free_if_malloc (url);
-    free_if_malloc (host);
+    safe_free (url);
+    safe_free (host);
     if (fd != 0) {
 	closesocket (fd);
 	fd = 0;
@@ -603,7 +606,7 @@
 }
 
 
-/* Return the winsock specific error code. */
+/* Return the Winsock specific error code. */
 int wHTTP::getErrorCode (void)
 {
     return error;

Modified: trunk/Src/wptKeyCache.cpp
===================================================================
--- trunk/Src/wptKeyCache.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptKeyCache.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -835,19 +835,21 @@
 key_divert_to_card (gpgme_key_t key)
 {
     gpgme_subkey_t k;
-    int n=0, n_alg=0;
+    int n=0;
     int can_auth = 0, can_encr = 0;
 
     for (k = key->subkeys; k; k = k->next) {
 	n++;
-	if (k->pubkey_algo == GPGME_PK_RSA && k->length == 1024)
-	    n_alg++;
+	if (k->pubkey_algo != GPGME_PK_RSA || k->length != 1024) {
+	    return 0;
+	    break;
+	}
 	if (k->can_authenticate)
 	    can_auth++;
 	if (k->can_encrypt)
 	    can_encr++;
     }
-    if (n == 3 && n_alg == 3 && can_auth == 1 && can_encr == 1)
+    if (n >= 3 && can_auth >= 1 && can_encr >= 1)
 	return 1;
     return 0;
 }

Modified: trunk/Src/wptKeyEdit.cpp
===================================================================
--- trunk/Src/wptKeyEdit.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptKeyEdit.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -437,6 +437,14 @@
     this->pass = _pass;
 }
 
+
+/* Kludge to allow to handle admin and user PINs. */
+void
+GpgKeyEdit::setPassphrase2 (const char *_pass2)
+{
+    this->new_pass = _pass2;
+}
+
 /* Set the current key to @key. */
 void 
 GpgKeyEdit::setKey (gpgme_key_t _key)
@@ -613,6 +621,25 @@
     return gpg_editkey (this->ctx, this->key, this);
 }
 
+
+/* Add a new key on a smart card. 
+   The type is given in @type. */
+gpgme_error_t 
+GpgKeyEdit::addCardKey (int _type)
+{
+    if (!this->key)
+	return gpg_error (GPG_ERR_INV_OBJ);
+    if (!this->pass)
+	return gpg_error (GPG_ERR_INV_PASSPHRASE);
+    if (_type < 1 || _type > 3)
+	return gpg_error (GPG_ERR_INV_VALUE);
+
+    type = GPG_EDITKEY_ADDCARDKEY;
+    this->key_index = _type;
+    return gpg_editkey (this->ctx, this->key, this);
+}
+
+
 /* Add a new subkey to the given key.
    The new key will have @pubkey_algo as the algorithm
    and a size of @pubkey_size bits. If valid > 0, the

Modified: trunk/Src/wptKeyEditCB.cpp
===================================================================
--- trunk/Src/wptKeyEditCB.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptKeyEditCB.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -43,6 +43,7 @@
 
 typedef gpgme_status_code_t status_code_t;
 
+
 /* 'notation' command handler. */
 static const char*
 cmd_notation_handler (GpgKeyEdit *ctx, status_code_t code, const char *key)
@@ -298,9 +299,44 @@
 }
 
 
+/* 'addcardkey' command handler. */
+static const char*
+cmd_addcardkey_handler (GpgKeyEdit *ctx, status_code_t code, const char *key)
+{
+    static char buf[32];
+
+    /* XXX: actually we mix up things here, it would be better to
+	    implement this in CardEditCB but because the edit-key
+	    interface is used, we have to implement it here. */
+    if (!ctx->cmd_sent && !strcmp (key, "keyedit.prompt")) {
+	ctx->cmd_sent = 1;
+	return "addcardkey";
+    }
+    if (!strcmp (key, "cardedit.genkeys.subkeytype")) {
+	sprintf (buf, "%d", ctx->getKeyIndex ());
+	return buf;
+    }
+    if (!strcmp (key, "cardedit.genkeys.replace_key"))
+	return "Y"; /* better issue an extra warning? */
+    if (!strcmp (key, "passphrase.adminpin.ask"))
+	return ctx->pass;
+    if (!strcmp (key, "passphrase.pin.ask"))
+	return ctx->new_pass;
+    if (!strcmp (key, "keygen.valid")) {
+	sprintf (buf, "%d", ctx->getValidDays ());
+	return buf;
+    }
+    if (!strcmp (key, "keyedit.prompt")) {
+	ctx->reset ();
+	return "save";
+    }
+    return NULL;
+}
+
+
 /* 'addkey' command handler. */
 static const char*
-cmd_addkey_handler (GpgKeyEdit *ctx, gpgme_status_code_t code, const char *key)
+cmd_addkey_handler (GpgKeyEdit *ctx, status_code_t code, const char *key)
 {
     static char buf[64];
 
@@ -360,35 +396,29 @@
 
 
 static const char*
-cmd_setpref_handler (GpgKeyEdit *ctx, gpgme_status_code_t code, const char * key)
+cmd_setpref_handler (GpgKeyEdit *ctx, gpgme_status_code_t code, const char *key)
 {
     static char buf[128] = {0};
 
-    /* XXX: check the code. */
-#if 0
-    if (!ctx->cmd_sent && !strcmp (key, "keyedit.prompt")) {
+    if (!strcmp (key, "keyedit.prompt") && !ctx->cmd_sent) {
+	_snprintf (buf, sizeof (buf)-1, "uid %d", ctx->getUseridIndex ());
 	ctx->cmd_sent = 1;
-	return "";
+	ctx->cnt = 1;
+	return buf;
     }
-    if (!strcmp (key, "keyedit.prompt") && ctx->u.pref.id == 0) {
-	ctx->u.pref.id++;
-	_snprintf (buf, sizeof buf-1, "setpref %s", ctx->u.pref.new_prefs);
+    if (!strcmp (key, "keyedit.prompt") && ctx->cnt == 1) {
+	_snprintf (buf, sizeof buf-1, "setpref %s", ctx->new_prefs);
+	ctx->cnt = 2;
 	return buf;
     }
-    if (!strcmp (key, "keyedit.prompt") && ctx->u.pref.id == 1) {
-	ctx->u.pref.id++;
-	return "updpref";
-    }
-    if (!strcmp (key, "keyedit.updpref.okay"))
+    if (!strcmp (key, "keyedit.setpref.okay"))
 	return "Y";
     if (!strcmp (key, "passphrase.enter"))
-	return ctx->u.pref.passwd;
-    if (!strcmp (key, "keyedit.prompt") && ctx->u.pref.id == 2) {
-	ctx->u.pref.id = 0;
+	return ctx->pass;
+    if (!strcmp (key, "keyedit.prompt") && ctx->cnt == 2) {
 	ctx->reset ();
 	return "save";
     }
-#endif
     return buf;
 }
 
@@ -399,7 +429,7 @@
 		     const char *key)
 {
     static char buf[64];
-
+    
     if (ctx->cnt == 0 && !strcmp (key, "keyedit.prompt")) {
 	sprintf (buf, "uid %d", ctx->getUseridIndex ());
 	ctx->cnt = 1;
@@ -765,7 +795,7 @@
 	break;
         
     case GPG_EDITKEY_DELSIG:
-	out =  cmd_delsig_handler (ke, code, key);
+	out = cmd_delsig_handler (ke, code, key);
 	break;
 
     case GPG_EDITKEY_DELKEY:
@@ -773,8 +803,12 @@
 	break;
         
     case GPG_EDITKEY_ADDKEY:
-        out =  cmd_addkey_handler (ke, code, key);
+        out = cmd_addkey_handler (ke, code, key);
 	break;
+
+    case GPG_EDITKEY_ADDCARDKEY:
+	out = cmd_addcardkey_handler (ke, code, key);
+	break;
         
     case GPG_EDITKEY_PASSWD:
         out =  cmd_passwd_handler (ke, code, key);

Modified: trunk/Src/wptKeyManager.cpp
===================================================================
--- trunk/Src/wptKeyManager.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptKeyManager.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -247,10 +247,10 @@
 /* Create a string that contain all keyids from
    the key list @rset separated by a space. */
 char*
-gpg_keylist_to_pattern (gpgme_key_t *rset, int n)
+gpg_keylist_to_pattern (gpgme_key_t *rset, size_t n)
 {
     char *p;
-    int i;
+    size_t i;
 
     if (!n)
 	return NULL;
@@ -274,7 +274,7 @@
     GPGME *ctx;
     char *patt=NULL;
     char buf[256];
-    int n=0;
+    size_t n=0;
     int rc=0;
     
     rset = keylist_enum_recipients (lv, KEYLIST_LIST, &n);
@@ -318,7 +318,7 @@
 {
     gpgme_key_t *rset;
     gpgme_error_t err;
-    int n = 0;
+    size_t n = 0;
 
     rset = keylist_enum_recipients (lv, KEYLIST_LIST, &n);
     if (!n) {
@@ -340,7 +340,7 @@
 	log_box (_("Key Manager"), MB_OK,
 		 _("Secret key successfully saved in '%s'."), fname);
 
-    free (rset);
+    safe_free (rset);
     return err? WPTERR_GENERAL : 0;
 }
 
@@ -353,7 +353,7 @@
     gpgme_key_t *rset;
     gpgme_error_t err;
     char *patt;
-    int n;
+    size_t n;
 
     rset = keylist_enum_recipients (lv, KEYLIST_LIST, &n);
     if (!n) {
@@ -402,29 +402,13 @@
 }
 
 
-/* Import the PGP key data from the clipboard.
-   Return value: 0 on success. */
-static gpgme_error_t
-gpg_op_clip_import (gpgme_ctx_t ctx)
-{
-    gpgme_error_t err = 0;
-    gpgme_data_t keydata = NULL;
-    
-    err = gpg_data_new_from_clipboard (&keydata, 0);
-    if (!err)
-	err = gpgme_op_import (ctx, keydata);
-
-    gpgme_data_release (keydata);
-    return err;
-}
-
 /* Import keys from the clipboard. */
 int
 km_clip_import (HWND dlg, int *r_newkeys, int *r_newsks)
 {
-    gpgme_error_t err;
-    gpgme_ctx_t ctx = NULL;
+    gpgme_error_t err;   
     gpgme_import_result_t res;
+    GPGME *gpg = NULL;
     fm_state_s fm_stat;
     int pgptype;
     int id, has_data = 0;
@@ -468,18 +452,14 @@
     if (!has_data)
 	goto leave;
 
-    err = gpgme_new (&ctx);	    
-    if (err)
-	BUG (NULL);
-    op_begin ();
-    err = gpg_op_clip_import (ctx);
-    op_end ();
+    gpg = new GPGME ();
+    err = gpg->importFromClipboard ();
     if (err) {
 	msg_box (dlg, gpgme_strerror (err), _("Import"), MB_ERR);
 	goto leave;
     }
 
-    res = gpgme_op_import_result (ctx);
+    res = gpg->importGetResult ();
     print_import_status (res);
     new_keys = res->considered - res->unchanged;
     new_sks = res->secret_imported - res->secret_unchanged;
@@ -490,8 +470,8 @@
     }
 
 leave:
-    if (ctx)
-	gpgme_release (ctx);
+    if (gpg)
+	delete gpg;
     free_if_alloc (fm_stat.opaque);
     if (r_newkeys)
 	*r_newkeys = new_keys;
@@ -509,7 +489,7 @@
 {
     FILE *fp;
     wHTTP *hd;
-    char tmpfile[500];
+    char tmpfile[MAX_PATH+64];
     int rc = 0;
 
     if (strncmp (url, "http://", 7)) {
@@ -548,12 +528,11 @@
    On success an import statistics dialog is shown. */
 int
 km_file_import (HWND dlg, const char *fname, int *r_newkeys, int *r_newsks)
-{
-    gpgme_data_t keydata = NULL;
-    gpgme_ctx_t ctx;
-    gpgme_error_t err;    
-    fm_state_s fm_stat;
+{    
+    gpgme_error_t err;
     gpgme_import_result_t res;
+    GPGME *gpg;
+    fm_state_s fm_stat;    
     const char *name;
     int no_data = 0;
     int new_keys = 0, new_sks = 0;
@@ -578,25 +557,14 @@
         return WPTERR_GENERAL;
     }
     
-    err = gpgme_new (&ctx);
-    if (err)
-	BUG (NULL);
-    err = gpgme_data_new_from_file (&keydata, name, 1);
+    gpg = new GPGME ();
+    err = gpg->importFromFile (name);
     if (err) {
-        msg_box (dlg, _("Could not read key-data from file."), 
-		 _("Key Manager"), MB_ERR);
-        goto leave;
+	msg_box (dlg, gpgme_strerror (err), _("Import"), MB_ERR);
+	goto leave;
     }
-    
-    op_begin ();
-    err = gpgme_op_import (ctx, keydata);
-    op_end ();
-    if (err) {
-        msg_box (dlg, gpgme_strerror (err), _("Key Manager"), MB_ERR);
-        goto leave;
-    }    
 
-    res = gpgme_op_import_result (ctx);
+    res = gpg->importGetResult ();
     if (res->unchanged == res->considered &&
 	res->secret_unchanged == res->secret_imported)
 	no_data = 1;
@@ -607,9 +575,6 @@
     if (res->secret_imported == 0 && fm_stat.import.has_seckey == 1)
 	res->secret_imported = 1;
 
-    /* XXX: if we import a key pair but the secret key comes first,
-            no_{valid}_user_id is 1 even so the public key, which comes
-	    later is valid and self-signed. */
     print_import_status (res);
     if (res->no_user_id > 0) {
 	msg_box (dlg, _("Key without a self signature was dectected!\n"
@@ -618,8 +583,7 @@
     }
 
 leave:
-    gpgme_data_release (keydata);
-    gpgme_release (ctx);
+    delete gpg;
     free_if_alloc (fm_stat.opaque);
     if (r_newkeys)
 	*r_newkeys = new_keys;

Modified: trunk/Src/wptKeylist.cpp
===================================================================
--- trunk/Src/wptKeylist.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptKeylist.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -1001,12 +1001,13 @@
    fully trusted. @r_count returns the number of selected keys.
    Return value: the key list on success, NULL otherwise. */
 gpgme_key_t*
-keylist_get_recipients (listview_ctrl_t lv, int *r_force_trust, int *r_count)
+keylist_get_recipients (listview_ctrl_t lv, int *r_force_trust, size_t *r_count)
 {
     key_array_s *ka = NULL;
     keycache_s *c;
     gpgme_key_t *keybuf, key;
-    int count = 0, force_trust = 0;
+    size_t count = 0;
+    int force_trust = 0;
     int n, j, ka_pos = 0, rc = 0;
     int k_pos=0;
 
@@ -1081,12 +1082,13 @@
 
 
 gpgme_key_t*
-keylist_enum_recipients (listview_ctrl_t lv,  int listype, int *r_count)
+keylist_enum_recipients (listview_ctrl_t lv,  int listype, size_t *r_count)
 {
     struct keycache_s *c;
     gpgme_key_t *rset;
     gpgme_key_t key;
-    int i, n, id, k_pos=0;
+    size_t k_pos = 0;
+    int i, n, id;
 
     n = listview_count_items (lv, 0);
     if (!n)

Modified: trunk/Src/wptPassphraseCB.cpp
===================================================================
--- trunk/Src/wptPassphraseCB.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptPassphraseCB.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -328,8 +328,9 @@
     p = strchr (id, '/');
     if (!p) {
 	log_debug ("extract_serial_no: error '%s'\r\n", id);
-	return NULL;
+	return "";
     }
+    memset (buf, 0, sizeof (buf));
     strncpy (buf, id+(p-id)-6, 6);
     return buf;
 }

Modified: trunk/Src/wptUtil.cpp
===================================================================
--- trunk/Src/wptUtil.cpp	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/Src/wptUtil.cpp	2006-08-16 10:01:30 UTC (rev 260)
@@ -119,11 +119,11 @@
 check_email_address (const char *email)
 {
     const char *allowed = "@._-%+;";
-    size_t i;
+    size_t i, len = strlen (email);
 
-    if (!strchr (email, '@'))
+    if (len < 3 || !strchr (email, '@'))
 	return -1;
-    for (i=0; i < strlen (email); i++) {
+    for (i=0; i < len; i++) {
 	if (isxdigit (email[i]) || isalpha (email[i])
 	    || strchr (allowed, email[i]))
 	    continue;

Modified: trunk/THANKS
===================================================================
--- trunk/THANKS	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/THANKS	2006-08-16 10:01:30 UTC (rev 260)
@@ -13,8 +13,12 @@
 Kurt Fitzner for continuing the work on MyGPGME and for all his
 suggestions and bug reports he sent to me.
 
-Intevation for providing the nice GForge environment and webspace.
+Achim Pietig for sponsoring OpenPGP cards and smart card related
+hardware.
 
+Intevation for providing the nice GForge environment, 
+webspace and bandwidth.
+
 And last but not least g10 Code for offering commercial support
 and the resources.
 

Modified: trunk/TODO
===================================================================
--- trunk/TODO	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/TODO	2006-08-16 10:01:30 UTC (rev 260)
@@ -1,12 +1,9 @@
 (priority: + high, * normal, - low)
 
-MUST items before we can release 1.0.0
-=======================================
-
-
-Finally, we are close to release 1.0.0. Make a feature freeze,
-fix all serious tracker items and do intensive tests.
-
+    * change the file manager verify error message when an expired
+      key has been used to sign a file.
+    * offer to generate a key which is stored on the smart card
+      on the first start.
     * set imported private keys automatically to "ultimate" ownertrust?
     * there is a problem with the +E hotkey in EURO countries.
     - migrate keyserver code to use the HTTP class.

Modified: trunk/configure.ac
===================================================================
--- trunk/configure.ac	2006-08-05 10:54:52 UTC (rev 259)
+++ trunk/configure.ac	2006-08-16 10:01:30 UTC (rev 260)
@@ -15,7 +15,7 @@
 
 # Version number: Remember to change it immediately *after* a release.
 #                 Add a "-cvs" prefix for non-released code.
-AC_INIT(WinPT, 1.0.0pre3, http://www.winpt.org)
+AC_INIT(WinPT, 1.0.1-cvs, http://www.winpt.org)
 NEED_GPG_VERSION=1.4.2
 NEED_GPGME_API=1
 NEED_GPGME_VERSION=1.1.1



More information about the Winpt-commits mailing list