fixed clearsig stuff
authorWerner Koch <wk@gnupg.org>
Wed, 8 Jul 1998 09:29:43 +0000 (09:29 +0000)
committerWerner Koch <wk@gnupg.org>
Wed, 8 Jul 1998 09:29:43 +0000 (09:29 +0000)
28 files changed:
TODO
VERSION
checks/ChangeLog
checks/Makefile.am
checks/clearsig.test
checks/defs.inc
checks/seat.test [new file with mode: 0755]
doc/gpg.1pod
g10/ChangeLog
g10/armor.c
g10/export.c
g10/g10.c
g10/getkey.c
g10/import.c
g10/mainproc.c
g10/options.h
g10/packet.h
g10/plaintext.c
g10/sign.c
g10/textfilter.c
include/cipher.h
include/util.h
po/POTFILES.in
po/de.po
util/ChangeLog
util/iobuf.c
util/logger.c
zlib/Makefile

diff --git a/TODO b/TODO
index aa723cc..7d77e55 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,7 +1,7 @@
 
     * add option --restore-ownertrust
 
-    * add options: --default-signature-user, --default-encryption-user
+    * always put key signatures before the first subkey.
 
     * Change the formatting of log_xxxx to GNU standards
       ("name:filename:line: text")
diff --git a/VERSION b/VERSION
index 9e11b32..d296451 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.3.1
+0.3.1a
index d0bcf61..6e1cb41 100644 (file)
@@ -1,3 +1,7 @@
+Wed Jul  8 10:43:47 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * seat.test: New.
+
 Mon May 18 15:40:02 1998  Werner Koch  (wk@isil.d.shuttle.de)
 
        * Makefile.am: Now uses mk-tdata to produce random test data.
index ae09b20..985778a 100644 (file)
@@ -4,7 +4,7 @@ TESTS = version.test mds.test \
        decrypt.test decrypt-dsa.test \
        sigs.test sigs-dsa.test \
        encrypt.test encrypt-dsa.test  \
-       clearsig.test encryptp.test detach.test \
+       seat.test clearsig.test encryptp.test detach.test \
        armsigs.test armencrypt.test armencryptp.test \
        signencrypt.test signencrypt-dsa.test \
        armsignencrypt.test armdetach.test \
index a8d5039..768c59d 100755 (executable)
@@ -2,19 +2,17 @@
 
 . defs.inc || exit 3
 
-#info Checking cleartext signatures
-# There is a minor glitch, which appends an lf to the cleartext.
-# I do not consider that a bug, but I have to use the head .. mimic.
-# It is not clear what should happen to leading LFs, we must
-# change the defintion of cleartext, so that only 1 empty line
-# must follow the headers, but some specs say: any number of empty lines ..
-# clean-sat removes leading LFs
-# I know that this does not work for random data files (due to large lines
-# or what ever) - I hope we can live with it.
+# I can't compare the out because plain-3 has no LF as last charcater
+# but the output has always one.  I do not thinkl this is a bug, because
+# it is clear text and not binary text.
 for i in $plain_files; do
     echo "$usrpass1" | ./run-gpg --passphrase-fd 0 -sat -o x --yes $i
-    ./run-gpg -o y --yes x
-    ../tools/clean-sat < $i > z
-    head -c $[ $(cat y | wc -c) - 1 ] y | diff - z || error "$i: mismatch"
+    ./run-gpg --verify x
+done
+# and once more to check rfc1991
+for i in $plain_files; do
+    echo "$usrpass1" | ./run-gpg --passphrase-fd 0 \
+                        --rfc1991 --digest-algo md5 -sat -o x --yes $i
+    ./run-gpg --verify x
 done
 
index 7895442..61e07ee 100755 (executable)
@@ -21,9 +21,8 @@ dsa_usrname2="0xCB879DE9"
 dsa_keyrings="--keyring ./pubring.pkr --secret-keyring ./secring.skr"
 
 
-#plain_files="plain-1 plain-2 plain-3"
+plain_files="plain-1 plain-2 plain-3"
 #data_files="data-500 data-9000 data-32000 data-80000"
-plain_files="plain-1 plain-2"
 data_files="data-500 data-9000"
 exp_files=""
 
diff --git a/checks/seat.test b/checks/seat.test
new file mode 100755 (executable)
index 0000000..7e95b8b
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+. defs.inc || exit 3
+
+for i in $plain_files ; do
+    echo "$usrpass1" | ./run-gpg --passphrase-fd 0 -seat -r two -o x --yes $i
+    ./run-gpg -o y --yes x
+    cmp $i y || error "$i: mismatch"
+done
+
index 8a67dfb..726e976 100644 (file)
@@ -61,7 +61,7 @@ B<--verify> [[I<sigfile>] {I<signed-files>}]
 
 B<-k> [I<username>] [I<keyring>]
     Kludge to be somewhat compatible with PGP.
-    Without arguments, all public key-rings are listed.
+    Without arguments, all public keyrings are listed.
     With one argument, only I<keyring> is listed.
     Special combinations are also allowed, but it may
     give strange results when combined with more options.
@@ -129,8 +129,8 @@ B<--gen-revoke>
     Generate a revocation certificate.
 
 B<--export> [I<names>]
-    Either export all keys from all key-rings (default
-    key-rings and those registered via option B<--keyring>),
+    Either export all keys from all keyrings (default
+    keyrings and those registered via option B<--keyring>),
     or if at least one name is given, those of the given
     name. The new keyring is written to F<stdout> or to
     the file given with option "output".  Use together
@@ -165,6 +165,11 @@ B<-u> I<name>, B<--local-user> I<name>
     This option is silently ignored for the list commands,
     so that it can be used in an options file.
 
+B<--default-key>  I<name>
+    Use I<name> as default user-id for signatures.  If this
+    is not used the default user-id is the first user-id in
+    the secret keyring.
+
 B<-r>  I<name>, B<--remote-user>  I<name>
     Use I<name> as the user-id for encryption.
     This option is silently ignored for the list commands,
@@ -202,14 +207,15 @@ B<--no>
     Assume no on most questions.
 
 B<--keyring> I<file>
-    Add I<file> to the list of key-rings.
+    Add I<file> to the list of keyrings.
     If I<file> begins with a tilde and a slash, these
     are replaced by the HOME directory. If the filename
     does not contain a slash, it is assumed to be in the
     home-directory (F<~/.gnupg> if B<--homedir>) is not used.
 
 B<--secret-keyring> I<file>
-    Same as B<--keyring> but for secret key-rings.
+    Same as B<--keyring> but for secret keyrings.
+
 
 B<--homedir> I<dir>
     Set the name of the home directory to I<dir>. If this
@@ -287,8 +293,8 @@ B<--no-armor>
     Assume the input data is not in ASCCI armored format.
 
 B<--no-default-keyring>
-    Do not add the default key-rings to the list of
-    key-rings.
+    Do not add the default keyrings to the list of
+    keyrings.
 
 B<--skip-verify>
     Skip the signature verification step.  This may be used to
@@ -329,17 +335,14 @@ C<GNUPGHOME>  If set, direcory used instead of F<~/.gnupg>.
 
 =head1 FILES
 
-F<~/.gnupg/secring.gpg>     The secret key-ring
+F<~/.gnupg/secring.gpg>     The secret keyring
 
-F<~/.gnupg/pubring.gpg>     The public key-ring
+F<~/.gnupg/pubring.gpg>     The public keyring
 
 F<~/.gnupg/trustdb.gpg>     The trust database
 
-F<~/.gnupg/gnupg.gpg>      Signature of GNUPG files.
-
 F<~/.gnupg/options>        May contain options
 
-
 =head1 SEE ALSO
 
 gpgm(1)  gpgd(1)
index 664d378..7525c18 100644 (file)
@@ -1,3 +1,20 @@
+Wed Jul  8 10:45:28 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * plaintext.c (special_md_putc): New.
+       (handle_plaintext): add clearsig argument
+       * mainproc.c (proc_plaintext): detection of clearsig
+       * sign.c (write_dased_escaped): Changed clearsig format
+
+Tue Jul  7 18:56:19 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * armor.c (find_header): Now makes sure that there is only one
+       empty line for clearsigs, as this is what OP now says.
+
+Mon Jul  6 13:09:07 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * g10.c (main): New option default-secret-key
+       * getkey.c (get_seckey_byname): support for this option.
+
 Mon Jul  6 09:03:49 1998  Werner Koch  (wk@isil.d.shuttle.de)
 
        * getkey.c (add_keyring): Keyrings are now added to end of the
index 1dd028a..46151ea 100644 (file)
@@ -380,16 +380,13 @@ find_header( fhdr_state_t state, byte *buf, size_t *r_buflen,
                state = fhdrEOF;
            break;
 
-         case fhdrWAITClearsig: /* skip all empty lines (for clearsig) */
+         case fhdrWAITClearsig: /* skip the empty line (for clearsig) */
            c = 0;
            for(n=0; n < buflen && (c=iobuf_get2(a)) != -1 && c != '\n'; )
                buf[n++] = c;
            if( n < buflen || c == '\n' ) {
                buf[n] = 0;
-               if( !n || (buf[0]=='\r' && !buf[1]) ) /* empty line */
-                   ;
-               else
-                   state = fhdrCHECKDashEscaped3;
+               state = fhdrCHECKDashEscaped3;
            }
            else {
                /* fixme: we should check whether this line continues
@@ -590,6 +587,7 @@ find_header( fhdr_state_t state, byte *buf, size_t *r_buflen,
            buf[1] = '\n';
            n = 2;
        }
+
     }
 
 
@@ -715,13 +713,6 @@ fake_packet( armor_filter_context_t *afx, IOBUF a,
            break;
 
          case fhdrENDClearsig:
-           /* FIXME: this is wrong: Only the last CRLF should
-            * not be included in the hash, muts rewrite the FSM again
-            * This proble does only occur if the last line does not end
-            * in with a LF?
-            */
-           if( emplines )
-               emplines--; /* don't count the last one */
            state = fhdrENDClearsigHelp;
            afx->helplen = n;
            break;
index 68e83a2..2c824d2 100644 (file)
@@ -125,6 +125,24 @@ do_export( STRLIST users, int secret )
 
        /* and write it */
        for( kbctx=NULL; (node = walk_kbnode( keyblock, &kbctx, 0 )); ) {
+           if( opt.do_not_export_rsa ) {
+               int algo;
+               switch( node->pkt->pkttype ) {
+                 /* note: we can´ do this for subkeys here */
+                 case PKT_PUBLIC_KEY:
+                   algo = node->pkt->pkt.public_key->pubkey_algo;
+                   break;
+                 case PKT_SECRET_KEY:
+                   algo = node->pkt->pkt.secret_key->pubkey_algo;
+                   break;
+                 case PKT_SIGNATURE:
+                   algo = node->pkt->pkt.signature->pubkey_algo;
+                   break;
+                 default: algo = 0;
+               }
+               if( is_RSA(algo) )
+                   continue;
+           }
            if( (rc = build_packet( out, node->pkt )) ) {
                log_error("build_packet(%d) failed: %s\n",
                            node->pkt->pkttype, g10_errstr(rc) );
index 07857d4..77ba9bc 100644 (file)
--- a/g10/g10.c
+++ b/g10/g10.c
@@ -76,6 +76,7 @@ static ARGPARSE_OPTS opts[] = {
   #endif
     { 537, "export"          , 0, N_("export keys") },
     { 563, "export-secret-keys" , 0, "@" },
+    { 565, "do-not-export-rsa", 0, "@" },
     { 530, "import",      0     , N_("import/merge keys")},
     { 521, "list-packets",0,N_("list only the sequence of packets")},
   #ifdef IS_G10MAINT
@@ -105,6 +106,7 @@ static ARGPARSE_OPTS opts[] = {
     { 502, "no",        0, N_("assume no on most questions")},
     { 509, "keyring"   ,2, N_("add this keyring to the list of keyrings")},
     { 517, "secret-keyring" ,2, N_("add this secret keyring to the list")},
+    { 541, "default-key" ,2, N_("|NAME|use NAME as default secret key")},
     { 518, "options"   , 2, N_("read options from file")},
 
     { 510, "debug"     ,4|16, N_("set debugging flags")},
@@ -168,8 +170,6 @@ static ARGPARSE_OPTS opts[] = {
 
 {0} };
 
-/* (Free numbers: 541) */
-
 
 enum cmd_values { aNull = 0,
     aSym, aStore, aEncr, aKeygen, aSign, aSignEncr,
@@ -575,6 +575,7 @@ main( int argc, char **argv )
          case 536: opt.marginals_needed = pargs.r.ret_int; break;
          case 537: set_cmd( &cmd, aExport); break;
          case 538: trustdb_name = pargs.r.ret_str; break;
+         case 541: opt.def_secret_key = pargs.r.ret_str; break;
          case 543: break; /* no-options */
          case 544: opt.homedir = pargs.r.ret_str; break;
          case 545: opt.batch = 0; break;
@@ -591,6 +592,7 @@ main( int argc, char **argv )
          case 561: opt.rfc1991 = 1; break;
          case 562: opt.emulate_bugs |= 1; break;
          case 563: set_cmd( &cmd, aExportSecret); break;
+         case 565: opt.do_not_export_rsa = 1; break;
          default : errors++; pargs.err = configfp? 1:2; break;
        }
     }
index 0c69efb..c51e54b 100644 (file)
@@ -532,8 +532,12 @@ get_seckey_byname( PKT_secret_key *sk, const char *name, int unprotect )
 {
     int rc;
 
-    rc = name ? key_byname( 1, NULL, sk, name )
-             : lookup_sk( sk, 15, NULL, NULL );
+    if( !name && opt.def_secret_key && *opt.def_secret_key )
+       rc = key_byname( 1, NULL, sk, opt.def_secret_key );
+    else if( !name ) /* use the first one as default key */
+       rc = lookup_sk( sk, 15, NULL, NULL );
+    else
+       rc = key_byname( 1, NULL, sk, name );
     if( !rc && unprotect )
        rc = check_secret_key( sk );
 
index 3ed6b96..d32852c 100644 (file)
@@ -33,6 +33,7 @@
 #include "util.h"
 #include "trustdb.h"
 #include "main.h"
+#include "i18n.h"
 
 
 static int read_block( IOBUF a, compress_filter_context_t *cfx,
@@ -101,7 +102,7 @@ import_keys( const char *fname )
     if( !fname )
        fname = "[stdin]";
     if( !inp ) {
-       log_error("%s: can't open file: %s\n", fname, strerror(errno) );
+       log_error_f(fname, _("can't open file: %s\n"), strerror(errno) );
        return G10ERR_OPEN_FILE;
     }
 
@@ -116,9 +117,10 @@ import_keys( const char *fname )
        else if( keyblock->pkt->pkttype == PKT_SIGNATURE
                 && keyblock->pkt->pkt.signature->sig_class == 0x20 )
            rc = import_revoke_cert( fname, keyblock );
-       else
-           log_info("%s: skipping block of type %d\n",
-                                           fname, keyblock->pkt->pkttype );
+       else {
+           log_info_f(fname, _("skipping block of type %d\n"),
+                                           keyblock->pkt->pkttype );
+       }
        release_kbnode(keyblock);
        if( rc )
            break;
@@ -126,7 +128,7 @@ import_keys( const char *fname )
     if( rc == -1 )
        rc = 0;
     else if( rc && rc != G10ERR_INV_KEYRING )
-       log_error("%s: read error: %s\n", fname, g10_errstr(rc));
+       log_error_f( fname, _("read error: %s\n"), g10_errstr(rc));
 
     iobuf_close(inp);
     return rc;
@@ -255,7 +257,7 @@ import_one( const char *fname, KBNODE keyblock )
     uidnode = find_next_kbnode( keyblock, PKT_USER_ID );
 
     if( opt.verbose ) {
-       log_info("%s: pub  %4u%c/%08lX %s   ", fname,
+       log_info_f( fname, "pub  %4u%c/%08lX %s   ",
                  nbits_from_pk( pk ),
                  pubkey_letter( pk->pubkey_algo ),
                  (ulong)keyid[1], datestr_from_pk(pk) );
@@ -265,7 +267,7 @@ import_one( const char *fname, KBNODE keyblock )
        putc('\n', stderr);
     }
     if( !uidnode ) {
-       log_error("%s: No user id for key %08lX\n", fname, (ulong)keyid[1]);
+       log_error_f(fname, _("key %08lX: no user id\n"), (ulong)keyid[1]);
        return 0;
     }
 
@@ -275,8 +277,8 @@ import_one( const char *fname, KBNODE keyblock )
        return rc== -1? 0:rc;
 
     if( !delete_inv_parts( fname, keyblock, keyid ) ) {
-       log_info("%s: key %08lX, no valid user ids\n",
-                                                   fname, (ulong)keyid[1]);
+       log_info_f( fname, _("key %08lX: no valid user ids\n"),
+                                                   (ulong)keyid[1]);
        return 0;
     }
 
@@ -284,27 +286,27 @@ import_one( const char *fname, KBNODE keyblock )
     pk_orig = m_alloc_clear( sizeof *pk_orig );
     rc = get_pubkey( pk_orig, keyid );
     if( rc && rc != G10ERR_NO_PUBKEY ) {
-       log_error("%s: key %08lX, public key not found: %s\n",
-                               fname, (ulong)keyid[1], g10_errstr(rc));
+       log_error_f( fname, _("key %08lX: public key not found: %s\n"),
+                               (ulong)keyid[1], g10_errstr(rc));
     }
     else if( rc ) { /* insert this key */
        /* get default resource */
        if( get_keyblock_handle( NULL, 0, &kbpos ) ) {
-           log_error("no default public keyring\n");
+           log_error(_("no default public keyring\n"));
            return G10ERR_GENERAL;
        }
        if( opt.verbose > 1 )
-           log_info("%s: writing to '%s'\n",
-                               fname, keyblock_resource_name(&kbpos) );
+           log_info_f( fname, _("writing to '%s'\n"),
+                               keyblock_resource_name(&kbpos) );
        if( (rc=lock_keyblock( &kbpos )) )
-           log_error("can't lock public keyring '%s': %s\n",
-                            keyblock_resource_name(&kbpos), g10_errstr(rc) );
+           log_error_f( keyblock_resource_name(&kbpos),
+                       _("can't lock public keyring: %s\n"), g10_errstr(rc) );
        else if( (rc=insert_keyblock( &kbpos, keyblock )) )
-           log_error("%s: can't write to '%s': %s\n", fname,
-                            keyblock_resource_name(&kbpos), g10_errstr(rc) );
+           log_error_f( keyblock_resource_name(&kbpos),
+                       _("can't write to keyring: %s\n"), g10_errstr(rc) );
        unlock_keyblock( &kbpos );
        /* we are ready */
-       log_info("%s: key %08lX imported\n", fname, (ulong)keyid[1]);
+       log_info_f( fname, _("key %08lX: public key imported\n"), (ulong)keyid[1]);
     }
     else { /* merge */
        int n_uids, n_sigs, n_subk;
@@ -312,8 +314,8 @@ import_one( const char *fname, KBNODE keyblock )
        /* Compare the original against the new key; just to be sure nothing
         * weird is going on */
        if( cmp_public_keys( pk_orig, pk ) ) {
-           log_error("%s: key %08lX, doesn't match our copy\n",
-                                                   fname, (ulong)keyid[1]);
+           log_error_f( fname, _("key %08lX: doesn't match our copy\n"),
+                                                         (ulong)keyid[1]);
            rc = G10ERR_GENERAL;
            goto leave;
        }
@@ -324,14 +326,16 @@ import_one( const char *fname, KBNODE keyblock )
        /* now read the original keyblock */
        rc = find_keyblock_bypk( &kbpos, pk_orig );
        if( rc ) {
-           log_error("%s: key %08lX, can't locate original keyblock: %s\n",
-                                    fname, (ulong)keyid[1], g10_errstr(rc));
+           log_error_f(fname,
+                       _("key %08lX: can't locate original keyblock: %s\n"),
+                                    (ulong)keyid[1], g10_errstr(rc));
            goto leave;
        }
        rc = read_keyblock( &kbpos, &keyblock_orig );
        if( rc ) {
-           log_error("%s: key %08lX, can't read original keyblock: %s\n",
-                                    fname, (ulong)keyid[1], g10_errstr(rc));
+           log_error_f(fname,
+                       _("key %08lX: can't read original keyblock: %s\n"),
+                                           (ulong)keyid[1], g10_errstr(rc));
            goto leave;
        }
        /* and try to merge the block */
@@ -345,37 +349,37 @@ import_one( const char *fname, KBNODE keyblock )
        if( n_uids || n_sigs || n_subk ) {
            /* keyblock_orig has been updated; write */
            if( opt.verbose > 1 )
-               log_info("%s: writing to '%s'\n",
-                                   fname, keyblock_resource_name(&kbpos) );
+               log_info_f(keyblock_resource_name(&kbpos),
+                                     _("writing keyblock\n"));
            if( (rc=lock_keyblock( &kbpos )) )
-               log_error("can't lock public keyring '%s': %s\n",
-                                keyblock_resource_name(&kbpos), g10_errstr(rc) );
+               log_error_f(keyblock_resource_name(&kbpos),
+                        _("can't lock public keyring: %s\n"), g10_errstr(rc) );
            else if( (rc=update_keyblock( &kbpos, keyblock )) )
-               log_error("%s: can't write to '%s': %s\n", fname,
-                                keyblock_resource_name(&kbpos), g10_errstr(rc) );
+               log_error_f( keyblock_resource_name(&kbpos),
+                           _("can't write keyblock: %s\n"), g10_errstr(rc) );
            unlock_keyblock( &kbpos );
            /* we are ready */
            if( n_uids == 1 )
-               log_info("%s: key %08lX, 1 new user-id\n",
-                                        fname, (ulong)keyid[1]);
+               log_info_f(fname, _("key %08lX: 1 new user-id\n"),
+                                        (ulong)keyid[1]);
            else if( n_uids )
-               log_info("%s: key %08lX, %d new user-ids\n",
-                                        fname, (ulong)keyid[1], n_uids );
+               log_info_f(fname, _("key %08lX: %d new user-ids\n"),
+                                        (ulong)keyid[1], n_uids );
            if( n_sigs == 1 )
-               log_info("%s: key %08lX, 1 new signature\n",
-                                        fname, (ulong)keyid[1]);
+               log_info_f(fname, _("key %08lX: 1 new signature\n"),
+                                        (ulong)keyid[1]);
            else if( n_sigs )
-               log_info("%s: key %08lX, %d new signatures\n",
-                                        fname, (ulong)keyid[1], n_sigs );
+               log_info_f(fname, _("key %08lX: %d new signatures\n"),
+                                        (ulong)keyid[1], n_sigs );
            if( n_subk == 1 )
-               log_info("%s: key %08lX, 1 new subkey\n",
-                                        fname, (ulong)keyid[1]);
+               log_info_f(fname, _("key %08lX: 1 new subkey\n"),
+                                        (ulong)keyid[1]);
            else if( n_subk )
-               log_info("%s: key %08lX, %d new subkeys\n",
-                                        fname, (ulong)keyid[1], n_subk );
+               log_info_f(fname, _("key %08lX: %d new subkeys\n"),
+                                        (ulong)keyid[1], n_subk );
        }
        else
-           log_info("%s: key %08lX, not changed\n", fname, (ulong)keyid[1] );
+           log_info_f(fname, _("key %08lX: not changed\n"), (ulong)keyid[1] );
     }
 
   leave:
@@ -408,7 +412,7 @@ import_secret_one( const char *fname, KBNODE keyblock )
     uidnode = find_next_kbnode( keyblock, PKT_USER_ID );
 
     if( opt.verbose ) {
-       log_info("%s: sec  %4u%c/%08lX %s   ", fname,
+       log_info_f(fname, "sec  %4u%c/%08lX %s   ",
                  nbits_from_sk( sk ),
                  pubkey_letter( sk->pubkey_algo ),
                  (ulong)keyid[1], datestr_from_sk(sk) );
@@ -418,7 +422,7 @@ import_secret_one( const char *fname, KBNODE keyblock )
        putc('\n', stderr);
     }
     if( !uidnode ) {
-       log_error("%s: No user id for key %08lX\n", fname, (ulong)keyid[1]);
+       log_error_f(fname, _("key %08lX: no user id\n"), (ulong)keyid[1]);
        return 0;
     }
 
@@ -433,25 +437,24 @@ import_secret_one( const char *fname, KBNODE keyblock )
            return G10ERR_GENERAL;
        }
        if( opt.verbose > 1 )
-           log_info("%s: writing to '%s'\n",
-                               fname, keyblock_resource_name(&kbpos) );
+           log_info_f(keyblock_resource_name(&kbpos), _("writing keyblock\n"));
        if( (rc=lock_keyblock( &kbpos )) )
-           log_error("can't lock secret keyring '%s': %s\n",
-                            keyblock_resource_name(&kbpos), g10_errstr(rc) );
+           log_error_f( keyblock_resource_name(&kbpos),
+                     _("can't lock secret keyring: %s\n"), g10_errstr(rc) );
        else if( (rc=insert_keyblock( &kbpos, keyblock )) )
-           log_error("%s: can't write to '%s': %s\n", fname,
-                            keyblock_resource_name(&kbpos), g10_errstr(rc) );
+           log_error_f(keyblock_resource_name(&kbpos),
+                     _("can't write keyring\n"), g10_errstr(rc) );
        unlock_keyblock( &kbpos );
        /* we are ready */
-       log_info("%s: key %08lX imported\n", fname, (ulong)keyid[1]);
+       log_info_f(fname, _("key %08lX: secret key imported\n"), (ulong)keyid[1]);
     }
     else if( !rc ) { /* we can't merge secret keys */
-       log_error("%s: key %08lX already in secret keyring\n",
-                                               fname, (ulong)keyid[1]);
+       log_error_f(fname, _("key %08lX: already in secret keyring\n"),
+                                               (ulong)keyid[1]);
     }
     else
-       log_error("%s: key %08lX, secret key not found: %s\n",
-                               fname, (ulong)keyid[1], g10_errstr(rc));
+       log_error_f(fname, _("key %08lX: secret key not found: %s\n"),
+                               (ulong)keyid[1], g10_errstr(rc));
 
     release_kbnode( keyblock_orig );
     return rc;
@@ -480,29 +483,30 @@ import_revoke_cert( const char *fname, KBNODE node )
     pk = m_alloc_clear( sizeof *pk );
     rc = get_pubkey( pk, keyid );
     if( rc == G10ERR_NO_PUBKEY ) {
-       log_info("%s: key %08lX, no public key - "
-                "can't apply revocation certificate\n",
-                               fname, (ulong)keyid[1]);
+       log_info_f(fname, _("key %08lX: no public key - "
+                "can't apply revocation certificate\n"), (ulong)keyid[1]);
        rc = 0;
        goto leave;
     }
     else if( rc ) {
-       log_error("%s: key %08lX, public key not found: %s\n",
-                               fname, (ulong)keyid[1], g10_errstr(rc));
+       log_error_f(fname, _("key %08lX: public key not found: %s\n"),
+                                      (ulong)keyid[1], g10_errstr(rc));
        goto leave;
     }
 
     /* read the original keyblock */
     rc = find_keyblock_bypk( &kbpos, pk );
     if( rc ) {
-       log_error("%s: key %08lX, can't locate original keyblock: %s\n",
-                                fname, (ulong)keyid[1], g10_errstr(rc));
+       log_error_f(fname,
+               _("key %08lX: can't locate original keyblock: %s\n"),
+                                       (ulong)keyid[1], g10_errstr(rc));
        goto leave;
     }
     rc = read_keyblock( &kbpos, &keyblock );
     if( rc ) {
-       log_error("%s: key %08lX, can't read original keyblock: %s\n",
-                                fname, (ulong)keyid[1], g10_errstr(rc));
+       log_error_f(fname,
+               _("key %08lX: can't read original keyblock: %s\n"),
+                                       (ulong)keyid[1], g10_errstr(rc));
        goto leave;
     }
 
@@ -512,9 +516,8 @@ import_revoke_cert( const char *fname, KBNODE node )
      * special case. */
     rc = check_key_signature( keyblock, node, NULL);
     if( rc ) {
-       log_error("%s: key %08lX, invalid revocation certificate"
-                 ": %s - rejected\n",
-                 fname, (ulong)keyid[1], g10_errstr(rc));
+       log_error_f(fname, _("key %08lX: invalid revocation certificate"
+                 ": %s - rejected\n"), (ulong)keyid[1], g10_errstr(rc));
     }
 
 
@@ -537,18 +540,17 @@ import_revoke_cert( const char *fname, KBNODE node )
 
     /* and write the keyblock back */
     if( opt.verbose > 1 )
-       log_info("%s: writing to '%s'\n",
-                           fname, keyblock_resource_name(&kbpos) );
+       log_info_f( keyblock_resource_name(&kbpos), _("writing keyblock\n"));
     if( (rc=lock_keyblock( &kbpos )) )
-       log_error("can't lock public keyring '%s': %s\n",
-                        keyblock_resource_name(&kbpos), g10_errstr(rc) );
+       log_error_f( keyblock_resource_name(&kbpos),
+                   _("can't lock public keyring: %s\n"), g10_errstr(rc) );
     else if( (rc=update_keyblock( &kbpos, keyblock )) )
-       log_error("%s: can't write to '%s': %s\n", fname,
-                        keyblock_resource_name(&kbpos), g10_errstr(rc) );
+       log_error_f(keyblock_resource_name(&kbpos),
+                   _("can't write keyblock: %s\n"), g10_errstr(rc) );
     unlock_keyblock( &kbpos );
     /* we are ready */
-    log_info("%s: key %08lX, added revocation certificate\n",
-                                fname, (ulong)keyid[1]);
+    log_info_f(fname, _("key %08lX: revocation certificate imported\n"),
+                                       (ulong)keyid[1]);
 
   leave:
     release_kbnode( keyblock );
@@ -577,16 +579,16 @@ chk_self_sigs( const char *fname, KBNODE keyblock,
        if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] ) {
            unode = find_prev_kbnode( keyblock, n, PKT_USER_ID );
            if( !unode )  {
-               log_error("%s: key %08lX, no user-id for signature\n",
-                                       fname, (ulong)keyid[1]);
+               log_error_f(fname, _("key %08lX: no user-id for signature\n"),
+                                       (ulong)keyid[1]);
                return -1;  /* the complete keyblock is invalid */
            }
            rc = check_key_signature( keyblock, n, NULL);
            if( rc ) {
-               log_error( rc == G10ERR_PUBKEY_ALGO ?
-                         "%s: key %08lX, unsupported public key algorithm\n":
-                         "%s: key %08lX, invalid self-signature\n",
-                         fname, (ulong)keyid[1]);
+               log_error_f( fname,  rc == G10ERR_PUBKEY_ALGO ?
+                         _("key %08lX: unsupported public key algorithm\n"):
+                         _("key %08lX: invalid self-signature\n"),
+                                (ulong)keyid[1]);
 
                unode->flag |= 2; /* mark as invalid */
            }
@@ -614,8 +616,8 @@ delete_inv_parts( const char *fname, KBNODE keyblock, u32 *keyid )
            uid_seen = 1;
            if( (node->flag & 2) || !(node->flag & 1) ) {
                if( opt.verbose ) {
-                   log_info("%s: key %08lX, removed userid '",
-                                                 fname, (ulong)keyid[1]);
+                   log_info_f(fname, _("key %08lX: skipped userid '"),
+                                                        (ulong)keyid[1]);
                    print_string( stderr, node->pkt->pkt.user_id->name,
                                      node->pkt->pkt.user_id->len, 0 );
                    fputs("'\n", stderr );
@@ -637,15 +639,15 @@ delete_inv_parts( const char *fname, KBNODE keyblock, u32 *keyid )
        else if( node->pkt->pkttype == PKT_SIGNATURE
                 && node->pkt->pkt.signature->sig_class == 0x20 )  {
            if( uid_seen ) {
-               log_error("%s: key %08lX, revocation certificate at wrong "
-                          "place - removed\n", fname, (ulong)keyid[1]);
+               log_error_f(fname, _("key %08lX: revocation certificate at wrong "
+                          "place - skipped\n"), fname, (ulong)keyid[1]);
                delete_kbnode( node );
            }
            else {
                int rc = check_key_signature( keyblock, node, NULL);
                if( rc ) {
-                   log_error("%s: key %08lX, invalid revocation certificate"
-                             ": %s - removed\n",
+                   log_error_f(fname, _("key %08lX: invalid revocation certificate"
+                             ": %s - skipped\n"),
                              fname, (ulong)keyid[1], g10_errstr(rc));
                    delete_kbnode( node );
                }
@@ -706,8 +708,8 @@ merge_blocks( const char *fname, KBNODE keyblock_orig, KBNODE keyblock,
                insert_kbnode( keyblock_orig, n2, 0 );
                n2->flag |= 1;
                node->flag |= 1;
-               log_info("%s: key %08lX, added revocation certificate\n",
-                                        fname, (ulong)keyid[1]);
+               log_info_f(fname, _("key %08lX: revocation certificate added\n"),
+                                        (ulong)keyid[1]);
            }
        }
     }
@@ -769,7 +771,7 @@ append_uid( KBNODE keyblock, KBNODE node, int *n_sigs,
     assert(node->pkt->pkttype == PKT_USER_ID );
     /* at lease a self signature comes next to the user-id */
     if( node->next->pkt->pkttype == PKT_USER_ID ) {
-       log_error("%s: key %08lX, our copy has no self-signature\n",
+       log_error_f(fname, _("key %08lX: our copy has no self-signature\n"),
                                                  fname, (ulong)keyid[1]);
        return G10ERR_GENERAL;
     }
@@ -805,8 +807,8 @@ merge_sigs( KBNODE dst, KBNODE src, int *n_sigs,
     /* at least a self signature comes next to the user-ids */
     assert(src->next->pkt->pkttype != PKT_USER_ID );
     if( dst->next->pkt->pkttype == PKT_USER_ID ) {
-       log_error("%s: key %08lX, our copy has no self-signature\n",
-                                                 fname, (ulong)keyid[1]);
+       log_error_f(fname, _("key %08lX: our copy has no self-signature\n"),
+                                                 (ulong)keyid[1]);
        return 0;
     }
 
index f01380e..b73d49b 100644 (file)
@@ -232,22 +232,34 @@ static void
 proc_plaintext( CTX c, PACKET *pkt )
 {
     PKT_plaintext *pt = pkt->pkt.plaintext;
-    int any, rc;
+    int any, clearsig, rc;
     KBNODE n;
 
     if( opt.verbose )
        log_info("original file name='%.*s'\n", pt->namelen, pt->name);
     free_md_filter_context( &c->mfx );
-    /* fixme: look at the sigclass to check whether we should use the
-     *       textmode filter (sigclass 0x01)
-     */
     c->mfx.md = md_open( 0, 0);
-    any = 0;
+    /* fixme: we may need to push the textfilter if we have sigclass 1
+     * and no armoring - Not yet tested */
+    any = clearsig = 0;
     for(n=c->list; n; n = n->next ) {
-       if( n->pkt->pkttype == PKT_ONEPASS_SIG
-           && n->pkt->pkt.onepass_sig->digest_algo ) {
-           md_enable( c->mfx.md, n->pkt->pkt.onepass_sig->digest_algo );
-           any = 1;
+       if( n->pkt->pkttype == PKT_ONEPASS_SIG ) {
+           if( n->pkt->pkt.onepass_sig->digest_algo ) {
+               md_enable( c->mfx.md, n->pkt->pkt.onepass_sig->digest_algo );
+               any = 1;
+           }
+           /* Check whether this is a cleartext signature.  We assume that
+            * we have one if the sig_class is 1 and the keyid is 0, that
+            * are the faked packets produced by armor.c.  There is a
+            * possibility that this fails, but there is no other easy way
+            * to do it. (We could use a special packet type to indicate
+            * this, but this may also be faked - it simply can't be verified
+            * and is _no_ security issue)
+            */
+           if( n->pkt->pkt.onepass_sig->sig_class == 0x01
+               && !n->pkt->pkt.onepass_sig->keyid[0]
+               && !n->pkt->pkt.onepass_sig->keyid[1]  )
+               clearsig = 1;
        }
     }
     if( !any ) { /* no onepass sig packet: enable all algos */
@@ -260,7 +272,7 @@ proc_plaintext( CTX c, PACKET *pkt )
        if( c->mfx.md->list )
            m_check( c->mfx.md->list );
     }
-    rc = handle_plaintext( pt, &c->mfx, c->sigs_only );
+    rc = handle_plaintext( pt, &c->mfx, c->sigs_only, clearsig );
     if( rc )
        log_error( "handle plaintext failed: %s\n", g10_errstr(rc));
     if( c->mfx.md ) {
index 8ad0a42..0929be3 100644 (file)
@@ -37,9 +37,10 @@ struct {
     int no_armor;
     int list_packets; /* list-packets mode */
     int def_cipher_algo;
-    int reserved;
+    int do_not_export_rsa;
     int def_digest_algo;
     int def_compress_algo;
+    const char *def_secret_key;
     int no_comment;
     int marginals_needed;
     int completes_needed;
index edca2a4..9c8a854 100644 (file)
@@ -282,7 +282,8 @@ int decrypt_data( PKT_encrypted *ed, DEK *dek );
 int encrypt_data( PKT_encrypted *ed, DEK *dek );
 
 /*-- plaintext.c --*/
-int handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,int nooutput);
+int handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
+                                       int nooutput, int clearsig );
 int ask_for_detached_datafile( md_filter_context_t *mfx, const char *inname );
 
 /*-- comment.c --*/
index 161db58..8d7b2a9 100644 (file)
 
 
 /****************
+ * Defer the last CR,LF
+ */
+static void
+special_md_putc( MD_HANDLE md, int c, int *state )
+{
+    if( c == -1 ) { /* flush */
+       if( *state == 1 ) {
+           md_putc(md, '\r');
+       }
+       *state = 0;
+       return;
+    }
+  again:
+    switch( *state ) {
+      case 0:
+       if( c == '\r' )
+           *state = 1;
+       else
+           md_putc(md, c );
+       break;
+      case 1:
+       if( c == '\n' )
+           *state = 2;
+       else {
+           md_putc(md, '\r');
+           *state = 0;
+           goto again;
+       }
+       break;
+      case 2:
+       md_putc(md, '\r');
+       md_putc(md, '\n');
+       *state = 0;
+       goto again;
+      default: BUG();
+    }
+}
+
+
+/****************
  * Handle a plaintext packet.  If MFX is not NULL, update the MDs
  * Note: we should use the filter stuff here, but we have to add some
  *      easy mimic to set a read limit, so we calculate only the
  *      bytes from the plaintext.
  */
 int
-handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, int nooutput )
+handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
+                 int nooutput, int clearsig )
 {
     char *fname = NULL;
     FILE *fp = NULL;
     int rc = 0;
     int c;
     int convert = pt->mode == 't';
+    int special_state = 0;
 
     /* create the filename as C string */
     if( nooutput )
@@ -86,10 +128,14 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, int nooutput )
                rc = G10ERR_READ_FILE;
                goto leave;
            }
-           if( mfx->md )
-               md_putc(mfx->md, c );
+           if( mfx->md ) {
+               if( convert && clearsig )
+                   special_md_putc(mfx->md, c, &special_state );
+               else
+                   md_putc(mfx->md, c );
+           }
            if( convert && c == '\r' )
-               continue; /* FIXME: this hack is too simple */
+               continue; /* fixme: this hack might be too simple */
            if( fp ) {
                if( putc( c, fp ) == EOF ) {
                    log_error("Error writing to '%s': %s\n",
@@ -102,10 +148,14 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, int nooutput )
     }
     else {
        while( (c = iobuf_get(pt->buf)) != -1 ) {
-           if( mfx->md )
-               md_putc(mfx->md, c );
+           if( mfx->md ) {
+               if( convert && clearsig )
+                   special_md_putc(mfx->md, c, &special_state  );
+               else
+                   md_putc(mfx->md, c );
+           }
            if( convert && c == '\r' )
-               continue; /* FIXME: this hack is too simple */
+               continue; /* fixme: this hack might be too simple */
            if( fp ) {
                if( putc( c, fp ) == EOF ) {
                    log_error("Error writing to '%s': %s\n",
@@ -117,6 +167,8 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, int nooutput )
        }
        iobuf_clear_eof(pt->buf);
     }
+    if( mfx->md && convert && clearsig )
+       special_md_putc(mfx->md, -1, &special_state  ); /* flush */
 
     if( fp && fp != stdout && fclose(fp) ) {
        log_error("Error closing '%s': %s\n", fname, strerror(errno) );
index 7dffba3..14dfe41 100644 (file)
@@ -416,14 +416,14 @@ sign_file( STRLIST filenames, int detached, STRLIST locusr,
 
 
 /****************
- * note: we do not count empty lines at the beginning
+ * Note: We do not calculate the hash over the last CR,LF
  */
 static int
 write_dash_escaped( IOBUF inp, IOBUF out, MD_HANDLE md )
 {
     int c;
     int lastlf = 1;
-    int skip_empty = 1;
+    int state = 0;
 
     while( (c = iobuf_get(inp)) != -1 ) {
        /* Note: We don't escape "From " because the MUA should cope with it */
@@ -431,21 +431,41 @@ write_dash_escaped( IOBUF inp, IOBUF out, MD_HANDLE md )
            if( c == '-' ) {
                iobuf_put( out, c );
                iobuf_put( out, ' ' );
-               skip_empty = 0;
            }
-           else if( skip_empty && c == '\r' )
-               skip_empty = 2;
-           else
-               skip_empty = 0;
        }
 
-       if( !skip_empty )
-           md_putc(md, c );
+      again:
+       switch( state ) {
+         case 0:
+           if( c == '\r' )
+               state = 1;
+           else
+               md_putc(md, c );
+           break;
+         case 1:
+           if( c == '\n' )
+               state = 2;
+           else {
+               md_putc(md, '\r');
+               state = 0;
+               goto again;
+           }
+           break;
+         case 2:
+           md_putc(md, '\r');
+           md_putc(md, '\n');
+           state = 0;
+           goto again;
+         default: BUG();
+       }
        iobuf_put( out, c );
        lastlf = c == '\n';
-       if( skip_empty == 2 )
-           skip_empty = lastlf ? 0 : 1;
     }
+    if( state == 1 )
+       md_putc(md, '\r');
+    if( !lastlf )
+       iobuf_put( out, '\n' );
+
     return 0; /* fixme: add error handling */
 }
 
@@ -537,13 +557,11 @@ clearsign_file( const char *fname, STRLIST locusr, const char *outfile )
        PKT_secret_key *sk = sk_rover->sk;
        md_enable(textmd, hash_for(sk->pubkey_algo));
     }
-
     iobuf_push_filter( inp, text_filter, &tfx );
     rc = write_dash_escaped( inp, out, textmd );
     if( rc )
        goto leave;
 
-    iobuf_writestr(out, "\n" );
     afx.what = 2;
     iobuf_push_filter( out, armor_filter, &afx );
 
index c42624e..804b485 100644 (file)
@@ -51,8 +51,11 @@ read_line( byte *buf, size_t *r_buflen, IOBUF a )
     for(c=0, n=0; n < buflen && (c=iobuf_get2(a)) != -1 && c != '\n'; )
        buf[n++] = c;
     buf[n] = 0;
-    if( c == -1 )
+    if( c == -1 ) {
        rc = -1;
+       if( !n || buf[n-1] != '\n' )
+           no_lf = 1;
+    }
     else if( c != '\n' ) {
        IOBUF b = iobuf_temp();
        while( (c=iobuf_get2(a)) != -1 && c != '\n' ) {
index cea0a21..6df44b7 100644 (file)
@@ -44,6 +44,9 @@
 #define PUBKEY_ALGO_DSA       17
 #define PUBKEY_ALGO_ELGAMAL   20     /* sign and encrypt elgamal */
 
+#define PUBKEY_USAGE_SIG     1     /* key is good for signatures */
+#define PUBKEY_USAGE_ENC     2     /* key is good for encryption */
+
 #define DIGEST_ALGO_MD5       1
 #define DIGEST_ALGO_SHA1      2
 #define DIGEST_ALGO_RMD160    3
@@ -79,9 +82,7 @@ typedef struct {
     int  bufcount;
     int  secure;
     FILE  *debug;
-    int guard1;
     struct md_digest_list_s *list;
-    int guard2;
 } *MD_HANDLE;
 
 
index 032f0ad..f480f48 100644 (file)
@@ -72,6 +72,14 @@ void g10_log_mpidump( const char *text, MPI a );
   void g10_log_error( const char *fmt, ... ) __attribute__ ((format (printf,1,2)));
   void g10_log_info( const char *fmt, ... )  __attribute__ ((format (printf,1,2)));
   void g10_log_debug( const char *fmt, ... ) __attribute__ ((format (printf,1,2)));
+  void g10_log_fatal_f( const char *fname, const char *fmt, ... )
+                           __attribute__ ((noreturn, format (printf,2,3)));
+  void g10_log_error_f( const char *fname, const char *fmt, ... )
+                           __attribute__ ((format (printf,2,3)));
+  void g10_log_info_f( const char *fname, const char *fmt, ... )
+                           __attribute__ ((format (printf,2,3)));
+  void g10_log_debug_f( const char *fname,  const char *fmt, ... )
+                           __attribute__ ((format (printf,2,3)));
   #define BUG() g10_log_bug0(  __FILE__ , __LINE__, __FUNCTION__ )
 #else
   void g10_log_bug( const char *fmt, ... );
@@ -80,6 +88,10 @@ void g10_log_mpidump( const char *text, MPI a );
   void g10_log_error( const char *fmt, ... );
   void g10_log_info( const char *fmt, ... );
   void g10_log_debug( const char *fmt, ... );
+  void g10_log_fatal_f( const char *fname, const char *fmt, ... );
+  void g10_log_error_f( const char *fname, const char *fmt, ... );
+  void g10_log_info_f( const char *fname, const char *fmt, ... );
+  void g10_log_debug_f( const char *fname, const char *fmt, ... );
   #define BUG() g10_log_bug0( __FILE__ , __LINE__ )
 #endif
 
@@ -91,7 +103,10 @@ void g10_log_mpidump( const char *text, MPI a );
 #define log_error   g10_log_error
 #define log_info    g10_log_info
 #define log_debug   g10_log_debug
-
+#define log_fatal_f g10_log_fatal_f
+#define log_error_f g10_log_error_f
+#define log_info_f  g10_log_info_f
+#define log_debug_f g10_log_debug_f
 
 
 /*-- errors.c --*/
index 8ab2ef7..4b31739 100644 (file)
@@ -3,14 +3,33 @@
 
 # utility
 util/secmem.c
+util/argparse.c
 
 # cipher
 cipher/random.c
-
+cipher/rand-dummy.c
+cipher/rand-unix.c
+cipher/rand-w32.c
 
 # main program
 
 g10/g10.c
 g10/pkclist.c
 g10/keygen.c
+g10/decrypt.c
+g10/encode.c
+g10/import.c
+g10/keyedit.c
+g10/keylist.c
+g10/mainproc.c
+g10/passphrase.c
+g10/plaintext.c
+g10/pref.c
+g10/seckey-cert.c
+g10/sig-check.c
+g10/sign.c
+g10/trustdb.c
+g10/verify.c
+
+
 #---end--
index 3b2eed1..20532ff 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -3,35 +3,21 @@ msgstr ""
 "Date: 1998-01-26 22:08:36+0100\n"
 "From: Werner Koch <wk@frodo>\n"
 "Content-Type: text/plain; charset=\n"
-"Xgettext-Options: --default-domain=g10 --directory=.. --add-comments --keyword=_ --keyword=N_ --files-from=./POTFILES.in\n"
-"Files: g10/g10.c g10/pkclist.c\n"
+"Xgettext-Options: --default-domain=gnupg --directory=.. --add-comments --keyword=_ --keyword=N_ --files-from=./POTFILES.in\n"
+"Files: util/secmem.c util/argparse.c cipher/random.c cipher/rand-dummy.c cipher/rand-unix.c cipher/rand-w32.c g10/g10.c g10/pkclist.c g10/keygen.c g10/decrypt.c g10/encode.c g10/import.c g10/keyedit.c g10/keylist.c g10/mainproc.c g10/passphrase.c g10/plaintext.c g10/pref.c g10/seckey-cert.c g10/sig-check.c g10/sign.c g10/trustdb.c g10/verify.c\n"
 
-
-#: util/secmem.c:85
+#: util/secmem.c:180
 msgid "Warning: using insecure memory!\n"
 msgstr ""
 "Achtung: Speicher mit sensibeln Daten kann auf Platte ausgelagert werden.\n"
 "(um dies zu vermeiden, kann das Programm suid(root) installiert werden;\n"
 " bitte wenden Sie sich hierzu an den Systemadministraor)\n"
 
-#: cipher/random.c:147
-msgid ""
-"\n"
-"Not enough random bytes available.  Please do some other work to give\n"
-"the OS a chance to collect more entropy! (Need %d more bytes)\n"
-msgstr ""
-"\n"
-"Es sind nicht genügend Zufalls Bytes vorhanden.  Bitte führen Sie andere\n"
-"Arbeiten durch, damit das BS weitere Entropy sammeln kann!\n"
-"(Es werden noch %d Bytes benötigt)\n"
-
-#: cipher/random.c:185
+#: cipher/rand-dummy.c:106
 msgid "warning: using insecure random number generator!!\n"
-msgstr ""
-"Der Zufallszahlengenerator erzeugt keine sicheren Zufallszahlen!\n"
+msgstr "Der Zufallszahlengenerator erzeugt keine sicheren Zufallszahlen!\n"
 
-
-#: cipher/random.c:186
+#: cipher/rand-dummy.c:107
 msgid ""
 "The random number generator is only a kludge to let\n"
 "it compile - it is in no way a strong RNG!\n"
@@ -40,59 +26,23 @@ msgid ""
 "\n"
 msgstr ""
 "Der Zufallszahlengenerator ist lediglich ein \"kludge\", um ein\n"
-"übersetzen des Programms zu ermöglichen - Es ist KEIN starker RNG!\n"
+"\374bersetzen des Programms zu erm\366glichen - Es ist KEIN starker RNG!\n"
 "\n"
 "BENUTZEN SIE DIE DURCH DIESES PROGRAMM ERZEUGTEN DATEN NICHT!\n"
 "\n"
 
-
-#: g10/g10.c:214
+#: cipher/rand-unix.c:149
 msgid ""
-"Syntax: gpgm [options] [files]\n"
-"GNUPG maintenance utility\n"
-msgstr ""
-"Syntax: gpgm [options] [files]\n"
-"GNUPG Wartungs Hilfsmittel\n"
-
-
-#: g10/g10.c:72
-msgid ""
-"Syntax: gpg [options] [files]\n"
-"sign, check, encrypt or decrypt\n"
-"default operation depends on the input data\n"
+"\n"
+"Not enough random bytes available.  Please do some other work to give\n"
+"the OS a chance to collect more entropy! (Need %d more bytes)\n"
 msgstr ""
-"Aufruf: gpg [Optionen] [Dateien]\n"
-"Signieren, prüfen, verschlüsseln, entschlüsseln\n"
-"Die voreingestellte Operation ist abhängig von den Eingabedaten\n"
-
-
-#: g10/g10.c:77
-msgid "Please report bugs to <gnupg-bugs@isil.d.shuttle.de>.\n"
-msgstr "Berichte über Wanzen bitte an <gnupg-bugs@isil.d.shuttle.de>.\n"
-
-#: g10/g10.c:207
-msgid "Usage: gpgm [options] [files] (-h for help)"
-msgstr "Aufruf: gpgm [Optionen] [Dateien] (-h für Hilfe)"
-
-#: g10/g10.c:209
-msgid "Usage: gpg [options] [files] (-h for help)"
-msgstr "Aufruf: gpg [Optionen] [Dateien] (-h für Hilfe)"
-
-#: g10/g10.c:298
-msgid "usage: gpgm [options] "
-msgstr "Aufruf: gpgm [Optionen] "
-
-#: g10/g10.c:300
-msgid "usage: gpg [options] "
-msgstr "Aufruf: gpg [Optionen] "
-
-
-#: g10/g10.c:152
-msgid "conflicting commands\n"
-msgstr "Widersprechende Kommandos\n"
-
+"\n"
+"Es sind nicht gen\374gend Zufalls Bytes vorhanden.  Bitte f\374hren Sie andere\n"
+"Arbeiten durch, damit das BS weitere Entropy sammeln kann!\n"
+"(Es werden noch %d Bytes ben\366tigt)\n"
 
-#: g10/g10.c:57
+#: g10/g10.c:51
 msgid ""
 "@Commands:\n"
 " "
@@ -100,262 +50,229 @@ msgstr ""
 "@Kommandos:\n"
 " "
 
-#: g10/g10.c:92
-msgid ""
-"@\n"
-"Options:\n"
-" "
+#: g10/g10.c:54
+msgid "|[file]|make a signature"
 msgstr ""
-"@\n"
-"Optionen:\n"
-" "
 
+#: g10/g10.c:55
+msgid "|[file]|make a clear text signature"
+msgstr ""
 
-#: g10/g10.c:164
-msgid "create ascii armored output"
-msgstr "Ausgabe mit ASCII Armor versehen"
+#: g10/g10.c:56
+msgid "make a detached signature"
+msgstr "Eine abgetrennte Signatur erzeugen"
 
-#: g10/g10.c:165
-msgid "verbose"
-msgstr "detailierte Informationen"
+#: g10/g10.c:57
+msgid "encrypt data"
+msgstr "Daten verschl\374sseln"
 
-#: g10/g10.c:166
-msgid "set compress level (0 disables)"
-msgstr "Kompressionspegel sethen (aussschalten mit 0)"
+#: g10/g10.c:58
+msgid "encryption only with symmetric cipher"
+msgstr "Daten nur symmetrisch verschl\374sseln"
 
-#: g10/g10.c:167
-msgid "do not make any changes"
-msgstr "Keine wirklichen Änderungen durchführen"
+#: g10/g10.c:59
+msgid "store only"
+msgstr "nur speichern"
 
-#: g10/g10.c:168
-msgid "do only a symmetric encryption"
-msgstr "Nur konventionell verschlüsseln"
+#: g10/g10.c:60
+msgid "decrypt data (default)"
+msgstr "Daten enschl\374sseln"
 
-#: g10/g10.c:169
-msgid "use as output file"
-msgstr "dies als Ausgabedatei benutzen"
+#: g10/g10.c:61
+msgid "verify a signature"
+msgstr "Signatur pr\374fen"
 
-#: g10/g10.c:170
-msgid "batch mode: never ask"
-msgstr "Stapel Modus: Keine Abfragen"
+#: g10/g10.c:63
+msgid "list keys"
+msgstr "Liste der Schl\374ssel"
 
-#: g10/g10.c:171
-msgid "assume yes on most questions"
-msgstr "\"Ja\" als Standard Antwort annehmen"
+#: g10/g10.c:64
+msgid "list keys and signatures"
+msgstr "Liste der Schl\374ssel und deren Signaturen"
 
-#: g10/g10.c:172
-msgid "assume no on most questions"
-msgstr "\"Nein\" als Standard Antwort annehmen"
+#: g10/g10.c:65
+msgid "check key signatures"
+msgstr "Signaturen der Schl\374ssel pr\374fen"
 
-#: g10/g10.c:173
-msgid "generate a new key pair"
-msgstr "Ein neues Schlüsselpaar erzeugen"
+#: g10/g10.c:66
+msgid "list keys and fingerprints"
+msgstr "Liste der Schl\374ssel und deren \"Fingerprints\""
 
-#: g10/g10.c:76
-msgid "remove key from the public keyring"
-msgstr "Schlüssel entfernen"
+#: g10/g10.c:67
+msgid "list secret keys"
+msgstr "Liste der geheimen Schl\374ssel"
 
-#: g10/g10.c:79
-msgid "generate a revocation certificate"
-msgstr "Ein \"Revocation\" Zertifikat erzeugen"
+#: g10/g10.c:69
+msgid "generate a new key pair"
+msgstr "Ein neues Schl\374sselpaar erzeugen"
 
-#: g10/g10.c:176
+#: g10/g10.c:70
+msgid "add a subkey to a key pair"
+msgstr "Einen Sekund\344rschl\374ssel dem Prim\344rschl\374ssel hinzuf\374gen"
+
+#: g10/g10.c:71
 msgid "make a signature on a key in the keyring"
-msgstr "Schlüssel signieren"
+msgstr "Schl\374ssel signieren"
 
-#: g10/g10.c:177
-msgid "store only"
-msgstr "nur speichern"
+#: g10/g10.c:72
+msgid "remove key from the public keyring"
+msgstr "Schl\374ssel entfernen"
 
-#: g10/g10.c:178
-msgid "check signatures on a key in the keyring"
-msgstr "Schlüssel Signaturen prüfen"
+#: g10/g10.c:73
+msgid "edit a key signature"
+msgstr "Editieren de Schl\374ssel Signaturen"
 
-#: g10/g10.c:179
-msgid "add this keyring to the list of keyrings"
-msgstr ""
+#: g10/g10.c:74
+msgid "change the passphrase of your secret keyring"
+msgstr "Die \"Passphrase\" des geheimen Schl\374ssels \344ndern"
 
-#: g10/g10.c:180
-msgid "|filename|make a signature"
-msgstr "|dateiname|Eine Signatur erzeugen"
+#: g10/g10.c:75
+msgid "generate a revocation certificate"
+msgstr "Ein \"Revocation\" Zertifikat erzeugen"
 
-#: g10/g10.c:61
-msgid "|filename|make a clear text signature"
-msgstr "|dateiname|Eine Klartext Signatur erzeugen"
+#: g10/g10.c:77
+msgid "export keys"
+msgstr "Schl\374ssel exportieren"
 
-#: g10/g10.c:181
-msgid "use canonical text mode"
-msgstr "Text Modus benutzen"
+#: g10/g10.c:79
+msgid "import/merge keys"
+msgstr "Schl\374ssel importieren/kombinieren"
 
-#: g10/g10.c:182
-msgid "make a detached signature"
-msgstr "Eine abgetrennte Signatur erzeugen"
+#: g10/g10.c:80
+msgid "list only the sequence of packets"
+msgstr "Lediglich die Struktur der Daten Packete anzeigen"
 
-#: g10/g10.c:183
-msgid "encrypt data"
-msgstr "Daten verschlüsseln"
+#: g10/g10.c:83
+msgid "De-Armor a file or stdin"
+msgstr "\"De-Armor\" einer Datei oder stdin"
 
-#: g10/g10.c:64
-msgid "encryption only with symmetric cipher"
-msgstr "Daten nur symmetrisch verschlüsseln"
+#: g10/g10.c:84
+msgid "En-Armor a file or stdin"
+msgstr "\"En-Armor\" einer Datei oder stdin"
 
-#: g10/g10.c:184
-msgid "decrypt data (default)"
-msgstr "Daten enschlüsseln"
+#: g10/g10.c:85
+msgid "|algo [files]|print message digests"
+msgstr "|algo [files]|Hashwerte der Dateien ausgeben"
 
+#: g10/g10.c:86
+msgid "print all message digests"
+msgstr "Message-Digests f\374r die Eingabedaten ausgeben"
 
-#: g10/g10.c:67
-msgid "verify a signature"
-msgstr "Signatur prüfen"
+#: g10/g10.c:91
+msgid ""
+"@\n"
+"Options:\n"
+" "
+msgstr ""
+"@\n"
+"Optionen:\n"
+" "
 
-#: g10/g10.c:185
+#: g10/g10.c:93
+msgid "create ascii armored output"
+msgstr "Ausgabe mit ASCII Armor versehen"
+
+#: g10/g10.c:95
 msgid "use this user-id to sign or decrypt"
 msgstr "Mit dieser User-ID signieren"
 
-#: g10/g10.c:186
+#: g10/g10.c:96
 msgid "use this user-id for encryption"
-msgstr "Verschlüsseln für diese User-ID"
+msgstr "Verschl\374sseln f\374r diese User-ID"
 
-#: g10/g10.c:187
-msgid "list keys"
-msgstr "Liste der Schlüssel"
+#: g10/g10.c:97
+msgid "|N|set compress level N (0 disables)"
+msgstr "Kompressionsstufe auf N setzen (0 f\374r keine Kompression)"
 
+#: g10/g10.c:98
+msgid "use canonical text mode"
+msgstr "Text Modus benutzen"
 
-#: g10/g10.c:70
-msgid "list keys and signatures"
-msgstr "Liste der Schlüssel und deren Signaturen"
+#: g10/g10.c:100
+msgid "use as output file"
+msgstr "dies als Ausgabedatei benutzen"
 
-#: g10/g10.c:71
-msgid "check key signatures"
-msgstr "Signaturen der Schlüssel prüfen"
+#: g10/g10.c:101
+msgid "verbose"
+msgstr "detailierte Informationen"
 
-#: g10/g10.c:72
-msgid "list keys and fingerprints"
-msgstr "Liste der Schlüssel und deren \"Fingerprints\""
+#: g10/g10.c:102
+msgid "do not make any changes"
+msgstr "Keine wirklichen \304nderungen durchf\374hren"
 
-#: g10/g10.c:188
-msgid "set debugging flags"
-msgstr "Debug-Flags einschalten"
+#: g10/g10.c:103
+msgid "batch mode: never ask"
+msgstr "Stapel Modus: Keine Abfragen"
 
-#: g10/g10.c:189
-msgid "enable full debugging"
-msgstr "Alle Debug-Flags einschalten"
+#: g10/g10.c:104
+msgid "assume yes on most questions"
+msgstr "\"Ja\" als Standard Antwort annehmen"
 
-#: g10/g10.c:194
-msgid "print all message digests"
-msgstr "Message-Digests für die Eingabedaten ausgeben"
+#: g10/g10.c:105
+msgid "assume no on most questions"
+msgstr "\"Nein\" als Standard Antwort annehmen"
+
+#: g10/g10.c:106
+msgid "add this keyring to the list of keyrings"
+msgstr "Den \366ffentlichen Schl\374sselring mitbenutzen"
 
-#: g10/g10.c:195
+#: g10/g10.c:107
 msgid "add this secret keyring to the list"
-msgstr "Den geheimen Schlüsselring mitbenutzen"
+msgstr "Den geheimen Schl\374sselring mitbenutzen"
+
+#: g10/g10.c:108
+msgid "|NAME|use NAME as default secret key"
+msgstr "|NAME|NAME als voreingestellten Schl\374ssel benutzen"
 
-#: g10/g10.c:196
+#: g10/g10.c:109
 msgid "read options from file"
 msgstr "Optionen aus der Datei lesen"
 
-#: g10/g10.c:199
-msgid "list only the sequence of packets"
-msgstr "Lediglich die Struktur der Daten Packete anzeigen"
-
-#: g10/g10.c:202
-msgid "edit a key signature"
-msgstr "Editieren de Schlüssel Signaturen"
-
-#: g10/g10.c:203
-msgid "change the passphrase of your secret keyring"
-msgstr "Die \"Passphrase\" des geheimen Schlüssels ändern"
-
-#: g10/g10.c:205
-msgid "select default cipher algorithm"
-msgstr "Den Cipher Algorithmus auswählen"
-
-#: g10/g10.c:206
-msgid "select default public key algorithm"
-msgstr "Den Public-Key Algorithmus auswählen"
+#: g10/g10.c:111
+msgid "set debugging flags"
+msgstr "Debug-Flags einschalten"
 
-#: g10/g10.c:207
-msgid "select default message digest algorithm"
-msgstr "Den Message-Digest Algorithmus auswählen"
+#: g10/g10.c:112
+msgid "enable full debugging"
+msgstr "Alle Debug-Flags einschalten"
 
+#: g10/g10.c:113
+msgid "|FD|write status info to this FD"
+msgstr "|FD|Status Informatiuon auf FD ausgeben"
 
-#: g10/g10.c:212
+#: g10/g10.c:114
 msgid "do not write comment packets"
 msgstr "Keine Kommentarpackete schreiben"
 
-#: g10/g10.c:213
+#: g10/g10.c:115
 msgid "(default is 1)"
 msgstr "(voreingestellt ist 1)"
 
-#: g10/g10.c:214
+#: g10/g10.c:116
 msgid "(default is 3)"
 msgstr "(voreingestellt ist 3)"
 
-#: g10/g10.c:81
-msgid "export keys"
-msgstr "Schlüssel exportieren"
+#: g10/g10.c:117
+msgid "|file|load extension module"
+msgstr "|FILE|Erweierungsmodul |FILE| laden"
 
-#: g10/g10.c:82
-msgid "import/merge keys"
-msgstr "Schlüssel importieren/kombinieren"
+#: g10/g10.c:118
+msgid "emulate the mode described in RFC1991"
+msgstr "Den in RFC1991 beschriebenen Modus emulieren"
 
-#: g10/g10.c:85
-msgid "De-Armor a file or stdin"
-msgstr "\"De-Armor\" einer Datei oder stdin"
-
-#: g10/g10.c:86
-msgid "En-Armor a file or stdin"
-msgstr "\"En-Armor\" einer Datei oder stdin"
-
-
-#: g10/g10.c:282
-msgid "note: no default option file '%s'\n"
-msgstr "Notiz: Keine voreingestellte Optionen Datei '%s' vorhanden\n"
-
-#: g10/g10.c:285
-msgid "option file '%s': %s\n"
-msgstr "Opionen Datei '%s': %s\n"
-
-#: g10/g10.c:290
-msgid "reading options from '%s'\n"
-msgstr "Optionen werden von '%s' gelesen\n"
+#: g10/g10.c:120
+msgid "|NAME|use cipher algorithm NAME"
+msgstr "|NAME|Den Cipher-Algorithmus NAME benutzen"
 
-#: g10/g10.c:382
-msgid "selected cipher algorithm is invalid\n"
-msgstr "Der ausgewählte Cipher Algorithmus ist ungültig\n"
+#: g10/g10.c:121
+msgid "|NAME|use message digest algorithm NAME"
+msgstr "|NAME|Den Hash-Algorithmus NAME benutzen"
 
-#: g10/g10.c:386
-msgid "selected pubkey algorithm is invalid\n"
-msgstr "Der ausgewählte Public-Key Algorithmus ist ungültig\n"
+#: g10/g10.c:122
+msgid "|N|use compress algorithm N"
+msgstr "|N|Den Komressionsalgorithmus N benutzen"
 
-#: g10/g10.c:390
-msgid "selected digest algorithm is invalid\n"
-msgstr "Der ausgewählte Message-Digest Algorithmus ist ungültig\n"
-
-#: g10/g10.c:394
-msgid "completes-needed must be greater than 0\n"
-msgstr "completes-needed müßen größer als 0 sein\n"
-
-#: g10/g10.c:398
-msgid "marginals-needed must be greater than 1\n"
-msgstr "marginals-needed müßen größer als 1 sein\n"
-
-#: g10/g10.c:462
-msgid "failed to initialize the TrustDB: %s\n"
-msgstr "Die Trust-DB kann nicht initialisiert werden: %s\n"
-
-#: g10/g10.c:554 g10/g10.c:571 g10/g10.c:660
-msgid "can't open '%s'\n"
-msgstr "Datei '%s' kann nicht geöffnet werden\n"
-
-#: g10/g10.c:799
-msgid "can't open %s: %s\n"
-msgstr "Datei '%s' kann nicht geöffnet werden: %s\n"
-
-#: g10/g10.c:113
-msgid "write status info to this fd"
-msgstr "Status Informationen auf diesen FD schreiben"
-
-#: g10/g10.c:124
+#: g10/g10.c:130
 msgid ""
 "@\n"
 "Examples:\n"
@@ -369,99 +286,179 @@ msgstr ""
 "@\n"
 "Beispiele:\n"
 "\n"
-" -se -r Bob [file]          Signieren und verschlüsseln für Benutzer Bob\n"
+" -se -r Bob [file]          Signieren und verschl\374sseln f\374r Benutzer Bob\n"
 " -sat [file]                Eine Klartext Signatur erzeugen\n"
 " -sb  [file]                Eine abgetrennte Signatur erzeugen\n"
-" -k   [userid]              Die Schllüssel anzeigen\n"
+" -k   [userid]              Die Schll\374ssel anzeigen\n"
 " -kc  [userid]              Die \"Fingerprints\" anzeigen\n"
 
+#: g10/g10.c:211
+msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
+msgstr "Berichte \374ber Wanzen an <gnupg-bugs|gnu.org>.\n"
+
+#: g10/g10.c:216
+msgid "Usage: gpgm [options] [files] (-h for help)"
+msgstr "Aufruf: gpgm [Optionen] [Dateien] (-h f\374r Hilfe)"
+
+#: g10/g10.c:218
+msgid "Usage: gpg [options] [files] (-h for help)"
+msgstr "Aufruf: gpg [Optionen] [Dateien] (-h f\374r Hilfe)"
+
+#: g10/g10.c:223
+msgid ""
+"Syntax: gpgm [options] [files]\n"
+"GNUPG maintenance utility\n"
+msgstr ""
+"Syntax: gpgm [options] [files]\n"
+"GNUPG Wartungs Hilfsmittel\n"
+
+#: g10/g10.c:226
+msgid ""
+"Syntax: gpg [options] [files]\n"
+"sign, check, encrypt or decrypt\n"
+"default operation depends on the input data\n"
+msgstr ""
+"Aufruf: gpg [Optionen] [Dateien]\n"
+"Signieren, pr\374fen, verschl\374sseln, entschl\374sseln\n"
+"Die voreingestellte Operation ist abh\344ngig von den Eingabedaten\n"
+
+#: g10/g10.c:303
+msgid "usage: gpgm [options] "
+msgstr "Aufruf: gpgm [Optionen] "
+
+#: g10/g10.c:305
+msgid "usage: gpg [options] "
+msgstr "Aufruf: gpg [Optionen] "
+
+#: g10/g10.c:346
+msgid "conflicting commands\n"
+msgstr "Widersprechende Kommandos\n"
+
+#: g10/g10.c:359
+msgid "selected cipher algorithm is invalid\n"
+msgstr "Der ausgew\344hlte Cipher Algorithmus ist ung\374ltig\n"
+
+#: g10/g10.c:361
+msgid "selected digest algorithm is invalid\n"
+msgstr "Der ausgew\344hlte Message-Digest Algorithmus ist ung\374ltig\n"
+
+#: g10/g10.c:363
+msgid "compress algorithm must be in range %d..%d\n"
+msgstr "Der Kompressionsalgorithmus muss %d bis %d sein\n"
+
+#: g10/g10.c:365
+msgid "completes-needed must be greater than 0\n"
+msgstr "completes-needed m\374\337en gr\366\337er als 0 sein\n"
+
+#: g10/g10.c:367
+msgid "marginals-needed must be greater than 1\n"
+msgstr "marginals-needed m\374\337en gr\366\337er als 1 sein\n"
+
+#: g10/g10.c:463
+msgid "note: no default option file '%s'\n"
+msgstr "Notiz: Keine voreingestellte Optionen Datei '%s' vorhanden\n"
+
+#: g10/g10.c:467
+msgid "option file '%s': %s\n"
+msgstr "Optionen Datei '%s': %s\n"
+
+#: g10/g10.c:474
+msgid "reading options from '%s'\n"
+msgstr "Optionen werden von '%s' gelesen\n"
 
+#: g10/g10.c:693
+msgid "failed to initialize the TrustDB: %s\n"
+msgstr "Die Trust-DB kann nicht initialisiert werden: %s\n"
 
-#: g10/g10.c:666
+#: g10/g10.c:699
 msgid "--store [filename]"
 msgstr "--store [Dateiname]"
 
-#. encrypt the given file only with the symmetric cipher
-#: g10/g10.c:674
+#: g10/g10.c:707
 msgid "--symmetric [filename]"
 msgstr "--symmetric [Dateiname]"
 
-#: g10/g10.c:682
+#: g10/g10.c:715
 msgid "--encrypt [filename]"
 msgstr "--encrypt [Dateiname]"
 
-#: g10/g10.c:695
+#: g10/g10.c:728
 msgid "--sign [filename]"
 msgstr "--sign [Dateiname]"
 
-#: g10/g10.c:708
+#. sign and encrypt the given file
+#: g10/g10.c:741
 msgid "--sign --encrypt [filename]"
 msgstr "--sign --encrypt [Dateiname]"
 
-#. make a clearsig
-#: g10/g10.c:722
+#: g10/g10.c:755
 msgid "--clearsign [filename]"
 msgstr "--clearsign [Dateiname]"
 
-#: g10/g10.c:734
+#: g10/g10.c:767
 msgid "--decrypt [filename]"
 msgstr "--decrypt [Dateiname]"
 
-#: g10/g10.c:742
+#: g10/g10.c:775
 msgid "--sign-key username"
 msgstr "--sign-key Benutzername"
 
-#: g10/g10.c:750
-msgid "--edit-sig username"
-msgstr "--edit-sig Benutzername"
+#. Edit a key signature
+#: g10/g10.c:783
+msgid "--edit-key username"
+msgstr "--deit-key Benutzername"
 
-#: g10/g10.c:758
+#: g10/g10.c:791
 msgid "--delete-secret-key username"
 msgstr "--delete-secret-key Benutzername"
 
-#: g10/g10.c:761
+#: g10/g10.c:794
 msgid "--delete-key username"
 msgstr "--delete-key Benutzername"
 
-#. no arg: use default, 1 arg use this one
-#: g10/g10.c:769
+#: g10/g10.c:802
 msgid "--change-passphrase [username]"
 msgstr "--change-passphrase [Benutzername]"
 
-#: g10/g10.c:810
+#. -kv userid keyring
+#: g10/encode.c:200 g10/g10.c:826 g10/keylist.c:79 g10/trustdb.c:358
+msgid "can't open %s: %s\n"
+msgstr "Datei '%s' kann nicht ge\366ffnet werden: %s\n"
+
+#: g10/g10.c:837
 msgid "-k[v][v][v][c] [userid] [keyring]"
 msgstr "-h[v][v][v][c] [Benutzername] [Keyring]"
 
-#: g10/g10.c:857
+#: g10/g10.c:897
 msgid "dearmoring failed: %s\n"
 msgstr "De-Armor fehlgeschlagen: %s\n"
 
-#: g10/g10.c:865
+#: g10/g10.c:905
 msgid "enarmoring failed: %s\n"
 msgstr "En-Armor fehlgeschlagen: %s\n"
 
+#: g10/g10.c:961
+msgid "invalid hash algorithm '%s'\n"
+msgstr "Ung\374ltiger Hash Algorithmus '%s'\n"
 
+#: g10/g10.c:1014
+msgid "[filename]"
+msgstr "[Dateiname]"
 
+#: g10/decrypt.c:59 g10/g10.c:1016 g10/verify.c:66
+msgid "can't open '%s'\n"
+msgstr "Datei '%s' kann nicht ge\366ffnet werden\n"
 
-
-
-
-
-
-#: g10/pkclist.c:157
-msgid ""
-"No ownertrust values changed.\n"
-"\n"
-msgstr "Keine \"Ownertrust\" Werte geändert.\n"
-
-
+#: g10/g10.c:1061
+msgid "RSA keys are depreciated; please consider creating a new key and use this key in the future\n"
+msgstr "RSA Schl\374ssel sind nicht erw\374nscht; bitte denken Sie dar\374ber nach einen neuen Schl\374ssel zu erzeugen und diesen in Zukunft zu benutzen\n"
 
 #: g10/pkclist.c:65
 msgid ""
 "No ownertrust defined for %lu:\n"
 "%4u%c/%08lX %s \""
 msgstr ""
-"Es ist kein \"Ownertrust\" für %lu definiert:\n"
+"Es ist kein \"Ownertrust\" f\374r %lu definiert:\n"
 "%4u%c/%08lX %s \""
 
 #: g10/pkclist.c:72
@@ -482,10 +479,10 @@ msgstr ""
 "\"\n"
 "\n"
 "Bitte entscheiden Sie, in wieweit Sie diesem User zutrauen,\n"
-"eines anderen Users Key korrekt zu signieren (Vergleich mit dem Paß,\n"
+"eines anderen Users Key korrekt zu signieren (Vergleich mit dem Pa\337,\n"
 "vergleichen der Fingerprints aus unterschiedlichen Quellen ...)?\n"
 "\n"
-" 1 = Weiß nicht so recht\n"
+" 1 = Wei\337 nicht so recht\n"
 " 2 = Neeh, dem traue ich das nicht zu\n"
 " 3 = Ich vertraue ihm normalerweise\n"
 " 4 = Ich vertraue ihm immer\n"
@@ -502,6 +499,10 @@ msgid ""
 "to any 3rd party.  We need it to implement the web-of-trust; it has nothing\n"
 "to do with the (implicitly created) web-of-certificates.\n"
 msgstr ""
+"Sie m\374\337en selbt entscheiden, welchen Wert Sie hier eintragen; dieser Wert\n"
+"wird niemals an eine dritte Seite weitergegeben.  Wir brauchen diesen Wert\n"
+"um das Netz-des-Vertrauens aufzubauen.  Dieses hat nichts mit dem (impliziet\n"
+"erzeugten) Netz-der-Zertifikate zu tun.\n"
 
 #: g10/pkclist.c:108
 msgid "You will see a list of signators etc. here\n"
@@ -513,10 +514,15 @@ msgid ""
 "can assign some missing owner trust values.\n"
 "\n"
 msgstr ""
-"Ein gültiger Trust Path konnte für diesen Key nicht gefunden werden.\n"
-"Mal sehen ob wir now weitere Ownertrust Werte zuordnen können.\n"
+"Ein g\374ltiger Trust Path konnte f\374r diesen Key nicht gefunden werden.\n"
+"Mal sehen ob wir now weitere Ownertrust Werte zuordnen k\366nnen.\n"
 "\n"
 
+#: g10/pkclist.c:157
+msgid ""
+"No ownertrust values changed.\n"
+"\n"
+msgstr "Keine \"Ownertrust\" Werte ge\344ndert.\n"
 
 #: g10/pkclist.c:267
 msgid ""
@@ -525,12 +531,15 @@ msgid ""
 "the next question with yes\n"
 "\n"
 msgstr ""
-"Es ist NICHT sicher, daß der Key dem vorgeblichen Besitzer gehört.\n"
-"Wenn Sie *wirklich* wissen, was Sie tun, können Sie die nächste\n"
+"Es ist NICHT sicher, da\337 der Key dem vorgeblichen Besitzer geh\366rt.\n"
+"Wenn Sie *wirklich* wissen, was Sie tun, k\366nnen Sie die n\344chste\n"
 "Frage mit ja beantworten\n"
 
+#: g10/pkclist.c:278
+msgid "WARNING: Using untrusted key!\n"
+msgstr "WARNUNG: Ein Schl\374ssel ohne gesichertes Vertrauen wird benutzt!\n"
 
-#: g10/pkclist.c:304
+#: g10/pkclist.c:308
 msgid ""
 "You did not specify a user ID. (you may use \"-r\")\n"
 "\n"
@@ -538,87 +547,146 @@ msgstr ""
 "Sie gaben keine User-ID angegeben. (benutzen Sie die Option \"-r\")\n"
 "\n"
 
-
-#: g10/pkclist.c:308
+#: g10/pkclist.c:312
 msgid "Enter the user ID: "
 msgstr "Geben Sie die User-ID ein: "
 
+#: g10/pkclist.c:323
+msgid "No such user ID.\n"
+msgstr "Keine solche User-ID.\n"
+
+#: g10/pkclist.c:357 g10/pkclist.c:384
+msgid "%s: skipped: %s\n"
+msgstr "%s: \374bergangen: %s\n"
 
+#: g10/pkclist.c:365
+msgid "%s: error checking key: %s\n"
+msgstr "%s: Fehler beim pr\374fen des Schl\374ssels: %s\n"
 
-#: g10/keygen.c:109
+#: g10/pkclist.c:391
+msgid "no valid addressees\n"
+msgstr "Keine g\374ltigen Adressaten"
+
+#: g10/keygen.c:122
 msgid "writing self signature\n"
 msgstr "Die Selbst-Signatur wird geschrieben\n"
 
-#: g10/keygen.c:299
-msgid "Key generation can only be used in interactive mode\n"
-msgstr "Die Schlüsselerzeugung kann nur im interaktiven Modus benutzt werden\n"
+#: g10/keygen.c:160
+msgid "writing key binding signature\n"
+msgstr "schreiben der \"key-binding\" Signatur\n"
 
-#: g10/keygen.c:301
-msgid ""
-"Please select the algorithm to use:\n"
-"   (1) ElGamal is the suggested one.\n"
-"   (2) DSA can only be used for signatures.\n"
-msgstr ""
-"Bitte wählen Sie den zu benutzenden Algorithmus aus:\n"
-"   (1) ElGamal wird empfohlen.\n"
-"   (2) DSA kann nur für Signaturen verwendet werden.\n"
+#: g10/keygen.c:382
+msgid "Please select what kind of key you want:\n"
+msgstr "Bitte w\344hlen Sie welche Art von Schl\374ssel is m\366chten:\n"
+
+#: g10/keygen.c:384
+msgid "   (%d) DSA and ElGamal (default)\n"
+msgstr "   (%d) DSA und ElGamal (voreingestellt)\n"
+
+#: g10/keygen.c:385
+msgid "   (%d) ElGamal (sign and encrypt)\n"
+msgstr "   (%d) ElGamal (signieren und verschl\374sseln)\n"
 
-#: g10/keygen.c:314
-msgid "Your selection? (1,2,3) "
-msgstr "Ihre Auswahl? (1,2,3) "
+#: g10/keygen.c:386
+msgid "   (%d) ElGamal (encrypt only)\n"
+msgstr "   (%d) ElGamal (nur  verschl\374sseln)\n"
+
+#: g10/keygen.c:387
+msgid "   (%d) DSA (sign only)\n"
+msgstr "   (%d) DSA (nur signieren)\n"
+
+#: g10/keygen.c:388
+msgid "   (%d) ElGamal in a v3 packet\n"
+msgstr "   ((%d) ElGamal in einem v4 Packet\n"
+
+#: g10/keygen.c:392
+msgid "Your selection? "
+msgstr "Ihre Auswahl? "
 
-#: g10/keygen.c:316
-msgid "Your selection? (1,2) "
-msgstr "Ihre Auswahl? (1,2) "
+#: g10/keygen.c:418
+msgid "Invalid selection.\n"
+msgstr "Ung\374ltige Auswahl.\n"
 
-#: g10/keygen.c:343
+#: g10/keygen.c:430
 msgid ""
 "About to generate a new %s keypair.\n"
 "              minimum keysize is  768 bits\n"
 "              default keysize is 1024 bits\n"
 "    highest suggested keysize is 2048 bits\n"
 msgstr ""
-"Es wird ein neues %s Schlüsselpaar erzeugt.\n"
-"              kleinste Schlüssellänge ist  768 bits\n"
-"              standard Schlüssellänge ist 1024 bits\n"
-"      größte sinnvolle Schlüssellänge ist 2048 bits\n"
+"Es wird ein neues %s Schl\374sselpaar erzeugt.\n"
+"              kleinste Schl\374ssell\344nge ist  768 bits\n"
+"              standard Schl\374ssell\344nge ist 1024 bits\n"
+"      gr\366\337te sinnvolle Schl\374ssell\344nge ist 2048 bits\n"
 
-#: g10/keygen.c:351
+#: g10/keygen.c:436
 msgid "What keysize do you want? (1024) "
-msgstr "Welche Schlüssellänge wünschen Sie? (1024)"
+msgstr "Welche Schl\374ssell\344nge w\374nschen Sie? (1024)"
 
-#: g10/keygen.c:357
+#: g10/keygen.c:441
 msgid "DSA only allows keysizes from 512 to 1024\n"
-msgstr ""
+msgstr "DSA erlaubt nur Schl\374ssell\344ngen von 512 bis 1024\n"
 
-#: g10/keygen.c:359
+#: g10/keygen.c:443
 msgid "keysize too small; 768 is smallest value allowed.\n"
-msgstr "zu kurz; 768 ist die kleinste mögliche Schlüssellänge.\n"
+msgstr "zu kurz; 768 ist die kleinste m\366gliche Schl\374ssell\344nge.\n"
 
-#: g10/keygen.c:361
+#: g10/keygen.c:445
 msgid "Keysizes larger than 2048 are not suggested, because computations take REALLY long!\n"
-msgstr ""
-"Schlüssellängen größer als 2048 werden nicht empfohlen, da die "
-"Berechnungen dann WIRKLICH lange brauchen\n"
+msgstr "Schl\374ssell\344ngen gr\366\337er als 2048 werden nicht empfohlen, da die Berechnungen dann WIRKLICH lange brauchen\n"
 
-#: g10/keygen.c:363
+#: g10/keygen.c:447
 msgid "Are you sure, that you want this keysize? "
-msgstr "Sind Sie sicher, daß Sie diese Schlüssellänge wünschen? "
+msgstr "Sind Sie sicher, da\337 Sie diese Schl\374ssell\344nge w\374nschen? "
 
-#: g10/keygen.c:367
+#: g10/keygen.c:451
 msgid "Okay, but keep in mind that your monitor and keyboard radiation is also very vulnerable to attacks!\n"
-msgstr "Gut, aber bitte denken Sie auch daran, daß Monitor und Tastatur "
-"Daten abstrahlen und diese leicht mitgelesen werden können.\n"
+msgstr "Gut, aber bitte denken Sie auch daran, da\337 Monitor und Tastatur Daten abstrahlen und diese leicht mitgelesen werden k\366nnen.\n"
+
+#: g10/keygen.c:459
+msgid "Do you really need such a large keysize? "
+msgstr "Brauchen Sie wirklich eine derartig gro\337e Schl\374ssell\344nge? "
 
-#: g10/keygen.c:377
+#: g10/keygen.c:470
 msgid "Requested keysize is %u bits\n"
-msgstr "Die verlangte Schlüssellänge ist %u Bits\n"
+msgstr "Die verlangte Schl\374ssell\344nge ist %u Bits\n"
 
-#: g10/keygen.c:380 g10/keygen.c:384
+#: g10/keygen.c:473 g10/keygen.c:477
 msgid "rounded up to %u bits\n"
 msgstr "aufgerundet auf %u Bits\n"
 
-#: g10/keygen.c:391
+#: g10/keygen.c:489
+msgid ""
+"Please specify how long the key should be valid.\n"
+"         0 = key does not expire\n"
+"      <n>  = key expires in n days\n"
+"      <n>w = key expires in n weeks\n"
+"      <n>m = key expires in n months\n"
+"      <n>y = key expires in n years\n"
+msgstr ""
+
+#: g10/keygen.c:504
+msgid "Key is valid for? (0) "
+msgstr "Der Schl\374ssel is g\374ltig f\374r? (0) "
+
+#: g10/keygen.c:515
+msgid "invalid value\n"
+msgstr "Ung\374ltiger Wert.\n"
+
+#: g10/keygen.c:520
+msgid "Key does not expire at all\n"
+msgstr "Der Schl\374ssel verf\344llt nie\n"
+
+#. print the date when the key expires
+#: g10/keygen.c:523
+msgid "Key expires at %s\n"
+msgstr "Der Schl\374ssel verf\344llt am %s\n"
+
+#: g10/keygen.c:528
+msgid "Is this correct (y/n)? "
+msgstr "Ist dies richtig? (y/n) "
+
+#: g10/keygen.c:557
 msgid ""
 "\n"
 "You need a User-ID to identify your key; the software constructs the user id\n"
@@ -627,115 +695,659 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Sie benötigen einen User-ID um Ihren Schlüssel eindeutig zu machen; das\n"
+"Sie ben\366tigen einen User-ID um Ihren Schl\374ssel eindeutig zu machen; das\n"
 "Programm baut diese User-ID aus Ihrem echten Namen, einem Kommentar und\n"
 "Ihrer Email Adresse in dieser Form auf:\n"
 "    \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
 "\n"
 
-
-
-#: g10/keygen.c:403
+#: g10/keygen.c:568
 msgid "Real name: "
 msgstr "Vorname, Nachname: "
 
-#: g10/keygen.c:407
+#: g10/keygen.c:572
 msgid "Invalid character in name\n"
-msgstr "Ungültiges Zeichen im Namen\n"
+msgstr "Ung\374ltiges Zeichen im Namen\n"
 
-#: g10/keygen.c:409
+#: g10/keygen.c:574
 msgid "Name may not start with a digit\n"
 msgstr "Der Name darf nicht mit einer Ziffer beginnen\n"
 
-#: g10/keygen.c:411
+#: g10/keygen.c:576
 msgid "Name must be at least 5 characters long\n"
-msgstr "Der Name muß min. 5 Zeichen lang sein\n"
+msgstr "Der Name mu\337 min. 5 Zeichen lang sein\n"
 
-#: g10/keygen.c:419
+#: g10/keygen.c:584
 msgid "Email address: "
 msgstr "Email Adresse: "
 
-#: g10/keygen.c:431
+#: g10/keygen.c:596
 msgid "Not a valid email address\n"
-msgstr "Email Adresse is ungültig\n"
+msgstr "Email Adresse is ung\374ltig\n"
 
-#: g10/keygen.c:439
+#: g10/keygen.c:604
 msgid "Comment: "
 msgstr "Kommentar: "
 
 #. no comment is okay
-#: g10/keygen.c:445
+#: g10/keygen.c:610
 msgid "Invalid character in comment\n"
-msgstr "Ungültiges Zeichen im Kommentar\n"
+msgstr "Ung\374ltiges Zeichen im Kommentar\n"
 
-#: g10/keygen.c:465
+#: g10/keygen.c:630
 msgid ""
 "You selected this USER-ID:\n"
 "    \"%s\"\n"
 "\n"
 msgstr ""
-"Sie haben diese User-ID gewählt:\n"
+"Sie haben diese User-ID gew\344hlt:\n"
 "    \"%s\"\n"
 "\n"
 
-#: g10/keygen.c:467
+#: g10/keygen.c:633
 msgid "Edit (N)ame, (C)omment, (E)mail or (O)kay? "
-msgstr "Ändern: N=Name, C=Kommentar, E=Email, O=Okay? "
+msgstr "\304ndern: N=Name, C=Kommentar, E=Email, O=Okay? "
 
-#: g10/keygen.c:499
+#: g10/keygen.c:672
 msgid ""
 "You need a Passphrase to protect your secret key.\n"
 "\n"
 msgstr ""
-"Sie benötigen eine \"passphrase\" um den geheimen Schlüssel zu schützen.\n"
+"Sie ben\366tigen eine \"passphrase\" um den geheimen Schl\374ssel zu sch\374tzen.\n"
 "\n"
 
-#: g10/keygen.c:508
+#: g10/keyedit.c:663 g10/keygen.c:680
+msgid "passphrase not correctly repeated; try again.\n"
+msgstr "\"passphrase\" nicht richtig wiederholt; noch einmal.\n"
+
+#: g10/keygen.c:686
 msgid ""
 "You don't want a passphrase - this is probably a *bad* idea!\n"
 "I will do it anyway.  You can change your passphrase at any time,\n"
 "using this program with the option \"--change-passphrase\"\n"
 "\n"
 msgstr ""
-"Sie möchten keine \"passphrase\" - Dies ist einen *schlechte* Idee!\n"
-"Es ist trotzdem möglich.  Sie können Ihre \"phassphrase\" jederzeit\n"
-"ändern, indem sie dieses Programm mit dem Kommando \"--change-passphrase\"\n"
+"Sie m\366chten keine \"passphrase\" - Dies ist einen *schlechte* Idee!\n"
+"Es ist trotzdem m\366glich.  Sie k\366nnen Ihre \"phassphrase\" jederzeit\n"
+"\344ndern, indem sie dieses Programm mit dem Kommando \"--change-passphrase\"\n"
 "aufrufen\n"
 "\n"
 
-
-#: g10/keygen.c:514
-msgid "passphrase not correctly repeated; try again.\n"
-msgstr "\"passphrase\" nicht richtig wiederholt; noch einmal.\n"
-
-#: g10/keygen.c:531
-msgid "writing public certificate to '%s'\n"
-msgstr "schreiben des öffentlichen Schlüssels nach '%s'\n"
-
-#: g10/keygen.c:532
-msgid "writing secret certificate to '%s'\n"
-msgstr "schreiben des geheimen Schlüssels nach '%s'\n"
-
-#: g10/keygen.c:544
+#: g10/keygen.c:707
 msgid ""
 "We need to generate a lot of random bytes. It is a good idea to perform\n"
 "some other action (work in another window, move the mouse, utilize the\n"
 "network and the disks) during the prime generation; this gives the random\n"
 "number generator a better chance to gain enough entropy.\n"
 msgstr ""
-"Wir müßen eine ganze Menge Zufallszahlen erzeugen.  Sie können dies\n"
-"unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas\n"
+"Wir m\374\337en eine ganze Menge Zufallszahlen erzeugen.  Sie k\366nnen dies\n"
+"unterst\374tzen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas\n"
 "tippen oder irgendwelche anderen Programme benutzen.\n"
 
-#: g10/keygen.c:611
+#: g10/keygen.c:753 g10/keygen.c:900
+msgid "Key generation can only be used in interactive mode\n"
+msgstr "Die Schl\374sselerzeugung kann nur im interaktiven Modus benutzt werden\n"
+
+#: g10/keygen.c:761
+msgid "DSA keypair will have 1024 bits.\n"
+msgstr "Der DSA Schl\374ssel wird 1024 bits haben.\n"
+
+#: g10/keygen.c:773
+msgid "writing public certificate to '%s'\n"
+msgstr "schreiben des \366ffentlichen Schl\374ssels nach '%s'\n"
+
+#: g10/keygen.c:774
+msgid "writing secret certificate to '%s'\n"
+msgstr "schreiben des geheimen Schl\374ssels nach '%s'\n"
+
+#: g10/keygen.c:851
 msgid "public and secret key created and signed.\n"
-msgstr "Öffentlichen und geheimen Schlüssel erzeugt und signiert.\n"
+msgstr "\326ffentlichen und geheimen Schl\374ssel erzeugt und signiert.\n"
+
+#: g10/keygen.c:853
+msgid ""
+"Note that this key cannot be used for encryption.  You may want to use\n"
+"the command \"--add-key\" to generate a secondary key for this purpose.\n"
+msgstr ""
+"Bitte beachten Sie, da\337 dieser Schl\374ssel nicht zum verschl\374sseln benutzt\n"
+"werden kann.  Sie k\366nnen aber mit dem Kommando \"--add-key\" einen\n"
+"Sekund\344rschl\374ssel zu diesem Schl\374ssel hinzuf\374gen.\n"
 
-#: g10/keygen.c:622
+#: g10/keygen.c:867 g10/keygen.c:1019
 msgid "Key generation failed: %s\n"
-msgstr "Schlüssel-Erzeugung fehlgeschlagen: %s\n"
+msgstr "Schl\374ssel-Erzeugung fehlgeschlagen: %s\n"
+
+#: g10/keygen.c:1014
+msgid "public and secret subkey created.\n"
+msgstr "\326ffentlicher und privater Schl\374ssel erzeugt.\n"
+
+#. prepare iobufs
+#: g10/encode.c:85
+msgid "%s: can't open: %s\n"
+msgstr "%s: kann nicht ge\366ffnet werden: %s\n"
+
+#: g10/encode.c:102
+msgid "error creating passphrase: %s\n"
+msgstr "Fehler beim erzeugen der \"Passphrase\": %s\n"
+
+#: g10/encode.c:138 g10/encode.c:236
+msgid "%s: warning: empty file\n"
+msgstr "%s: Achtung: Leere Datei.\n"
+
+#: g10/encode.c:206
+msgid "reading from '%s'\n"
+msgstr "Lesen von '%s'\n"
+
+#: g10/encode.c:351
+msgid "%s encrypted for: %s\n"
+msgstr "%s verschl\374sselt f\374r: %s\n"
+
+#: g10/import.c:105
+msgid "can't open file: %s\n"
+msgstr "Kann die Datei nicht \366ffnen: %s\n"
+
+#: g10/import.c:121
+msgid "skipping block of type %d\n"
+msgstr "\374berspringe den Block vom Typ %d\n"
+
+#: g10/import.c:131
+msgid "read error: %s\n"
+msgstr "Lesefehler: %s\n"
+
+#: g10/import.c:270 g10/import.c:425
+msgid "key %08lX: no user id\n"
+msgstr "Schl\374ssel %08lX: Keine User-ID\n"
+
+#: g10/import.c:280
+msgid "key %08lX: no valid user ids\n"
+msgstr "Schl\374ssel %08lX: Keine g\374ltigen User-IDs\n"
+
+#: g10/import.c:289 g10/import.c:492
+msgid "key %08lX: public key not found: %s\n"
+msgstr "Schl\374ssel %08lX: \326ffentlicher Schl\374ssel nicht gefunden: %s\n"
+
+#: g10/import.c:295
+msgid "no default public keyring\n"
+msgstr "Kein voreingestellter \366ffentlicher Schl\374sselring\n"
+
+#: g10/import.c:299
+msgid "writing to '%s'\n"
+msgstr "Schreiben au '%s'\n"
+
+#: g10/import.c:303 g10/import.c:356 g10/import.c:546
+msgid "can't lock public keyring: %s\n"
+msgstr ""
+
+#: g10/import.c:306
+msgid "can't write to keyring: %s\n"
+msgstr ""
+
+#: g10/import.c:309
+msgid "key %08lX: public key imported\n"
+msgstr "Sch\374ssel %08lX: \326ffentlicher Schl\374\374sel importiert\n"
+
+#: g10/import.c:317
+msgid "key %08lX: doesn't match our copy\n"
+msgstr "Sch\374ssel %08lX: Stimmt nich mit usnerer Kopie \374berein"
+
+#: g10/import.c:330 g10/import.c:501
+msgid "key %08lX: can't locate original keyblock: %s\n"
+msgstr ""
+
+#: g10/import.c:337 g10/import.c:508
+msgid "key %08lX: can't read original keyblock: %s\n"
+msgstr ""
+
+#. and write the keyblock back
+#: g10/import.c:353 g10/import.c:440 g10/import.c:543
+msgid "writing keyblock\n"
+msgstr ""
+
+#: g10/import.c:359 g10/import.c:549
+msgid "can't write keyblock: %s\n"
+msgstr "Der Schl\374sselblock kann nicht geschrieben werden: %s\n"
+
+#: g10/import.c:363
+msgid "key %08lX: 1 new user-id\n"
+msgstr "Sch\374ssel %08lX: 1 neue User-ID\n"
+
+#: g10/import.c:366
+msgid "key %08lX: %d new user-ids\n"
+msgstr "Sch\374ssel %08lX: %d neue User-IDs\n"
+
+#: g10/import.c:369
+msgid "key %08lX: 1 new signature\n"
+msgstr "Sch\374ssel %08lX: 1 neue Signatur"
+
+#: g10/import.c:372
+msgid "key %08lX: %d new signatures\n"
+msgstr "Sch\374ssel %08lX: %d neue Signaturen\n"
+
+#: g10/import.c:375
+msgid "key %08lX: 1 new subkey\n"
+msgstr "Sch\374ssel %08lX: 1 neuer Sekund\344rschl\374ssel\n"
+
+#: g10/import.c:378
+msgid "key %08lX: %d new subkeys\n"
+msgstr "Sch\374ssel %08lX: %d neue Sekund\344rschl\374ssel\n"
+
+#: g10/import.c:382
+msgid "key %08lX: not changed\n"
+msgstr "Sch\374ssel %08lX: Nich ge\344ndert\n"
+
+#: g10/import.c:443
+msgid "can't lock secret keyring: %s\n"
+msgstr ""
+
+#: g10/import.c:446
+msgid "can't write keyring\n"
+msgstr ""
+
+#. we are ready
+#: g10/import.c:449
+msgid "key %08lX: secret key imported\n"
+msgstr "Sch\374ssel %08lX: Privater schl\374ssel importiert\n"
+
+#. we can't merge secret keys
+#: g10/import.c:452
+msgid "key %08lX: already in secret keyring\n"
+msgstr "Sch\374ssel %08lX: Ist bereits im privaten Schl\374sselring\n"
 
+#: g10/import.c:456
+msgid "key %08lX: secret key not found: %s\n"
+msgstr "Sch\374ssel %08lX: Privaten Schl\374ssel nicht gefunden: %s\n"
 
+#: g10/import.c:486
+msgid "key %08lX: no public key - can't apply revocation certificate\n"
+msgstr "Sch\374ssel %08lX: Kein \366ffentlicher Schl\374ssel - Das \"Revokation\"-Zertifikat kann nicht angebracht werden\n"
 
+#: g10/import.c:519
+msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
+msgstr "Sch\374ssel %08lX: Ung\374ltiges \"Revocation\"-Zertifikat: %s - zur\374ckgewiesen\n"
 
+#. we are ready
+#: g10/import.c:552
+msgid "key %08lX: revocation certificate imported\n"
+msgstr "Sch\374ssel %08lX: \"Revocation\"-Zertifikat importiert\n"
 
+#: g10/import.c:582
+msgid "key %08lX: no user-id for signature\n"
+msgstr "Sch\374ssel %08lX: Keine User-ID f\374r Signatur\n"
+
+#: g10/import.c:589
+msgid "key %08lX: unsupported public key algorithm\n"
+msgstr "Sch\374ssel %08lX: \"Public Key\" Algorithmus wird nicht unterst\374tzt\n"
+
+#: g10/import.c:590
+msgid "key %08lX: invalid self-signature\n"
+msgstr "Sch\374ssel %08lX: Ung\374ltige Selbst-Signatur\n"
+
+#: g10/import.c:619
+msgid "key %08lX: skipped userid '"
+msgstr "Sch\374ssel %08lX: \374bergehe User-ID '"
+
+#: g10/import.c:642
+msgid "key %08lX: revocation certificate at wrong place - skipped\n"
+msgstr "Sch\374ssel %08lX: \"Revocation\"-Zertifikat an falschem Platz - \374bergangen\n"
+
+#: g10/import.c:649
+msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
+msgstr "Sch\374ssel %08lX: Ung\374ltiges \"Revocation\"-Zertifikat: %s - \374bergangen\n"
+
+#: g10/import.c:711
+msgid "key %08lX: revocation certificate added\n"
+msgstr "Sch\374ssel %08lX: \"Revocation\"-Zertifikat hinzugef\374gt\n"
+
+#: g10/import.c:774 g10/import.c:810
+msgid "key %08lX: our copy has no self-signature\n"
+msgstr "Sch\374ssel %08lX: Unser Kopie hat keine Selbst-Signatur\n"
+
+#: g10/keyedit.c:79
+msgid ""
+"Are you really sure that you want to sign this key:\n"
+"\n"
+msgstr "Sind Sie wirklich sicher, da\337 Sie diesen Schl\374ssel signieren wollen:\n"
+
+#: g10/keyedit.c:89
+msgid "Sign this key? "
+msgstr "Signieren? "
+
+#: g10/keyedit.c:145
+msgid "%d bad signatures\n"
+msgstr "%d schlechte Signaturen\n"
+
+#: g10/keyedit.c:147
+msgid "No public key for %d signatures\n"
+msgstr "Kein \366ffentlicher Schl\374ssel f\374r %d Signaturen\n"
+
+#: g10/keyedit.c:149
+msgid "%d signatures not checked due to errors\n"
+msgstr "%s Signaturen nicht aufgrund von Fehlern nicht gepr\374ft\n"
+
+#: g10/keyedit.c:176
+msgid "[User name not available] "
+msgstr "[Benuzername nicht verf\374gbar] "
+
+#: g10/keyedit.c:185
+msgid "This is a BAD signature!\n"
+msgstr "Dies ist eine FALSCHE Signatur!\n"
+
+#: g10/keyedit.c:187
+msgid "Public key not available.\n"
+msgstr "\326ffentlicher Sch\374ssel ist nicht verf\374gbar.\n"
+
+#: g10/keyedit.c:189
+msgid "The signature could not be checked!\n"
+msgstr "Die Signatur konnte nicht gepr\374ft werden!\n"
+
+#: g10/keyedit.c:192
+msgid "Skipped self-signature\n"
+msgstr "Selbst-Signatur \374bersprungen\n"
+
+#: g10/keyedit.c:197
+msgid "Remove this signature? "
+msgstr "Die Signatur entfernen? "
+
+#: g10/keyedit.c:209
+msgid "Do you really want to remove the selected signatures? "
+msgstr "M\366chten Sie die ausgew\344hlten Siganturen wirklich entfernen? "
+
+#: g10/keyedit.c:250 g10/keyedit.c:396 g10/keyedit.c:465
+msgid "%s: user not found\n"
+msgstr "%s: Benutzer nich gefunden\n"
+
+#: g10/keyedit.c:277 g10/keyedit.c:417
+msgid "Checking signatures of this public key certificate:\n"
+msgstr "Die Signaturen diese Zertifkats werden \374berpr\374ft:\n"
+
+#: g10/keyedit.c:295
+msgid "To you want to remove some of the invalid sigs? "
+msgstr "M\366chten Sie einige der ung\374ltigen Signauren entfernen? "
+
+#: g10/keyedit.c:315
+msgid "Already signed by keyid %08lX\n"
+msgstr "Ist bereits mit Schl\374ssel %08lX signiert.\n"
+
+#: g10/keyedit.c:327
+msgid "Nothing to sign\n"
+msgstr "Nicht zu signieren.\n"
+
+#: g10/keyedit.c:494
+msgid "there is a secret key for this public key!\n"
+msgstr "Es gibt einen privaten schl\374ssel zu diesem \366ffentlichen Schl\374ssel!\n"
+
+#: g10/keyedit.c:496
+msgid "use option \"--delete-secret-key\" to delete it first.\n"
+msgstr "Benutzen Sie das Kommando \"--delete-decret-key\" um ihn vorab zu entfernen.\n"
+
+#: g10/keyedit.c:508
+msgid "can't do that in batch-mode\n"
+msgstr "Dies kann im Batchmodus nicht durchgef\374hrt werden\n"
+
+#: g10/keyedit.c:512
+msgid "can't do that in batch-mode without \"--yes\"\n"
+msgstr "Dies kann im Batchmodus ohne \"--yes\" nicht durchgef\374hrt werden\n"
+
+#: g10/keyedit.c:532
+msgid "Delete this key from the keyring? "
+msgstr "Diesen Schl\374ssel aus dem Schl\374sselring l\366schen? "
+
+#. I think it is not required to check a passphrase; if
+#. * the user is so stupid as to let others access his secret keyring
+#. * (and has no backup) - it is up him to read some very
+#. * basic texts about security.
+#.
+#: g10/keyedit.c:541
+msgid "This is a secret key! - really delete? "
+msgstr "Dies is ein private Schl\374ssel! - Wirklich l\366schen? "
+
+#: g10/keyedit.c:628
+msgid "This key is not protected.\n"
+msgstr "Dieser Schl\374ssel ist nicht gesch\374tzt.\n"
+
+#: g10/keyedit.c:631
+msgid "Key is protected.\n"
+msgstr "Schl\374ssel ist gesch\374tzt.\n"
+
+#: g10/keyedit.c:650
+msgid "Can't edit this key: %s\n"
+msgstr "Dieser Sch\374ssel kann nicht editiert werden: %s\n"
+
+#: g10/keyedit.c:655
+msgid ""
+"Enter the new passphrase for this secret key.\n"
+"\n"
+msgstr ""
+"Geben Sie die neue \"Passphrase\" f\374r diesen privaten Schl\374ssel.\n"
+"\n"
+
+#: g10/keyedit.c:667
+msgid ""
+"You don't want a passphrase - this is probably a *bad* idea!\n"
+"\n"
+msgstr ""
+"Yie m\366chten keine \"Passphrase\" - dies ist wahrscheinlich eine *schlechte* Idee!\n"
+"\n"
+
+#: g10/keyedit.c:669
+msgid "Do you really want to do this? "
+msgstr "M\366chten Sie dies wirklich tun? "
+
+#: g10/mainproc.c:196
+msgid "public key decryption failed: %s\n"
+msgstr "Erzeugung des \366ffentlichen Schl\374ssels fehlgeschlagen: %s\n"
+
+#: g10/mainproc.c:224
+msgid "decryption failed: %s\n"
+msgstr "Enschl\374sselung fehlgeschlagen: %s\n"
+
+#: g10/mainproc.c:817
+msgid "Signature made %.*s using %s key ID %08lX\n"
+msgstr "Signatur wurde am %.*s mit %s Schl\374ssel %08lX erzeugt\n"
+
+#: g10/mainproc.c:823
+msgid "BAD signature from \""
+msgstr "FALSCHE Signatur von \""
+
+#: g10/mainproc.c:824
+msgid "Good signature from \""
+msgstr "Gute Signatur von \""
+
+#: g10/mainproc.c:833
+msgid "Can't check signature: %s\n"
+msgstr "Signatur kann nicht gepr\374ft werden: %s\n"
+
+#: g10/passphrase.c:116
+msgid ""
+"\n"
+"You need a passphrase to unlock the secret key for\n"
+"user: \""
+msgstr ""
+"\n"
+"Sie ben\366tigen eine \"Passphrase\" um den geheimen Schl\374ssel zu entsperren.\n"
+"Benutzer: \""
+
+#: g10/passphrase.c:125
+msgid "(%u-bit %s key, ID %08lX, created %s)\n"
+msgstr "(%u-bit %s Schl\374ssel, ID %08lX, erzeugt %s)\n"
+
+#: g10/plaintext.c:216
+msgid "can't open signed data '%s'\n"
+msgstr ""
+
+#: g10/seckey-cert.c:128
+msgid "Invalid passphrase; please try again ...\n"
+msgstr ""
+
+#: g10/sig-check.c:165 g10/trustdb.c:1755
+msgid "public key created in future (time warp or clock problem)\n"
+msgstr ""
+
+#: g10/sig-check.c:171
+msgid "warning: signature key expired %s\n"
+msgstr ""
+
+#: g10/trustdb.c:331
+msgid "can't create %s: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:360
+msgid "TrustDB %s is invalid\n"
+msgstr ""
+
+#: g10/trustdb.c:435 g10/trustdb.c:596
+msgid "trustdb: lseek failed: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:443
+msgid "trustdb: read failed (n=%d): %s\n"
+msgstr ""
+
+#: g10/trustdb.c:460
+msgid "%s: not a trustdb file\n"
+msgstr ""
+
+#: g10/trustdb.c:601
+msgid "trustdb: write failed (n=%d): %s\n"
+msgstr ""
+
+#: g10/trustdb.c:633
+msgid "%s: failed to append a record: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:680
+msgid "%s: search_db failed: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:724
+msgid "error reading record with local_id %lu: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:729
+msgid "record with local_id %lu is not a dir record\n"
+msgstr ""
+
+#: g10/trustdb.c:762
+msgid "%lu: error reading dir record: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:773
+msgid "%lu: error building sigs on the fly: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:780
+msgid "%lu: error re-reading dir record: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:807
+msgid "error reading sigrec: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:812
+msgid "chained sigrec %lu has a wrong owner\n"
+msgstr ""
+
+#: g10/trustdb.c:862
+msgid "keyid %08lX: secret key without public key\n"
+msgstr ""
+
+#: g10/trustdb.c:867
+msgid "keyid %08lX: secret and public key don't match\n"
+msgstr ""
+
+#: g10/trustdb.c:878
+msgid "keyid %08lX: can't put it into the trustdb\n"
+msgstr ""
+
+#: g10/trustdb.c:884
+msgid "keyid %08lX: query record failed\n"
+msgstr ""
+
+#: g10/trustdb.c:893
+msgid "keyid %08lX: already in ultikey_table\n"
+msgstr ""
+
+#: g10/trustdb.c:901
+msgid "enum_secret_keys failed: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:1169
+msgid "%lu: build_sigrecs: can't read dir record\n"
+msgstr ""
+
+#: g10/trustdb.c:1173
+msgid "%lu: build_sigrecs: can't read key record\n"
+msgstr ""
+
+#: g10/trustdb.c:1179
+msgid "build_sigrecs: get_keyblock_byfprint failed\n"
+msgstr ""
+
+#: g10/trustdb.c:1185
+msgid "build_sigrecs: check_sigs failed\n"
+msgstr ""
+
+#: g10/trustdb.c:1189
+msgid "build_sigrecs: self-signature missing\n"
+msgstr ""
+
+#: g10/trustdb.c:1195
+msgid "build_sigrecs: key has been revoked\n"
+msgstr ""
+
+#: g10/trustdb.c:1220
+msgid "set_signature_packets_local_id failed: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:1231 g10/trustdb.c:1256 g10/trustdb.c:1267
+msgid "build_sigrecs: write_record failed\n"
+msgstr ""
+
+#: g10/trustdb.c:1277
+msgid "update_dir_record: read failed\n"
+msgstr ""
+
+#: g10/trustdb.c:1282
+msgid "update_dir_record: write failed\n"
+msgstr ""
+
+#: g10/trustdb.c:1292
+msgid "trustdb: build_sigrecs: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:1511
+msgid "can't access %s: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:1527
+msgid "can't create directory '%s': %s\n"
+msgstr ""
+
+#: g10/trustdb.c:1531
+msgid "directory '%s' does not exist!\n"
+msgstr ""
+
+#: g10/trustdb.c:1732
+msgid "check_trust: read record failed\n"
+msgstr ""
+
+#. no local_id: scan the trustdb
+#: g10/trustdb.c:1738
+msgid "check_trust: search_record failed: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:1745
+msgid "failed to insert pubkey into trustdb: %s\n"
+msgstr ""
+
+#: g10/trustdb.c:1749
+msgid "pubkey not in trustdb - inserted as %lu\n"
+msgstr ""
+
+#: g10/trustdb.c:1761
+msgid "key expiration date is %s\n"
+msgstr ""
+
+#: g10/trustdb.c:1769
+msgid "check_trust: do_check failed: %s\n"
+msgstr ""
index 5baefcc..6619146 100644 (file)
@@ -1,3 +1,7 @@
+Tue Jul  7 11:49:25 1998  Werner Koch  (wk@isil.d.shuttle.de)
+
+       * logger.c (log_set_filename): New.
+
 Mon Jul  6 09:03:49 1998  Werner Koch  (wk@isil.d.shuttle.de)
 
        * strgutil.c (append_to_strlist): New.
index bd69322..3067ac4 100644 (file)
@@ -893,6 +893,8 @@ iobuf_peek(IOBUF a, byte *buf, unsigned buflen )
 {
     int n=0;
 
+    if( a->filter_eof )
+       return -1;
     if( !(a->d.start < a->d.len) ) {
        if( underflow(a) == -1 )
            return -1;
index 4ae7454..0f181d8 100644 (file)
@@ -73,6 +73,15 @@ print_prefix(const char *text)
        fprintf(stderr, "?%s: %s", pidstring, text );
 }
 
+static void
+print_prefix_f(const char *text, const char *fname)
+{
+    if( pgm_name )
+       fprintf(stderr, "%s%s:%s: %s", pgm_name, pidstring, fname, text );
+    else
+       fprintf(stderr, "?%s:%s: %s", pidstring, fname, text );
+}
+
 void
 g10_log_info( const char *fmt, ... )
 {
@@ -85,6 +94,17 @@ g10_log_info( const char *fmt, ... )
 }
 
 void
+g10_log_info_f( const char *fname, const char *fmt, ... )
+{
+    va_list arg_ptr ;
+
+    print_prefix_f("", fname);
+    va_start( arg_ptr, fmt ) ;
+    vfprintf(stderr,fmt,arg_ptr) ;
+    va_end(arg_ptr);
+}
+
+void
 g10_log_error( const char *fmt, ... )
 {
     va_list arg_ptr ;
@@ -97,6 +117,18 @@ g10_log_error( const char *fmt, ... )
 }
 
 void
+g10_log_error_f( const char *fname, const char *fmt, ... )
+{
+    va_list arg_ptr ;
+
+    print_prefix_f("", fname);
+    va_start( arg_ptr, fmt ) ;
+    vfprintf(stderr,fmt,arg_ptr) ;
+    va_end(arg_ptr);
+    errorcount++;
+}
+
+void
 g10_log_fatal( const char *fmt, ... )
 {
     va_list arg_ptr ;
@@ -110,6 +142,19 @@ g10_log_fatal( const char *fmt, ... )
 }
 
 void
+g10_log_fatal_f( const char *fname, const char *fmt, ... )
+{
+    va_list arg_ptr ;
+
+    print_prefix_f("fatal: ", fname);
+    va_start( arg_ptr, fmt ) ;
+    vfprintf(stderr,fmt,arg_ptr) ;
+    va_end(arg_ptr);
+    secmem_dump_stats();
+    exit(2);
+}
+
+void
 g10_log_bug( const char *fmt, ... )
 {
     va_list arg_ptr ;
@@ -149,6 +194,17 @@ g10_log_debug( const char *fmt, ... )
     va_end(arg_ptr);
 }
 
+void
+g10_log_debug_f( const char *fname, const char *fmt, ... )
+{
+    va_list arg_ptr ;
+
+    print_prefix_f("DBG: ", fname);
+    va_start( arg_ptr, fmt ) ;
+    vfprintf(stderr,fmt,arg_ptr) ;
+    va_end(arg_ptr);
+}
+
 
 
 void
index 03038df..8b8f71f 100644 (file)
@@ -92,7 +92,7 @@ POSUB = po
 RANLIB = ranlib
 USE_INCLUDED_LIBINTL = yes
 USE_NLS = yes
-VERSION = 0.3.1
+VERSION = 0.3.1a
 ZLIBS = 
 l =