summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRepo Admin <nobody@gnupg.org>2003-01-09 14:29:36 +0100
committerRepo Admin <nobody@gnupg.org>2003-01-09 14:29:36 +0100
commit7b6f1902d02b0cec4a12d7b44b8d4583baa5bc0b (patch)
tree6556ef3a9255ffea9ca1dce8015940d30aa9d890
parentTaken from NewPG (diff)
downloadgnupg2-7b6f1902d02b0cec4a12d7b44b8d4583baa5bc0b.tar.xz
gnupg2-7b6f1902d02b0cec4a12d7b44b8d4583baa5bc0b.zip
This commit was manufactured by cvs2svn to create branch
'GNUPG-1-9-BRANCH'.
-rw-r--r--agent/cache.c314
-rw-r--r--common/isascii.c29
-rw-r--r--common/putc_unlocked.c31
-rw-r--r--common/signal.c226
-rw-r--r--doc/ChangeLog593
-rw-r--r--g10/delkey.c209
-rw-r--r--g10/pubkey-enc.c307
-rw-r--r--g10/status.h127
-rw-r--r--include/_regex.h574
-rw-r--r--include/distfiles15
-rw-r--r--include/ttyio.h40
-rw-r--r--include/zlib-riscos.h134
-rw-r--r--po/de.po5254
-rwxr-xr-xscripts/config.guess1366
-rwxr-xr-xscripts/config.sub1471
-rw-r--r--tests/ChangeLog68
-rw-r--r--tests/Makefile.am78
-rw-r--r--tests/asschk.c1059
-rwxr-xr-xtests/inittests99
19 files changed, 11994 insertions, 0 deletions
diff --git a/agent/cache.c b/agent/cache.c
new file mode 100644
index 000000000..b6ab55085
--- /dev/null
+++ b/agent/cache.c
@@ -0,0 +1,314 @@
+/* cache.c - keep a cache of passphrases
+ * Copyright (C) 2002 Free Software Foundation, Inc.
+ *
+ * This file is part of GnuPG.
+ *
+ * GnuPG is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GnuPG is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <assert.h>
+
+#include "agent.h"
+
+struct secret_data_s {
+ int totallen; /* this includes the padding */
+ int datalen; /* actual data length */
+ char data[1];
+};
+
+typedef struct cache_item_s *ITEM;
+struct cache_item_s {
+ ITEM next;
+ time_t created;
+ time_t accessed;
+ int ttl; /* max. lifetime given in seonds */
+ int lockcount;
+ struct secret_data_s *pw;
+ char key[1];
+};
+
+
+static ITEM thecache;
+
+
+static void
+release_data (struct secret_data_s *data)
+{
+ xfree (data);
+}
+
+static struct secret_data_s *
+new_data (const void *data, size_t length)
+{
+ struct secret_data_s *d;
+ int total;
+
+ /* we pad the data to 32 bytes so that it get more complicated
+ finding something out by watching allocation patterns. This is
+ usally not possible but we better assume nothing about our
+ secure storage provider*/
+ total = length + 32 - (length % 32);
+
+ d = gcry_malloc_secure (sizeof *d + total - 1);
+ if (d)
+ {
+ d->totallen = total;
+ d->datalen = length;
+ memcpy (d->data, data, length);
+ }
+ return d;
+}
+
+
+/* check whether there are items to expire */
+static void
+housekeeping (void)
+{
+ ITEM r, rprev;
+ time_t current = gnupg_get_time ();
+
+ /* first expire the actual data */
+ for (r=thecache; r; r = r->next)
+ {
+ if (!r->lockcount && r->pw && r->accessed + r->ttl < current)
+ {
+ if (DBG_CACHE)
+ log_debug (" expired `%s' (%ds after last access)\n",
+ r->key, r->ttl);
+ release_data (r->pw);
+ r->pw = NULL;
+ r->accessed = current;
+ }
+ }
+
+ /* second, make sure that we also remove them based on the created stamp so
+ that the user has to enter it from time to time. We do this every hour */
+ for (r=thecache; r; r = r->next)
+ {
+ if (!r->lockcount && r->pw && r->created + 60*60 < current)
+ {
+ if (DBG_CACHE)
+ log_debug (" expired `%s' (1h after creation)\n", r->key);
+ release_data (r->pw);
+ r->pw = NULL;
+ r->accessed = current;
+ }
+ }
+
+ /* third, make sure that we don't have too many items in the list.
+ Expire old and unused entries after 30 minutes */
+ for (rprev=NULL, r=thecache; r; )
+ {
+ if (!r->pw && r->accessed + 60*30 < current)
+ {
+ if (r->lockcount)
+ {
+ log_error ("can't remove unused cache entry `%s' due to"
+ " lockcount=%d\n",
+ r->key, r->lockcount);
+ r->accessed += 60*10; /* next error message in 10 minutes */
+ rprev = r;
+ r = r->next;
+ }
+ else
+ {
+ ITEM r2 = r->next;
+ if (DBG_CACHE)
+ log_debug (" removed `%s' (slot not used for 30m)\n", r->key);
+ xfree (r);
+ if (!rprev)
+ thecache = r2;
+ else
+ rprev->next = r2;
+ r = r2;
+ }
+ }
+ else
+ {
+ rprev = r;
+ r = r->next;
+ }
+ }
+}
+
+
+void
+agent_flush_cache (void)
+{
+ ITEM r;
+
+ if (DBG_CACHE)
+ log_debug ("agent_flush_cache\n");
+
+ for (r=thecache; r; r = r->next)
+ {
+ if (!r->lockcount && r->pw)
+ {
+ if (DBG_CACHE)
+ log_debug (" flushing `%s'\n", r->key);
+ release_data (r->pw);
+ r->pw = NULL;
+ r->accessed = 0;
+ }
+ else if (r->lockcount && r->pw)
+ {
+ if (DBG_CACHE)
+ log_debug (" marked `%s' for flushing\n", r->key);
+ r->accessed = 0;
+ r->ttl = 0;
+ }
+ }
+}
+
+
+
+/* Store DATA of length DATALEN in the cache under KEY and mark it
+ with a maximum lifetime of TTL seconds. If there is already data
+ under this key, it will be replaced. Using a DATA of NULL deletes
+ the entry */
+int
+agent_put_cache (const char *key, const char *data, int ttl)
+{
+ ITEM r;
+
+ if (DBG_CACHE)
+ log_debug ("agent_put_cache `%s'\n", key);
+ housekeeping ();
+
+ if (ttl < 1)
+ ttl = opt.def_cache_ttl;
+ if (!ttl)
+ return 0;
+
+ for (r=thecache; r; r = r->next)
+ {
+ if (!r->lockcount && !strcmp (r->key, key))
+ break;
+ }
+ if (r)
+ { /* replace */
+ if (r->pw)
+ {
+ release_data (r->pw);
+ r->pw = NULL;
+ }
+ if (data)
+ {
+ r->created = r->accessed = gnupg_get_time ();
+ r->ttl = ttl;
+ r->pw = new_data (data, strlen (data)+1);
+ if (!r->pw)
+ log_error ("out of core while allocating new cache item\n");
+ }
+ }
+ else if (data)
+ { /* simply insert */
+ r = xtrycalloc (1, sizeof *r + strlen (key));
+ if (!r)
+ log_error ("out of core while allocating new cache control\n");
+ else
+ {
+ strcpy (r->key, key);
+ r->created = r->accessed = gnupg_get_time ();
+ r->ttl = ttl;
+ r->pw = new_data (data, strlen (data)+1);
+ if (!r->pw)
+ {
+ log_error ("out of core while allocating new cache item\n");
+ xfree (r);
+ }
+ else
+ {
+ r->next = thecache;
+ thecache = r;
+ }
+ }
+ }
+ return 0;
+}
+
+
+/* Try to find an item in the cache */
+const char *
+agent_get_cache (const char *key, void **cache_id)
+{
+ ITEM r;
+
+ if (DBG_CACHE)
+ log_debug ("agent_get_cache `%s'...\n", key);
+ housekeeping ();
+
+ /* first try to find one with no locks - this is an updated cache
+ entry: We might have entries with a lockcount and without a
+ lockcount. */
+ for (r=thecache; r; r = r->next)
+ {
+ if (!r->lockcount && r->pw && !strcmp (r->key, key))
+ {
+ /* put_cache does only put strings into the cache, so we
+ don't need the lengths */
+ r->accessed = gnupg_get_time ();
+ if (DBG_CACHE)
+ log_debug ("... hit\n");
+ r->lockcount++;
+ *cache_id = r;
+ return r->pw->data;
+ }
+ }
+ /* again, but this time get even one with a lockcount set */
+ for (r=thecache; r; r = r->next)
+ {
+ if (r->pw && !strcmp (r->key, key))
+ {
+ r->accessed = gnupg_get_time ();
+ if (DBG_CACHE)
+ log_debug ("... hit (locked)\n");
+ r->lockcount++;
+ *cache_id = r;
+ return r->pw->data;
+ }
+ }
+ if (DBG_CACHE)
+ log_debug ("... miss\n");
+
+ *cache_id = NULL;
+ return NULL;
+}
+
+
+void
+agent_unlock_cache_entry (void **cache_id)
+{
+ ITEM r;
+
+ for (r=thecache; r; r = r->next)
+ {
+ if (r == *cache_id)
+ {
+ if (!r->lockcount)
+ log_error ("trying to unlock non-locked cache entry `%s'\n",
+ r->key);
+ else
+ r->lockcount--;
+ return;
+ }
+ }
+}
diff --git a/common/isascii.c b/common/isascii.c
new file mode 100644
index 000000000..565c71664
--- /dev/null
+++ b/common/isascii.c
@@ -0,0 +1,29 @@
+/* isascii.c - Replacement for isascii.
+ * Copyright (C) 2002 Free Software Foundation, Inc.
+ *
+ * This file is part of GnuPG.
+ *
+ * GnuPG is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GnuPG is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+int
+isascii (int c)
+{
+ return (((c) & ~0x7f) == 0);
+}
diff --git a/common/putc_unlocked.c b/common/putc_unlocked.c
new file mode 100644
index 000000000..02c646130
--- /dev/null
+++ b/common/putc_unlocked.c
@@ -0,0 +1,31 @@
+/* putc_unlocked.c - Replacement for putc_unlocked.
+ * Copyright (C) 2002 Free Software Foundation, Inc.
+ *
+ * This file is part of GnuPG.
+ *
+ * GnuPG is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GnuPG is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+
+int
+putc_unlocked (int c, FILE *stream)
+{
+ return putc (c, stream);
+}
diff --git a/common/signal.c b/common/signal.c
new file mode 100644
index 000000000..dc026c10f
--- /dev/null
+++ b/common/signal.c
@@ -0,0 +1,226 @@
+/* signal.c - signal handling
+ * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ *
+ * This file is part of GnuPG.
+ *
+ * GnuPG is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GnuPG is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "util.h"
+
+
+static volatile int caught_fatal_sig;
+static volatile int caught_sigusr1;
+static void (*cleanup_fnc)(void);
+
+
+static void
+init_one_signal (int sig, RETSIGTYPE (*handler)(int), int check_ign )
+{
+#ifndef HAVE_DOSISH_SYSTEM
+# ifdef HAVE_SIGACTION
+ struct sigaction oact, nact;
+
+ if (check_ign)
+ {
+ /* we don't want to change an IGN handler */
+ sigaction (sig, NULL, &oact );
+ if (oact.sa_handler == SIG_IGN )
+ return;
+ }
+
+ nact.sa_handler = handler;
+ sigemptyset (&nact.sa_mask);
+ nact.sa_flags = 0;
+ sigaction ( sig, &nact, NULL);
+# else
+ RETSIGTYPE (*ohandler)(int);
+
+ ohandler = signal (sig, handler);
+ if (check_ign && ohandler == SIG_IGN)
+ {
+ /* Change it back if it was already set to IGN */
+ signal (sig, SIG_IGN);
+ }
+# endif
+#endif /*!HAVE_DOSISH_SYSTEM*/
+}
+
+static const char *
+get_signal_name( int signum )
+{
+#if defined(SYS_SIGLIST_DECLARED) && defined(NSIG)
+ return (signum >= 0 && signum < NSIG) ? sys_siglist[signum] : "?";
+#else
+ return "some signal";
+#endif
+}
+
+static RETSIGTYPE
+got_fatal_signal (int sig)
+{
+ const char *s;
+
+ if (caught_fatal_sig)
+ raise (sig);
+ caught_fatal_sig = 1;
+
+ if (cleanup_fnc)
+ cleanup_fnc ();
+ /* better don't translate these messages */
+ write (2, "\n", 1 );
+ s = log_get_prefix (NULL);
+ if (s)
+ write(2, s, strlen (s));
+ write (2, ": ", 2 );
+ s = get_signal_name(sig);
+ write (2, s, strlen(s) );
+ write (2, " caught ... exiting\n", 20);
+
+ /* reset action to default action and raise signal again */
+ init_one_signal (sig, SIG_DFL, 0);
+ /* fixme: remove_lockfiles ();*/
+#ifdef __riscos__
+ close_fds ();
+#endif /* __riscos__ */
+ raise( sig );
+}
+
+
+static RETSIGTYPE
+got_usr_signal (int sig)
+{
+ caught_sigusr1 = 1;
+}
+
+
+void
+gnupg_init_signals (int mode, void (*fast_cleanup)(void))
+{
+ assert (!mode);
+
+ cleanup_fnc = fast_cleanup;
+#ifndef HAVE_DOSISH_SYSTEM
+ init_one_signal (SIGINT, got_fatal_signal, 1 );
+ init_one_signal (SIGHUP, got_fatal_signal, 1 );
+ init_one_signal (SIGTERM, got_fatal_signal, 1 );
+ init_one_signal (SIGQUIT, got_fatal_signal, 1 );
+ init_one_signal (SIGSEGV, got_fatal_signal, 1 );
+ init_one_signal (SIGUSR1, got_usr_signal, 0 );
+ init_one_signal (SIGPIPE, SIG_IGN, 0 );
+#endif
+}
+
+void
+gnupg_pause_on_sigusr (int which)
+{
+#ifndef HAVE_DOSISH_SYSTEM
+# ifdef HAVE_SIGPROCMASK
+ sigset_t mask, oldmask;
+
+ assert (which == 1);
+ sigemptyset( &mask );
+ sigaddset( &mask, SIGUSR1 );
+
+ sigprocmask( SIG_BLOCK, &mask, &oldmask );
+ while (!caught_sigusr1)
+ sigsuspend (&oldmask);
+ caught_sigusr1 = 0;
+ sigprocmask (SIG_UNBLOCK, &mask, NULL);
+# else
+ assert (which == 1);
+ sighold (SIGUSR1);
+ while (!caught_sigusr1)
+ sigpause(SIGUSR1);
+ caught_sigusr1 = 0;
+ sigrelease(SIGUSR1);
+# endif /*!HAVE_SIGPROCMASK*/
+#endif
+}
+
+
+static void
+do_block( int block )
+{
+#ifndef HAVE_DOSISH_SYSTEM
+ static int is_blocked;
+#ifdef HAVE_SIGPROCMASK
+ static sigset_t oldmask;
+
+ if (block)
+ {
+ sigset_t newmask;
+
+ if (is_blocked)
+ log_bug ("signals are already blocked\n");
+ sigfillset( &newmask );
+ sigprocmask( SIG_BLOCK, &newmask, &oldmask );
+ is_blocked = 1;
+ }
+ else
+ {
+ if (!is_blocked)
+ log_bug("signals are not blocked\n");
+ sigprocmask (SIG_SETMASK, &oldmask, NULL);
+ is_blocked = 0;
+ }
+#else /*!HAVE_SIGPROCMASK*/
+ static void (*disposition[MAXSIG])();
+ int sig;
+
+ if (block)
+ {
+ if (is_blocked)
+ log_bug("signals are already blocked\n");
+ for (sig=1; sig < MAXSIG; sig++)
+ {
+ disposition[sig] = sigset (sig, SIG_HOLD);
+ }
+ is_blocked = 1;
+ }
+ else
+ {
+ if (!is_blocked)
+ log_bug ("signals are not blocked\n");
+ for (sig=1; sig < MAXSIG; sig++) {
+ sigset (sig, disposition[sig]);
+ }
+ is_blocked = 0;
+ }
+#endif /*!HAVE_SIGPROCMASK*/
+#endif /*HAVE_DOSISH_SYSTEM*/
+}
+
+
+void
+gnupg_block_all_signals ()
+{
+ do_block(1);
+}
+
+void
+gnupg_unblock_all_signals ()
+{
+ do_block(0);
+}
diff --git a/doc/ChangeLog b/doc/ChangeLog
new file mode 100644
index 000000000..628793a90
--- /dev/null
+++ b/doc/ChangeLog
@@ -0,0 +1,593 @@
+2003-01-06 David Shaw <dshaw@jabberwocky.com>
+
+ * DETAILS: Document disabled flag in capabilities field.
+
+2002-12-27 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Clarify --no-permission-warning to note that the
+ permission warnings are not intended to be the be-all and end-all
+ in security checks. Add note to --group that when used on the
+ command line, it may be necessary to quote the argument so it is
+ not treated as multiple arguments. Noted by Stefan Bellon.
+
+2002-12-23 Werner Koch <wk@gnupg.org>
+
+ * samplekeys.asc: Updated.
+
+2002-12-10 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Clarify include-revoked and include-disabled so they
+ match what the program actually does. Noted by Dick Gevers.
+
+ * gpg.sgml: Document %-expandos for policy URLs and notations.
+
+ * gpg.sgml: Document --pgp8. Clarify that --pgp6 and --pgp7
+ disable --throw-keyid.
+
+2002-12-05 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Document --no-mangle-dos-filenames.
+
+2002-12-01 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Point out that if the user absolutely must, it's
+ better to use --pgpX than forcing an algorithm manually. Better
+ still not to use anything, of course.
+
+2002-11-25 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Document --primary-keyring. Clarify
+ --s2k-cipher-algo, --s2k-digest-algo,
+ --personal-cipher-preferences, --personal-digest-preferences, and
+ --personal-compress-preferences.
+
+ * gpg.sgml: Document --sig-policy-url, --cert-policy-url,
+ --sig-notation, --cert-notation. Clarify --show-notation and
+ --show-policy-url that policy URLs and notations can be used in
+ data signatures as well. Add note about '@' being a required
+ character in notation names.
+
+2002-11-21 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Add an interoperability section.
+
+2002-11-17 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Correct defaults for --s2k-mode and --s2k-digest-mode.
+ Noted by Haakon Riiser.
+
+2002-11-14 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: --compress-algo now allows algorithm names.
+
+2002-11-13 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Document --trust-model.
+
+2002-11-04 David Shaw <dshaw@jabberwocky.com>
+
+ * KEYSERVER: New. Documents the --with-colons format for
+ keyserver listings.
+
+ * DETAILS: Clarify meaning of 'u'. Noted by Timo.
+
+2002-11-03 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Document "tsign", clarify "setpref", clarify
+ --recipient, document --hidden-recipient, document
+ --hidden-encrypt-to, clarify --no-encrypt-to, clarify
+ --throw-keyid, document --no-throw-keyid.
+
+2002-10-25 Werner Koch <wk@gnupg.org>
+
+ * README.W32: Add blurb on how to create a ZIP file, changed
+ requirement for mingw32 to 0.3.2.
+
+2002-10-24 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Document --refresh-keys.
+
+2002-10-19 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Clarify --force-mdc, and document --disable-mdc.
+
+2002-10-12 Werner Koch <wk@gnupg.org>
+
+ * DETAILS (KEY_CREATED): Enhanced by fingerprint.
+
+2002-10-03 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Note that '#' means secret-key-unavailable, and that
+ keyserver schemes are case-insensitive.
+
+2002-09-30 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Note that --pgp2 disables --textmode when encrypting.
+
+2002-09-20 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Some minor language cleanup.
+
+2002-09-20 Werner Koch <wk@gnupg.org>
+
+ * DETAILS: s/XORed/ORed/.
+
+2002-09-15 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Add rebuild-keydb-caches.
+
+2002-09-12 David Shaw <dshaw@jabberwocky.com>
+
+ * DETAILS: Fix batch key generation example.
+
+2002-09-11 Werner Koch <wk@gnupg.org>
+
+ * Makefile.am (EXTRA_DIST): Include gnupg-32.reg
+
+2002-09-02 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Updated the charset option.
+
+ * DETAILS: Added status IMPORT_OK.
+
+ * gnupg.7: New mini man page.
+
+2002-08-30 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Document keyserver-option include-subkeys. Note that
+ honor-http-proxy is a keyserver-option now.
+
+ * DETAILS: Add "Key not trusted" to INV_RECP status code.
+
+2002-08-23 Werner Koch <wk@gnupg.org>
+
+ * faq.raw: Updated. New Maintainer is David D. Scribner.
+
+2002-08-22 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Clarify meaning of keyserver option include-revoked.
+
+2002-08-21 Werner Koch <wk@gnupg.org>
+
+ * DETAILS: Added IMPORT_PROBLEM.
+
+2002-08-20 David Shaw <dshaw@jabberwocky.com>
+
+ * DETAILS: Clarify that trust letters 'q' and '-' can be treated
+ identically.
+
+ * gpg.sgml: Document --ignore-mdc-error.
+
+2002-08-06 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Clarify that only long-form options can go in the
+ config file.
+
+2002-08-06 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Fixed doc regarding the name change of the option
+ file.
+
+2002-07-30 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Clarify --edit/addrevoker (sensitive), and
+ --keyserver-options (--import/export-options may be used as well).
+ Document --import-options and --export-options with their various
+ options. --show-photos now works during signature verification as
+ well. Document --exec-path. Note in --simple-sk-checksum that
+ the passphrase must be changed for this to take effect. Note that
+ --pgp7 does not disable MDC. Document --no-mdc-warning.
+
+2002-07-25 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Document new --delete behaviour.
+
+2002-07-25 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Clarify the differences between "pref" and "showpref".
+ Note in "setpref" that a list of available algorithms can be
+ printed with "gpg -v --version". Note in "updpref" that we don't
+ select keys via attribute uids, so preferences there will be
+ ignored.
+
+2002-07-01 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Clarify "group".
+
+2002-07-01 Werner Koch <wk@gnupg.org>
+
+ * Makefile.am: Due to problems with VPATH builds we don't try to
+ build the texi vesions of the manual pages anymore automatically.
+
+2002-06-30 Werner Koch <wk@gnupg.org>
+
+ * README.W32: Adjusted some descriptions. Fixed the regsitry
+ entry descriptions.
+
+2002-06-21 David Shaw <dshaw@jabberwocky.com>
+
+ * DETAILS: Document "uat".
+
+ * gpg.sgml: Document
+ --personal-{compress|digest|compress}-preferences, --group, and
+ add comments to --expert.
+
+2002-06-17 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Grammar fix.
+
+2002-06-03 David Shaw <dshaw@jabberwocky.com>
+
+ * DETAILS: Details of ATTRIBUTE.
+
+ * gpg.sgml: Document --attribute-fd
+
+2002-06-03 Timo Schulz <ts@winpt.org>
+
+ * DETAILS: Add ATTRIBUTE.
+
+2002-05-31 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Add "edit/addrevoker". Document --desig-revoke. Note
+ that -z and --compress are the same option. Note that
+ --digest-algo can no longer violate OpenPGP with a non-160 bit
+ hash with DSA. Document --cert-digest-algo with suitable warnings
+ not to use it. Note the default s2k-cipher-algo is now CAST5.
+ Note that --force-v3-sigs overrides --ask-sig-expire. Revise
+ --expert documentation, as it is now definitely legal to have more
+ than one photo ID on a key. --preference-list is now
+ --default-preference-list with the new meaning. Document
+ --personal-preference-list.
+
+ * DETAILS: Document "Revoker" for batch key generation.
+
+2002-05-22 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: sgml syntax fix.
+
+2002-05-12 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Fixed URL in the description section.
+
+ * faq.raw: Minor typo fixes noted by kromJx@myrealbox.com.
+
+2002-05-11 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Typo fix.
+
+2002-05-07 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Add entries for --sk-comments, --no-sk-comments,
+ --pgp7, and --no-pgp7. Fix --pgp2 and --pgp6: the proper name is
+ --escape-from-lines and not --escape-from.
+
+2002-04-30 Timo Schulz <ts@winpt.org>
+
+ * gpg.sgml: Add an entry for --encrypt-files and --decrypt-files.
+
+2002-04-29 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Fix minor error in --pgp6 documentation: it does not
+ imply --digest-algo MD5
+
+2002-04-29 Werner Koch <wk@gnupg.org>
+
+ * samplekeys.asc: Added gnupg distribution key 57548DCD.
+
+ * faq.raw: Inserted Douglas Calvert as new maintainer. Acknowledge
+ Nils. Add entry about trust packet parsing problems.
+
+2002-04-24 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Add some documentation for
+ --edit/{addphoto|showphoto|nrsign|nrlsign}, and the difference
+ between %t and %T in photo viewer command lines.
+
+2002-04-23 Stefan Bellon <sbellon@sbellon.de>
+
+ * gpg.sgml: Moved options from section "COMMANDS" to
+ section "OPTIONS".
+
+2002-04-20 David Shaw <dshaw@jabberwocky.com>
+
+ * samplekeys.asc: Added 0x5B0358A2
+
+2002-04-19 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Add "%t" flag for photo IDs, a note about primary
+ having different meanings for photo and regular IDs, rename
+ --default-check-level to --default-cert-check-level, add
+ --auto-check-trustdb, and --pgp6.
+
+ * DETAILS: Add EXPSIG, EXPKEYSIG, and KEYEXPIRED. Add notes to
+ SIGEXPIRED (deprecated), and VALIDSIG (added expiration date).
+ Add "Preferences" command to unattended key generation
+ instructions. Also fixed a few typos.
+
+ * samplekeys.asc: new (added to EXTRA_DIST in Makefile.am as well)
+
+2002-01-31 Marcus Brinkmann <marcus@g10code.de>
+
+ * DETAILS: Fix a spelling error, correct IMPORTED_RES to IMPORT_RES,
+ correct INV_RECP (the second occurence) to NO_RECP.
+
+2002-04-03 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: auto-key-retrieve is a keyserver-option (noted by
+ Roger Sondermann).
+
+2002-03-27 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: --pgp2 also means --disable-mdc, --no-ask-sig-expire,
+ and --no-ask-cert-expire. It does not mean --no-force-v3-sigs
+ (noted by Timo).
+
+2002-03-27 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Add a few notes about --pgp2 meaning MIT PGP 2.6.2,
+ and keyserver details about HKP and NAI HKP.
+
+2002-03-18 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Change meaning of --allow-non-selfsigned-uid to match
+ change in code, and add --no-allow-non-selfsigned-uid.
+
+2002-03-13 Werner Koch <wk@gnupg.org>
+
+ * faq.raw: Due to a lack of time Nils can't serve anymore as a
+ maintainer. Removed his address and setup a generic address.
+
+2002-03-06 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Add an entry for --export-ownertrust. Suggested by
+ Bernhard Reiter.
+
+2002-01-26 Timo Schulz <ts@winpt.org>
+
+ * gnupg-w32.reg: New. Registry file for W32 in registry format.
+
+2002-01-26 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: A few words about --gpg-agent-info and GPG_AGENT_INFO.
+
+2002-01-25 Timo Schulz <ts@winpt.org>
+
+ * README.W32: Modify the filename because now the .exe extension
+ is automatically added to the binary.
+
+2002-01-14 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Talk about PGP 5 and higher.
+
+2002-01-11 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Added documentation for --{no-}ask-cert-expire,
+ --{no-}ask-sig-expire, and revise --expert (it doesn't switch on
+ the expiration prompt anymore) and --default-check-level (to be
+ clearer as to what makes a good key check before signing).
+
+2002-01-07 Werner Koch <wk@gnupg.org>
+
+ * DETAILS: Removed the comment that unattended key generation is
+ experimental. It is now a standard feature.
+
+2001-12-22 David Shaw <dshaw@jabberwocky.com>
+
+ * gpg.sgml: Fixed a few typos.
+
+ * gpg.sgml: Added documentation for --show-photos,
+ --no-show-photos, --photo-viewer, --nrsign-key,
+ --default-check-level, --search-keys, --keyserver-options,
+ --show-notation, --no-show-notation, --show-policy-url,
+ --no-show-policy-url, --for-your-eyes-only,
+ --no-for-your-eyes-only, --pgp2, --no-pgp2,
+ --no-permission-warning, --expert, --no-expert.
+
+2001-10-31 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Add a remark on how to get the long key ID. Suggested
+ by Sebastian Klemke.
+
+2001-10-23 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Add missing tag.
+
+2001-09-28 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Add a note on option parsing.
+
+2001-09-24 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Described --{update,check}-trustdb.
+
+2001-09-03 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml, gpgv.sgml: Removed GDBM stuff.
+
+2001-08-29 Werner Koch <wk@gnupg.org>
+
+ * faq.raw: Described how to delete a secret key w/o a public key
+ and changed the entry on updating the preferences.
+
+2001-08-08 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Documented --print-mds and marked the --print-md * as
+ deprecated because it does not work in the W32 version. Suggested
+ by John Kane.
+ (WARNINGS): Typo fix.
+ (--with-colons): Clarified that the output is in UTF-8.
+
+2001-08-01 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Added --ignore-valid-from
+
+2001-04-20 Werner Koch <wk@gnupg.org>
+
+ * faq.raw (Maintained-by): Removed note that load-extension is not
+ available under Windoze.
+
+ * gpg.sgml: Add new --charset UTF-8.
+
+2001-04-19 Werner Koch <wk@gnupg.org>
+
+ * faq.raw: Add a note about dates displayed as ????-??-??.
+
+2001-04-17 Werner Koch <wk@gnupg.org>
+
+ * Makefile.am (%.texi): Add rules to create .texi from .sgml.
+ However we can't automate this because automake does not like
+ .texi files as BUILT_SOURCES.
+ (%.dvi,%.ps): Removed these rules, because they are not needed
+ and get in the way of automake's dvi target
+
+ * HACKING: Changed CVS description.
+
+2001-04-06 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Small typo fixes by Florian Weimer.
+
+2001-03-27 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Add --no-sig-cache and --no-sig-create-check.
+
+2001-03-23 Werner Koch <wk@gnupg.org>
+
+ * DETAILS: New status UNEXPECTED.
+
+2001-03-13 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Described --fixed-list-mode.
+
+2001-03-06 Werner Koch <wk@gnupg.org>
+
+ * gpgv.sgml: Changed some gpg to gpgv. Thanks to John A. Murdie.
+
+2001-03-03 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Tell something about the 0x12345678! key ID syntax.
+
+2001-01-18 Werner Koch <wk@gnupg.org>
+
+ * README.W32: Changed building instructions for MinGW32/CPD 0.3
+
+2001-01-09 Werner Koch <wk@gnupg.org>
+
+ * DETAILS: Fixed docs for NEED_PASSPHRASE and added USERID_HINT.
+
+2000-11-30 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Fixed the description of --verify. Add a short note
+ the warnings sections.
+
+2000-10-19 Werner Koch <wk@gnupg.org>
+
+ * gpg.sgml: Fixed doc for --allow-non-selfsigned-uid.
+ Add entry for --ignore-crc-error.
+
+2000-10-18 Werner Koch <wk@gnupg.org>
+
+ * OpenPGP: Dropped the paragraph that RSA is not implemented.
+
+2000-10-14 Werner Koch <wk@gnupg.org>
+
+ * faq.raw: Add an answer to the problem of multiple signatures.
+
+Wed Oct 4 15:50:18 CEST 2000 Werner Koch <wk@openit.de>
+
+ * gpgv.sgml: New.
+ * Makefile.am: build it.
+
+Thu Sep 14 14:20:38 CEST 2000 Werner Koch <wk@openit.de>
+
+ * faq.raw: New.
+ * Makefile.am: Support to build FAQs
+
+Wed Jul 12 13:32:06 CEST 2000 Werner Koch <wk@>
+
+ * gpg.sgml: Add a note about the availability of the GPH.
+
+2000-07-03 13:59:24 Werner Koch (wk@habibti.openit.de)
+
+ * DETAILS, FAQ: Typo fixes by Yosiaki IIDA.
+
+2000-05-12 10:57:21 Werner Koch (wk@habibti.openit.de)
+
+ * gpg.sgml: Documented --no-tty.
+
+2000-03-09 15:01:51 Werner Koch (wk@habibti.openit.de)
+
+ * DETAILS: Ad a short blurb about unattended key generation.
+
+Wed Feb 9 15:33:44 CET 2000 Werner Koch <wk@gnupg.de>
+
+ * gpg.sgml: Describe --ignore-time-conflict.
+
+ * gpg.sgml: Fixed a few typos. Thanks to Holger Trapp.
+
+Wed Jan 5 11:51:17 CET 2000 Werner Koch <wk@gnupg.de>
+
+ * FAQ: Enhanced answer for the 3des-s2k bug.
+
+Sat Dec 4 12:30:28 CET 1999 Werner Koch <wk@gnupg.de>
+
+ * gpg.sgml: Add section about the user ID
+
+Mon Nov 22 11:14:53 CET 1999 Werner Koch <wk@gnupg.de>
+
+ * gph: Removed the directory from the dist becuase it will
+ go into it's own package.
+
+Thu Sep 23 09:52:58 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+ * README.W32: New.
+
+Mon Sep 6 19:59:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+
+ * Makefile.am (SUBDIRS): New subdir gph for the manual.
+
+Thu Jul 22 20:03:03 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+
+ * gpg.sgml (--always-trust): Added.
+
+Wed Jul 14 19:42:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+
+ * Makefile.am: Create a dummy man page if docbook-to-man is missing.
+
+Wed Jun 16 20:16:21 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+
+ * gpg1.pod: Removed.
+ * gpg.sgml: New. Replaces the pod file
+ * Makefile.am: Add rule to make a man file from sgml
+
+Tue Jun 15 12:21:08 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+
+ * Makefile.in.in: Use DESTDIR.
+
+Mon May 31 19:41:10 CEST 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+ * gpg.1pod: Enhanced the Bugs section (Michael).
+
+Wed Feb 10 17:15:39 CET 1999 Werner Koch <wk@isil.d.shuttle.de>
+
+
+ * gpg.1pod: Spelling and grammar corrections (John A. Martin)
+ * FAQ: Ditto.
+ * DETAILS: Ditto.
+
+
+ Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+
+ This file is free software; as a special exception the author gives
+ unlimited permission to copy and/or distribute it, with or without
+ modifications, as long as this notice is preserved.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+
diff --git a/g10/delkey.c b/g10/delkey.c
new file mode 100644
index 000000000..35c903cc0
--- /dev/null
+++ b/g10/delkey.c
@@ -0,0 +1,209 @@
+/* delkey.c - delete keys
+ * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ *
+ * This file is part of GnuPG.
+ *
+ * GnuPG is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GnuPG is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+#include <ctype.h>
+
+#include "options.h"
+#include "packet.h"
+#include "errors.h"
+#include "iobuf.h"
+#include "keydb.h"
+#include "memory.h"
+#include "util.h"
+#include "main.h"
+#include "trustdb.h"
+#include "filter.h"
+#include "ttyio.h"
+#include "status.h"
+#include "i18n.h"
+
+
+/****************
+ * Delete a public or secret key from a keyring.
+ * r_sec_avail will be set if a secret key is available and the public
+ * key can't be deleted for that reason.
+ */
+static int
+do_delete_key( const char *username, int secret, int *r_sec_avail )
+{
+ int rc = 0;
+ KBNODE keyblock = NULL;
+ KBNODE node;
+ KEYDB_HANDLE hd = keydb_new (secret);
+ PKT_public_key *pk = NULL;
+ PKT_secret_key *sk = NULL;
+ u32 keyid[2];
+ int okay=0;
+ int yes;
+ KEYDB_SEARCH_DESC desc;
+ int exactmatch;
+
+ *r_sec_avail = 0;
+
+ /* search the userid */
+ classify_user_id (username, &desc);
+ exactmatch = (desc.mode == KEYDB_SEARCH_MODE_FPR
+ || desc.mode == KEYDB_SEARCH_MODE_FPR16
+ || desc.mode == KEYDB_SEARCH_MODE_FPR20);
+ rc = desc.mode? keydb_search (hd, &desc, 1):G10ERR_INV_USER_ID;
+ if (rc) {
+ log_error (_("key `%s' not found: %s\n"), username, g10_errstr (rc));
+ write_status_text( STATUS_DELETE_PROBLEM, "1" );
+ goto leave;
+ }
+
+ /* read the keyblock */
+ rc = keydb_get_keyblock (hd, &keyblock );
+ if (rc) {
+ log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) );
+ goto leave;
+ }
+
+ /* get the keyid from the keyblock */
+ node = find_kbnode( keyblock, secret? PKT_SECRET_KEY:PKT_PUBLIC_KEY );
+ if( !node ) {
+ log_error("Oops; key not found anymore!\n");
+ rc = G10ERR_GENERAL;
+ goto leave;
+ }
+
+ if( secret ) {
+ sk = node->pkt->pkt.secret_key;
+ keyid_from_sk( sk, keyid );
+ }
+ else {
+ pk = node->pkt->pkt.public_key;
+ keyid_from_pk( pk, keyid );
+ rc = seckey_available( keyid );
+ if( !rc ) {
+ *r_sec_avail = 1;
+ rc = -1;
+ goto leave;
+ }
+ else if( rc != G10ERR_NO_SECKEY ) {
+ log_error("%s: get secret key: %s\n", username, g10_errstr(rc) );
+ }
+ else
+ rc = 0;
+ }
+
+ if( rc )
+ rc = 0;
+ else if (opt.batch && exactmatch)
+ okay++;
+ else if( opt.batch && secret )
+ {
+ log_error(_("can't do that in batchmode\n"));
+ log_info (_("(unless you specify the key by fingerprint)\n"));
+ }
+ else if( opt.batch && opt.answer_yes )
+ okay++;
+ else if( opt.batch )
+ {
+ log_error(_("can't do that in batchmode without \"--yes\"\n"));
+ log_info (_("(unless you specify the key by fingerprint)\n"));
+ }
+ else {
+ if( secret )
+ print_seckey_info( sk );
+ else
+ print_pubkey_info( pk );
+ tty_printf( "\n" );
+
+ yes = cpr_get_answer_is_yes( secret? "delete_key.secret.okay"
+ : "delete_key.okay",
+ _("Delete this key from the keyring? "));
+ if( !cpr_enabled() && secret && yes ) {
+ /* 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.
+ */
+ yes = cpr_get_answer_is_yes("delete_key.secret.okay",
+ _("This is a secret key! - really delete? "));
+ }
+ if( yes )
+ okay++;
+ }
+
+
+ if( okay ) {
+ rc = keydb_delete_keyblock (hd);
+ if (rc) {
+ log_error (_("deleting keyblock failed: %s\n"), g10_errstr(rc) );
+ goto leave;
+ }
+
+ /* Note that the ownertrust being cleared will trigger a
+ revalidation_mark(). This makes sense - only deleting keys
+ that have ownertrust set should trigger this. */
+
+ if (!secret && pk && clear_ownertrusts (pk)) {
+ if (opt.verbose)
+ log_info (_("ownertrust information cleared\n"));
+ }
+ }
+
+ leave:
+ keydb_release (hd);
+ release_kbnode (keyblock);
+ return rc;
+}
+
+/****************
+ * Delete a public or secret key from a keyring.
+ */
+int
+delete_keys( STRLIST names, int secret, int allow_both )
+{
+ int rc, avail;
+
+ for(;names;names=names->next) {
+ rc = do_delete_key (names->d, secret, &avail );
+ if ( rc && avail ) {
+ if ( allow_both ) {
+ rc = do_delete_key (names->d, 1, &avail );
+ if ( !rc )
+ rc = do_delete_key (names->d, 0, &avail );
+ }
+ else {
+ log_error(_(
+ "there is a secret key for public key \"%s\"!\n"),names->d);
+ log_info(_(
+ "use option \"--delete-secret-keys\" to delete it first.\n"));
+ write_status_text( STATUS_DELETE_PROBLEM, "2" );
+ return rc;
+ }
+ }
+
+ if(rc) {
+ log_error("%s: delete key failed: %s\n", names->d, g10_errstr(rc) );
+ return rc;
+ }
+ }
+
+ return 0;
+}
diff --git a/g10/pubkey-enc.c b/g10/pubkey-enc.c
new file mode 100644
index 000000000..1c52ce4de
--- /dev/null
+++ b/g10/pubkey-enc.c
@@ -0,0 +1,307 @@
+/* pubkey-enc.c - public key encoded packet handling
+ * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ *
+ * This file is part of GnuPG.
+ *
+ * GnuPG is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GnuPG is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include "util.h"
+#include "memory.h"
+#include "packet.h"
+#include "mpi.h"
+#include "keydb.h"
+#include "trustdb.h"
+#include "cipher.h"
+#include "status.h"
+#include "options.h"
+#include "main.h"
+#include "i18n.h"
+
+static int get_it( PKT_pubkey_enc *k,
+ DEK *dek, PKT_secret_key *sk, u32 *keyid );
+
+
+/* check that the given algo is mentioned in one of the valid user IDs */
+static int
+is_algo_in_prefs ( KBNODE keyblock, preftype_t type, int algo )
+{
+ KBNODE k;
+
+ for (k=keyblock; k; k=k->next) {
+ if (k->pkt->pkttype == PKT_USER_ID) {
+ PKT_user_id *uid = k->pkt->pkt.user_id;
+ prefitem_t *prefs = uid->prefs;
+
+ if (uid->created && prefs &&
+ !uid->is_revoked && !uid->is_expired ) {
+ for (; prefs->type; prefs++ )
+ if (prefs->type == type && prefs->value == algo)
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+
+/****************
+ * Get the session key from a pubkey enc packet and return
+ * it in DEK, which should have been allocated in secure memory.
+ */
+int
+get_session_key( PKT_pubkey_enc *k, DEK *dek )
+{
+ PKT_secret_key *sk = NULL;
+ int rc;
+
+ rc = check_pubkey_algo2 (k->pubkey_algo, PUBKEY_USAGE_ENC);
+ if( rc )
+ goto leave;
+
+ if( (k->keyid[0] || k->keyid[1]) && !opt.try_all_secrets ) {
+ sk = m_alloc_clear( sizeof *sk );
+ sk->pubkey_algo = k->pubkey_algo; /* we want a pubkey with this algo*/
+ if( !(rc = get_seckey( sk, k->keyid )) )
+ rc = get_it( k, dek, sk, k->keyid );
+ }
+ else { /* anonymous receiver: Try all available secret keys */
+ void *enum_context = NULL;
+ u32 keyid[2];
+ char *p;
+
+ for(;;) {
+ if( sk )
+ free_secret_key( sk );
+ sk = m_alloc_clear( sizeof *sk );
+ rc=enum_secret_keys( &enum_context, sk, 1, 0);
+ if( rc ) {
+ rc = G10ERR_NO_SECKEY;
+ break;
+ }
+ if( sk->pubkey_algo != k->pubkey_algo )
+ continue;
+ keyid_from_sk( sk, keyid );
+ log_info(_("anonymous recipient; trying secret key %08lX ...\n"),
+ (ulong)keyid[1] );
+
+ if(!opt.try_all_secrets && !is_status_enabled())
+ {
+ p=get_last_passphrase();
+ set_next_passphrase(p);
+ m_free(p);
+ }
+
+ rc = check_secret_key( sk, opt.try_all_secrets?1:-1 ); /* ask
+ only
+ once */
+ if( !rc )
+ rc = get_it( k, dek, sk, keyid );
+ if( !rc ) {
+ log_info(_("okay, we are the anonymous recipient.\n") );
+ break;
+ }
+ }
+ enum_secret_keys( &enum_context, NULL, 0, 0 ); /* free context */
+ }
+
+ leave:
+ if( sk )
+ free_secret_key( sk );
+ return rc;
+}
+
+
+static int
+get_it( PKT_pubkey_enc *enc, DEK *dek, PKT_secret_key *sk, u32 *keyid )
+{
+ int rc;
+ MPI plain_dek = NULL;
+ byte *frame = NULL;
+ unsigned n, nframe;
+ u16 csum, csum2;
+
+ rc = pubkey_decrypt(sk->pubkey_algo, &plain_dek, enc->data, sk->skey );
+ if( rc )
+ goto leave;
+ frame = mpi_get_buffer( plain_dek, &nframe, NULL );
+ mpi_free( plain_dek ); plain_dek = NULL;
+
+ /* Now get the DEK (data encryption key) from the frame
+ *
+ * Old versions encode the DEK in in this format (msb is left):
+ *
+ * 0 1 DEK(16 bytes) CSUM(2 bytes) 0 RND(n bytes) 2
+ *
+ * Later versions encode the DEK like this:
+ *
+ * 0 2 RND(n bytes) 0 A DEK(k bytes) CSUM(2 bytes)
+ *
+ * (mpi_get_buffer already removed the leading zero).
+ *
+ * RND are non-zero randow bytes.
+ * A is the cipher algorithm
+ * DEK is the encryption key (session key) with length k
+ * CSUM
+ */
+ if( DBG_CIPHER )
+ log_hexdump("DEK frame:", frame, nframe );
+ n=0;
+ if( n + 7 > nframe )
+ { rc = G10ERR_WRONG_SECKEY; goto leave; }
+ if( frame[n] == 1 && frame[nframe-1] == 2 ) {
+ log_info(_("old encoding of the DEK is not supported\n"));
+ rc = G10ERR_CIPHER_ALGO;
+ goto leave;
+ }
+ if( frame[n] != 2 ) /* somethink is wrong */
+ { rc = G10ERR_WRONG_SECKEY; goto leave; }
+ for(n++; n < nframe && frame[n]; n++ ) /* skip the random bytes */
+ ;
+ n++; /* and the zero byte */
+ if( n + 4 > nframe )
+ { rc = G10ERR_WRONG_SECKEY; goto leave; }
+
+ dek->keylen = nframe - (n+1) - 2;
+ dek->algo = frame[n++];
+ if( dek->algo == CIPHER_ALGO_IDEA )
+ write_status(STATUS_RSA_OR_IDEA);
+ rc = check_cipher_algo( dek->algo );
+ if( rc ) {
+ if( !opt.quiet && rc == G10ERR_CIPHER_ALGO ) {
+ log_info(_("cipher algorithm %d%s is unknown or disabled\n"),
+ dek->algo, dek->algo == CIPHER_ALGO_IDEA? " (IDEA)":"");
+ if(dek->algo==CIPHER_ALGO_IDEA)
+ idea_cipher_warn(0);
+ }
+ dek->algo = 0;
+ goto leave;
+ }
+ if( (dek->keylen*8) != cipher_get_keylen( dek->algo ) ) {
+ rc = G10ERR_WRONG_SECKEY;
+ goto leave;
+ }
+
+ /* copy the key to DEK and compare the checksum */
+ csum = frame[nframe-2] << 8;
+ csum |= frame[nframe-1];
+ memcpy( dek->key, frame+n, dek->keylen );
+ for( csum2=0, n=0; n < dek->keylen; n++ )
+ csum2 += dek->key[n];
+ if( csum != csum2 ) {
+ rc = G10ERR_WRONG_SECKEY;
+ goto leave;
+ }
+ if( DBG_CIPHER )
+ log_hexdump("DEK is:", dek->key, dek->keylen );
+ /* check that the algo is in the preferences and whether it has expired */
+ {
+ PKT_public_key *pk = NULL;
+ KBNODE pkb = get_pubkeyblock (keyid);
+
+ if( !pkb ) {
+ rc = -1;
+ log_error("oops: public key not found for preference check\n");
+ }
+ else if( pkb->pkt->pkt.public_key->selfsigversion > 3
+ && dek->algo != CIPHER_ALGO_3DES
+ && !is_algo_in_prefs( pkb, PREFTYPE_SYM, dek->algo ) ) {
+ /* Don't print a note while we are not on verbose mode,
+ * the cipher is blowfish and the preferences have twofish
+ * listed */
+ if( opt.verbose || dek->algo != CIPHER_ALGO_BLOWFISH
+ || !is_algo_in_prefs( pkb, PREFTYPE_SYM, CIPHER_ALGO_TWOFISH))
+ log_info(_(
+ "NOTE: cipher algorithm %d not found in preferences\n"),
+ dek->algo );
+ }
+
+ if (!rc) {
+ KBNODE k;
+
+ for (k=pkb; k; k = k->next) {
+ if (k->pkt->pkttype == PKT_PUBLIC_KEY
+ || k->pkt->pkttype == PKT_PUBLIC_SUBKEY){
+ u32 aki[2];
+ keyid_from_pk(k->pkt->pkt.public_key, aki);
+
+ if (aki[0]==keyid[0] && aki[1]==keyid[1]) {
+ pk = k->pkt->pkt.public_key;
+ break;
+ }
+ }
+ }
+ if (!pk)
+ BUG ();
+ if ( pk->expiredate && pk->expiredate <= make_timestamp() ) {
+ log_info(_("NOTE: secret key %08lX expired at %s\n"),
+ (ulong)keyid[1], asctimestamp( pk->expiredate) );
+ }
+ }
+
+ if ( pk && pk->is_revoked ) {
+ log_info( _("NOTE: key has been revoked") );
+ putc( '\n', log_stream() );
+ show_revocation_reason( pk, 1 );
+ }
+
+ release_kbnode (pkb);
+ rc = 0;
+ }
+
+
+ leave:
+ mpi_free(plain_dek);
+ m_free(frame);
+ return rc;
+}
+
+
+/****************
+ * Get the session key from the given string.
+ * String is supposed to be formatted as this:
+ * <algo-id>:<even-number-of-hex-digits>
+ */
+int
+get_override_session_key( DEK *dek, const char *string )
+{
+ const char *s;
+ int i;
+
+ if ( !string )
+ return G10ERR_BAD_KEY;
+ dek->algo = atoi(string);
+ if ( dek->algo < 1 )
+ return G10ERR_BAD_KEY;
+ if ( !(s = strchr ( string, ':' )) )
+ return G10ERR_BAD_KEY;
+ s++;
+ for(i=0; i < DIM(dek->key) && *s; i++, s +=2 ) {
+ int c = hextobyte ( s );
+ if (c == -1)
+ return G10ERR_BAD_KEY;
+ dek->key[i] = c;
+ }
+ if ( *s )
+ return G10ERR_BAD_KEY;
+ dek->keylen = i;
+ return 0;
+}
+
diff --git a/g10/status.h b/g10/status.h
new file mode 100644
index 000000000..44a7d6d32
--- /dev/null
+++ b/g10/status.h
@@ -0,0 +1,127 @@
+/* status.h
+ * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ *
+ * This file is part of GnuPG.
+ *
+ * GnuPG is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GnuPG is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+#ifndef G10_STATUS_H
+#define G10_STATUS_H
+
+
+#define STATUS_ENTER 1
+#define STATUS_LEAVE 2
+#define STATUS_ABORT 3
+
+#define STATUS_GOODSIG 4
+#define STATUS_BADSIG 5
+#define STATUS_ERRSIG 6
+
+
+#define STATUS_BADARMOR 7
+
+#define STATUS_RSA_OR_IDEA 8
+#define STATUS_KEYEXPIRED 9
+#define STATUS_KEYREVOKED 10
+
+#define STATUS_TRUST_UNDEFINED 11
+#define STATUS_TRUST_NEVER 12
+#define STATUS_TRUST_MARGINAL 13
+#define STATUS_TRUST_FULLY 14
+#define STATUS_TRUST_ULTIMATE 15
+
+#define STATUS_SHM_INFO 16
+#define STATUS_SHM_GET 17
+#define STATUS_SHM_GET_BOOL 18
+#define STATUS_SHM_GET_HIDDEN 19
+
+#define STATUS_NEED_PASSPHRASE 20
+#define STATUS_VALIDSIG 21
+#define STATUS_SIG_ID 22
+#define STATUS_ENC_TO 23
+#define STATUS_NODATA 24
+#define STATUS_BAD_PASSPHRASE 25
+#define STATUS_NO_PUBKEY 26
+#define STATUS_NO_SECKEY 27
+#define STATUS_NEED_PASSPHRASE_SYM 28
+#define STATUS_DECRYPTION_FAILED 29
+#define STATUS_DECRYPTION_OKAY 30
+#define STATUS_MISSING_PASSPHRASE 31
+#define STATUS_GOOD_PASSPHRASE 32
+#define STATUS_GOODMDC 33
+#define STATUS_BADMDC 34
+#define STATUS_ERRMDC 35
+#define STATUS_IMPORTED 36
+#define STATUS_IMPORT_RES 37
+#define STATUS_FILE_START 38
+#define STATUS_FILE_DONE 39
+#define STATUS_FILE_ERROR 40
+
+#define STATUS_BEGIN_DECRYPTION 41
+#define STATUS_END_DECRYPTION 42
+#define STATUS_BEGIN_ENCRYPTION 43
+#define STATUS_END_ENCRYPTION 44
+
+#define STATUS_DELETE_PROBLEM 45
+#define STATUS_GET_BOOL 46
+#define STATUS_GET_LINE 47
+#define STATUS_GET_HIDDEN 48
+#define STATUS_GOT_IT 49
+#define STATUS_PROGRESS 50
+#define STATUS_SIG_CREATED 51
+#define STATUS_SESSION_KEY 52
+#define STATUS_NOTATION_NAME 53
+#define STATUS_NOTATION_DATA 54
+#define STATUS_POLICY_URL 55
+#define STATUS_BEGIN_STREAM 56
+#define STATUS_END_STREAM 57
+#define STATUS_KEY_CREATED 58
+#define STATUS_USERID_HINT 59
+#define STATUS_UNEXPECTED 60
+#define STATUS_INV_RECP 61
+#define STATUS_NO_RECP 62
+#define STATUS_ALREADY_SIGNED 63
+#define STATUS_SIGEXPIRED 64
+#define STATUS_EXPSIG 65
+#define STATUS_EXPKEYSIG 66
+#define STATUS_ATTRIBUTE 67
+#define STATUS_IMPORT_OK 68
+#define STATUS_IMPORT_CHECK 69
+
+/*-- status.c --*/
+void set_status_fd ( int fd );
+int is_status_enabled ( void );
+void write_status ( int no );
+void write_status_text ( int no, const char *text );
+void write_status_buffer ( int no,
+ const char *buffer, size_t len, int wrap );
+void write_status_text_and_buffer ( int no, const char *text,
+ const char *buffer, size_t len, int wrap );
+
+#ifdef USE_SHM_COPROCESSING
+ void init_shm_coprocessing ( ulong requested_shm_size, int lock_mem );
+#endif /*USE_SHM_COPROCESSING*/
+
+int cpr_enabled(void);
+char *cpr_get( const char *keyword, const char *prompt );
+char *cpr_get_no_help( const char *keyword, const char *prompt );
+char *cpr_get_utf8( const char *keyword, const char *prompt );
+char *cpr_get_hidden( const char *keyword, const char *prompt );
+void cpr_kill_prompt(void);
+int cpr_get_answer_is_yes( const char *keyword, const char *prompt );
+int cpr_get_answer_yes_no_quit( const char *keyword, const char *prompt );
+
+
+#endif /*G10_STATUS_H*/
diff --git a/include/_regex.h b/include/_regex.h
new file mode 100644
index 000000000..fac441dc6
--- /dev/null
+++ b/include/_regex.h
@@ -0,0 +1,574 @@
+/* Definitions for data structures and routines for the regular
+ expression library.
+ Copyright (C) 1985,1989-93,1995-98,2000,2001,2002
+ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#ifndef _REGEX_H
+#define _REGEX_H 1
+
+/* Allow the use in C++ code. */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* POSIX says that <sys/types.h> must be included (by the caller) before
+ <regex.h>. */
+
+#if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS
+/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
+ should be there. */
+# include <stddef.h>
+#endif
+
+/* The following two types have to be signed and unsigned integer type
+ wide enough to hold a value of a pointer. For most ANSI compilers
+ ptrdiff_t and size_t should be likely OK. Still size of these two
+ types is 2 for Microsoft C. Ugh... */
+typedef long int s_reg_t;
+typedef unsigned long int active_reg_t;
+
+/* The following bits are used to determine the regexp syntax we
+ recognize. The set/not-set meanings are chosen so that Emacs syntax
+ remains the value 0. The bits are given in alphabetical order, and
+ the definitions shifted by one from the previous bit; thus, when we
+ add or remove a bit, only one other definition need change. */
+typedef unsigned long int reg_syntax_t;
+
+/* If this bit is not set, then \ inside a bracket expression is literal.
+ If set, then such a \ quotes the following character. */
+#define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
+
+/* If this bit is not set, then + and ? are operators, and \+ and \? are
+ literals.
+ If set, then \+ and \? are operators and + and ? are literals. */
+#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
+
+/* If this bit is set, then character classes are supported. They are:
+ [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:],
+ [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
+ If not set, then character classes are not supported. */
+#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
+
+/* If this bit is set, then ^ and $ are always anchors (outside bracket
+ expressions, of course).
+ If this bit is not set, then it depends:
+ ^ is an anchor if it is at the beginning of a regular
+ expression or after an open-group or an alternation operator;
+ $ is an anchor if it is at the end of a regular expression, or
+ before a close-group or an alternation operator.
+
+ This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
+ POSIX draft 11.2 says that * etc. in leading positions is undefined.
+ We already implemented a previous draft which made those constructs
+ invalid, though, so we haven't changed the code back. */
+#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
+
+/* If this bit is set, then special characters are always special
+ regardless of where they are in the pattern.
+ If this bit is not set, then special characters are special only in
+ some contexts; otherwise they are ordinary. Specifically,
+ * + ? and intervals are only special when not after the beginning,
+ open-group, or alternation operator. */
+#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
+
+/* If this bit is set, then *, +, ?, and { cannot be first in an re or
+ immediately after an alternation or begin-group operator. */
+#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
+
+/* If this bit is set, then . matches newline.
+ If not set, then it doesn't. */
+#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
+
+/* If this bit is set, then . doesn't match NUL.
+ If not set, then it does. */
+#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
+
+/* If this bit is set, nonmatching lists [^...] do not match newline.
+ If not set, they do. */
+#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
+
+/* If this bit is set, either \{...\} or {...} defines an
+ interval, depending on RE_NO_BK_BRACES.
+ If not set, \{, \}, {, and } are literals. */
+#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
+
+/* If this bit is set, +, ? and | aren't recognized as operators.
+ If not set, they are. */
+#define RE_LIMITED_OPS (RE_INTERVALS << 1)
+
+/* If this bit is set, newline is an alternation operator.
+ If not set, newline is literal. */
+#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
+
+/* If this bit is set, then `{...}' defines an interval, and \{ and \}
+ are literals.
+ If not set, then `\{...\}' defines an interval. */
+#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
+
+/* If this bit is set, (...) defines a group, and \( and \) are literals.
+ If not set, \(...\) defines a group, and ( and ) are literals. */
+#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
+
+/* If this bit is set, then \<digit> matches <digit>.
+ If not set, then \<digit> is a back-reference. */
+#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
+
+/* If this bit is set, then | is an alternation operator, and \| is literal.
+ If not set, then \| is an alternation operator, and | is literal. */
+#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
+
+/* If this bit is set, then an ending range point collating higher
+ than the starting range point, as in [z-a], is invalid.
+ If not set, then when ending range point collates higher than the
+ starting range point, the range is ignored. */
+#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
+
+/* If this bit is set, then an unmatched ) is ordinary.
+ If not set, then an unmatched ) is invalid. */
+#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
+
+/* If this bit is set, succeed as soon as we match the whole pattern,
+ without further backtracking. */
+#define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
+
+/* If this bit is set, do not process the GNU regex operators.
+ If not set, then the GNU regex operators are recognized. */
+#define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
+
+/* If this bit is set, turn on internal regex debugging.
+ If not set, and debugging was on, turn it off.
+ This only works if regex.c is compiled -DDEBUG.
+ We define this bit always, so that all that's needed to turn on
+ debugging is to recompile regex.c; the calling code can always have
+ this bit set, and it won't affect anything in the normal case. */
+#define RE_DEBUG (RE_NO_GNU_OPS << 1)
+
+/* If this bit is set, a syntactically invalid interval is treated as
+ a string of ordinary characters. For example, the ERE 'a{1' is
+ treated as 'a\{1'. */
+#define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1)
+
+/* If this bit is set, then ignore case when matching.
+ If not set, then case is significant. */
+#define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1)
+
+/* This global variable defines the particular regexp syntax to use (for
+ some interfaces). When a regexp is compiled, the syntax used is
+ stored in the pattern buffer, so changing this does not affect
+ already-compiled regexps. */
+extern reg_syntax_t re_syntax_options;
+
+/* Define combinations of the above bits for the standard possibilities.
+ (The [[[ comments delimit what gets put into the Texinfo file, so
+ don't delete them!) */
+/* [[[begin syntaxes]]] */
+#define RE_SYNTAX_EMACS 0
+
+#define RE_SYNTAX_AWK \
+ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \
+ | RE_NO_BK_PARENS | RE_NO_BK_REFS \
+ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \
+ | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \
+ | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS)
+
+#define RE_SYNTAX_GNU_AWK \
+ ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG) \
+ & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS \
+ | RE_CONTEXT_INVALID_OPS ))
+
+#define RE_SYNTAX_POSIX_AWK \
+ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \
+ | RE_INTERVALS | RE_NO_GNU_OPS)
+
+#define RE_SYNTAX_GREP \
+ (RE_BK_PLUS_QM | RE_CHAR_CLASSES \
+ | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \
+ | RE_NEWLINE_ALT)
+
+#define RE_SYNTAX_EGREP \
+ (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \
+ | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \
+ | RE_NEWLINE_ALT | RE_NO_BK_PARENS \
+ | RE_NO_BK_VBAR)
+
+#define RE_SYNTAX_POSIX_EGREP \
+ (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES \
+ | RE_INVALID_INTERVAL_ORD)
+
+/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */
+#define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
+
+#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
+
+/* Syntax bits common to both basic and extended POSIX regex syntax. */
+#define _RE_SYNTAX_POSIX_COMMON \
+ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \
+ | RE_INTERVALS | RE_NO_EMPTY_RANGES)
+
+#define RE_SYNTAX_POSIX_BASIC \
+ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
+
+/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
+ RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this
+ isn't minimal, since other operators, such as \`, aren't disabled. */
+#define RE_SYNTAX_POSIX_MINIMAL_BASIC \
+ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
+
+#define RE_SYNTAX_POSIX_EXTENDED \
+ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
+ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \
+ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \
+ | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD)
+
+/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is
+ removed and RE_NO_BK_REFS is added. */
+#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \
+ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
+ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \
+ | RE_NO_BK_PARENS | RE_NO_BK_REFS \
+ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD)
+/* [[[end syntaxes]]] */
+
+/* Maximum number of duplicates an interval can allow. Some systems
+ (erroneously) define this in other header files, but we want our
+ value, so remove any previous define. */
+#ifdef RE_DUP_MAX
+# undef RE_DUP_MAX
+#endif
+/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows. */
+#define RE_DUP_MAX (0x7fff)
+
+
+/* POSIX `cflags' bits (i.e., information for `regcomp'). */
+
+/* If this bit is set, then use extended regular expression syntax.
+ If not set, then use basic regular expression syntax. */
+#define REG_EXTENDED 1
+
+/* If this bit is set, then ignore case when matching.
+ If not set, then case is significant. */
+#define REG_ICASE (REG_EXTENDED << 1)
+
+/* If this bit is set, then anchors do not match at newline
+ characters in the string.
+ If not set, then anchors do match at newlines. */
+#define REG_NEWLINE (REG_ICASE << 1)
+
+/* If this bit is set, then report only success or fail in regexec.
+ If not set, then returns differ between not matching and errors. */
+#define REG_NOSUB (REG_NEWLINE << 1)
+
+
+/* POSIX `eflags' bits (i.e., information for regexec). */
+
+/* If this bit is set, then the beginning-of-line operator doesn't match
+ the beginning of the string (presumably because it's not the
+ beginning of a line).
+ If not set, then the beginning-of-line operator does match the
+ beginning of the string. */
+#define REG_NOTBOL 1
+
+/* Like REG_NOTBOL, except for the end-of-line. */
+#define REG_NOTEOL (1 << 1)
+
+
+/* If any error codes are removed, changed, or added, update the
+ `re_error_msg' table in regex.c. */
+typedef enum
+{
+#ifdef _XOPEN_SOURCE
+ REG_ENOSYS = -1, /* This will never happen for this implementation. */
+#endif
+
+ REG_NOERROR = 0, /* Success. */
+ REG_NOMATCH, /* Didn't find a match (for regexec). */
+
+ /* POSIX regcomp return error codes. (In the order listed in the
+ standard.) */
+ REG_BADPAT, /* Invalid pattern. */
+ REG_ECOLLATE, /* Not implemented. */
+ REG_ECTYPE, /* Invalid character class name. */
+ REG_EESCAPE, /* Trailing backslash. */
+ REG_ESUBREG, /* Invalid back reference. */
+ REG_EBRACK, /* Unmatched left bracket. */
+ REG_EPAREN, /* Parenthesis imbalance. */
+ REG_EBRACE, /* Unmatched \{. */
+ REG_BADBR, /* Invalid contents of \{\}. */
+ REG_ERANGE, /* Invalid range end. */
+ REG_ESPACE, /* Ran out of memory. */
+ REG_BADRPT, /* No preceding re for repetition op. */
+
+ /* Error codes we've added. */
+ REG_EEND, /* Premature end. */
+ REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */
+ REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */
+} reg_errcode_t;
+
+/* This data structure represents a compiled pattern. Before calling
+ the pattern compiler, the fields `buffer', `allocated', `fastmap',
+ `translate', and `no_sub' can be set. After the pattern has been
+ compiled, the `re_nsub' field is available. All other fields are
+ private to the regex routines. */
+
+#ifndef RE_TRANSLATE_TYPE
+# define RE_TRANSLATE_TYPE char *
+#endif
+
+struct re_pattern_buffer
+{
+/* [[[begin pattern_buffer]]] */
+ /* Space that holds the compiled pattern. It is declared as
+ `unsigned char *' because its elements are
+ sometimes used as array indexes. */
+ unsigned char *buffer;
+
+ /* Number of bytes to which `buffer' points. */
+ unsigned long int allocated;
+
+ /* Number of bytes actually used in `buffer'. */
+ unsigned long int used;
+
+ /* Syntax setting with which the pattern was compiled. */
+ reg_syntax_t syntax;
+
+ /* Pointer to a fastmap, if any, otherwise zero. re_search uses
+ the fastmap, if there is one, to skip over impossible
+ starting points for matches. */
+ char *fastmap;
+
+ /* Either a translate table to apply to all characters before
+ comparing them, or zero for no translation. The translation
+ is applied to a pattern when it is compiled and to a string
+ when it is matched. */
+ RE_TRANSLATE_TYPE translate;
+
+ /* Number of subexpressions found by the compiler. */
+ size_t re_nsub;
+
+ /* Zero if this pattern cannot match the empty string, one else.
+ Well, in truth it's used only in `re_search_2', to see
+ whether or not we should use the fastmap, so we don't set
+ this absolutely perfectly; see `re_compile_fastmap' (the
+ `duplicate' case). */
+ unsigned can_be_null : 1;
+
+ /* If REGS_UNALLOCATED, allocate space in the `regs' structure
+ for `max (RE_NREGS, re_nsub + 1)' groups.
+ If REGS_REALLOCATE, reallocate space if necessary.
+ If REGS_FIXED, use what's there. */
+#define REGS_UNALLOCATED 0
+#define REGS_REALLOCATE 1
+#define REGS_FIXED 2
+ unsigned regs_allocated : 2;
+
+ /* Set to zero when `regex_compile' compiles a pattern; set to one
+ by `re_compile_fastmap' if it updates the fastmap. */
+ unsigned fastmap_accurate : 1;
+
+ /* If set, `re_match_2' does not return information about
+ subexpressions. */
+ unsigned no_sub : 1;
+
+ /* If set, a beginning-of-line anchor doesn't match at the
+ beginning of the string. */
+ unsigned not_bol : 1;
+
+ /* Similarly for an end-of-line anchor. */
+ unsigned not_eol : 1;
+
+ /* If true, an anchor at a newline matches. */
+ unsigned newline_anchor : 1;
+
+/* [[[end pattern_buffer]]] */
+};
+
+typedef struct re_pattern_buffer regex_t;
+
+/* Type for byte offsets within the string. POSIX mandates this. */
+typedef int regoff_t;
+
+
+/* This is the structure we store register match data in. See
+ regex.texinfo for a full description of what registers match. */
+struct re_registers
+{
+ unsigned num_regs;
+ regoff_t *start;
+ regoff_t *end;
+};
+
+
+/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
+ `re_match_2' returns information about at least this many registers
+ the first time a `regs' structure is passed. */
+#ifndef RE_NREGS
+# define RE_NREGS 30
+#endif
+
+
+/* POSIX specification for registers. Aside from the different names than
+ `re_registers', POSIX uses an array of structures, instead of a
+ structure of arrays. */
+typedef struct
+{
+ regoff_t rm_so; /* Byte offset from string's start to substring's start. */
+ regoff_t rm_eo; /* Byte offset from string's start to substring's end. */
+} regmatch_t;
+
+/* Declarations for routines. */
+
+/* To avoid duplicating every routine declaration -- once with a
+ prototype (if we are ANSI), and once without (if we aren't) -- we
+ use the following macro to declare argument types. This
+ unfortunately clutters up the declarations a bit, but I think it's
+ worth it. */
+
+#if __STDC__
+
+# define _RE_ARGS(args) args
+
+#else /* not __STDC__ */
+
+# define _RE_ARGS(args) ()
+
+#endif /* not __STDC__ */
+
+/* Sets the current default syntax to SYNTAX, and return the old syntax.
+ You can also simply assign to the `re_syntax_options' variable. */
+extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax));
+
+/* Compile the regular expression PATTERN, with length LENGTH
+ and syntax given by the global `re_syntax_options', into the buffer
+ BUFFER. Return NULL if successful, and an error string if not. */
+extern const char *re_compile_pattern
+ _RE_ARGS ((const char *pattern, size_t length,
+ struct re_pattern_buffer *buffer));
+
+
+/* Compile a fastmap for the compiled pattern in BUFFER; used to
+ accelerate searches. Return 0 if successful and -2 if was an
+ internal error. */
+extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer));
+
+
+/* Search in the string STRING (with length LENGTH) for the pattern
+ compiled into BUFFER. Start searching at position START, for RANGE
+ characters. Return the starting position of the match, -1 for no
+ match, or -2 for an internal error. Also return register
+ information in REGS (if REGS and BUFFER->no_sub are nonzero). */
+extern int re_search
+ _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
+ int length, int start, int range, struct re_registers *regs));
+
+
+/* Like `re_search', but search in the concatenation of STRING1 and
+ STRING2. Also, stop searching at index START + STOP. */
+extern int re_search_2
+ _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
+ int length1, const char *string2, int length2,
+ int start, int range, struct re_registers *regs, int stop));
+
+
+/* Like `re_search', but return how many characters in STRING the regexp
+ in BUFFER matched, starting at position START. */
+extern int re_match
+ _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string,
+ int length, int start, struct re_registers *regs));
+
+
+/* Relates to `re_match' as `re_search_2' relates to `re_search'. */
+extern int re_match_2
+ _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1,
+ int length1, const char *string2, int length2,
+ int start, struct re_registers *regs, int stop));
+
+
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+ ENDS. Subsequent matches using BUFFER and REGS will use this memory
+ for recording register information. STARTS and ENDS must be
+ allocated with malloc, and must each be at least `NUM_REGS * sizeof
+ (regoff_t)' bytes long.
+
+ If NUM_REGS == 0, then subsequent matches should allocate their own
+ register data.
+
+ Unless this function is called, the first search or match using
+ PATTERN_BUFFER will allocate its own register data, without
+ freeing the old data. */
+extern void re_set_registers
+ _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs,
+ unsigned num_regs, regoff_t *starts, regoff_t *ends));
+
+#if defined _REGEX_RE_COMP || defined _LIBC
+# ifndef _CRAY
+/* 4.2 bsd compatibility. */
+extern char *re_comp _RE_ARGS ((const char *));
+extern int re_exec _RE_ARGS ((const char *));
+# endif
+#endif
+
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
+ "restrict", and "configure" may have defined "restrict". */
+#ifndef __restrict
+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
+# if defined restrict || 199901L <= __STDC_VERSION__
+# define __restrict restrict
+# else
+# define __restrict
+# endif
+# endif
+#endif
+/* gcc 3.1 and up support the [restrict] syntax. */
+#ifndef __restrict_arr
+# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
+# define __restrict_arr __restrict
+# else
+# define __restrict_arr
+# endif
+#endif
+
+/* POSIX compatibility. */
+extern int regcomp _RE_ARGS ((regex_t *__restrict __preg,
+ const char *__restrict __pattern,
+ int __cflags));
+
+extern int regexec _RE_ARGS ((const regex_t *__restrict __preg,
+ const char *__restrict __string, size_t __nmatch,
+ regmatch_t __pmatch[__restrict_arr],
+ int __eflags));
+
+extern size_t regerror _RE_ARGS ((int __errcode, const regex_t *__preg,
+ char *__errbuf, size_t __errbuf_size));
+
+extern void regfree _RE_ARGS ((regex_t *__preg));
+
+
+#ifdef __cplusplus
+}
+#endif /* C++ */
+
+#endif /* regex.h */
+
+/*
+Local variables:
+make-backup-files: t
+version-control: t
+trim-versions-without-asking: nil
+End:
+*/
diff --git a/include/distfiles b/include/distfiles
new file mode 100644
index 000000000..20a9091e6
--- /dev/null
+++ b/include/distfiles
@@ -0,0 +1,15 @@
+cipher.h
+errors.h
+iobuf.h
+memory.h
+mpi.h
+ttyio.h
+types.h
+util.h
+i18n.h
+host2net.h
+http.h
+keyserver.h
+_regex.h
+
+ChangeLog
diff --git a/include/ttyio.h b/include/ttyio.h
new file mode 100644
index 000000000..5f6557930
--- /dev/null
+++ b/include/ttyio.h
@@ -0,0 +1,40 @@
+/* ttyio.h
+ * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ *
+ * This file is part of GNUPG.
+ *
+ * GNUPG is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GNUPG is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+#ifndef G10_TTYIO_H
+#define G10_TTYIO_H
+
+const char *tty_get_ttyname (void);
+int tty_batchmode( int onoff );
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 )
+ void tty_printf (const char *fmt, ... ) __attribute__ ((format (printf,1,2)));
+#else
+ void tty_printf (const char *fmt, ... );
+#endif
+void tty_print_string( byte *p, size_t n );
+void tty_print_utf8_string( byte *p, size_t n );
+void tty_print_utf8_string2( byte *p, size_t n, size_t max_n );
+char *tty_get( const char *prompt );
+char *tty_get_hidden( const char *prompt );
+void tty_kill_prompt(void);
+int tty_get_answer_is_yes( const char *prompt );
+int tty_no_terminal(int onoff);
+
+
+#endif /*G10_TTYIO_H*/
diff --git a/include/zlib-riscos.h b/include/zlib-riscos.h
new file mode 100644
index 000000000..fad556bcb
--- /dev/null
+++ b/include/zlib-riscos.h
@@ -0,0 +1,134 @@
+/* zlib-riscos.h
+ * Copyright (C) 2002 Free Software Foundation, Inc.
+ *
+ * This file is part of GNUPG.
+ *
+ * GNUPG is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GNUPG is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+#ifndef G10_ZLIB_RISCOS_H
+#define G10_ZLIB_RISCOS_H
+
+#include <kernel.h>
+#include <swis.h>
+
+static const char * const zlib_path[] = {
+ "System:310.Modules.ZLib",
+ NULL
+};
+
+#define ZLib_Compress 0x53AC0
+#define ZLib_Decompress 0x53AC1
+#define ZLib_CRC32 0x53AC2
+#define ZLib_Adler32 0x53AC3
+#define ZLib_Version 0x53AC4
+#define ZLib_ZCompress 0x53AC5
+#define ZLib_ZCompress2 0x53AC6
+#define ZLib_ZUncompress 0x53AC7
+#define ZLib_DeflateInit 0x53AC8
+#define ZLib_InflateInit 0x53AC9
+#define ZLib_DeflateInit2 0x53ACA
+#define ZLib_InflateInit2 0x53ACB
+#define ZLib_Deflate 0x53ACC
+#define ZLib_DeflateEnd 0x53ACD
+#define ZLib_Inflate 0x53ACE
+#define ZLib_InflateEnd 0x53ACF
+#define ZLib_DeflateSetDictionary 0x53AD0
+#define ZLib_DeflateCopy 0x53AD1
+#define ZLib_DeflateReset 0x53AD2
+#define ZLib_DeflateParams 0x53AD3
+#define ZLib_InflateSetDictionary 0x53AD4
+#define ZLib_InflateSync 0x53AD5
+#define ZLib_InflateReset 0x53AD6
+#define ZLib_GZOpen 0x53AD7
+#define ZLib_GZRead 0x53AD8
+#define ZLib_GRWrite 0x53AD9
+#define ZLib_GZFlush 0x53ADA
+#define ZLib_GZClose 0x53ADB
+#define ZLib_GZError 0x53ADC
+#define ZLib_GZSeek 0x53ADD
+#define ZLib_GZTell 0x53ADE
+#define ZLib_GZEOF 0x53ADF
+#define ZLib_TaskAssociate 0x53AE0
+
+#define crc32(r0,r1,r2) \
+ _swi(ZLib_CRC32, _INR(0,2) | _RETURN(0), r0,r1,r2)
+#define adler32(r0,r1,r2) \
+ _swi(ZLib_Adler32, _INR(0,2) | _RETURN(0), r0,r1,r2)
+#define zlibVersion() \
+ _swi(ZLib_Version, _RETURN(0))
+#define compress(r0,r1,r2,r3) \
+ _swi(ZLib_ZCompress, _INR(0,3) | _RETURN(0)|_OUT(1), r0,r1,r2,r3, &r1)
+#define compress2(r0,r1,r2,r3,r4) \
+ _swi(ZLib_ZCompress2, _INR(0,4) | _RETURN(0)|_OUT(1), r0,r1,r2,r3,r4, &r1)
+#define uncompress(r0,r1,r2,r3) \
+ _swi(ZLib_ZUncompress, _INR(0,3) | _RETURN(0)|_OUT(1), r0,r1,r2,r3, &r1)
+#define deflateInit_(r0,r1,r2,r3) \
+ _swi(ZLib_DeflateInit, _INR(0,3) | _RETURN(0), r0,r1,r2,r3)
+#define inflateInit_(r0,r1,r2) \
+ _swi(ZLib_InflateInit, _INR(0,2) | _RETURN(0), r0,r1,r2)
+#define deflateInit2_(r0,r1,r2,r3,r4,r5,r6,r7) \
+ _swi(ZLib_DeflateInit2, _INR(0,7) | _RETURN(0), r0,r1,r2,r3,r4,r5,r6,r7)
+#define inflateInit2_(r0,r1,r2,r3) \
+ _swi(ZLib_InflateInit2, _INR(0,3) | _RETURN(0), r0,r1,r2,r3)
+#define deflate(r0,r1) \
+ _swi(ZLib_Deflate, _INR(0,1) | _RETURN(0), r0,r1)
+#define deflateEnd(r0) \
+ _swi(ZLib_DeflateEnd, _IN(0) | _RETURN(0), r0)
+#define inflate(r0,r1) \
+ _swi(ZLib_Inflate, _INR(0,1) | _RETURN(0), r0,r1)
+#define inflateEnd(r0) \
+ _swi(ZLib_InflateEnd, _IN(0) | _RETURN(0), r0)
+#define deflateSetDictionary(r0,r1,r2) \
+ _swi(ZLib_DeflateSetDictionary, _INR(0,2) | _RETURN(0), r0,r1,r2)
+#define deflateCopy(r0,r1) \
+ _swi(ZLib_DeflateCopy, _INR(0,1) | _RETURN(0), r0,r1)
+#define deflateReset(r0) \
+ _swi(ZLib_DeflateReset, _IN(0) | _RETURN(0), r0)
+#define deflateParams(r0,r1,r2) \
+ _swi(ZLib_DeflateParams, _INR(0,2) | _RETURN(0), r0,r1,r2)
+#define inflateSetDictionary(r0,r1,r2) \
+ _swi(ZLib_InflateSetDictionary, _INR(0,2) | _RETURN(0), r0,r1,r2)
+#define inflateSync(r0) \
+ _swi(ZLib_InflateSync, _IN(0) | _RETURN(0), r0)
+#define inflateReset(r0) \
+ _swi(ZLib_InflateReset, _IN(0) | _RETURN(0), r0)
+#define gzopen(r0,r1) \
+ _swi(ZLib_GZOpen, _INR(0,1) | _RETURN(0), r0)
+#define gzdopen(r0,r1) BUG()
+#define gzsetparams(r0,r1,r2) BUG()
+#define gzread(r0,r1,r2) \
+ _swi(ZLib_GZRead, _INR(0,2) | _RETURN(0), r0,r1,r2)
+#define gzwrite(r0,r1,r2) \
+ _swi(ZLib_GZWrite, _INR(0,2) | _RETURN(0), r0,r1,r2)
+#define gzprintf(r0,r1,...) BUG()
+#define gzputs(r0,r1) BUG()
+#define gzgets(r0,r1,r2) BUG()
+#define gzputc(r0,r1) BUG()
+#define gzgetc(r0) BUG()
+#define gzflush(r0,r1) \
+ _swi(ZLib_GZFlush, _INR(0,1) | _RETURN(0), r0,r1)
+#define gzclose(r0) \
+ _swi(ZLib_GZClose, _IN(0) | _RETURN(0), r0)
+#define gzerror(r0,r1) \
+ _swi(ZLib_GZError, _IN(0) | _RETURN(0)|_OUT(1), r0, &r1)
+#define gzseek(r0,r1,r2) \
+ _swi(ZLib_GZSeek, _INR(0,2) | _RETURN(0), r0,r1,r2)
+#define gzrewind(r0) BUG()
+#define gztell(r0) \
+ _swi(ZLib_GZTell, _IN(0) | _RETURN(0), r0)
+#define gzeof(r0) \
+ _swi(ZLib_GZEOF, _IN(0) | _RETURN(0), r0)
+
+#endif /* G10_ZLIB_RISCOS_H */
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 000000000..d11d8d9bc
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,5254 @@
+# GnuPG german translation
+# Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+# Walter Koch <koch@hsp.de>, 1998, 1999, 2000, 2001
+msgid ""
+msgstr ""
+"Project-Id-Version: gnupg-1.0.7\n"
+"POT-Creation-Date: 2002-11-11 19:56+0100\n"
+"PO-Revision-Date: 2002-09-11 15:40+0200\n"
+"Last-Translator: Walter Koch <koch@hsp.de>\n"
+"Language-Team: German <de@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: util/secmem.c:90
+msgid "WARNING: using insecure memory!\n"
+msgstr "WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.\n"
+
+#: util/secmem.c:91
+msgid "please see http://www.gnupg.org/faq.html for more information\n"
+msgstr "siehe http://www.gnupg.org/de/faq.html für weitere Informationen\n"
+
+# " Um dies zu vermeiden, kann das Programm suid(root) installiert werden.\n"
+# " Bitte wenden Sie sich hierzu an den Systemadministrator.\n"
+#: util/secmem.c:328
+msgid "operation is not possible without initialized secure memory\n"
+msgstr "Vorgang ist ohne sicheren Hauptspeicher nicht möglich\n"
+
+#: util/secmem.c:329
+msgid "(you may have used the wrong program for this task)\n"
+msgstr ""
+"(möglicherweise haben Sie das falsche Programm für diese Aufgabe benutzt)\n"
+
+#: util/miscutil.c:296 util/miscutil.c:331
+msgid "yes"
+msgstr "ja"
+
+#: util/miscutil.c:297 util/miscutil.c:334
+msgid "yY"
+msgstr "jJyY"
+
+#: util/miscutil.c:298 util/miscutil.c:332
+msgid "no"
+msgstr "nein"
+
+#: util/miscutil.c:299 util/miscutil.c:335
+msgid "nN"
+msgstr "nN"
+
+#: g10/keyedit.c:1032 util/miscutil.c:333
+msgid "quit"
+msgstr "quit"
+
+#: util/miscutil.c:336
+msgid "qQ"
+msgstr "qQ"
+
+#: util/errors.c:54
+msgid "general error"
+msgstr "Allgemeiner Fehler"
+
+#: util/errors.c:55
+msgid "unknown packet type"
+msgstr "Unbekannter Pakettyp"
+
+#: util/errors.c:56
+msgid "unknown version"
+msgstr "Unbekannte Version"
+
+#: util/errors.c:57
+msgid "unknown pubkey algorithm"
+msgstr "Unbekanntes Public-Key-Verfahren"
+
+#: util/errors.c:58
+msgid "unknown digest algorithm"
+msgstr "Unbekanntes Hashverfahren"
+
+#: util/errors.c:59
+msgid "bad public key"
+msgstr "Falscher öffentlicher Schüssel"
+
+#: util/errors.c:60
+msgid "bad secret key"
+msgstr "Falscher geheimer Schlüssel"
+
+#: util/errors.c:61
+msgid "bad signature"
+msgstr "Falsche Unterschrift"
+
+#: util/errors.c:62
+msgid "checksum error"
+msgstr "Prüfsummen-Fehler"
+
+#: util/errors.c:63
+msgid "bad passphrase"
+msgstr "Falsches Mantra"
+
+#: util/errors.c:64
+msgid "public key not found"
+msgstr "Öffentlicher Schlüssel nicht gefunden"
+
+#: util/errors.c:65
+msgid "unknown cipher algorithm"
+msgstr "Unbekanntes Verschlüsselungsverfahren"
+
+#: util/errors.c:66
+msgid "can't open the keyring"
+msgstr "Der Schlüsselbund kann nicht geöffnet werden"
+
+#: util/errors.c:67
+msgid "invalid packet"
+msgstr "Ungültiges Paket"
+
+#: util/errors.c:68
+msgid "invalid armor"
+msgstr "Ungültige ASCII-Hülle"
+
+#: util/errors.c:69
+msgid "no such user id"
+msgstr "Keine solche User-ID"
+
+#: util/errors.c:70
+msgid "secret key not available"
+msgstr "Geheimer Schlüssel ist nicht vorhanden"
+
+#: util/errors.c:71
+msgid "wrong secret key used"
+msgstr "Falscher geheimer Schlüssel benutzt"
+
+#: util/errors.c:72
+msgid "not supported"
+msgstr "Wird nicht unterstützt"
+
+#: util/errors.c:73
+msgid "bad key"
+msgstr "Falscher Schlüssel"
+
+#: util/errors.c:74
+msgid "file read error"
+msgstr "Dateilesefehler"
+
+#: util/errors.c:75
+msgid "file write error"
+msgstr "Dateischreibfehler"
+
+#: util/errors.c:76
+msgid "unknown compress algorithm"
+msgstr "Unbekanntes Komprimierverfahren"
+
+#: util/errors.c:77
+msgid "file open error"
+msgstr "Fehler beim Öffnen der Datei"
+
+#: util/errors.c:78
+msgid "file create error"
+msgstr "Fehler beim Erzeugen der Datei"
+
+#: util/errors.c:79
+msgid "invalid passphrase"
+msgstr "Ungültiges Mantra"
+
+#: util/errors.c:80
+msgid "unimplemented pubkey algorithm"
+msgstr "nicht implementiertes öffentliches Schlüsselverfahren"
+
+#: util/errors.c:81
+msgid "unimplemented cipher algorithm"
+msgstr "Verschlüsselungsverfahren ist nicht implementiert"
+
+#: util/errors.c:82
+msgid "unknown signature class"
+msgstr "Unbekannte Unterschriftenklasse"
+
+#: util/errors.c:83
+msgid "trust database error"
+msgstr "Fehler in der Trust-DB"
+
+#: util/errors.c:84
+msgid "bad MPI"
+msgstr "Falsche MPI"
+
+#: util/errors.c:85
+msgid "resource limit"
+msgstr "festdefinierte Ressourcenobergrenze erreicht"
+
+#: util/errors.c:86
+msgid "invalid keyring"
+msgstr "Ungültiger Schlüsselbund"
+
+#: util/errors.c:87
+msgid "bad certificate"
+msgstr "Falsches Zertifikat"
+
+#: util/errors.c:88
+msgid "malformed user id"
+msgstr "Ungünstig aufgebaute User-ID"
+
+#: util/errors.c:89
+msgid "file close error"
+msgstr "Fehler beim Schließen der Datei"
+
+#: util/errors.c:90
+msgid "file rename error"
+msgstr "Fehler beim Umbenennen einer Datei"
+
+#: util/errors.c:91
+msgid "file delete error"
+msgstr "Fehler beim Löschen einer Datei"
+
+#: util/errors.c:92
+msgid "unexpected data"
+msgstr "Unerwartete Daten"
+
+#: util/errors.c:93
+msgid "timestamp conflict"
+msgstr "Zeitangaben differieren"
+
+#: util/errors.c:94
+msgid "unusable pubkey algorithm"
+msgstr "Unbenutzbares öffentliches Schlüsselverfahren"
+
+#: util/errors.c:95
+msgid "file exists"
+msgstr "Datei existiert bereits"
+
+#: util/errors.c:96
+msgid "weak key"
+msgstr "Unsicherer Schlüssel"
+
+#: util/errors.c:97
+msgid "invalid argument"
+msgstr "Ungültiges Argument"
+
+#: util/errors.c:98
+msgid "bad URI"
+msgstr "fehlerhafter URI"
+
+#: util/errors.c:99
+msgid "unsupported URI"
+msgstr "Nicht unterstützter URI"
+
+#: util/errors.c:100
+msgid "network error"
+msgstr "Netzwerkfehler"
+
+#: util/errors.c:102
+msgid "not encrypted"
+msgstr "nicht verschlüsselt"
+
+#: util/errors.c:103
+msgid "not processed"
+msgstr "nicht bearbeitet"
+
+#. the key cannot be used for a specific usage
+#: util/errors.c:105
+msgid "unusable public key"
+msgstr "unbrauchbarer öffentlicher Schüssel"
+
+#: util/errors.c:106
+msgid "unusable secret key"
+msgstr "unbrauchbarer geheimer Schlüssel"
+
+#: util/errors.c:107
+msgid "keyserver error"
+msgstr "Schlüsselserverfehler"
+
+#: util/logger.c:183
+msgid "ERROR: "
+msgstr ""
+
+#: util/logger.c:186
+msgid "WARNING: "
+msgstr ""
+
+#: util/logger.c:279
+#, c-format
+msgid "... this is a bug (%s:%d:%s)\n"
+msgstr "... dies ist ein Bug (Programmfehler) (%s:%d:%s)\n"
+
+#: util/logger.c:285
+#, c-format
+msgid "you found a bug ... (%s:%d)\n"
+msgstr "Sie haben eine Bug (Programmfehler) gefunden ... (%s:%d)\n"
+
+#: cipher/random.c:157
+msgid "no entropy gathering module detected\n"
+msgstr "Kein Modul zum sammeln von Entropie vorhanden\n"
+
+#: cipher/random.c:381 g10/import.c:200 g10/keygen.c:1820
+#, c-format
+msgid "can't open `%s': %s\n"
+msgstr "'%s' kann nicht geöffnet werden: %s\n"
+
+#: cipher/random.c:385
+#, c-format
+msgid "can't stat `%s': %s\n"
+msgstr "Status von '%s' ist nicht feststellbar: %s\n"
+
+#: cipher/random.c:390
+#, c-format
+msgid "`%s' is not a regular file - ignored\n"
+msgstr "'%s' ist keine normale Datei - sie bleibt unbeachtet\n"
+
+#: cipher/random.c:395
+msgid "note: random_seed file is empty\n"
+msgstr "Hinweis: 'random_seed'-Datei ist leer\n"
+
+#: cipher/random.c:401
+msgid "WARNING: invalid size of random_seed file - not used\n"
+msgstr ""
+"WARNUNG: Falsche Größe der 'random_seed'-Datei - sie wird nicht verwendet\n"
+
+#: cipher/random.c:409
+#, c-format
+msgid "can't read `%s': %s\n"
+msgstr "'%s' ist unlesbar: %s\n"
+
+#: cipher/random.c:447
+msgid "note: random_seed file not updated\n"
+msgstr "Hinweis: 'random_seed'-Datei bleibt unverändert\n"
+
+#: cipher/random.c:467
+#, c-format
+msgid "can't create `%s': %s\n"
+msgstr "'%s' kann nicht erzeugt werden: %s\n"
+
+#: cipher/random.c:474
+#, c-format
+msgid "can't write `%s': %s\n"
+msgstr "kann '%s' nicht schreiben: %s\n"
+
+#: cipher/random.c:477
+#, c-format
+msgid "can't close `%s': %s\n"
+msgstr "kann '%s' nicht schliessen: %s\n"
+
+#: cipher/random.c:723
+msgid "WARNING: using insecure random number generator!!\n"
+msgstr "WARNUNG: Der Zufallsgenerator erzeugt keine echten Zufallszahlen!\n"
+
+#: cipher/random.c:724
+msgid ""
+"The random number generator is only a kludge to let\n"
+"it run - it is in no way a strong RNG!\n"
+"\n"
+"DON'T USE ANY DATA GENERATED BY THIS PROGRAM!!\n"
+"\n"
+msgstr ""
+"Der Zufallsgenerator (RNG) ist lediglich ein \"kludge\", damit das\n"
+"Programms überhaupt läuft - es ist KEINESFALLS ein starker RNG!\n"
+"\n"
+"BENUTZEN SIE DIE DURCH DIESES PROGRAMM ERZEUGTEN DATEN NICHT!\n"
+"\n"
+
+#: cipher/rndlinux.c:134
+#, c-format
+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 Zufallswerte vorhanden. Bitte führen Sie andere\n"
+"Arbeiten durch, damit das Betriebssystem weitere Entropie sammeln kann!\n"
+"(Es werden noch %d Byte benötigt.)\n"
+
+#: g10/g10.c:316
+msgid ""
+"@Commands:\n"
+" "
+msgstr ""
+"@Befehle:\n"
+" "
+
+#: g10/g10.c:318
+msgid "|[file]|make a signature"
+msgstr "|[Datei]|Eine Unterschrift erzeugen"
+
+#: g10/g10.c:319
+msgid "|[file]|make a clear text signature"
+msgstr "|[Datei]|Eine Klartextunterschrift erzeugen"
+
+#: g10/g10.c:320
+msgid "make a detached signature"
+msgstr "Eine abgetrennte Unterschrift erzeugen"
+
+#: g10/g10.c:321
+msgid "encrypt data"
+msgstr "Daten verschlüsseln"
+
+#: g10/g10.c:322
+msgid "|[files]|encrypt files"
+msgstr "|[Dateien]|Dateien verschlüsseln"
+
+#: g10/g10.c:323
+msgid "encryption only with symmetric cipher"
+msgstr "Daten symmetrisch verschlüsseln"
+
+#: g10/g10.c:324
+msgid "store only"
+msgstr "Nur speichern"
+
+#: g10/g10.c:325
+msgid "decrypt data (default)"
+msgstr "Daten entschlüsseln (Voreinstellung)"
+
+#: g10/g10.c:326
+msgid "|[files]|decrypt files"
+msgstr "|[Dateien]|Dateien entschlüsseln"
+
+#: g10/g10.c:327
+msgid "verify a signature"
+msgstr "Signatur prüfen"
+
+#: g10/g10.c:329
+msgid "list keys"
+msgstr "Liste der Schlüssel"
+
+#: g10/g10.c:331
+msgid "list keys and signatures"
+msgstr "Liste der Schlüssel und ihrer Signaturen"
+
+#: g10/g10.c:332
+msgid "check key signatures"
+msgstr "Signaturen der Schlüssel prüfen"
+
+#: g10/g10.c:333
+msgid "list keys and fingerprints"
+msgstr "Liste der Schlüssel und ihrer \"Fingerabdrücke\""
+
+#: g10/g10.c:334
+msgid "list secret keys"
+msgstr "Liste der geheimen Schlüssel"
+
+#: g10/g10.c:335
+msgid "generate a new key pair"
+msgstr "Ein neues Schlüsselpaar erzeugen"
+
+#: g10/g10.c:336
+msgid "remove keys from the public keyring"
+msgstr "Schlüssel aus dem öff. Schlüsselbund entfernen"
+
+#: g10/g10.c:338
+msgid "remove keys from the secret keyring"
+msgstr "Schlüssel aus dem geh. Schlüsselbund entfernen"
+
+#: g10/g10.c:339
+msgid "sign a key"
+msgstr "Schlüssel signieren"
+
+#: g10/g10.c:340
+msgid "sign a key locally"
+msgstr "Schlüssel nur für diesen Rechner signieren"
+
+#: g10/g10.c:341
+msgid "sign a key non-revocably"
+msgstr "Schlüssel nicht widerrufbar signieren"
+
+#: g10/g10.c:342
+msgid "sign a key locally and non-revocably"
+msgstr "Schlüssel nur für diesen Rechner und nicht-widerrufbar signieren"
+
+#: g10/g10.c:343
+msgid "sign or edit a key"
+msgstr "Unterschreiben oder bearbeiten eines Schl."
+
+#: g10/g10.c:344
+msgid "generate a revocation certificate"
+msgstr "Ein Schlüsselwiderruf-Zertifikat erzeugen"
+
+#: g10/g10.c:346
+msgid "export keys"
+msgstr "Schlüssel exportieren"
+
+#: g10/g10.c:347
+msgid "export keys to a key server"
+msgstr "Schlüssel zu einem Schlü.server exportieren"
+
+#: g10/g10.c:348
+msgid "import keys from a key server"
+msgstr "Schlüssel von einem Schlü.server importieren"
+
+#: g10/g10.c:350
+msgid "search for keys on a key server"
+msgstr "Schlüssel auf einem Schlü.server suchen"
+
+#: g10/g10.c:352
+msgid "update all keys from a keyserver"
+msgstr "alle Schlüssel per Schlü.server aktualisieren"
+
+#: g10/g10.c:356
+msgid "import/merge keys"
+msgstr "Schlüssel importieren/kombinieren"
+
+#: g10/g10.c:358
+msgid "list only the sequence of packets"
+msgstr "Lediglich Struktur der Datenpakete anzeigen"
+
+#: g10/g10.c:360
+msgid "export the ownertrust values"
+msgstr "Exportieren der \"Owner trust\"-Werte"
+
+#: g10/g10.c:362
+msgid "import ownertrust values"
+msgstr "Importieren der \"Owner trust\"-Werte"
+
+#: g10/g10.c:364
+msgid "update the trust database"
+msgstr "Ändern der \"Trust\"-Datenbank"
+
+#: g10/g10.c:366
+msgid "unattended trust database update"
+msgstr "unbeaufsichtigtes Ändern der \"Trust\"-Datenbank"
+
+#: g10/g10.c:367
+msgid "fix a corrupted trust database"
+msgstr "Reparieren einer beschädigten \"Trust\"-Datenb."
+
+#: g10/g10.c:368
+msgid "De-Armor a file or stdin"
+msgstr "Datei oder stdin von der ASCII-Hülle befreien"
+
+#: g10/g10.c:370
+msgid "En-Armor a file or stdin"
+msgstr "Datei oder stdin in eine ASCII-Hülle einpacken"
+
+#: g10/g10.c:372
+msgid "|algo [files]|print message digests"
+msgstr "|algo [Dateien]|Message-Digests für die Dateien ausgeben"
+
+#: g10/g10.c:376
+msgid ""
+"@\n"
+"Options:\n"
+" "
+msgstr ""
+"@\n"
+"Optionen:\n"
+" "
+
+#: g10/g10.c:378
+msgid "create ascii armored output"
+msgstr "Ausgabe mit ASCII-Hülle versehen"
+
+#: g10/g10.c:380
+msgid "|NAME|encrypt for NAME"
+msgstr "|NAME|Verschlüsseln für NAME"
+
+#: g10/g10.c:384
+msgid "|NAME|use NAME as default recipient"
+msgstr "|NAME|NAME als voreingestellten Empfänger benutzen"
+
+#: g10/g10.c:386
+msgid "use the default key as default recipient"
+msgstr ""
+"Den Standardschlüssel als voreingestellten\n"
+"Empfänger benutzen"
+
+#: g10/g10.c:393
+msgid "use this user-id to sign or decrypt"
+msgstr "Mit dieser User-ID signieren"
+
+#: g10/g10.c:394
+msgid "|N|set compress level N (0 disables)"
+msgstr "Kompressionsstufe auf N setzen (0=keine)"
+
+#: g10/g10.c:396
+msgid "use canonical text mode"
+msgstr "Textmodus benutzen"
+
+#: g10/g10.c:403
+msgid "use as output file"
+msgstr "Als Ausgabedatei benutzen"
+
+#: g10/g10.c:404
+msgid "verbose"
+msgstr "Detaillierte Informationen"
+
+#: g10/g10.c:405
+msgid "be somewhat more quiet"
+msgstr "Etwas weniger Infos"
+
+#: g10/g10.c:406
+msgid "don't use the terminal at all"
+msgstr "das Terminal gar nicht benutzen"
+
+#: g10/g10.c:407
+msgid "force v3 signatures"
+msgstr "v3 Signaturen erzwingen"
+
+#: g10/g10.c:408
+msgid "do not force v3 signatures"
+msgstr "v3 Signaturen nicht erzwingen"
+
+#: g10/g10.c:409
+msgid "force v4 key signatures"
+msgstr "v4 Signaturen erzwingen"
+
+#: g10/g10.c:410
+msgid "do not force v4 key signatures"
+msgstr "v4 Signaturen nicht erzwingen"
+
+#: g10/g10.c:411
+msgid "always use a MDC for encryption"
+msgstr "Beim Verschlüsseln ein Siegel (MDC) verwenden"
+
+#: g10/g10.c:413
+msgid "never use a MDC for encryption"
+msgstr "Beim Verschlüsseln niemals ein Siegel (MDC) verwenden"
+
+#: g10/g10.c:415
+msgid "do not make any changes"
+msgstr "Keine wirklichen Änderungen durchführen"
+
+#: g10/g10.c:416
+msgid "prompt before overwriting"
+msgstr "vor Überschreiben nachfragen"
+
+#: g10/g10.c:417
+msgid "use the gpg-agent"
+msgstr "den GPG-Agent verwenden"
+
+#: g10/g10.c:420
+msgid "batch mode: never ask"
+msgstr "Stapelmodus: Keine Abfragen"
+
+#: g10/g10.c:421
+msgid "assume yes on most questions"
+msgstr "\"Ja\" als Standardantwort annehmen"
+
+#: g10/g10.c:422
+msgid "assume no on most questions"
+msgstr "\"Nein\" als Standardantwort annehmen"
+
+#: g10/g10.c:423
+msgid "add this keyring to the list of keyrings"
+msgstr "Als öffentlichen Schlüsselbund mitbenutzen"
+
+#: g10/g10.c:425
+msgid "add this secret keyring to the list"
+msgstr "Als geheimen Schlüsselbund mitbenutzen"
+
+#: g10/g10.c:426
+msgid "show which keyring a listed key is on"
+msgstr "Anzeigen des Schlüsselbundes, in dem ein Schlüssel drin ist"
+
+#: g10/g10.c:427
+msgid "|NAME|use NAME as default secret key"
+msgstr "|NAME|NAME als voreingestellten Schlüssel benutzen"
+
+#: g10/g10.c:428
+msgid "|HOST|use this keyserver to lookup keys"
+msgstr "|HOST|Schlüssel bei diesem Server nachschlagen"
+
+#: g10/g10.c:432
+msgid "|NAME|set terminal charset to NAME"
+msgstr "|NAME|Terminalzeichensatz NAME benutzen"
+
+#: g10/g10.c:433
+msgid "read options from file"
+msgstr "Optionen aus der Datei lesen"
+
+#: g10/g10.c:437
+msgid "|FD|write status info to this FD"
+msgstr "|FD|Statusinfo auf FD (Dateihandle) ausgeben"
+
+#: g10/g10.c:439
+msgid "|[file]|write status info to file"
+msgstr "|[Datei]|Statusinfo in Datei schreiben"
+
+#: g10/g10.c:451
+msgid "|KEYID|ultimately trust this key"
+msgstr "|KEYID|diesem Schlüssel uneingeschränkt vertrauen"
+
+#: g10/g10.c:452
+msgid "|FILE|load extension module FILE"
+msgstr "|DATEI|Erweiterungsmodul DATEI laden"
+
+#: g10/g10.c:453
+msgid "emulate the mode described in RFC1991"
+msgstr "Den in RFC1991 beschriebenen Modus nachahmen"
+
+#: g10/g10.c:454
+msgid "set all packet, cipher and digest options to OpenPGP behavior"
+msgstr ""
+"alle Paket-, Verschlüsselungs- und\n"
+"Hashoptionen auf OpenPGP-Verhalten einstellen"
+
+#: g10/g10.c:455
+msgid "set all packet, cipher and digest options to PGP 2.x behavior"
+msgstr ""
+"alle Paket-, Verschlüsselungs- und\n"
+"Hashoptionen auf PGP 2.X-Verhalten einstellen"
+
+#: g10/g10.c:461
+msgid "|N|use passphrase mode N"
+msgstr "|N|Verwenden des Mantra-Modus N"
+
+#: g10/g10.c:463
+msgid "|NAME|use message digest algorithm NAME for passphrases"
+msgstr "|NAME|Hashverfahren NAME für Mantras benutzen"
+
+#: g10/g10.c:465
+msgid "|NAME|use cipher algorithm NAME for passphrases"
+msgstr "|NAME|Verschl.verfahren NAME für Mantras benutzen"
+
+#: g10/g10.c:467
+msgid "|NAME|use cipher algorithm NAME"
+msgstr "|NAME|Verschl.verfahren NAME benutzen"
+
+#: g10/g10.c:468
+msgid "|NAME|use message digest algorithm NAME"
+msgstr "|NAME|Hashverfahren NAME benutzen"
+
+#: g10/g10.c:470
+msgid "|N|use compress algorithm N"
+msgstr "|N|Komprimierverfahren N benutzen"
+
+#: g10/g10.c:471
+msgid "throw keyid field of encrypted packets"
+msgstr "Empfänger-ID verschlüsselter Pakete entfernen"
+
+#: g10/g10.c:473
+msgid "Show Photo IDs"
+msgstr "Foto-IDs anzeigen"
+
+#: g10/g10.c:474
+msgid "Don't show Photo IDs"
+msgstr "Foto-IDs nicht anzeigen"
+
+#: g10/g10.c:475
+msgid "Set command line to view Photo IDs"
+msgstr "Kommandozeilentext für den Foto-Betrachter setzen"
+
+#: g10/g10.c:481
+msgid ""
+"@\n"
+"(See the man page for a complete listing of all commands and options)\n"
+msgstr ""
+"@\n"
+"(Auf der \"man\"-Seite ist eine vollständige Liste aller Kommandos und "
+"Optionen)\n"
+
+#: g10/g10.c:484
+msgid ""
+"@\n"
+"Examples:\n"
+"\n"
+" -se -r Bob [file] sign and encrypt for user Bob\n"
+" --clearsign [file] make a clear text signature\n"
+" --detach-sign [file] make a detached signature\n"
+" --list-keys [names] show keys\n"
+" --fingerprint [names] show fingerprints\n"
+msgstr ""
+"@\n"
+"Beispiele:\n"
+"\n"
+" -se -r Bob [Datei] Signieren und verschlüsseln für Benutzer Bob\n"
+" --clearsign [Datei] Eine Klartextsignatur erzeugen\n"
+" --detach-sign [Datei] Eine abgetrennte Signatur erzeugen\n"
+" --list-keys [Namen] Schlüssel anzeigen\n"
+" --fingerprint [Namen] \"Fingerabdrücke\" anzeigen\n"
+
+#: g10/g10.c:640
+msgid "Please report bugs to <gnupg-bugs@gnu.org>.\n"
+msgstr ""
+"Berichte über Programmfehler bitte in englisch an <gnupg-bugs@gnu.org>.\n"
+"Sinn- oder Schreibfehler in den deutschen Texten bitte an <de@li.org>.\n"
+
+#: g10/g10.c:644
+msgid "Usage: gpg [options] [files] (-h for help)"
+msgstr "Aufruf: gpg [Optionen] [Dateien] (-h für Hilfe)"
+
+#: g10/g10.c:647
+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üfen, verschlüsseln, entschlüsseln.\n"
+"Die voreingestellte Operation ist abhängig von den Eingabedaten.\n"
+
+#: g10/g10.c:658
+msgid ""
+"\n"
+"Supported algorithms:\n"
+msgstr ""
+"\n"
+"Unterstützte Verfahren:\n"
+
+#: g10/g10.c:762
+msgid "usage: gpg [options] "
+msgstr "Aufruf: gpg [Optionen] "
+
+#: g10/g10.c:830
+msgid "conflicting commands\n"
+msgstr "Widersprüchliche Befehle\n"
+
+#: g10/g10.c:848
+#, c-format
+msgid "no = sign found in group definition \"%s\"\n"
+msgstr "Kein '='-Zeichen in der Gruppendefinition \"%s\"\n"
+
+#: g10/g10.c:1008
+#, fuzzy, c-format
+msgid "WARNING: unsafe ownership on homedir \"%s\"\n"
+msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n"
+
+#: g10/g10.c:1011
+#, fuzzy, c-format
+msgid "WARNING: unsafe ownership on configuration file \"%s\"\n"
+msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n"
+
+#: g10/g10.c:1014
+#, fuzzy, c-format
+msgid "WARNING: unsafe ownership on extension \"%s\"\n"
+msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n"
+
+#: g10/g10.c:1020
+#, fuzzy, c-format
+msgid "WARNING: unsafe permissions on homedir \"%s\"\n"
+msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n"
+
+#: g10/g10.c:1023
+#, fuzzy, c-format
+msgid "WARNING: unsafe permissions on configuration file \"%s\"\n"
+msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n"
+
+#: g10/g10.c:1026
+#, fuzzy, c-format
+msgid "WARNING: unsafe permissions on extension \"%s\"\n"
+msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n"
+
+#: g10/g10.c:1032
+#, fuzzy, c-format
+msgid "WARNING: unsafe enclosing directory ownership on homedir \"%s\"\n"
+msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n"
+
+#: g10/g10.c:1035
+#, fuzzy, c-format
+msgid ""
+"WARNING: unsafe enclosing directory ownership on configuration file \"%s\"\n"
+msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n"
+
+#: g10/g10.c:1038
+#, fuzzy, c-format
+msgid "WARNING: unsafe enclosing directory ownership on extension \"%s\"\n"
+msgstr "WARNUNG: Unsicheres Besitzverhältnis von %s \"%s\"\n"
+
+#: g10/g10.c:1044
+#, fuzzy, c-format
+msgid "WARNING: unsafe enclosing directory permissions on homedir \"%s\"\n"
+msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n"
+
+#: g10/g10.c:1047
+#, fuzzy, c-format
+msgid ""
+"WARNING: unsafe enclosing directory permissions on configuration file \"%s"
+"\"\n"
+msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n"
+
+#: g10/g10.c:1050
+#, fuzzy, c-format
+msgid "WARNING: unsafe enclosing directory permissions on extension \"%s\"\n"
+msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n"
+
+#: g10/g10.c:1236
+#, c-format
+msgid "NOTE: old default options file `%s' ignored\n"
+msgstr "Hinweis: Alte voreingestellte Optionendatei '%s' wurde ignoriert\n"
+
+#: g10/g10.c:1272
+#, c-format
+msgid "NOTE: no default option file `%s'\n"
+msgstr "Hinweis: Keine voreingestellte Optionendatei '%s' vorhanden\n"
+
+#: g10/g10.c:1276
+#, c-format
+msgid "option file `%s': %s\n"
+msgstr "Optionendatei '%s': %s\n"
+
+#: g10/g10.c:1283
+#, c-format
+msgid "reading options from `%s'\n"
+msgstr "Optionen werden aus '%s' gelesen\n"
+
+#: g10/g10.c:1472 g10/g10.c:1805 g10/g10.c:1816
+#, c-format
+msgid "NOTE: %s is not for normal use!\n"
+msgstr "Hinweis: %s ist nicht für den üblichen Gebrauch gedacht!\n"
+
+#: g10/g10.c:1484
+#, c-format
+msgid "cipher extension \"%s\" not loaded due to unsafe permissions\n"
+msgstr ""
+"Verschlüsselungserweiterung \"%s\" wurde wegen falscher Rechte nicht "
+"geladen\n"
+
+#: g10/g10.c:1627
+#, c-format
+msgid "%s is not a valid character set\n"
+msgstr "%s ist kein gültiger Zeichensatz.\n"
+
+#: g10/g10.c:1645
+msgid "could not parse keyserver URI\n"
+msgstr "Schlüsselserver-URI konnte nicht zerlegt werden\n"
+
+#: g10/g10.c:1654
+#, c-format
+msgid "%s:%d: invalid import options\n"
+msgstr "%s:%d: ungültige Import Option.\n"
+
+#: g10/g10.c:1657
+msgid "invalid import options\n"
+msgstr "Ungültige Import Option\n"
+
+#: g10/g10.c:1664
+#, c-format
+msgid "%s:%d: invalid export options\n"
+msgstr "%s:%d: ungültige Export Option.\n"
+
+#: g10/g10.c:1667
+msgid "invalid export options\n"
+msgstr "Ungültige export Option\n"
+
+#: g10/g10.c:1673
+#, c-format
+msgid "unable to set exec-path to %s\n"
+msgstr "Der Ausführungspfad konnte nicht auf %s gesetzt werden.\n"
+
+#: g10/g10.c:1794
+msgid "WARNING: program may create a core file!\n"
+msgstr "WARNUNG: Programm könnte eine core-dump-Datei schreiben!\n"
+
+#: g10/g10.c:1798
+#, c-format
+msgid "WARNING: %s overrides %s\n"
+msgstr "WARNUNG: %s ersetzt %s\n"
+
+#: g10/g10.c:1807 g10/g10.c:1826
+#, c-format
+msgid "%s not allowed with %s!\n"
+msgstr "%s kann nicht zusammen mit %s verwendet werden!\n"
+
+#: g10/g10.c:1810
+#, c-format
+msgid "%s makes no sense with %s!\n"
+msgstr "%s zusammen mit %s ist nicht sinnvoll!\n"
+
+#: g10/g10.c:1836
+msgid "you can only make detached or clear signatures while in --pgp2 mode\n"
+msgstr ""
+"Im --pgp2-Modus können Sie nur abgetrennte oder Klartextunterschriften "
+"machen\n"
+
+#: g10/g10.c:1842
+msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n"
+msgstr ""
+"Im --pgp2-Modus können Sie nicht gleichzeitig unterschreiben und "
+"verschlüsseln\n"
+
+#: g10/g10.c:1848
+msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n"
+msgstr ""
+"Im --pgp2-Modus müssen Sie Dateien benutzen und können keine Pipes "
+"verwenden.\n"
+
+#: g10/g10.c:1861
+msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n"
+msgstr ""
+"Verschlüssen einer Botschaft benötigt im --pgp2-Modus die IDEA-"
+"Verschlüsselung\n"
+
+#: g10/encode.c:409 g10/encode.c:459 g10/encode.c:710 g10/g10.c:1886
+#: g10/pkclist.c:821 g10/pkclist.c:859 g10/sign.c:647 g10/sign.c:879
+#, c-format
+msgid "this message may not be usable by %s\n"
+msgstr "Diese Botschaft könnte für %s unbrauchbar sein\n"
+
+#: g10/g10.c:1934 g10/g10.c:1952
+msgid "selected cipher algorithm is invalid\n"
+msgstr "Das ausgewählte Verschlüsselungsverfahren ist ungültig\n"
+
+#: g10/g10.c:1940 g10/g10.c:1958
+msgid "selected digest algorithm is invalid\n"
+msgstr "Das ausgewählte Hashverfahren ist ungültig\n"
+
+#: g10/g10.c:1946
+msgid "selected certification digest algorithm is invalid\n"
+msgstr "Das ausgewählte Hashverfahren ist ungültig\n"
+
+#: g10/g10.c:1961
+#, c-format
+msgid "compress algorithm must be in range %d..%d\n"
+msgstr "Das Komprimierverfahren muß im Bereich %d bis %d liegen\n"
+
+#: g10/g10.c:1963
+msgid "completes-needed must be greater than 0\n"
+msgstr "completes-needed müssen größer als 0 sein\n"
+
+#: g10/g10.c:1965
+msgid "marginals-needed must be greater than 1\n"
+msgstr "marginals-needed müssen größer als 1 sein\n"
+
+#: g10/g10.c:1967
+msgid "max-cert-depth must be in range 1 to 255\n"
+msgstr "max-cert-depth muß im Bereich 1 bis 255 liegen\n"
+
+#: g10/g10.c:1970
+msgid "NOTE: simple S2K mode (0) is strongly discouraged\n"
+msgstr "Hinweis: Vom \"simple S2K\"-Modus (0) ist strikt abzuraten\n"
+
+#: g10/g10.c:1974
+msgid "invalid S2K mode; must be 0, 1 or 3\n"
+msgstr "ungültiger \"simple S2K\"-Modus; Wert muß 0, 1 oder 3 sein\n"
+
+#: g10/g10.c:1978
+msgid "invalid default-check-level; must be 0, 1, 2, or 3\n"
+msgstr "ungültiger \"default-check-level\"; Wert muß 0, 1, 2 oder 3 sein\n"
+
+#: g10/g10.c:1984
+msgid "invalid default preferences\n"
+msgstr "ungültige Standard Voreinstellungen\n"
+
+#: g10/g10.c:1992
+msgid "invalid personal cipher preferences\n"
+msgstr "ungültige private Verschlüsselungsvoreinstellungen\n"
+
+#: g10/g10.c:1996
+msgid "invalid personal digest preferences\n"
+msgstr "ungültige private Hashvoreinstellungen\n"
+
+#: g10/g10.c:2000
+msgid "invalid personal compress preferences\n"
+msgstr "ungültige private Komprimierungsvoreinstellungen\n"
+
+#: g10/g10.c:2093
+#, c-format
+msgid "failed to initialize the TrustDB: %s\n"
+msgstr "Die Trust-DB kann nicht initialisiert werden: %s\n"
+
+#: g10/g10.c:2103
+msgid "WARNING: recipients (-r) given without using public key encryption\n"
+msgstr ""
+"WARNUNG: Empfänger (-r) angegeben ohne Verwendung von Public-Key-Verfahren\n"
+
+#: g10/g10.c:2113
+msgid "--store [filename]"
+msgstr "--store [Dateiname]"
+
+#: g10/g10.c:2120
+msgid "--symmetric [filename]"
+msgstr "--symmetric [Dateiname]"
+
+#: g10/g10.c:2128
+msgid "--encrypt [filename]"
+msgstr "--encrypt [Dateiname]"
+
+#: g10/g10.c:2145
+msgid "--sign [filename]"
+msgstr "--sign [Dateiname]"
+
+#: g10/g10.c:2158
+msgid "--sign --encrypt [filename]"
+msgstr "--sign --encrypt [Dateiname]"
+
+#: g10/g10.c:2172
+msgid "--sign --symmetric [filename]"
+msgstr "--sign --symmetric [Dateiname]"
+
+#: g10/g10.c:2181
+msgid "--clearsign [filename]"
+msgstr "--clearsign [Dateiname]"
+
+#: g10/g10.c:2199
+msgid "--decrypt [filename]"
+msgstr "--decrypt [Dateiname]"
+
+#: g10/g10.c:2210
+msgid "--sign-key user-id"
+msgstr "--sign-key User-ID"
+
+#: g10/g10.c:2218
+msgid "--lsign-key user-id"
+msgstr "--lsign-key User-ID"
+
+#: g10/g10.c:2226
+msgid "--nrsign-key user-id"
+msgstr "--nrsign-key User-ID"
+
+#: g10/g10.c:2234
+msgid "--nrlsign-key user-id"
+msgstr "--nrlsign-key User-ID"
+
+#: g10/g10.c:2242
+msgid "--edit-key user-id [commands]"
+msgstr "--edit-key User-ID [Befehle]"
+
+#: g10/encode.c:417 g10/g10.c:2298 g10/sign.c:790
+#, c-format
+msgid "can't open %s: %s\n"
+msgstr "'%s' kann nicht geöffnet werden: %s\n"
+
+#: g10/g10.c:2313
+msgid "-k[v][v][v][c] [user-id] [keyring]"
+msgstr "-k[v][v][v][c] [User-ID] [Schlüsselbund]"
+
+#: g10/g10.c:2405
+#, c-format
+msgid "dearmoring failed: %s\n"
+msgstr "Entfernen der ASCII-Hülle ist fehlgeschlagen: %s\n"
+
+#: g10/g10.c:2413
+#, c-format
+msgid "enarmoring failed: %s\n"
+msgstr "Anbringen der ASCII-Hülle ist fehlgeschlagen: %s\n"
+
+#: g10/g10.c:2500
+#, c-format
+msgid "invalid hash algorithm `%s'\n"
+msgstr "Ungültiges Hashverfahren '%s'\n"
+
+#: g10/g10.c:2586
+msgid "[filename]"
+msgstr "[Dateiname]"
+
+#: g10/g10.c:2590
+msgid "Go ahead and type your message ...\n"
+msgstr "Auf geht's - Botschaft eintippen ...\n"
+
+#: g10/decrypt.c:60 g10/decrypt.c:106 g10/g10.c:2593 g10/verify.c:94
+#: g10/verify.c:139
+#, c-format
+msgid "can't open `%s'\n"
+msgstr "'%s' kann nicht geöffnet werden\n"
+
+#: g10/g10.c:2807
+msgid ""
+"a notation name must have only printable characters or spaces, and end with "
+"an '='\n"
+msgstr ""
+"Ein \"notation\"-Name darf nur Buchstaben, Zahlen, Punkte oder Unterstriche "
+"enthalten und muß mit einem '=' enden\n"
+
+#: g10/g10.c:2816
+msgid "a notation value must not use any control characters\n"
+msgstr "Ein \"notation\"-Wert darf keine Kontrollzeichen verwenden\n"
+
+#: g10/g10.c:2853
+msgid "the given certification policy URL is invalid\n"
+msgstr "Die angegebene Zertifikat-Richtlinien-URL ist ungültig\n"
+
+#: g10/g10.c:2855
+msgid "the given signature policy URL is invalid\n"
+msgstr "Die angegebene Unterschriften-Richtlinien-URL ist ungültig\n"
+
+#: g10/armor.c:314
+#, c-format
+msgid "armor: %s\n"
+msgstr "ASCII-Hülle: %s\n"
+
+#: g10/armor.c:343
+msgid "invalid armor header: "
+msgstr "Ungültige ASCII-Hülle"
+
+#: g10/armor.c:350
+msgid "armor header: "
+msgstr "ASCII-Hülle: "
+
+#: g10/armor.c:361
+msgid "invalid clearsig header\n"
+msgstr "Ungültige Klartextsignatur-Einleitung\n"
+
+#: g10/armor.c:413
+msgid "nested clear text signatures\n"
+msgstr "verschachtelte Klartextunterschriften\n"
+
+#: g10/armor.c:537
+msgid "invalid dash escaped line: "
+msgstr "Ungültige mit Bindestrich \"escapte\" Zeile: "
+
+#: g10/armor.c:549
+msgid "unexpected armor:"
+msgstr "Unerwartete ASCII-Hülle:"
+
+#: g10/armor.c:675 g10/armor.c:1242
+#, c-format
+msgid "invalid radix64 character %02x skipped\n"
+msgstr "Ungültiges \"radix64\" Zeichen %02x ignoriert\n"
+
+#: g10/armor.c:718
+msgid "premature eof (no CRC)\n"
+msgstr "vorzeitiges Dateiende (keine Prüfsumme)\n"
+
+#: g10/armor.c:752
+msgid "premature eof (in CRC)\n"
+msgstr "vorzeitiges Dateiende (innerhalb der Prüfsumme)\n"
+
+#: g10/armor.c:756
+msgid "malformed CRC\n"
+msgstr "Falsch aufgebaute Prüfsumme\n"
+
+#: g10/armor.c:760 g10/armor.c:1279
+#, c-format
+msgid "CRC error; %06lx - %06lx\n"
+msgstr "Prüfsummenfehler; %06lx - %06lx\n"
+
+#: g10/armor.c:780
+msgid "premature eof (in Trailer)\n"
+msgstr "vorzeitiges Dateiende (im Nachsatz)\n"
+
+#: g10/armor.c:784
+msgid "error in trailer line\n"
+msgstr "Fehler in der Nachsatzzeile\n"
+
+#: g10/armor.c:1057
+msgid "no valid OpenPGP data found.\n"
+msgstr "Keine gültigen OpenPGP-Daten gefunden.\n"
+
+#: g10/armor.c:1062
+#, c-format
+msgid "invalid armor: line longer than %d characters\n"
+msgstr "ungültige ASCII-Hülle: Zeile ist länger als %d Zeichen\n"
+
+#: g10/armor.c:1066
+msgid ""
+"quoted printable character in armor - probably a buggy MTA has been used\n"
+msgstr ""
+"\"quoted printable\" Zeichen in der ASCII-Hülle gefunden - möglicherweise\n"
+" war ein fehlerhafter E-Mail-Transporter(\"MTA\") die Ursache\n"
+
+#: g10/pkclist.c:62
+msgid "No reason specified"
+msgstr "Kein Grund angegeben"
+
+#: g10/pkclist.c:64
+msgid "Key is superseded"
+msgstr "Schlüssel ist überholt"
+
+#: g10/pkclist.c:66
+msgid "Key has been compromised"
+msgstr "Hinweis: Dieser Schlüssel ist nicht mehr sicher"
+
+#: g10/pkclist.c:68
+msgid "Key is no longer used"
+msgstr "Schlüssel wird nicht mehr benutzt"
+
+#: g10/pkclist.c:70
+msgid "User ID is no longer valid"
+msgstr "User-ID ist nicht mehr gültig"
+
+#: g10/pkclist.c:74
+msgid "reason for revocation: "
+msgstr "Grund für Widerruf: "
+
+#: g10/pkclist.c:91
+msgid "revocation comment: "
+msgstr "Widerruf-Bemerkung: "
+
+#. a string with valid answers
+#: g10/pkclist.c:264
+msgid "iImMqQsS"
+msgstr "iImMqQsS"
+
+#: g10/pkclist.c:272
+#, c-format
+msgid ""
+"No trust value assigned to:\n"
+"%4u%c/%08lX %s \""
+msgstr ""
+"Es ist kein \"trust value\" zugewiesen für:\n"
+"%4u%c/%08lX %s \""
+
+#: g10/mainproc.c:1428 g10/pkclist.c:300
+msgid " aka \""
+msgstr " alias \""
+
+#: g10/keyedit.c:297 g10/pkclist.c:311
+msgid ""
+"Please decide how far you trust this user to correctly\n"
+"verify other users' keys (by looking at passports,\n"
+"checking fingerprints from different sources...)?\n"
+"\n"
+msgstr ""
+"Bitte entscheiden Sie, in wieweit Sie diesem User zutrauen,\n"
+"Schlüssel anderer User korrekt zu prüfen (durch Vergleich\n"
+"mit Lichtbildausweisen, Vergleich der Fingerabdrücke aus\n"
+"unterschiedlichen Quellen ...)?\n"
+"\n"
+
+#: g10/pkclist.c:315
+#, fuzzy, c-format
+msgid " %d = I don't know\n"
+msgstr " %d = Weiß nicht so recht\n"
+
+#: g10/pkclist.c:317
+#, c-format
+msgid " %d = I do NOT trust\n"
+msgstr " %d = Nein, ihm traue ich NICHT\n"
+
+#: g10/pkclist.c:319
+#, c-format
+msgid " %d = I trust marginally\n"
+msgstr " %d = Ich vertraue ihm einigermaßen\n"
+
+#: g10/pkclist.c:321
+#, c-format
+msgid " %d = I trust fully\n"
+msgstr " %d = Ich vertraue ihm vollständig\n"
+
+#: g10/pkclist.c:323
+#, c-format
+msgid " %d = I trust ultimately\n"
+msgstr " %d = Ich vertraue ihm absolut\n"
+
+#. not yet implemented
+#: g10/pkclist.c:326
+msgid " i = please show me more information\n"
+msgstr " i = Bitte weitere Information anzeigen\n"
+
+#: g10/pkclist.c:329
+msgid " m = back to the main menu\n"
+msgstr " m = Zurück zum Menü\n"
+
+#: g10/pkclist.c:332
+msgid " s = skip this key\n"
+msgstr " s = diesen Schlüssel überSpringen\n"
+
+#: g10/pkclist.c:333
+msgid " q = quit\n"
+msgstr " q = verlassen\n"
+
+#: g10/pkclist.c:337
+#, c-format
+msgid ""
+"The minimum trust level for this key is: %s\n"
+"\n"
+msgstr ""
+
+#: g10/pkclist.c:343
+msgid "Your decision? "
+msgstr "Ihre Auswahl? "
+
+#: g10/pkclist.c:364
+msgid "Do you really want to set this key to ultimate trust? "
+msgstr "Möchten Sie diesem Schlüssel wirklich uneingeschränkt vertrauen? "
+
+#: g10/pkclist.c:378
+msgid "Certificates leading to an ultimately trusted key:\n"
+msgstr "Zertifikate führen zu einem letztlich vertrauenswürdigen Schlüssel:\n"
+
+#: g10/pkclist.c:453
+#, c-format
+msgid "key %08lX: key has been revoked!\n"
+msgstr "Schlüssel %08lX: Schlüssel wurde widerrufen\n"
+
+#: g10/pkclist.c:460 g10/pkclist.c:472 g10/pkclist.c:566
+msgid "Use this key anyway? "
+msgstr "Diesen Schlüssel trotzdem benutzen? "
+
+#: g10/pkclist.c:465
+#, c-format
+msgid "key %08lX: subkey has been revoked!\n"
+msgstr "Schlüssel %08lX: Unterschlüssel wurde widerrufen\n"
+
+#: g10/pkclist.c:486
+#, c-format
+msgid "%08lX: key has expired\n"
+msgstr "%08lX: Schlüssel ist verfallen!\n"
+
+#: g10/pkclist.c:496
+#, c-format
+msgid ""
+"%08lX: There is no indication that this key really belongs to the owner\n"
+msgstr ""
+"%08lX: Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen "
+"Besitzer gehört.\n"
+
+#: g10/pkclist.c:502
+#, c-format
+msgid "%08lX: We do NOT trust this key\n"
+msgstr "%08lX: Wir haben KEIN Vertrauen zu diesem Schlüssel!\n"
+
+#: g10/pkclist.c:508
+#, c-format
+msgid ""
+"%08lX: It is not sure that this key really belongs to the owner\n"
+"but it is accepted anyway\n"
+msgstr ""
+"%08lX: Es ist nicht sicher, daß dieser Schlüssel wirklich dem vorgeblichen\n"
+"Besitzer gehört, aber er wird trotzdem akzeptiert\n"
+
+#: g10/pkclist.c:514
+msgid "This key probably belongs to the owner\n"
+msgstr ""
+"Dieser Schlüssel gehört höchstwahrscheinlich dem angegebenen Besitzer\n"
+
+#: g10/pkclist.c:519
+msgid "This key belongs to us\n"
+msgstr ""
+"Dieser Schlüssel gehört uns (da wir nämlich den geheimen Schlüssel dazu "
+"haben)\n"
+
+#: g10/pkclist.c:561
+msgid ""
+"It is NOT certain that the key belongs to the person named\n"
+"in the user ID. If you *really* know what you are doing,\n"
+"you may answer the next question with yes\n"
+"\n"
+msgstr ""
+"Es ist NICHT sicher, daß der Schlüssel dem vorgeblichen Besitzer gehört.\n"
+"Wenn Sie *wirklich* wissen, was Sie tun, können Sie die nächste\n"
+"Frage mit ja beantworten\n"
+
+#: g10/pkclist.c:575 g10/pkclist.c:597
+msgid "WARNING: Using untrusted key!\n"
+msgstr "WARNUNG: Ein Schlüssel ohne gesichertes Vertrauen wird benutzt!\n"
+
+#: g10/pkclist.c:616
+msgid "WARNING: This key has been revoked by its owner!\n"
+msgstr "WARNUNG: Dieser Schlüssel wurde von seinem Besitzer widerrufen!\n"
+
+#: g10/pkclist.c:617
+msgid " This could mean that the signature is forgery.\n"
+msgstr " Das könnte bedeuten, daß die Signatur gefälscht ist.\n"
+
+#: g10/pkclist.c:623
+msgid "WARNING: This subkey has been revoked by its owner!\n"
+msgstr "WARNUNG: Dieser Unterschlüssel wurde von seinem Besitzer widerrufen!\n"
+
+#: g10/pkclist.c:628
+msgid "Note: This key has been disabled.\n"
+msgstr "Hinweis: Dieser Schlüssel wurde abgeschaltet.\n"
+
+#: g10/pkclist.c:633
+msgid "Note: This key has expired!\n"
+msgstr "Hinweis: Dieser Schlüssel ist verfallen!\n"
+
+#: g10/pkclist.c:644
+msgid "WARNING: This key is not certified with a trusted signature!\n"
+msgstr "WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur!\n"
+
+#: g10/pkclist.c:646
+msgid ""
+" There is no indication that the signature belongs to the owner.\n"
+msgstr ""
+" Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen "
+"Besitzer gehört.\n"
+
+#: g10/pkclist.c:654
+msgid "WARNING: We do NOT trust this key!\n"
+msgstr "WARNUNG: Wir haben KEIN Vertrauen zu diesem Schlüssel!\n"
+
+#: g10/pkclist.c:655
+msgid " The signature is probably a FORGERY.\n"
+msgstr " Die Signatur ist wahrscheinlich eine FÄLSCHUNG.\n"
+
+#: g10/pkclist.c:663
+msgid ""
+"WARNING: This key is not certified with sufficiently trusted signatures!\n"
+msgstr ""
+"WARNUNG: Dieser Schlüssel ist nicht durch hinreichend vertrauenswürdige "
+"Signaturen zertifiziert!\n"
+
+#: g10/pkclist.c:665
+msgid " It is not certain that the signature belongs to the owner.\n"
+msgstr ""
+" Es ist nicht sicher, daß die Signatur wirklich dem vorgeblichen "
+"Besitzer gehört.\n"
+
+#: g10/encode.c:706 g10/pkclist.c:817 g10/pkclist.c:855
+#, c-format
+msgid "you may not use %s while in %s mode\n"
+msgstr "Die Benutzung von %s ist im %s-Modus nicht erlaubt.\n"
+
+#: g10/pkclist.c:832 g10/pkclist.c:868 g10/pkclist.c:1020 g10/pkclist.c:1080
+#, c-format
+msgid "%s: skipped: %s\n"
+msgstr "%s: übersprungen: %s\n"
+
+#: g10/pkclist.c:842 g10/pkclist.c:1052
+#, c-format
+msgid "%s: skipped: public key already present\n"
+msgstr "%s: übersprungen: öffentlicher Schlüssel bereits vorhanden\n"
+
+#: g10/pkclist.c:885
+msgid "You did not specify a user ID. (you may use \"-r\")\n"
+msgstr ""
+"Sie haben keine User-ID angegeben (Sie können die Option \"-r\" verwenden).\n"
+
+#: g10/pkclist.c:898
+msgid ""
+"\n"
+"Enter the user ID. End with an empty line: "
+msgstr ""
+"\n"
+"Geben Sie die User-ID ein. Beenden mit einer leeren Zeile: "
+
+#: g10/pkclist.c:914
+msgid "No such user ID.\n"
+msgstr "Keine solche User-ID vorhanden.\n"
+
+#: g10/pkclist.c:919 g10/pkclist.c:995
+msgid "skipped: public key already set as default recipient\n"
+msgstr ""
+"übersprungen: öffentlicher Schlüssel bereits als Standardempfänger gesetzt\n"
+
+#: g10/pkclist.c:937
+msgid "Public key is disabled.\n"
+msgstr "Öffentlicher Schlüssel ist abgeschaltet.\n"
+
+#: g10/pkclist.c:944
+msgid "skipped: public key already set\n"
+msgstr "übersprungen: öffentlicher Schlüssel bereits gesetzt\n"
+
+#: g10/pkclist.c:987
+#, c-format
+msgid "unknown default recipient `%s'\n"
+msgstr "Unbekannter voreingestellter Empfänger '%s'\n"
+
+#: g10/pkclist.c:1032
+#, c-format
+msgid "%s: skipped: public key is disabled\n"
+msgstr "%s: übersprungen: öffentlicher Schlüssel ist abgeschaltet\n"
+
+#: g10/pkclist.c:1087
+msgid "no valid addressees\n"
+msgstr "Keine gültigen Adressaten\n"
+
+#: g10/keygen.c:184
+#, fuzzy, c-format
+msgid "preference `%s' duplicated\n"
+msgstr "Voreinstellung %c%lu ist doppelt\n"
+
+#: g10/keygen.c:191
+#, fuzzy
+msgid "too many cipher preferences\n"
+msgstr "zu viele `%c' Voreinstellungen\n"
+
+#: g10/keygen.c:193
+#, fuzzy
+msgid "too many digest preferences\n"
+msgstr "zu viele `%c' Voreinstellungen\n"
+
+#: g10/keygen.c:195
+#, fuzzy
+msgid "too many compression preferences\n"
+msgstr "zu viele `%c' Voreinstellungen\n"
+
+#: g10/keygen.c:265
+#, fuzzy, c-format
+msgid "invalid item `%s' in preference string\n"
+msgstr "Ungültiges Zeichen in den Voreinstellungen\n"
+
+#: g10/keygen.c:535
+msgid "writing direct signature\n"
+msgstr "Die \"Direct Key Signature\" wird geschrieben\n"
+
+#: g10/keygen.c:574
+msgid "writing self signature\n"
+msgstr "Die Eigenbeglaubigung wird geschrieben\n"
+
+#: g10/keygen.c:618
+msgid "writing key binding signature\n"
+msgstr "Schreiben der \"key-binding\" Signatur\n"
+
+#: g10/keygen.c:672 g10/keygen.c:756 g10/keygen.c:847
+#, c-format
+msgid "keysize invalid; using %u bits\n"
+msgstr "Ungültig Schlüssellänge; %u Bit werden verwendet\n"
+
+#: g10/keygen.c:677 g10/keygen.c:761 g10/keygen.c:852
+#, c-format
+msgid "keysize rounded up to %u bits\n"
+msgstr "Schlüssellänge auf %u Bit aufgerundet\n"
+
+#: g10/keygen.c:952
+msgid "Please select what kind of key you want:\n"
+msgstr "Bitte wählen Sie, welche Art von Schlüssel Sie möchten:\n"
+
+#: g10/keygen.c:954
+#, c-format
+msgid " (%d) DSA and ElGamal (default)\n"
+msgstr " (%d) DSA und ElGamal (voreingestellt)\n"
+
+#: g10/keygen.c:955
+#, c-format
+msgid " (%d) DSA (sign only)\n"
+msgstr " (%d) DSA (nur signieren/beglaubigen)\n"
+
+#: g10/keygen.c:957
+#, c-format
+msgid " (%d) ElGamal (encrypt only)\n"
+msgstr " (%d) ElGamal (nur verschlüsseln)\n"
+
+#: g10/keygen.c:959
+#, c-format
+msgid " (%d) ElGamal (sign and encrypt)\n"
+msgstr " (%d) ElGamal (signieren/beglaubigen und verschlüsseln)\n"
+
+#: g10/keygen.c:960
+#, c-format
+msgid " (%d) RSA (sign only)\n"
+msgstr " (%d) RSA (nur signieren/beglaubigen)\n"
+
+#: g10/keygen.c:962
+#, c-format
+msgid " (%d) RSA (encrypt only)\n"
+msgstr " (%d) RSA (nur verschlüsseln)\n"
+
+#: g10/keygen.c:964
+#, c-format
+msgid " (%d) RSA (sign and encrypt)\n"
+msgstr " (%d) RSA (signieren/beglaubigen und verschlüsseln)\n"
+
+#: g10/keyedit.c:306 g10/keyedit.c:327 g10/keyedit.c:343 g10/keyedit.c:700
+#: g10/keygen.c:967
+msgid "Your selection? "
+msgstr "Ihre Auswahl? "
+
+#: g10/keygen.c:977 g10/keygen.c:995
+msgid "The use of this algorithm is deprecated - create anyway? "
+msgstr ""
+"Von der Benutzung dieses Verfahrens ist abzuraten - Trotzdem erzeugen? "
+
+#: g10/keyedit.c:713 g10/keygen.c:1009
+msgid "Invalid selection.\n"
+msgstr "Ungültige Auswahl.\n"
+
+#: g10/keygen.c:1022
+#, c-format
+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 Bit\n"
+" standard Schlüssellänge ist 1024 Bit\n"
+" größte sinnvolle Schlüssellänge ist 2048 Bit\n"
+
+#: g10/keygen.c:1031
+msgid "What keysize do you want? (1024) "
+msgstr "Welche Schlüssellänge wünschen Sie? (1024) "
+
+#: g10/keygen.c:1036
+msgid "DSA only allows keysizes from 512 to 1024\n"
+msgstr "DSA erlaubt nur Schlüssellängen von 512 bis 1024\n"
+
+#: g10/keygen.c:1038
+msgid "keysize too small; 1024 is smallest value allowed for RSA.\n"
+msgstr "zu kurz; 1024 ist die kleinste für RSA mögliche Schlüssellänge.\n"
+
+#: g10/keygen.c:1041
+msgid "keysize too small; 768 is smallest value allowed.\n"
+msgstr "zu kurz; 768 ist die kleinste mögliche Schlüssellänge.\n"
+
+#. It is ridiculous and an annoyance to use larger key sizes!
+#. * GnuPG can handle much larger sizes; but it takes an eternity
+#. * to create such a key (but less than the time the Sirius
+#. * Computer Corporation needs to process one of the usual
+#. * complaints) and {de,en}cryption although needs some time.
+#. * So, before you complain about this limitation, I suggest that
+#. * you start a discussion with Marvin about this theme and then
+#. * do whatever you want.
+#: g10/keygen.c:1052
+#, c-format
+msgid "keysize too large; %d is largest value allowed.\n"
+msgstr "Schüsselgröße zu hoch; %d ist der Maximalwert.\n"
+
+#: g10/keygen.c:1057
+msgid ""
+"Keysizes larger than 2048 are not suggested because\n"
+"computations take REALLY long!\n"
+msgstr ""
+"Schlüssellängen größer als 2048 werden nicht empfohlen, da die\n"
+"Berechnungen dann WIRKLICH lange brauchen!\n"
+
+#: g10/keygen.c:1060
+msgid "Are you sure that you want this keysize? "
+msgstr "Sind Sie sicher, daß Sie diese Schlüssellänge wünschen? "
+
+#: g10/keygen.c:1061
+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"
+
+#: g10/keygen.c:1070
+#, c-format
+msgid "Requested keysize is %u bits\n"
+msgstr "Die verlangte Schlüssellänge beträgt %u Bit\n"
+
+#: g10/keygen.c:1073 g10/keygen.c:1077
+#, c-format
+msgid "rounded up to %u bits\n"
+msgstr "aufgerundet auf %u Bit\n"
+
+#: g10/keygen.c:1128
+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 ""
+"Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.\n"
+" 0 = Schlüssel verfällt nie\n"
+" <n> = Schlüssel verfällt nach n Tagen\n"
+" <n>w = Schlüssel verfällt nach n Wochen\n"
+" <n>m = Schlüssel verfällt nach n Monaten\n"
+" <n>y = Schlüssel verfällt nach n Jahren\n"
+
+#: g10/keygen.c:1137
+msgid ""
+"Please specify how long the signature should be valid.\n"
+" 0 = signature does not expire\n"
+" <n> = signature expires in n days\n"
+" <n>w = signature expires in n weeks\n"
+" <n>m = signature expires in n months\n"
+" <n>y = signature expires in n years\n"
+msgstr ""
+"Bitte wählen Sie, wie lange die Beglaubigung gültig bleiben soll.\n"
+" 0 = Schlüssel verfällt nie\n"
+" <n> = Schlüssel verfällt nach n Tagen\n"
+" <n>w = Schlüssel verfällt nach n Wochen\n"
+" <n>m = Schlüssel verfällt nach n Monaten\n"
+" <n>y = Schlüssel verfällt nach n Jahren\n"
+
+#: g10/keygen.c:1159
+msgid "Key is valid for? (0) "
+msgstr "Wie lange bleibt der Schlüssel gültig? (0) "
+
+#: g10/keygen.c:1161
+msgid "Signature is valid for? (0) "
+msgstr "Wie lange bleibt die Beglaubigung gültig? (0) "
+
+#: g10/keygen.c:1166
+msgid "invalid value\n"
+msgstr "Ungültiger Wert.\n"
+
+#: g10/keygen.c:1171
+#, c-format
+msgid "%s does not expire at all\n"
+msgstr "%s verfällt nie.\n"
+
+#. print the date when the key expires
+#: g10/keygen.c:1178
+#, c-format
+msgid "%s expires at %s\n"
+msgstr "%s verfällt am %s\n"
+
+#: g10/keygen.c:1184
+msgid ""
+"Your system can't display dates beyond 2038.\n"
+"However, it will be correctly handled up to 2106.\n"
+msgstr ""
+"Ihr Rechner kann Daten jenseits des Jahres 2038 nicht anzeigen.\n"
+"Trotzdem werden Daten bis 2106 korrekt verarbeitet.\n"
+
+#: g10/keygen.c:1189
+msgid "Is this correct (y/n)? "
+msgstr "Ist dies richtig? (j/n) "
+
+#: g10/keygen.c:1232
+msgid ""
+"\n"
+"You need a User-ID to identify your key; the software constructs the user "
+"id\n"
+"from Real Name, Comment and Email Address in this form:\n"
+" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
+"\n"
+msgstr ""
+"\n"
+"Sie benötigen eine User-ID, um Ihren Schlüssel eindeutig zu machen; das\n"
+"Programm baut diese User-ID aus Ihrem echten Namen, einem Kommentar und\n"
+"Ihrer E-Mail-Adresse in dieser Form auf:\n"
+" \"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>\"\n"
+"\n"
+
+#: g10/keygen.c:1244
+msgid "Real name: "
+msgstr "Ihr Name (\"Vorname Nachname\"): "
+
+#: g10/keygen.c:1252
+msgid "Invalid character in name\n"
+msgstr "Ungültiges Zeichen im Namen\n"
+
+#: g10/keygen.c:1254
+msgid "Name may not start with a digit\n"
+msgstr "Der Name darf nicht mit einer Ziffer beginnen.\n"
+
+#: g10/keygen.c:1256
+msgid "Name must be at least 5 characters long\n"
+msgstr "Der Name muß min. 5 Zeichen lang sein.\n"
+
+#: g10/keygen.c:1264
+msgid "Email address: "
+msgstr "E-Mail-Adresse: "
+
+#: g10/keygen.c:1275
+msgid "Not a valid email address\n"
+msgstr "Diese E-Mail-Adresse ist ungültig\n"
+
+#: g10/keygen.c:1283
+msgid "Comment: "
+msgstr "Kommentar: "
+
+#: g10/keygen.c:1289
+msgid "Invalid character in comment\n"
+msgstr "Ungültiges Zeichen im Kommentar.\n"
+
+#: g10/keygen.c:1312
+#, c-format
+msgid "You are using the `%s' character set.\n"
+msgstr "Sie benutzen den Zeichensatz `%s'\n"
+
+#: g10/keygen.c:1318
+#, c-format
+msgid ""
+"You selected this USER-ID:\n"
+" \"%s\"\n"
+"\n"
+msgstr ""
+"Sie haben diese User-ID gewählt:\n"
+" \"%s\"\n"
+"\n"
+
+#: g10/keygen.c:1322
+msgid "Please don't put the email address into the real name or the comment\n"
+msgstr "Bitte keine E-Mailadressen als Namen oder Kommentar verwenden\n"
+
+#: g10/keygen.c:1327
+msgid "NnCcEeOoQq"
+msgstr "NnKkEeFfBb"
+
+#: g10/keygen.c:1337
+msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? "
+msgstr "Ändern: (N)ame, (K)ommentar, (E)-Mail oder (B)eenden? "
+
+#: g10/keygen.c:1338
+msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? "
+msgstr "Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(B)eenden? "
+
+#: g10/keygen.c:1357
+msgid "Please correct the error first\n"
+msgstr "Bitte beseitigen Sie zuerst den Fehler\n"
+
+#: g10/keygen.c:1396
+msgid ""
+"You need a Passphrase to protect your secret key.\n"
+"\n"
+msgstr ""
+"Sie benötigen ein Mantra, um den geheimen Schlüssel zu schützen.\n"
+"\n"
+
+#: g10/keyedit.c:918 g10/keygen.c:1404
+msgid "passphrase not correctly repeated; try again"
+msgstr "Mantra wurde nicht richtig wiederholt; noch einmal versuchen"
+
+#: g10/keygen.c:1405
+#, c-format
+msgid "%s.\n"
+msgstr "%s.\n"
+
+#: g10/keygen.c:1411
+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 \"--edit-key\".\n"
+"\n"
+msgstr ""
+"Sie möchten kein Mantra - Dies ist *nicht* zu empfehlen!\n"
+"Es ist trotzdem möglich. Sie können Ihr Mantra jederzeit\n"
+"ändern, indem sie dieses Programm mit dem Befehl \"--edit-key\"\n"
+"aufrufen.\n"
+"\n"
+
+#: g10/keygen.c:1432
+msgid ""
+"We need to generate a lot of random bytes. It is a good idea to perform\n"
+"some other action (type on the keyboard, move the mouse, utilize the\n"
+"disks) during the prime generation; this gives the random number\n"
+"generator a better chance to gain enough entropy.\n"
+msgstr ""
+"Wir müssen eine ganze Menge Zufallswerte erzeugen. Sie können dies\n"
+"unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas\n"
+"tippen, die Maus verwenden oder irgendwelche anderen Programme benutzen.\n"
+
+#: g10/keygen.c:1996
+msgid "DSA keypair will have 1024 bits.\n"
+msgstr "Das DSA-Schlüsselpaar wird 1024 Bit haben.\n"
+
+#: g10/keygen.c:2050
+msgid "Key generation canceled.\n"
+msgstr "Schlüsselerzeugung abgebrochen.\n"
+
+#: g10/keygen.c:2157 g10/keygen.c:2245
+#, c-format
+msgid "writing public key to `%s'\n"
+msgstr "schreiben des öffentlichen Schlüssels nach '%s'\n"
+
+#: g10/keygen.c:2158 g10/keygen.c:2247
+#, c-format
+msgid "writing secret key to `%s'\n"
+msgstr "schreiben des geheimen Schlüssels nach '%s'\n"
+
+#: g10/keygen.c:2234
+#, c-format
+msgid "no writable public keyring found: %s\n"
+msgstr "kein schreibbarer öffentlicher Schlüsselbund gefunden: %s\n"
+
+#: g10/keygen.c:2240
+#, c-format
+msgid "no writable secret keyring found: %s\n"
+msgstr "kein schreibbarer geheimer Schlüsselbund gefunden: %s\n"
+
+#: g10/keygen.c:2254
+#, c-format
+msgid "error writing public keyring `%s': %s\n"
+msgstr "Fehler beim Schreiben des öff. Schlüsselbundes `%s': %s\n"
+
+#: g10/keygen.c:2261
+#, c-format
+msgid "error writing secret keyring `%s': %s\n"
+msgstr "Fehler beim Schreiben des geheimen Schlüsselbundes `%s': %s\n"
+
+#: g10/keygen.c:2281
+msgid "public and secret key created and signed.\n"
+msgstr "Öffentlichen und geheimen Schlüssel erzeugt und signiert.\n"
+
+#: g10/keygen.c:2282
+msgid "key marked as ultimately trusted.\n"
+msgstr "Schlüssel ist als uneingeschränkt vertrauenswürdig gekennzeichnet.\n"
+
+#: g10/keygen.c:2293
+msgid ""
+"Note that this key cannot be used for encryption. You may want to use\n"
+"the command \"--edit-key\" to generate a secondary key for this purpose.\n"
+msgstr ""
+"Bitte beachten Sie, daß dieser Schlüssel nicht zum Verschlüsseln benutzt\n"
+"werden kann. Sie können aber mit dem Befehl \"--edit-key\" einen\n"
+"Zweitschlüssel für diesem Zweck erzeugen.\n"
+
+#: g10/keygen.c:2305 g10/keygen.c:2415
+#, c-format
+msgid "Key generation failed: %s\n"
+msgstr "Schlüsselerzeugung fehlgeschlagen: %s\n"
+
+#: g10/keygen.c:2351 g10/sign.c:257
+#, c-format
+msgid ""
+"key has been created %lu second in future (time warp or clock problem)\n"
+msgstr ""
+"Der Schlüssel wurde %lu Sekunde in der Zukunft erzeugt (Zeitreise oder Uhren "
+"stimmen nicht überein)\n"
+
+#: g10/keygen.c:2353 g10/sign.c:259
+#, c-format
+msgid ""
+"key has been created %lu seconds in future (time warp or clock problem)\n"
+msgstr ""
+"Der Schlüssel wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise oder "
+"Uhren stimmen nicht überein)\n"
+
+#: g10/keygen.c:2362
+msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n"
+msgstr "HINWEIS: Unterschlüssel für v3-Schlüssen sind nicht OpenPGP-konform\n"
+
+#: g10/keygen.c:2391
+msgid "Really create? "
+msgstr "Wirklich erzeugen? "
+
+#: g10/decrypt.c:92 g10/encode.c:765
+msgid "--output doesn't work for this command\n"
+msgstr "--output funktioniert nicht bei diesem Kommando\n"
+
+#: g10/encode.c:177 g10/openfile.c:180 g10/openfile.c:301 g10/tdbio.c:496
+#: g10/tdbio.c:557
+#, c-format
+msgid "%s: can't open: %s\n"
+msgstr "%s: kann nicht geöffnet werden: %s\n"
+
+#: g10/encode.c:205 g10/sign.c:1036
+#, c-format
+msgid "error creating passphrase: %s\n"
+msgstr "Fehler beim Erzeugen des Mantras: %s\n"
+
+#: g10/encode.c:210
+msgid "can't use a symmetric ESK packet due to the S2K mode\n"
+msgstr ""
+"Aufgrund des S2K-Modus kann ein symmetrisches ESK Packet nicht benutzt "
+"werden\n"
+
+#: g10/encode.c:229 g10/encode.c:487
+#, c-format
+msgid "`%s' already compressed\n"
+msgstr "`%s' ist bereits komprimiert\n"
+
+#: g10/encode.c:296 g10/encode.c:523
+#, c-format
+msgid "%s: WARNING: empty file\n"
+msgstr "%s: WARNUNG: Leere Datei\n"
+
+#: g10/encode.c:407
+msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n"
+msgstr ""
+"Im --pgp2-Modus kann nur für RSA-Schlüssel mit maximal 2048 Bit "
+"verschlüsselt werden\n"
+
+#: g10/encode.c:423
+#, c-format
+msgid "reading from `%s'\n"
+msgstr "Lesen von '%s'\n"
+
+#: g10/encode.c:457
+msgid ""
+"unable to use the IDEA cipher for all of the keys you are encrypting to.\n"
+msgstr ""
+"Die IDEA-Verschlüsselung kann nicht mit allen Zielschlüsseln verwendet "
+"werden.\n"
+
+#: g10/encode.c:468 g10/encode.c:647
+#, c-format
+msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n"
+msgstr ""
+"Erzwungene Verwendung des symmetrischen Verschlüsselungsverfahren %s (%d) "
+"verletzt die Empfängervoreinstellungen\n"
+
+#: g10/encode.c:561 g10/sign.c:759
+#, c-format
+msgid "forcing compression algorithm %s (%d) violates recipient preferences\n"
+msgstr ""
+"Erzwungenes Kompressionsverfahren %s (%d) verletzt die "
+"Empfängervoreinstellungen.\n"
+
+#: g10/encode.c:738
+#, c-format
+msgid "%s/%s encrypted for: \"%s\"\n"
+msgstr "%s/%s verschlüsselt für: %s\n"
+
+#: g10/delkey.c:73 g10/export.c:190 g10/keyedit.c:2452
+#, c-format
+msgid "key `%s' not found: %s\n"
+msgstr "Schlüssel `%s' nicht gefunden: %s\n"
+
+#: g10/delkey.c:81 g10/export.c:213
+#, c-format
+msgid "error reading keyblock: %s\n"
+msgstr "Fehler beim Lesen des Schlüsselblocks: %s\n"
+
+#: g10/export.c:222
+#, c-format
+msgid "key %08lX: not a rfc2440 key - skipped\n"
+msgstr "Schlüssel %08lX: dies ist kein RFC2440-Schüssel - übersprungen\n"
+
+#: g10/export.c:238
+#, c-format
+msgid "key %08lX: not protected - skipped\n"
+msgstr "Schlüssel %08lX: ungeschützt - übersprungen\n"
+
+#: g10/export.c:246
+#, c-format
+msgid "key %08lX: PGP 2.x style key - skipped\n"
+msgstr "Schlüssel %08lX: PGP 2.x-artiger Schlüssel - übersprungen\n"
+
+#: g10/export.c:347
+msgid "WARNING: nothing exported\n"
+msgstr "WARNUNG: Nichts exportiert\n"
+
+#: g10/getkey.c:150
+msgid "too many entries in pk cache - disabled\n"
+msgstr "zu viele Einträge im pk-Cache - abgeschaltet\n"
+
+#. fixme: returning translatable constants instead of a user ID is
+#. * not good because they are probably not utf-8 encoded.
+#: g10/getkey.c:186 g10/getkey.c:2461
+msgid "[User id not found]"
+msgstr "[User-ID nicht gefunden]"
+
+#: g10/getkey.c:1494
+#, c-format
+msgid "Invalid key %08lX made valid by --allow-non-selfsigned-uid\n"
+msgstr ""
+"Ungültiger Schlüssel %08lX, gültig gemacht per --allow-non-selfsigned-uid\n"
+
+#: g10/getkey.c:2171
+#, c-format
+msgid "using secondary key %08lX instead of primary key %08lX\n"
+msgstr ""
+"der Zweitschlüssel %08lX wird anstelle des Hauptschlüssels %08lX verwendet\n"
+
+#: g10/getkey.c:2218
+#, c-format
+msgid "key %08lX: secret key without public key - skipped\n"
+msgstr ""
+"Schlüssel %08lX: geheimer Schlüssel, aber ohne öffentlichen Schlüssel - "
+"übersprungen\n"
+
+#: g10/import.c:270
+#, c-format
+msgid "skipping block of type %d\n"
+msgstr "überspringe den Block vom Typ %d\n"
+
+#: g10/import.c:279
+#, fuzzy, c-format
+msgid "%lu keys processed so far\n"
+msgstr "%lu Schlüssel bislang bearbeitet\n"
+
+#: g10/import.c:284
+#, c-format
+msgid "error reading `%s': %s\n"
+msgstr "Fehler beim Lesen von `%s': %s\n"
+
+#: g10/import.c:296
+#, c-format
+msgid "Total number processed: %lu\n"
+msgstr "Anzahl insgesamt bearbeiteter Schlüssel: %lu\n"
+
+#: g10/import.c:298
+#, c-format
+msgid " skipped new keys: %lu\n"
+msgstr " ignorierte neue Schlüssel: %lu\n"
+
+#: g10/import.c:301
+#, c-format
+msgid " w/o user IDs: %lu\n"
+msgstr " ohne User-ID: %lu\n"
+
+#: g10/import.c:303
+#, c-format
+msgid " imported: %lu"
+msgstr " importiert: %lu"
+
+#: g10/import.c:309
+#, c-format
+msgid " unchanged: %lu\n"
+msgstr " unverändert: %lu\n"
+
+#: g10/import.c:311
+#, c-format
+msgid " new user IDs: %lu\n"
+msgstr " neue User-IDs: %lu\n"
+
+#: g10/import.c:313
+#, c-format
+msgid " new subkeys: %lu\n"
+msgstr " neue Unterschlüssel: %lu\n"
+
+#: g10/import.c:315
+#, c-format
+msgid " new signatures: %lu\n"
+msgstr " neue Signaturen: %lu\n"
+
+#: g10/import.c:317
+#, c-format
+msgid " new key revocations: %lu\n"
+msgstr " neue Schlüsselwiderrufe: %lu\n"
+
+#: g10/import.c:319
+#, c-format
+msgid " secret keys read: %lu\n"
+msgstr " gelesene geheime Schlüssel: %lu\n"
+
+#: g10/import.c:321
+#, c-format
+msgid " secret keys imported: %lu\n"
+msgstr " geheime Schlüssel importiert: %lu\n"
+
+#: g10/import.c:323
+#, c-format
+msgid " secret keys unchanged: %lu\n"
+msgstr " unveränderte geh.Schl.: %lu\n"
+
+#: g10/import.c:325
+#, c-format
+msgid " not imported: %lu\n"
+msgstr " nicht importiert: %lu\n"
+
+#: g10/import.c:593 g10/import.c:908
+#, c-format
+msgid "key %08lX: no user ID\n"
+msgstr "Schlüssel %08lX: Keine User-ID\n"
+
+#: g10/import.c:609
+#, c-format
+msgid "key %08lX: HKP subkey corruption repaired\n"
+msgstr "Schlüssel %08lX: HKP Unterschlüsseldefekt repariert\n"
+
+#: g10/import.c:624
+#, c-format
+msgid "key %08lX: accepted non self-signed user ID '%s'\n"
+msgstr "Schlüssel %08lX: Nicht eigenbeglaubigte User-ID `%s' übernommen\n"
+
+#: g10/import.c:631
+#, c-format
+msgid "key %08lX: no valid user IDs\n"
+msgstr "Schlüssel %08lX: Keine gültigen User-IDs\n"
+
+#: g10/import.c:633
+msgid "this may be caused by a missing self-signature\n"
+msgstr "dies könnte durch fehlende Eigenbeglaubigung verursacht worden sein\n"
+
+#: g10/import.c:643 g10/import.c:1001
+#, c-format
+msgid "key %08lX: public key not found: %s\n"
+msgstr "Schlüssel %08lX: Öffentlicher Schlüssel nicht gefunden: %s\n"
+
+#: g10/import.c:648
+#, c-format
+msgid "key %08lX: new key - skipped\n"
+msgstr "Schlüssel %08lX: neuer Schlüssel - übersprungen\n"
+
+#: g10/import.c:657
+#, c-format
+msgid "no writable keyring found: %s\n"
+msgstr "kein schreibbarer Schlüsselbund gefunden: %s\n"
+
+#: g10/import.c:662 g10/openfile.c:244 g10/sign.c:671 g10/sign.c:898
+#, c-format
+msgid "writing to `%s'\n"
+msgstr "Schreiben nach '%s'\n"
+
+#: g10/import.c:665 g10/import.c:750 g10/import.c:935 g10/import.c:1061
+#, c-format
+msgid "error writing keyring `%s': %s\n"
+msgstr "Fehler beim Schreiben des Schlüsselbundes `%s': %s\n"
+
+#: g10/import.c:682
+#, c-format
+msgid "key %08lX: public key \"%s\" imported\n"
+msgstr "Schlüssel %08lX: Öffentlicher Schlüssel \"%s\" importiert\n"
+
+#: g10/import.c:704
+#, c-format
+msgid "key %08lX: doesn't match our copy\n"
+msgstr "Schlüssel %08lX: Stimmt nicht mit unserer Kopie überein\n"
+
+#: g10/import.c:721 g10/import.c:1018
+#, c-format
+msgid "key %08lX: can't locate original keyblock: %s\n"
+msgstr ""
+"Schlüssel %08lX: der lokale originale Schlüsselblocks wurde nicht gefunden: %"
+"s\n"
+
+#: g10/import.c:728 g10/import.c:1024
+#, c-format
+msgid "key %08lX: can't read original keyblock: %s\n"
+msgstr ""
+"Schlüssel %08lX: Lesefehler im lokalen originalen Schlüsselblocks: %s\n"
+
+#: g10/import.c:759
+#, c-format
+msgid "key %08lX: \"%s\" 1 new user ID\n"
+msgstr "Schlüssel %08lX: \"%s\" 1 neue User-ID\n"
+
+#: g10/import.c:762
+#, c-format
+msgid "key %08lX: \"%s\" %d new user IDs\n"
+msgstr "Schlüssel %08lX: \"%s\" %d neue User-IDs\n"
+
+#: g10/import.c:765
+#, c-format
+msgid "key %08lX: \"%s\" 1 new signature\n"
+msgstr "Schlüssel %08lX: \"%s\" 1 neue Signatur\n"
+
+#: g10/import.c:768
+#, c-format
+msgid "key %08lX: \"%s\" %d new signatures\n"
+msgstr "Schlüssel %08lX: \"%s\" %d neue Signaturen\n"
+
+#: g10/import.c:771
+#, c-format
+msgid "key %08lX: \"%s\" 1 new subkey\n"
+msgstr "Schlüssel %08lX: \"%s\" 1 neuer Unterschlüssel\n"
+
+#: g10/import.c:774
+#, c-format
+msgid "key %08lX: \"%s\" %d new subkeys\n"
+msgstr "Schlüssel %08lX: \"%s\" %d neue Unterschlüssel\n"
+
+#: g10/import.c:793
+#, c-format
+msgid "key %08lX: \"%s\" not changed\n"
+msgstr "Schlüssel %08lX: \"%s\" Nicht geändert\n"
+
+#: g10/import.c:914
+#, fuzzy, c-format
+msgid "key %08lX: secret key with invalid cipher %d - skipped\n"
+msgstr ""
+"Schlüssel %08lX: geheimer Schlüssel, aber ohne öffentlichen Schlüssel - "
+"übersprungen\n"
+
+#: g10/import.c:929
+#, c-format
+msgid "no default secret keyring: %s\n"
+msgstr "Kein voreingestellter geheimer Schlüsselbund: %s\n"
+
+#: g10/import.c:940
+#, c-format
+msgid "key %08lX: secret key imported\n"
+msgstr "Schlüssel %08lX: Geheimer Schlüssel importiert\n"
+
+#. we can't merge secret keys
+#: g10/import.c:956
+#, c-format
+msgid "key %08lX: already in secret keyring\n"
+msgstr "Schlüssel %08lX: Ist bereits im geheimen Schlüsselbund\n"
+
+#: g10/import.c:966
+#, c-format
+msgid "key %08lX: secret key not found: %s\n"
+msgstr "Schlüssel %08lX: geheimer Schlüssel nicht gefunden: %s\n"
+
+#: g10/import.c:995
+#, c-format
+msgid "key %08lX: no public key - can't apply revocation certificate\n"
+msgstr ""
+"Schlüssel %08lX: Kein öffentlicher Schlüssel - der Schlüsselwiderruf kann "
+"nicht angebracht werden\n"
+
+#: g10/import.c:1035
+#, c-format
+msgid "key %08lX: invalid revocation certificate: %s - rejected\n"
+msgstr "Schlüssel %08lX: Ungültiges Widerrufzertifikat: %s - zurückgewiesen\n"
+
+#: g10/import.c:1067
+#, c-format
+msgid "key %08lX: \"%s\" revocation certificate imported\n"
+msgstr "Schlüssel %08lX: \"%s\" Widerrufzertifikat importiert\n"
+
+#: g10/import.c:1115
+#, c-format
+msgid "key %08lX: no user ID for signature\n"
+msgstr "Schlüssel %08lX: Keine User-ID für Signatur\n"
+
+#: g10/import.c:1128
+#, c-format
+msgid "key %08lX: unsupported public key algorithm on user id \"%s\"\n"
+msgstr ""
+"Schlüssel %08lX: Nicht unterstütztes Public-Key-Verfahren für User-ID \"%s"
+"\"\n"
+
+#: g10/import.c:1130
+#, c-format
+msgid "key %08lX: invalid self-signature on user id \"%s\"\n"
+msgstr "Schlüssel %08lX: Ungültige Eigenbeglaubigung für User-ID \"%s\"\n"
+
+#: g10/import.c:1145
+#, fuzzy, c-format
+msgid "key %08lX: no subkey for subkey binding signature\n"
+msgstr "Schlüssel %08lX: Kein Unterschlüssel für die Schlüsselanbindung\n"
+
+#: g10/import.c:1153 g10/import.c:1194
+#, c-format
+msgid "key %08lX: unsupported public key algorithm\n"
+msgstr "Schlüssel %08lX: Nicht unterstütztes Public-Key-Verfahren\n"
+
+#: g10/import.c:1154
+#, c-format
+msgid "key %08lX: invalid subkey binding\n"
+msgstr "Schlüssel %08lX: Ungültige Unterschlüssel-Anbindung\n"
+
+#. Delete the last binding
+#. sig since this one is
+#. newer
+#: g10/import.c:1166
+#, c-format
+msgid "key %08lX: removed multiple subkey binding\n"
+msgstr "Schlüssel %08lX: Ungültige Unterschlüssel-Anbindung entfernt\n"
+
+#: g10/import.c:1186 g10/sig-check.c:550
+#, fuzzy, c-format
+msgid "key %08lX: no subkey for subkey revocation signature\n"
+msgstr "Schlüssel %08lX: Kein Unterschlüssel für den Schlüsselwiderruf\n"
+
+#: g10/import.c:1195
+#, c-format
+msgid "key %08lX: invalid subkey revocation\n"
+msgstr "Schlüssel %08lX: Ungültiger Unterschlüsselwiderruf\n"
+
+#. Delete the last revocation
+#. sig since this one is
+#. newer
+#: g10/import.c:1206
+#, fuzzy, c-format
+msgid "key %08lX: removed multiple subkey revocation signatures\n"
+msgstr "Schlüssel %08lX: Mehrfacher Unterschlüssel-Widerruf entfernt\n"
+
+#: g10/import.c:1243
+#, c-format
+msgid "key %08lX: skipped user ID '"
+msgstr "Schlüssel %08lX: User-ID übergangen '"
+
+#: g10/import.c:1266
+#, c-format
+msgid "key %08lX: skipped subkey\n"
+msgstr "Schlüssel %08lX: Unterschlüssel ignoriert\n"
+
+#. here we violate the rfc a bit by still allowing
+#. * to import non-exportable signature when we have the
+#. * the secret key used to create this signature - it
+#. * seems that this makes sense
+#: g10/import.c:1292
+#, c-format
+msgid "key %08lX: non exportable signature (class %02x) - skipped\n"
+msgstr ""
+"Schlüssel %08lX: Nicht exportfähige Unterschrift (Klasse %02x) - übergangen\n"
+
+#: g10/import.c:1301
+#, c-format
+msgid "key %08lX: revocation certificate at wrong place - skipped\n"
+msgstr "Schlüssel %08lX: Widerrufzertifikat an falschem Platz - übergangen\n"
+
+#: g10/import.c:1318
+#, c-format
+msgid "key %08lX: invalid revocation certificate: %s - skipped\n"
+msgstr "Schlüssel %08lX: Ungültiges Widerrufzertifikat: %s - übergangen\n"
+
+#: g10/import.c:1330
+#, c-format
+msgid "key %08lX: subkey signature in wrong place - skipped\n"
+msgstr "Schlüssel %08lX: Widerrufzertifikat an falschem Platz - übergangen\n"
+
+#: g10/import.c:1428
+#, c-format
+msgid "key %08lX: duplicated user ID detected - merged\n"
+msgstr "Schlüssel %08lX: Doppelte User-ID entdeckt - zusammengeführt\n"
+
+#: g10/import.c:1487
+#, c-format
+msgid "WARNING: key %08lX may be revoked: fetching revocation key %08lX\n"
+msgstr ""
+"WARNUNG: Schlüssel %08lX ist u.U. widerrufen: hole Widerrufschlüssel %08lX\n"
+
+#: g10/import.c:1501
+#, c-format
+msgid "WARNING: key %08lX may be revoked: revocation key %08lX not present.\n"
+msgstr ""
+"WARNUNG: Schlüssel %08lX ist u.U. widerrufen: Widerrufschlüssel %08lX ist "
+"nicht vorhanden\n"
+
+#: g10/import.c:1558
+#, c-format
+msgid "key %08lX: \"%s\" revocation certificate added\n"
+msgstr "Schlüssel %08lX: \"%s\" Widerrufzertifikat hinzugefügt\n"
+
+#: g10/import.c:1589
+#, c-format
+msgid "key %08lX: direct key signature added\n"
+msgstr "Schlüssel %08lX: \"direct-key\"-Signaturen hinzugefügt\n"
+
+#: g10/keyedit.c:151
+msgid "[revocation]"
+msgstr "[Widerruf]"
+
+#: g10/keyedit.c:152
+msgid "[self-signature]"
+msgstr "[Eigenbeglaubigung]"
+
+#: g10/keyedit.c:223 g10/keylist.c:190
+msgid "1 bad signature\n"
+msgstr "1 falsche Beglaubigung\n"
+
+#: g10/keyedit.c:225 g10/keylist.c:192
+#, c-format
+msgid "%d bad signatures\n"
+msgstr "%d falsche Beglaubigungen\n"
+
+#: g10/keyedit.c:227 g10/keylist.c:194
+msgid "1 signature not checked due to a missing key\n"
+msgstr "1 Beglaubigung wegen fehlendem Schlüssel nicht geprüft\n"
+
+#: g10/keyedit.c:229 g10/keylist.c:196
+#, c-format
+msgid "%d signatures not checked due to missing keys\n"
+msgstr "%d Beglaubigungen wegen fehlenden Schlüsseln nicht geprüft\n"
+
+#: g10/keyedit.c:231 g10/keylist.c:198
+msgid "1 signature not checked due to an error\n"
+msgstr "1 Beglaubigung aufgrund von Fehler nicht geprüft\n"
+
+#: g10/keyedit.c:233 g10/keylist.c:200
+#, c-format
+msgid "%d signatures not checked due to errors\n"
+msgstr "%d Beglaubigungen aufgrund von Fehlern nicht geprüft\n"
+
+#: g10/keyedit.c:235
+msgid "1 user ID without valid self-signature detected\n"
+msgstr "Eine User-ID ohne gültige Eigenbeglaubigung entdeckt\n"
+
+#: g10/keyedit.c:237
+#, c-format
+msgid "%d user IDs without valid self-signatures detected\n"
+msgstr "%d User-IDs ohne gültige Eigenbeglaubigung entdeckt\n"
+
+#: g10/keyedit.c:300
+#, fuzzy, c-format
+msgid " (%d) I trust marginally\n"
+msgstr " %d = Ich vertraue ihm einigermaßen\n"
+
+#: g10/keyedit.c:301
+#, fuzzy, c-format
+msgid " (%d) I trust fully\n"
+msgstr " %d = Ich vertraue ihm vollständig\n"
+
+#: g10/keyedit.c:320
+msgid ""
+"Please enter the depth of this trust signature.\n"
+"A depth greater than 1 allows the key you are signing to make\n"
+"trust signatures on your behalf.\n"
+msgstr ""
+
+#: g10/keyedit.c:338
+msgid "Please enter a domain to restrict this signature, or enter for none.\n"
+msgstr ""
+
+#: g10/keyedit.c:481
+#, c-format
+msgid "User ID \"%s\" is revoked."
+msgstr "User-ID \"%s\" ist widerrufen."
+
+#: g10/keyedit.c:488 g10/keyedit.c:605 g10/keyedit.c:663 g10/keyedit.c:1273
+msgid "Are you sure you still want to sign it? (y/N) "
+msgstr "Wollen Sie ihn immmer noch beglaubigen? (j/N) "
+
+#: g10/keyedit.c:496 g10/keyedit.c:611 g10/keyedit.c:1279
+msgid " Unable to sign.\n"
+msgstr " Beglaubigen ist nicht möglich.\n"
+
+#: g10/keyedit.c:501
+#, c-format
+msgid "WARNING: user ID \"%s\" is not self-signed.\n"
+msgstr "WARNUNG: User-ID \"%s\" ist nicht eigenbeglaubigt.\n"
+
+#: g10/keyedit.c:520
+#, c-format
+msgid ""
+"The self-signature on \"%s\"\n"
+"is a PGP 2.x-style signature.\n"
+msgstr ""
+"Die Eigenbeglaubigung von \"%s\"\n"
+"ist eine PGP 2.x artige Signatur.\n"
+
+#: g10/keyedit.c:529
+msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) "
+msgstr "Soll sie zu einer OpenPGP Eigenbeglaubigung geändert werden? (j/N) "
+
+#. It's a local sig, and we want to make a
+#. exportable sig.
+#: g10/keyedit.c:543
+#, c-format
+msgid ""
+"Your current signature on \"%s\"\n"
+"is a local signature.\n"
+msgstr ""
+"Die derzeitige Beglaubigung von \"%s\"\n"
+"ist nur für diesen Rechner gültig.\n"
+
+#: g10/keyedit.c:547
+msgid "Do you want to promote it to a full exportable signature? (y/N) "
+msgstr ""
+"Soll sie zu einer voll exportierbaren Beglaubigung erhoben werden? (j/N) "
+
+#: g10/keyedit.c:567
+#, c-format
+msgid "\"%s\" was already locally signed by key %08lX\n"
+msgstr "\"%s\" wurde bereits durch Schlüssel %08lX lokal beglaubigt\n"
+
+#: g10/keyedit.c:571
+#, c-format
+msgid "\"%s\" was already signed by key %08lX\n"
+msgstr "\"%s\" wurde bereits durch Schlüssel %08lX beglaubigt\n"
+
+#: g10/keyedit.c:584
+#, c-format
+msgid "Nothing to sign with key %08lX\n"
+msgstr "Nichts zu beglaubigen für Schlüssel %08lX\n"
+
+#: g10/keyedit.c:599
+msgid "This key has expired!"
+msgstr "Dieser Schlüssel ist verfallen!"
+
+#: g10/keyedit.c:619
+#, c-format
+msgid "This key is due to expire on %s.\n"
+msgstr "Dieser Schlüssel wird %s verfallen.\n"
+
+#: g10/keyedit.c:623
+msgid "Do you want your signature to expire at the same time? (Y/n) "
+msgstr "Soll Ihre Beglaubigung zur selben Zeit verfallen? (J/n) "
+
+#: g10/keyedit.c:656
+msgid ""
+"You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 "
+"mode.\n"
+msgstr ""
+"Im --pgp2-Modus kann nur mit PGP-2.x-artigen Schlüsseln unterschrieben "
+"werden\n"
+
+#: g10/keyedit.c:658
+msgid "This would make the key unusable in PGP 2.x.\n"
+msgstr "Dies würde den Schlüssel für PGP 2.x unbrauchbar machen\n"
+
+#: g10/keyedit.c:683
+msgid ""
+"How carefully have you verified the key you are about to sign actually "
+"belongs\n"
+"to the person named above? If you don't know what to answer, enter \"0\".\n"
+msgstr ""
+"Wie genau haben Sie überprüft, ob der Schlüssel, den Sie jetzt beglaubigen\n"
+"wollen, wirklich der o.g. Person gehört?\n"
+"Wenn Sie darauf keine Antwort wissen, geben Sie \"0\" ein.\n"
+
+#: g10/keyedit.c:688
+#, c-format
+msgid " (0) I will not answer.%s\n"
+msgstr " (0) Ich antworte nicht.%s\n"
+
+#: g10/keyedit.c:690
+#, c-format
+msgid " (1) I have not checked at all.%s\n"
+msgstr " (1) Ich habe es überhaupt nicht überprüft.%s\n"
+
+#: g10/keyedit.c:692
+#, c-format
+msgid " (2) I have done casual checking.%s\n"
+msgstr " (2) Ich habe es flüchtig überprüft.%s\n"
+
+#: g10/keyedit.c:694
+#, c-format
+msgid " (3) I have done very careful checking.%s\n"
+msgstr " (3) Ich habe es sehr sorgfältig überprüft.%s\n"
+
+#: g10/keyedit.c:723
+msgid ""
+"Are you really sure that you want to sign this key\n"
+"with your key: \""
+msgstr ""
+"Sind Sie wirklich sicher, daß Sie vorstehenden Schlüssel mit Ihrem\n"
+"Schlüssel beglaubigen wollen: \""
+
+#: g10/keyedit.c:732
+msgid ""
+"\n"
+"This will be a self-signature.\n"
+msgstr ""
+"\n"
+"Dies wird eine Eigenbeglaubigung sein.\n"
+
+#: g10/keyedit.c:736
+msgid ""
+"\n"
+"WARNING: the signature will not be marked as non-exportable.\n"
+msgstr ""
+"\n"
+"WARNUNG: Die Unterschrift wird nicht als nicht-exportierbar markiert "
+"werden.\n"
+
+#: g10/keyedit.c:741
+msgid ""
+"\n"
+"WARNING: the signature will not be marked as non-revocable.\n"
+msgstr ""
+"\n"
+"Die Unterschrift wird nicht als nicht-widerrufbar markiert werden.\n"
+
+#: g10/keyedit.c:748
+msgid ""
+"\n"
+"The signature will be marked as non-exportable.\n"
+msgstr ""
+"\n"
+"Die Unterschrift wird als nicht exportfähig markiert werden.\n"
+
+#: g10/keyedit.c:752
+msgid ""
+"\n"
+"The signature will be marked as non-revocable.\n"
+msgstr ""
+"\n"
+"Die Unterschrift wird als nicht exportfähig markiert werden.\n"
+
+#: g10/keyedit.c:757
+msgid ""
+"\n"
+"I have not checked this key at all.\n"
+msgstr ""
+"\n"
+"Ich habe diesen Schlüssel überhaupt nicht überprüft.\n"
+
+#: g10/keyedit.c:761
+msgid ""
+"\n"
+"I have checked this key casually.\n"
+msgstr ""
+"\n"
+"Ich habe diesen Schlüssel flüchtig überprüft.\n"
+
+#: g10/keyedit.c:765
+msgid ""
+"\n"
+"I have checked this key very carefully.\n"
+msgstr ""
+"\n"
+"Ich habe diesen Schlüssel sehr sorgfältig überprüft.\n"
+
+#: g10/keyedit.c:774
+msgid "Really sign? "
+msgstr "Wirklich unterschreiben? "
+
+#: g10/keyedit.c:819 g10/keyedit.c:3263 g10/keyedit.c:3325 g10/sign.c:308
+#, c-format
+msgid "signing failed: %s\n"
+msgstr "Beglaubigung fehlgeschlagen: %s\n"
+
+#: g10/keyedit.c:875
+msgid "This key is not protected.\n"
+msgstr "Dieser Schlüssel ist nicht geschützt.\n"
+
+#: g10/keyedit.c:879
+msgid "Secret parts of primary key are not available.\n"
+msgstr "Geheime Teile des Haupschlüssels sind nicht vorhanden\n"
+
+#: g10/keyedit.c:883
+msgid "Key is protected.\n"
+msgstr "Schlüssel ist geschützt.\n"
+
+#: g10/keyedit.c:903
+#, c-format
+msgid "Can't edit this key: %s\n"
+msgstr "Dieser Schlüssel kann nicht editiert werden: %s\n"
+
+#: g10/keyedit.c:909
+msgid ""
+"Enter the new passphrase for this secret key.\n"
+"\n"
+msgstr ""
+"Geben Sie das neue Mantra für diesen geheimen Schlüssel ein.\n"
+"\n"
+
+#: g10/keyedit.c:923
+msgid ""
+"You don't want a passphrase - this is probably a *bad* idea!\n"
+"\n"
+msgstr ""
+"Sie wollen kein Mantra - dies ist bestimmt *keine* gute Idee!\n"
+"\n"
+
+#: g10/keyedit.c:926
+msgid "Do you really want to do this? "
+msgstr "Möchten Sie dies wirklich tun? "
+
+#: g10/keyedit.c:990
+msgid "moving a key signature to the correct place\n"
+msgstr "schiebe eine Beglaubigung an die richtige Stelle\n"
+
+#: g10/keyedit.c:1032
+msgid "quit this menu"
+msgstr "Menü verlassen"
+
+#: g10/keyedit.c:1033
+msgid "q"
+msgstr "q"
+
+#: g10/keyedit.c:1034
+msgid "save"
+msgstr "save"
+
+#: g10/keyedit.c:1034
+msgid "save and quit"
+msgstr "speichern und Menü verlassen"
+
+#: g10/keyedit.c:1035
+msgid "help"
+msgstr "help"
+
+#: g10/keyedit.c:1035
+msgid "show this help"
+msgstr "Diese Hilfe zeigen"
+
+#: g10/keyedit.c:1037
+msgid "fpr"
+msgstr "fpr"
+
+#: g10/keyedit.c:1037
+msgid "show fingerprint"
+msgstr "\"Fingerabdruck\" anzeigen"
+
+#: g10/keyedit.c:1038
+msgid "list"
+msgstr "Liste der Schlüssel"
+
+#: g10/keyedit.c:1038
+msgid "list key and user IDs"
+msgstr "Schlüssel und User-IDs auflisten"
+
+#: g10/keyedit.c:1039
+msgid "l"
+msgstr "l"
+
+#: g10/keyedit.c:1040
+msgid "uid"
+msgstr "uid"
+
+#: g10/keyedit.c:1040
+msgid "select user ID N"
+msgstr "User-ID N auswählen"
+
+#: g10/keyedit.c:1041
+msgid "key"
+msgstr "key"
+
+#: g10/keyedit.c:1041
+msgid "select secondary key N"
+msgstr "Zweitschlüssel N auswählen"
+
+#: g10/keyedit.c:1042
+msgid "check"
+msgstr "check"
+
+#: g10/keyedit.c:1042
+msgid "list signatures"
+msgstr "Liste der Signaturen"
+
+#: g10/keyedit.c:1043
+msgid "c"
+msgstr "c"
+
+#: g10/keyedit.c:1044
+msgid "sign"
+msgstr "sign"
+
+#: g10/keyedit.c:1044
+msgid "sign the key"
+msgstr "Den Schlüssel signieren"
+
+#: g10/keyedit.c:1045
+msgid "s"
+msgstr "s"
+
+#: g10/keyedit.c:1046
+#, fuzzy
+msgid "tsign"
+msgstr "sign"
+
+#: g10/keyedit.c:1046
+#, fuzzy
+msgid "make a trust signature"
+msgstr "Eine abgetrennte Unterschrift erzeugen"
+
+#: g10/keyedit.c:1047
+msgid "lsign"
+msgstr "lsign"
+
+#: g10/keyedit.c:1047
+msgid "sign the key locally"
+msgstr "Den Schlüssel nur für diesen Rechner beglaubigen"
+
+#: g10/keyedit.c:1048
+msgid "nrsign"
+msgstr "nrsign"
+
+#: g10/keyedit.c:1048
+msgid "sign the key non-revocably"
+msgstr "Den Schlüssel nicht-widerrufbar beglaubigen"
+
+#: g10/keyedit.c:1049
+msgid "nrlsign"
+msgstr "nrlsign"
+
+#: g10/keyedit.c:1049
+msgid "sign the key locally and non-revocably"
+msgstr "Den Schlüssel nicht-widerrufbar und nur für diesen Rechner signieren"
+
+#: g10/keyedit.c:1050
+msgid "debug"
+msgstr "debug"
+
+#: g10/keyedit.c:1051
+msgid "adduid"
+msgstr "adduid"
+
+#: g10/keyedit.c:1051
+msgid "add a user ID"
+msgstr "Eine User-ID hinzufügen"
+
+#: g10/keyedit.c:1052
+msgid "addphoto"
+msgstr "addphoto"
+
+#: g10/keyedit.c:1052
+msgid "add a photo ID"
+msgstr "Eine Foto-ID hinzufügen"
+
+#: g10/keyedit.c:1053
+msgid "deluid"
+msgstr "deluid"
+
+#: g10/keyedit.c:1053
+msgid "delete user ID"
+msgstr "User-ID entfernen"
+
+#. delphoto is really deluid in disguise
+#: g10/keyedit.c:1055
+msgid "delphoto"
+msgstr "delphoto"
+
+#: g10/keyedit.c:1056
+msgid "addkey"
+msgstr "addkey"
+
+#: g10/keyedit.c:1056
+msgid "add a secondary key"
+msgstr "Einen Zweitschlüssel hinzufügen"
+
+#: g10/keyedit.c:1057
+msgid "delkey"
+msgstr "delkey"
+
+#: g10/keyedit.c:1057
+msgid "delete a secondary key"
+msgstr "Einen Zweitschlüssel entfernen"
+
+#: g10/keyedit.c:1058
+msgid "addrevoker"
+msgstr "addrevoker"
+
+#: g10/keyedit.c:1058
+msgid "add a revocation key"
+msgstr "Einen Widerrufschlüssel hinzufügen"
+
+#: g10/keyedit.c:1059
+msgid "delsig"
+msgstr "delsig"
+
+#: g10/keyedit.c:1059
+msgid "delete signatures"
+msgstr "Signatur entfernen"
+
+#: g10/keyedit.c:1060
+msgid "expire"
+msgstr "expire"
+
+#: g10/keyedit.c:1060
+msgid "change the expire date"
+msgstr "Ändern des Verfallsdatums"
+
+#: g10/keyedit.c:1061
+msgid "primary"
+msgstr "primary"
+
+#: g10/keyedit.c:1061
+msgid "flag user ID as primary"
+msgstr "User-ID als Haupt-User-ID kennzeichnen"
+
+#: g10/keyedit.c:1062
+msgid "toggle"
+msgstr "toggle"
+
+#: g10/keyedit.c:1062
+msgid "toggle between secret and public key listing"
+msgstr "Umschalten zwischen Anzeige geheimer und öffentlicher Schlüssel"
+
+#: g10/keyedit.c:1064
+msgid "t"
+msgstr "t"
+
+#: g10/keyedit.c:1065
+msgid "pref"
+msgstr "pref"
+
+#: g10/keyedit.c:1065
+msgid "list preferences (expert)"
+msgstr "Liste der Voreinstellungen (für Experten)"
+
+#: g10/keyedit.c:1066
+msgid "showpref"
+msgstr "showpref"
+
+#: g10/keyedit.c:1066
+msgid "list preferences (verbose)"
+msgstr "Liste der Voreinstellungen (ausführlich)"
+
+#: g10/keyedit.c:1067
+msgid "setpref"
+msgstr "setpref"
+
+#: g10/keyedit.c:1067
+msgid "set preference list"
+msgstr "Liste der Voreinstellungen einstellen"
+
+#: g10/keyedit.c:1068
+msgid "updpref"
+msgstr "updpref"
+
+#: g10/keyedit.c:1068
+msgid "updated preferences"
+msgstr "geänderte Voreinstellungen"
+
+#: g10/keyedit.c:1069
+msgid "passwd"
+msgstr "passwd"
+
+#: g10/keyedit.c:1069
+msgid "change the passphrase"
+msgstr "Das Mantra ändern"
+
+#: g10/keyedit.c:1070
+msgid "trust"
+msgstr "trust"
+
+#: g10/keyedit.c:1070
+msgid "change the ownertrust"
+msgstr "Den \"Owner trust\" ändern"
+
+#: g10/keyedit.c:1071
+msgid "revsig"
+msgstr "revsig"
+
+#: g10/keyedit.c:1071
+msgid "revoke signatures"
+msgstr "Signaturen widerrufen"
+
+#: g10/keyedit.c:1072
+msgid "revkey"
+msgstr "revkey"
+
+#: g10/keyedit.c:1072
+msgid "revoke a secondary key"
+msgstr "Einen Zweitschlüssel widerrufen"
+
+#: g10/keyedit.c:1073
+msgid "disable"
+msgstr "disable"
+
+#: g10/keyedit.c:1073
+msgid "disable a key"
+msgstr "Schlüssel abschalten"
+
+#: g10/keyedit.c:1074
+msgid "enable"
+msgstr "enable"
+
+#: g10/keyedit.c:1074
+msgid "enable a key"
+msgstr "Schlüssel anschalten"
+
+#: g10/keyedit.c:1075
+msgid "showphoto"
+msgstr "showphoto"
+
+#: g10/keyedit.c:1075
+msgid "show photo ID"
+msgstr "Foto-ID anzeigen"
+
+#: g10/delkey.c:119 g10/keyedit.c:1095
+msgid "can't do that in batchmode\n"
+msgstr "Dies kann im Batchmodus nicht durchgeführt werden.\n"
+
+#: g10/keyedit.c:1132
+#, c-format
+msgid "error reading secret keyblock `%s': %s\n"
+msgstr "Fehler beim Lesen des geheimen Schlüsselblocks `%s': %s\n"
+
+#: g10/keyedit.c:1150
+msgid "Secret key is available.\n"
+msgstr "Geheimer Schlüssel ist vorhanden.\n"
+
+#: g10/keyedit.c:1181
+msgid "Command> "
+msgstr "Befehl> "
+
+#: g10/keyedit.c:1213
+msgid "Need the secret key to do this.\n"
+msgstr "Hierzu wird der geheime Schlüssel benötigt.\n"
+
+#: g10/keyedit.c:1217
+msgid "Please use the command \"toggle\" first.\n"
+msgstr "Bitte verwenden sie zunächst den Befehl \"toggle\"\n"
+
+#: g10/keyedit.c:1267
+msgid "Key is revoked."
+msgstr "Schlüssel wurde widerrufen."
+
+#: g10/keyedit.c:1286
+msgid "Really sign all user IDs? "
+msgstr "Wirklich alle User-IDs beglaubigen? "
+
+#: g10/keyedit.c:1287
+msgid "Hint: Select the user IDs to sign\n"
+msgstr "Tip: Wählen Sie die User-IDs, die beglaubigt werden sollen\n"
+
+#: g10/keyedit.c:1313
+#, c-format
+msgid "This command is not allowed while in %s mode.\n"
+msgstr "Dieses Kommando ist im %s-Modus nicht erlaubt.\n"
+
+#: g10/keyedit.c:1333 g10/keyedit.c:1354
+msgid "You must select at least one user ID.\n"
+msgstr "Zumindestens eine User-ID muß ausgewählt werden.\n"
+
+#: g10/keyedit.c:1335
+msgid "You can't delete the last user ID!\n"
+msgstr "Die letzte User-ID kann nicht gelöscht werden!\n"
+
+#: g10/keyedit.c:1338
+msgid "Really remove all selected user IDs? "
+msgstr "Möchten Sie alle ausgewählten User-IDs wirklich entfernen? "
+
+#: g10/keyedit.c:1339
+msgid "Really remove this user ID? "
+msgstr "Diese User-ID wirklich entfernen? "
+
+#: g10/keyedit.c:1377 g10/keyedit.c:1414
+msgid "You must select at least one key.\n"
+msgstr "Zumindestens ein Schlüssel muß ausgewählt werden.\n"
+
+#: g10/keyedit.c:1381
+msgid "Do you really want to delete the selected keys? "
+msgstr "Möchten Sie die ausgewählten Schlüssel wirklich entfernen? "
+
+#: g10/keyedit.c:1382
+msgid "Do you really want to delete this key? "
+msgstr "Möchten Sie diesen Schlüssel wirklich entfernen? "
+
+#: g10/keyedit.c:1418
+msgid "Do you really want to revoke the selected keys? "
+msgstr "Möchten Sie die ausgewählten Schlüssel wirklich widerrufen? "
+
+#: g10/keyedit.c:1419
+msgid "Do you really want to revoke this key? "
+msgstr "Möchten Sie diesen Schlüssel wirklich wiederrufen? "
+
+#: g10/keyedit.c:1483
+#, fuzzy
+msgid "Current preference list:\n"
+msgstr "Liste der Voreinstellungen einstellen"
+
+#: g10/keyedit.c:1489
+msgid "Really update the preferences for the selected user IDs? "
+msgstr ""
+"Möchten Sie die Voreinstellungen der ausgewählten User-IDs wirklich ändern? "
+
+#: g10/keyedit.c:1491
+msgid "Really update the preferences? "
+msgstr "Die Voreinstellungen wirklich ändern? "
+
+#: g10/keyedit.c:1529
+msgid "Save changes? "
+msgstr "Änderungen speichern? "
+
+#: g10/keyedit.c:1532
+msgid "Quit without saving? "
+msgstr "Beenden ohne zu speichern? "
+
+#: g10/keyedit.c:1543
+#, c-format
+msgid "update failed: %s\n"
+msgstr "Änderung fehlgeschlagen: %s\n"
+
+#: g10/keyedit.c:1550
+#, c-format
+msgid "update secret failed: %s\n"
+msgstr "Änderung des Geheimnisses fehlgeschlagen: %s\n"
+
+#: g10/keyedit.c:1557
+msgid "Key not changed so no update needed.\n"
+msgstr "Schlüssel ist nicht geändert worden, also ist kein Speichern nötig.\n"
+
+#: g10/keyedit.c:1569
+msgid "Invalid command (try \"help\")\n"
+msgstr "Ungültiger Befehl (versuchen Sie's mal mit \"help\")\n"
+
+#: g10/keyedit.c:1885
+#, c-format
+msgid "This key may be revoked by %s key "
+msgstr "Dieser Schlüssel könnte widerrufen worden sein von %s Schlüssel "
+
+#: g10/keyedit.c:1889
+msgid " (sensitive)"
+msgstr "(empfindlich)"
+
+#. Note, we use the same format string as in other show
+#. functions to make the translation job easier.
+#: g10/keyedit.c:1895 g10/keyedit.c:1921 g10/keyedit.c:2006 g10/keyedit.c:2021
+#, c-format
+msgid "%s%c %4u%c/%08lX created: %s expires: %s"
+msgstr "%s%c %4u%c/%08lX erstellt: %s verfällt: %s"
+
+#: g10/keyedit.c:1904
+#, c-format
+msgid " trust: %c/%c"
+msgstr " Vertrauen: %c/%c"
+
+#: g10/keyedit.c:1908
+msgid "This key has been disabled"
+msgstr "Hinweis: Dieser Schlüssel ist abgeschaltet"
+
+#: g10/keyedit.c:1937
+#, c-format
+msgid "rev! subkey has been revoked: %s\n"
+msgstr "rev! Unterschlüssel wurde widerrufen: %s\n"
+
+#: g10/keyedit.c:1940
+msgid "rev- faked revocation found\n"
+msgstr "rev- gefälschter Schlüsselwiderruf entdeckt\n"
+
+#: g10/keyedit.c:1942
+#, c-format
+msgid "rev? problem checking revocation: %s\n"
+msgstr "rev? Schwierigkeiten bei der Widerruf-Überprüfung: %s\n"
+
+#: g10/keyedit.c:1972
+msgid "There are no preferences on a PGP 2.x-style user ID.\n"
+msgstr "PGP 2.x-artige Schlüssel haben keine Voreinstellungen.\n"
+
+#: g10/keyedit.c:1980
+msgid ""
+"Please note that the shown key validity is not necessarily correct\n"
+"unless you restart the program.\n"
+msgstr ""
+"Bitte beachten Sie, daß ohne einen Programmneustart die angezeigte\n"
+"Schlüsselgültigkeit nicht notwendigerweise korrekt ist.\n"
+
+#: g10/keyedit.c:2137
+msgid ""
+"WARNING: This is a PGP2-style key. Adding a photo ID may cause some "
+"versions\n"
+" of PGP to reject this key.\n"
+msgstr ""
+"WARNUNG: Dies ist ein PGP2-artiger Schlüssel. Hinzufügen einer Foto-ID "
+"könnte\n"
+" bei einigen PGP-Versionen zur Zurückweisung des Schlüssels führen.\n"
+
+#: g10/keyedit.c:2142 g10/keyedit.c:2415
+msgid "Are you sure you still want to add it? (y/N) "
+msgstr "Wollen Sie ihn immmer noch hinzufügen? (j/N) "
+
+#: g10/keyedit.c:2148
+msgid "You may not add a photo ID to a PGP2-style key.\n"
+msgstr "Sie können einem PGP2-artigen Schlüüsel keine Foto-ID hinzufügen.\n"
+
+#: g10/keyedit.c:2283
+msgid "Delete this good signature? (y/N/q)"
+msgstr "Diese korrekte Beglaubigung entfernen? (j/N/q)"
+
+#: g10/keyedit.c:2293
+msgid "Delete this invalid signature? (y/N/q)"
+msgstr "Diese ungültige Beglaubigung entfernen= (j/N/q)"
+
+#: g10/keyedit.c:2297
+msgid "Delete this unknown signature? (y/N/q)"
+msgstr "Diese unbekannte Beglaubigung entfernen? (j/N/q)"
+
+#: g10/keyedit.c:2303
+msgid "Really delete this self-signature? (y/N)"
+msgstr "Eigenbeglaubigung wirklich entfernen? (j/N)"
+
+#: g10/keyedit.c:2317
+#, c-format
+msgid "Deleted %d signature.\n"
+msgstr "%d Beglaubigungen entfernt.\n"
+
+#: g10/keyedit.c:2318
+#, c-format
+msgid "Deleted %d signatures.\n"
+msgstr "%d Beglaubigungen entfernt.\n"
+
+#: g10/keyedit.c:2321
+msgid "Nothing deleted.\n"
+msgstr "Nichts entfernt.\n"
+
+#: g10/keyedit.c:2410
+#, fuzzy
+msgid ""
+"WARNING: This is a PGP 2.x-style key. Adding a designated revoker may "
+"cause\n"
+" some versions of PGP to reject this key.\n"
+msgstr ""
+"WARNUNG: Dies ist ein PGP2-artiger Schlüssel. Hinzufügen einer Foto-ID "
+"könnte\n"
+" bei einigen PGP-Versionen zur Zurückweisung des Schlüssels führen.\n"
+
+#: g10/keyedit.c:2421
+#, fuzzy
+msgid "You may not add a designated revoker to a PGP 2.x-style key.\n"
+msgstr "Sie können einem PGP2-artigen Schlüüsel keine Foto-ID hinzufügen.\n"
+
+#: g10/keyedit.c:2444
+msgid "Enter the user ID of the designated revoker: "
+msgstr "Geben sie die User-ID des designierten Widerrufers ein: "
+
+#: g10/keyedit.c:2459
+msgid "cannot appoint a PGP 2.x style key as a designated revoker\n"
+msgstr ""
+"Ein PGP 2.x-artiger Schlüssel kann nicht als designierter Widerrufer "
+"eingetragen werden\n"
+
+#. This actually causes no harm (after all, a key that
+#. designates itself as a revoker is the same as a
+#. regular key), but it's easy enough to check.
+#: g10/keyedit.c:2474
+msgid "you cannot appoint a key as its own designated revoker\n"
+msgstr ""
+"Ein Schlüssel kann nicht als sein eigener designierter Widerrufer agieren\n"
+
+#: g10/keyedit.c:2496
+#, fuzzy
+msgid "this key has already been designated as a revoker\n"
+msgstr ""
+"Ein Schlüssel kann nicht als sein eigener designierter Widerrufer agieren\n"
+
+#: g10/keyedit.c:2592
+msgid "Please remove selections from the secret keys.\n"
+msgstr "Bitte entfernen Sie die Auswahl von den geheimen Schlüsseln.\n"
+
+#: g10/keyedit.c:2598
+msgid "Please select at most one secondary key.\n"
+msgstr "Bitte wählen Sie höchstens einen Zweitschlüssel aus.\n"
+
+#: g10/keyedit.c:2602
+msgid "Changing expiration time for a secondary key.\n"
+msgstr "Ändern des Verfallsdatums des Zweitschlüssels.\n"
+
+#: g10/keyedit.c:2604
+msgid "Changing expiration time for the primary key.\n"
+msgstr "Ändern des Verfallsdatums des Hauptschlüssels.\n"
+
+#: g10/keyedit.c:2646
+msgid "You can't change the expiration date of a v3 key\n"
+msgstr "Sie können das Verfallsdatum eines v3-Schlüssels nicht ändern\n"
+
+#: g10/keyedit.c:2662
+msgid "No corresponding signature in secret ring\n"
+msgstr "Keine entsprechende Signatur im geheimen Schlüsselbund\n"
+
+#: g10/keyedit.c:2745
+msgid "Please select exactly one user ID.\n"
+msgstr "Bitte genau eine User-ID auswählen.\n"
+
+#: g10/keyedit.c:2782 g10/keyedit.c:2889
+#, c-format
+msgid "skipping v3 self-signature on user id \"%s\"\n"
+msgstr "Überspringen der v3 Eigenbeglaubigung von User-ID \"%s\"\n"
+
+#: g10/keyedit.c:2949
+#, c-format
+msgid "No user ID with index %d\n"
+msgstr "Keine User-ID mit Index %d\n"
+
+#: g10/keyedit.c:2995
+#, c-format
+msgid "No secondary key with index %d\n"
+msgstr "Kein Zweitschlüssel mit Index %d\n"
+
+#: g10/keyedit.c:3109
+msgid "user ID: \""
+msgstr "User-ID: \""
+
+#: g10/keyedit.c:3114
+#, c-format
+msgid ""
+"\"\n"
+"signed with your key %08lX at %s\n"
+msgstr ""
+"\"\n"
+"unterschrieben mit Ihrem Schlüssel %08lX um %s\n"
+
+#: g10/keyedit.c:3117
+#, c-format
+msgid ""
+"\"\n"
+"locally signed with your key %08lX at %s\n"
+msgstr ""
+"\"\n"
+"lokal unterschrieben mit Ihrem Schlüssel %08lX um %s\n"
+
+#: g10/keyedit.c:3122
+#, c-format
+msgid "This signature expired on %s.\n"
+msgstr "Diese Unterschrift ist seit %s verfallen.\n"
+
+#: g10/keyedit.c:3126
+msgid "Are you sure you still want to revoke it? (y/N) "
+msgstr "Wollen Sie ihn immmer noch widerrufen? (j/N) "
+
+#: g10/keyedit.c:3130
+msgid "Create a revocation certificate for this signature? (y/N) "
+msgstr "Ein Widerrufszertifikat für diese Unterschrift erzeugen (j/N)"
+
+#. FIXME: detect duplicates here
+#: g10/keyedit.c:3155
+msgid "You have signed these user IDs:\n"
+msgstr "Sie haben folgende User-IDs beglaubigt:\n"
+
+#: g10/keyedit.c:3174
+#, c-format
+msgid " signed by %08lX at %s%s%s\n"
+msgstr " beglaubigt durch %08lX um %s%s%s\n"
+
+#: g10/keyedit.c:3182
+#, c-format
+msgid " revoked by %08lX at %s\n"
+msgstr " widerrufen durch %08lX um %s\n"
+
+#: g10/keyedit.c:3202
+msgid "You are about to revoke these signatures:\n"
+msgstr "Es werden nun folgende Beglaubigungen entfernt:\n"
+
+#: g10/keyedit.c:3212
+#, c-format
+msgid " signed by %08lX at %s%s\n"
+msgstr " beglaubigt durch %08lX am %s%s\n"
+
+#: g10/keyedit.c:3214
+msgid " (non-exportable)"
+msgstr " (nicht-exportierbar)"
+
+#: g10/keyedit.c:3221
+msgid "Really create the revocation certificates? (y/N) "
+msgstr "Wirklich ein Unterschrift-Widerrufszertifikat erzeugen? (j/N) "
+
+#: g10/keyedit.c:3251
+msgid "no secret key\n"
+msgstr "Kein geheimer Schlüssel\n"
+
+#: g10/keyedit.c:3406
+#, c-format
+msgid "Displaying %s photo ID of size %ld for key 0x%08lX (uid %d)\n"
+msgstr ""
+"Anzeigen einer %s Photo ID (%ld Byte) für Schlüssel %08lX (User-ID %d)\n"
+
+#: g10/keylist.c:133
+msgid "Critical signature policy: "
+msgstr "Krititische Beglaubigungsrichtlinie: "
+
+#: g10/keylist.c:135
+msgid "Signature policy: "
+msgstr "Beglaubigungsrichtlinie: "
+
+#: g10/keylist.c:160 g10/keylist.c:183 g10/mainproc.c:769 g10/mainproc.c:778
+msgid "WARNING: invalid notation data found\n"
+msgstr "WARNUNG: Ungültige \"Notation\"-Daten gefunden\n"
+
+#: g10/keylist.c:169
+msgid "Critical signature notation: "
+msgstr "Krititische Beglaubigungs-\"Notation\": "
+
+#: g10/keylist.c:171
+msgid "Signature notation: "
+msgstr "Beglaubigungs-\"Notation\": "
+
+#: g10/keylist.c:178
+msgid "not human readable"
+msgstr "nicht als Klartext darstellbar"
+
+#: g10/keylist.c:267
+msgid "Keyring"
+msgstr "Schlüsselbund"
+
+#. of subkey
+#: g10/keylist.c:536 g10/mainproc.c:905
+#, c-format
+msgid " [expires: %s]"
+msgstr " [verfällt: %s]"
+
+#: g10/keylist.c:1063
+msgid "Primary key fingerprint:"
+msgstr "Haupt-Fingerabdruck ="
+
+#: g10/keylist.c:1065
+msgid " Subkey fingerprint:"
+msgstr "Unter-Fingerabdruck ="
+
+#: g10/keylist.c:1072
+msgid " Primary key fingerprint:"
+msgstr " Haupt-Fingerabdruck ="
+
+#: g10/keylist.c:1074
+msgid " Subkey fingerprint:"
+msgstr " Unter-Fingerabdruck ="
+
+#. use tty
+#: g10/keylist.c:1078 g10/keylist.c:1082
+#, fuzzy
+msgid " Key fingerprint ="
+msgstr " Schl.-Fingerabdruck ="
+
+#: g10/mainproc.c:248
+#, c-format
+msgid "weird size for an encrypted session key (%d)\n"
+msgstr "Seltsame Länge des verschlüsselten Session-Keys (%d)\n"
+
+#: g10/mainproc.c:259
+#, c-format
+msgid "invalid symkey algorithm detected (%d)\n"
+msgstr "Ungültiger Veschlüsselungsalgorithmus entdeckt (%d)\n"
+
+#: g10/encr-data.c:66 g10/mainproc.c:288
+#, c-format
+msgid "%s encrypted data\n"
+msgstr "%s verschlüsselte Daten\n"
+
+#: g10/encr-data.c:68 g10/mainproc.c:290
+#, c-format
+msgid "encrypted with unknown algorithm %d\n"
+msgstr "Mit unbekanntem Verfahren verschlüsselt %d\n"
+
+#: g10/mainproc.c:318
+#, c-format
+msgid "public key is %08lX\n"
+msgstr "Öffentlicher Schlüssel ist %08lX\n"
+
+#: g10/mainproc.c:364
+msgid "public key encrypted data: good DEK\n"
+msgstr "Mit öffentlichem Schüssel verschlüsselte Daten: Korrekte DEK\n"
+
+#: g10/mainproc.c:416
+#, c-format
+msgid "encrypted with %u-bit %s key, ID %08lX, created %s\n"
+msgstr "verschlüsselt mit %u-Bit %s Schlüssel, ID %08lX, erzeugt %s\n"
+
+# Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-(
+# [kw]
+#: g10/mainproc.c:426
+#, c-format
+msgid "encrypted with %s key, ID %08lX\n"
+msgstr "verschlüsselt mit %s Schlüssel, ID %08lX\n"
+
+#: g10/mainproc.c:440
+#, c-format
+msgid "public key decryption failed: %s\n"
+msgstr "Entschlüsselung mit öffentlichem Schlüssel fehlgeschlagen: %s\n"
+
+#: g10/mainproc.c:467 g10/mainproc.c:486
+#, c-format
+msgid "assuming %s encrypted data\n"
+msgstr "vermutlich %s-verschlüsselte Daten\n"
+
+#: g10/mainproc.c:474
+#, c-format
+msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n"
+msgstr "IDEA-Verschlüsselung nicht verfügbar; versucht wird stattdessen %s\n"
+
+#: g10/mainproc.c:504
+msgid "decryption okay\n"
+msgstr "Entschlüsselung erfolgreich\n"
+
+#: g10/mainproc.c:511
+msgid "WARNING: encrypted message has been manipulated!\n"
+msgstr "Warnung: Verschlüsselte Botschaft ist manipuliert worden!\n"
+
+#: g10/mainproc.c:517
+#, c-format
+msgid "decryption failed: %s\n"
+msgstr "Entschlüsselung fehlgeschlagen: %s\n"
+
+#: g10/mainproc.c:536
+msgid "NOTE: sender requested \"for-your-eyes-only\"\n"
+msgstr ""
+"Hinweis: Der Absender verlangte Vertraulichkeit(\"for-your-eyes-only\")\n"
+
+#: g10/mainproc.c:538
+#, c-format
+msgid "original file name='%.*s'\n"
+msgstr "Ursprünglicher Dateiname='%.*s'\n"
+
+#: g10/mainproc.c:713
+msgid "standalone revocation - use \"gpg --import\" to apply\n"
+msgstr ""
+"Einzelner Widerruf - verwenden Sie \"gpg --import\" um ihn anzuwenden\n"
+
+#: g10/mainproc.c:781
+msgid "Notation: "
+msgstr "\"Notation\": "
+
+#: g10/mainproc.c:793
+msgid "Policy: "
+msgstr "Richtlinie: "
+
+#: g10/mainproc.c:1248
+msgid "signature verification suppressed\n"
+msgstr "Unterschriften-Überprüfung unterdrückt\n"
+
+#. plaintext before signatures but no one-pass packets
+#: g10/mainproc.c:1290 g10/mainproc.c:1300
+msgid "can't handle these multiple signatures\n"
+msgstr "diese Mehrfachunterschriften können nicht behandelt werden\n"
+
+# Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-(
+#: g10/mainproc.c:1311
+#, c-format
+msgid "Signature made %.*s using %s key ID %08lX\n"
+msgstr "Unterschrift vom %.*s, %s Schlüssel ID %08lX\n"
+
+#: g10/mainproc.c:1360 g10/mainproc.c:1393
+msgid "BAD signature from \""
+msgstr "FALSCHE Unterschrift von \""
+
+#: g10/mainproc.c:1361 g10/mainproc.c:1394
+msgid "Expired signature from \""
+msgstr "Verfallene Unterschrift von \""
+
+#: g10/mainproc.c:1362 g10/mainproc.c:1395
+msgid "Good signature from \""
+msgstr "Korrekte Unterschrift von \""
+
+#: g10/mainproc.c:1397
+msgid "[uncertain]"
+msgstr "[ungewiß] "
+
+#: g10/mainproc.c:1489
+#, c-format
+msgid "Can't check signature: %s\n"
+msgstr "Unterschrift kann nicht geprüft werden: %s\n"
+
+#: g10/mainproc.c:1558 g10/mainproc.c:1574 g10/mainproc.c:1636
+msgid "not a detached signature\n"
+msgstr "keine abgetrennte Unterschrift\n"
+
+#: g10/mainproc.c:1585
+#, c-format
+msgid "standalone signature of class 0x%02x\n"
+msgstr "Einzelne Unterschrift der Klasse 0x%02x\n"
+
+#: g10/mainproc.c:1642
+msgid "old style (PGP 2.x) signature\n"
+msgstr "Unterschrift nach alter (PGP 2.x) Art\n"
+
+#: g10/mainproc.c:1649
+msgid "invalid root packet detected in proc_tree()\n"
+msgstr "ungültiges root-Paket in proc_tree() entdeckt\n"
+
+#: g10/misc.c:98
+#, c-format
+msgid "can't disable core dumps: %s\n"
+msgstr "core-dump-Dateierzeugung kann nicht abgeschaltet werden: %s\n"
+
+#: g10/misc.c:162
+msgid "Experimental algorithms should not be used!\n"
+msgstr "Experimentiermethoden sollten nicht benutzt werden!\n"
+
+#: g10/misc.c:192
+msgid "this cipher algorithm is deprecated; please use a more standard one!\n"
+msgstr "Es ist davon abzuraten, diese Verschlüsselungsmethode zu benutzen!\n"
+
+#: g10/misc.c:300
+msgid "the IDEA cipher plugin is not present\n"
+msgstr "das IDEA-Verschlüsselungs-Plugin ist nicht vorhanden\n"
+
+#: g10/misc.c:301
+msgid ""
+"please see http://www.gnupg.org/why-not-idea.html for more information\n"
+msgstr "Für weitere Info siehe http://www.gnupg.org/why-not-idea.html\n"
+
+#: g10/misc.c:509
+#, c-format
+msgid "%s:%d: deprecated option \"%s\"\n"
+msgstr "%s:%d: mißbilligte Option \"%s\".\n"
+
+#: g10/misc.c:513
+#, c-format
+msgid "WARNING: \"%s\" is a deprecated option\n"
+msgstr "WARNUNG: \"%s\" ist eine mißbilligte Option.\n"
+
+#: g10/misc.c:515
+#, c-format
+msgid "please use \"%s%s\" instead\n"
+msgstr "Bitte benutzen Sie stattdessen \"%s%s\".\n"
+
+#: g10/parse-packet.c:120
+#, c-format
+msgid "can't handle public key algorithm %d\n"
+msgstr "dieses Public-Key Verfahren %d kann nicht benutzt werden\n"
+
+#: g10/parse-packet.c:1072
+#, c-format
+msgid "subpacket of type %d has critical bit set\n"
+msgstr "Im Unterpaket des Typs %d ist das \"critical bit\" gesetzt\n"
+
+#: g10/passphrase.c:442 g10/passphrase.c:489
+msgid "gpg-agent is not available in this session\n"
+msgstr "GPG-Agent ist in dieser Sitzung nicht vorhanden\n"
+
+#: g10/passphrase.c:450
+msgid "can't set client pid for the agent\n"
+msgstr "Client-PID für den Agent kann nicht gesetzt werden\n"
+
+#: g10/passphrase.c:458
+msgid "can't get server read FD for the agent\n"
+msgstr "Server-Lese-Handle für den Agent nicht verfügbar\n"
+
+#: g10/passphrase.c:465
+msgid "can't get server write FD for the agent\n"
+msgstr "Server-Schreib-Handle für den Agent nicht verfügbar\n"
+
+#: g10/passphrase.c:498
+msgid "malformed GPG_AGENT_INFO environment variable\n"
+msgstr "fehlerhaft aufgebaute GPG_AGENT_INFO - Umgebungsvariable\n"
+
+#: g10/passphrase.c:511
+#, c-format
+msgid "gpg-agent protocol version %d is not supported\n"
+msgstr "GPG-Agent-Protokoll-Version %d wird nicht unterstützt\n"
+
+#: g10/passphrase.c:532
+#, c-format
+msgid "can't connect to `%s': %s\n"
+msgstr "Verbindung zu '%s' kann nicht aufgebaut werden: %s\n"
+
+#: g10/passphrase.c:554
+msgid "communication problem with gpg-agent\n"
+msgstr "Kommunikationsproblem mit GPG-Agent\n"
+
+#: g10/passphrase.c:561 g10/passphrase.c:812 g10/passphrase.c:920
+msgid "problem with the agent - disabling agent use\n"
+msgstr ""
+"Schwierigkeiten mit dem Agenten - Agent-Ansteuerung wird abgeschaltet\n"
+
+#: g10/passphrase.c:631 g10/passphrase.c:1019
+#, c-format
+msgid " (main key ID %08lX)"
+msgstr " (Hauptschlüssel-ID %08lX)"
+
+#: g10/passphrase.c:641
+#, c-format
+msgid ""
+"You need a passphrase to unlock the secret key for user:\n"
+"\"%.*s\"\n"
+"%u-bit %s key, ID %08lX, created %s%s\n"
+msgstr ""
+"Sie benötigen ein Mantra, um den geheimen Schlüssel zu entsperren.\n"
+"Benutzer: \"\"%.*s\"\n"
+"%u-bit %s Schlüssel, ID %08lX, erzeugt %s%s\n"
+
+#: g10/passphrase.c:662
+msgid "Enter passphrase\n"
+msgstr "Geben Sie das Mantra ein\n"
+
+#: g10/passphrase.c:664
+msgid "Repeat passphrase\n"
+msgstr "Geben Sie das Mantra nochmal ein\n"
+
+#: g10/passphrase.c:705
+msgid "passphrase too long\n"
+msgstr "Mantra ist zu lang\n"
+
+#: g10/passphrase.c:718
+msgid "invalid response from agent\n"
+msgstr "Falsche Antwort des Agenten\n"
+
+#: g10/passphrase.c:727 g10/passphrase.c:809
+msgid "cancelled by user\n"
+msgstr "Abbruch durch Benutzer\n"
+
+#: g10/passphrase.c:729 g10/passphrase.c:891
+#, c-format
+msgid "problem with the agent: agent returns 0x%lx\n"
+msgstr "Schwierigkeiten mit dem Agenten: Agent antwortet 0x%lx\n"
+
+#: g10/passphrase.c:1005
+msgid ""
+"\n"
+"You need a passphrase to unlock the secret key for\n"
+"user: \""
+msgstr ""
+"\n"
+"Sie benötigen ein Mantra, um den geheimen Schlüssel zu entsperren.\n"
+"Benutzer: \""
+
+#: g10/passphrase.c:1014
+#, c-format
+msgid "%u-bit %s key, ID %08lX, created %s"
+msgstr "%u-Bit %s Schlüssel, ID %08lX, erzeugt %s"
+
+#: g10/passphrase.c:1065
+msgid "can't query password in batchmode\n"
+msgstr "Mantra kann im Batchmodus nicht abgefragt werden\n"
+
+#: g10/passphrase.c:1069
+msgid "Enter passphrase: "
+msgstr "Geben Sie das Mantra ein: "
+
+#: g10/passphrase.c:1073
+msgid "Repeat passphrase: "
+msgstr "Geben Sie das Mantra nochmal ein: "
+
+#: g10/plaintext.c:70
+msgid "data not saved; use option \"--output\" to save it\n"
+msgstr ""
+"Daten wurden nicht gespeichert; verwenden Sie dafür die Option \"--output\"\n"
+
+#: g10/plaintext.c:112 g10/plaintext.c:125
+#, c-format
+msgid "error creating `%s': %s\n"
+msgstr "Fehler beim Erstellen von `%s': %s\n"
+
+#: g10/plaintext.c:362
+msgid "Detached signature.\n"
+msgstr "Abgetrennte Beglaubigungen.\n"
+
+#: g10/plaintext.c:366
+msgid "Please enter name of data file: "
+msgstr "Bitte geben Sie den Namen der Datendatei ein: "
+
+#: g10/plaintext.c:387
+msgid "reading stdin ...\n"
+msgstr "lese stdin ...\n"
+
+#: g10/plaintext.c:421
+msgid "no signed data\n"
+msgstr "keine unterschriebene Daten\n"
+
+#: g10/plaintext.c:429
+#, c-format
+msgid "can't open signed data `%s'\n"
+msgstr "kann signierte Datei '%s' nicht öffnen.\n"
+
+#: g10/pubkey-enc.c:102
+#, c-format
+msgid "anonymous recipient; trying secret key %08lX ...\n"
+msgstr "Ungenannter Empfänger; Versuch mit geheimen Schlüssel %08lX ...\n"
+
+#: g10/pubkey-enc.c:118
+msgid "okay, we are the anonymous recipient.\n"
+msgstr "Alles klar, wir sind der ungenannte Empfänger.\n"
+
+#: g10/pubkey-enc.c:170
+msgid "old encoding of the DEK is not supported\n"
+msgstr "alte Kodierung des DEK wird nicht unterstützt\n"
+
+#: g10/pubkey-enc.c:189
+#, c-format
+msgid "cipher algorithm %d%s is unknown or disabled\n"
+msgstr "Verschüsselungsverfahren %d%s ist unbekannt oder abgeschaltet\n"
+
+#: g10/pubkey-enc.c:232
+#, c-format
+msgid "NOTE: cipher algorithm %d not found in preferences\n"
+msgstr "Hinweis: Verfahren %d ist kein bevorzugtes Verschlüsselungsverfahren\n"
+
+#: g10/pubkey-enc.c:254
+#, c-format
+msgid "NOTE: secret key %08lX expired at %s\n"
+msgstr "Hinweis: geheimer Schlüssel %08lX verfällt am %s\n"
+
+#: g10/pubkey-enc.c:260
+msgid "NOTE: key has been revoked"
+msgstr "Hinweis: Schlüssel wurde widerrufen"
+
+#: g10/seckey-cert.c:53
+msgid "secret key parts are not available\n"
+msgstr "Teile des geheimen Schlüssels sind nicht vorhanden\n"
+
+#: g10/seckey-cert.c:59
+#, c-format
+msgid "protection algorithm %d%s is not supported\n"
+msgstr "Schutzverfahren %d%s wird nicht unterstützt\n"
+
+#: g10/seckey-cert.c:234
+msgid "Invalid passphrase; please try again"
+msgstr "Ungültiges Mantra; versuchen Sie es bitte noch einmal"
+
+#: g10/seckey-cert.c:235
+#, c-format
+msgid "%s ...\n"
+msgstr "%s ...\n"
+
+#: g10/seckey-cert.c:292
+msgid "WARNING: Weak key detected - please change passphrase again.\n"
+msgstr ""
+"WARNUNG: Unsicherer Schlüssel entdeckt -\n"
+" bitte Mantra nochmals wechseln.\n"
+
+#: g10/seckey-cert.c:330
+msgid "generating the deprecated 16-bit checksum for secret key protection\n"
+msgstr ""
+"Die mißbilligte 16-bit Prüfsumme wird zum Schutz des geheimen Schlüssels "
+"benutzt\n"
+
+#: g10/sig-check.c:73
+msgid "WARNING: signature digest conflict in message\n"
+msgstr "WARNUNG: Widersprechende Hashverfahren in der signierten Nachricht\n"
+
+#: g10/sig-check.c:213
+#, c-format
+msgid ""
+"key %08lX: this is a PGP generated ElGamal key which is NOT secure for "
+"signatures!\n"
+msgstr ""
+"Schlüssel %08lX: Dieser durch PGP erzeugte ElGamal-Schlüssel ist für "
+"Signaturen NICHT sicher genug!\n"
+
+#: g10/sig-check.c:222
+#, c-format
+msgid "public key %08lX is %lu second newer than the signature\n"
+msgstr ""
+"Öffentlicher Schlüssel %08lX ist um %lu Sekunde jünger als die Unterschrift\n"
+
+#: g10/sig-check.c:223
+#, c-format
+msgid "public key %08lX is %lu seconds newer than the signature\n"
+msgstr ""
+"Öffentlicher Schlüssel %08lX ist um %lu Sekunden jünger als die "
+"Unterschrift\n"
+
+#: g10/sig-check.c:232
+#, c-format
+msgid ""
+"key %08lX has been created %lu second in future (time warp or clock "
+"problem)\n"
+msgstr ""
+"Der Schlüssel %08lX wurde %lu Sekunde in der Zukunft erzeugt (Zeitreise oder "
+"Uhren stimmen nicht überein)\n"
+
+#: g10/sig-check.c:234
+#, c-format
+msgid ""
+"key %08lX has been created %lu seconds in future (time warp or clock "
+"problem)\n"
+msgstr ""
+"Der Schlüssel %08lX wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise "
+"oder Uhren stimmen nicht überein)\n"
+
+#: g10/sig-check.c:247
+#, c-format
+msgid "NOTE: signature key %08lX expired %s\n"
+msgstr "Hinweis: Signaturschlüssel %08lX ist am %s verfallen.\n"
+
+#: g10/sig-check.c:346
+#, c-format
+msgid "assuming bad signature from key %08lX due to an unknown critical bit\n"
+msgstr ""
+"Vermutlich eine FALSCHE Unterschrift von Schlüssel %08lX, wegen unbekanntem "
+"\"critical bit\"\n"
+
+#: g10/sign.c:103
+#, c-format
+msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n"
+msgstr ""
+"WARNUNG: \"Notation\" kann nicht %%-erweitert werden (zu groß). Verwende "
+"\"unerweiterte\".\n"
+
+#: g10/sign.c:151
+#, c-format
+msgid ""
+"WARNING: unable to %%-expand policy url (too large). Using unexpanded.\n"
+msgstr ""
+"WARNUNG: Richtlinien-URL kann nicht %%-erweitert werden (zu gro0). Verwende "
+"\"unerweiterte\".\n"
+
+#: g10/sign.c:303
+#, c-format
+msgid "checking created signature failed: %s\n"
+msgstr "Prüfung der erstellten Unterschrift ist fehlgeschlagen: %s\n"
+
+#: g10/sign.c:312
+#, c-format
+msgid "%s signature from: \"%s\"\n"
+msgstr "%s Unterschrift von: \"%s\"\n"
+
+#: g10/sign.c:462
+#, c-format
+msgid "WARNING: `%s' is an empty file\n"
+msgstr "WARNUNG: '%s' ist eine leere Datei.\n"
+
+#: g10/sign.c:645
+msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n"
+msgstr ""
+"Im --pgp2-Modus kann nur mit PGP-2.x-artigen Schlüsseln eine abgetrennte "
+"Unterschrift erzeugt werden\n"
+
+#: g10/sign.c:666 g10/sign.c:893
+#, c-format
+msgid "can't create %s: %s\n"
+msgstr "%s kann nicht erzeugt werden: %s\n"
+
+#: g10/sign.c:691
+#, c-format
+msgid "forcing digest algorithm %s (%d) violates recipient preferences\n"
+msgstr ""
+"Erzwingen des Hashverfahrens %s (%d) verletzt die Empfängervoreinstellungen\n"
+
+#: g10/sign.c:785
+msgid "signing:"
+msgstr "unterschreibe:"
+
+#: g10/sign.c:877
+msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n"
+msgstr ""
+"Im --pgp2-Modus können Sie Klartextunterschriften nur mit PGP-2.x-artigen "
+"Schlüssel machen\n"
+
+#: g10/sign.c:1030
+#, c-format
+msgid "%s encryption will be used\n"
+msgstr "%s Verschlüsselung wird verwendet\n"
+
+#: g10/textfilter.c:134
+#, c-format
+msgid "can't handle text lines longer than %d characters\n"
+msgstr "Textzeilen länger als %d Zeichen können nicht benutzt werden\n"
+
+#: g10/textfilter.c:231
+#, c-format
+msgid "input line longer than %d characters\n"
+msgstr "Eingabezeile ist länger als %d Zeichen\n"
+
+#: g10/tdbio.c:128 g10/tdbio.c:1389
+#, c-format
+msgid "trustdb rec %lu: lseek failed: %s\n"
+msgstr "trustdb Satz %lu: lseek fehlgeschlagen: %s\n"
+
+#: g10/tdbio.c:134 g10/tdbio.c:1396
+#, c-format
+msgid "trustdb rec %lu: write failed (n=%d): %s\n"
+msgstr "trustdb Satz %lu: write fehlgeschlagen (n=%d): %s\n"
+
+#: g10/tdbio.c:244
+msgid "trustdb transaction too large\n"
+msgstr "trustdb Transaktion zu groß\n"
+
+#: g10/tdbio.c:459
+#, c-format
+msgid "%s: can't access: %s\n"
+msgstr "%s: kann nicht zugegriffen werden: %s\n"
+
+#: g10/tdbio.c:474
+#, c-format
+msgid "%s: directory does not exist!\n"
+msgstr "%s: Verzeichnis existiert nicht!\n"
+
+#: g10/tdbio.c:484 g10/tdbio.c:502 g10/tdbio.c:545
+#, c-format
+msgid "%s: can't create lock\n"
+msgstr "%s: Sperre kann nicht erzeugt werden\n"
+
+#: g10/tdbio.c:486 g10/tdbio.c:548
+#, c-format
+msgid "%s: can't make lock\n"
+msgstr "%s: Sperre kann nicht erzeugt werden\n"
+
+#: g10/keyring.c:1453 g10/openfile.c:240 g10/openfile.c:310 g10/tdbio.c:492
+#, c-format
+msgid "%s: can't create: %s\n"
+msgstr "%s: kann nicht erzeugt werden: %s\n"
+
+#: g10/tdbio.c:507
+#, c-format
+msgid "%s: failed to create version record: %s"
+msgstr "%s: Fehler beim Erzeugen des Versionsatzes: %s"
+
+#: g10/tdbio.c:511
+#, c-format
+msgid "%s: invalid trustdb created\n"
+msgstr "%s: ungültige trust-db erzeugt\n"
+
+#: g10/tdbio.c:514
+#, c-format
+msgid "%s: trustdb created\n"
+msgstr "%s: trust-db erzeugt\n"
+
+#: g10/tdbio.c:554
+msgid "NOTE: trustdb not writable\n"
+msgstr "Notiz: Die \"trustdb\" ist nicht schreibbar\n"
+
+#: g10/tdbio.c:570
+#, c-format
+msgid "%s: invalid trustdb\n"
+msgstr "%s: ungültige 'Trust'-Datenbank\n"
+
+#: g10/tdbio.c:602
+#, c-format
+msgid "%s: failed to create hashtable: %s\n"
+msgstr "%s: hashtable kann nicht erzeugt werden: %s\n"
+
+#: g10/tdbio.c:610
+#, c-format
+msgid "%s: error updating version record: %s\n"
+msgstr "%s: Fehler beim Ändern des Versionsatzes: %s\n"
+
+#: g10/tdbio.c:626 g10/tdbio.c:662 g10/tdbio.c:676 g10/tdbio.c:706
+#: g10/tdbio.c:1322 g10/tdbio.c:1349
+#, c-format
+msgid "%s: error reading version record: %s\n"
+msgstr "%s: Fehler beim Lesen des Versionsatzes: %s\n"
+
+#: g10/tdbio.c:639 g10/tdbio.c:685
+#, c-format
+msgid "%s: error writing version record: %s\n"
+msgstr "%s: Fehler beim Schreiben des Versionsatzes: %s\n"
+
+#: g10/tdbio.c:1124
+#, c-format
+msgid "trustdb: lseek failed: %s\n"
+msgstr "trustdb: lseek fehlgeschlagen: %s\n"
+
+#: g10/tdbio.c:1132
+#, c-format
+msgid "trustdb: read failed (n=%d): %s\n"
+msgstr "trustdb: read failed (n=%d): %s\n"
+
+#: g10/tdbio.c:1153
+#, c-format
+msgid "%s: not a trustdb file\n"
+msgstr "%s: keine trustdb Datei\n"
+
+#: g10/tdbio.c:1170
+#, c-format
+msgid "%s: version record with recnum %lu\n"
+msgstr "%s: version record with recnum %lu\n"
+
+#: g10/tdbio.c:1175
+#, c-format
+msgid "%s: invalid file version %d\n"
+msgstr "%s: invalid file version %d\n"
+
+#: g10/tdbio.c:1355
+#, c-format
+msgid "%s: error reading free record: %s\n"
+msgstr "%s: Fehler beim Lesen eines freien Satzes: %s\n"
+
+#: g10/tdbio.c:1363
+#, c-format
+msgid "%s: error writing dir record: %s\n"
+msgstr "%s: Fehler beim Schreiben eines Verzeichnis-Satzes: %s\n"
+
+#: g10/tdbio.c:1373
+#, c-format
+msgid "%s: failed to zero a record: %s\n"
+msgstr "%s: konnte einen Satz nicht Nullen: %s\n"
+
+#: g10/tdbio.c:1403
+#, c-format
+msgid "%s: failed to append a record: %s\n"
+msgstr "%s: konnte Satz nicht anhängen: %s\n"
+
+#: g10/tdbio.c:1448
+msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n"
+msgstr ""
+"Die \"Trust\"-Datenbank ist beschädigt; verwenden Sie \"gpg --fix-trustdb"
+"\".\n"
+
+#: g10/trustdb.c:213
+#, c-format
+msgid "`%s' is not a valid long keyID\n"
+msgstr "'%s' ist keine gültige lange Schlüssel-ID\n"
+
+#: g10/trustdb.c:248
+#, c-format
+msgid "key %08lX: accepted as trusted key\n"
+msgstr "Schlüssel %08lX: Akzeptiert als vertrauenswürdiger Schlüssel\n"
+
+#: g10/trustdb.c:286
+#, c-format
+msgid "key %08lX occurs more than once in the trustdb\n"
+msgstr "Schlüssel %08lX tritt mehr als einmal in der \"trustdb\" auf\n"
+
+#: g10/trustdb.c:302
+#, c-format
+msgid "key %08lX: no public key for trusted key - skipped\n"
+msgstr ""
+"Schlüssel %08lX: kein öffentlicher Schlüssel für den vertrauenswürdigen "
+"Schlüssel - übersprungen\n"
+
+#: g10/trustdb.c:311
+#, fuzzy, c-format
+msgid "key %08lX marked as ultimately trusted\n"
+msgstr "Schlüssel ist als uneingeschränkt vertrauenswürdig gekennzeichnet.\n"
+
+#: g10/trustdb.c:337
+#, c-format
+msgid "trust record %lu, req type %d: read failed: %s\n"
+msgstr "trust record %lu, req type %d: read failed: %s\n"
+
+#: g10/trustdb.c:343
+#, c-format
+msgid "trust record %lu is not of requested type %d\n"
+msgstr "Vertrauenssatz %lu ist nicht von der angeforderten Art %d\n"
+
+#: g10/trustdb.c:358
+#, c-format
+msgid "trust record %lu, type %d: write failed: %s\n"
+msgstr "trust record %lu, type %d: write failed: %s\n"
+
+#: g10/trustdb.c:373
+#, c-format
+msgid "trustdb: sync failed: %s\n"
+msgstr "\"Trust-DB\": sync fehlgeschlagen: %s\n"
+
+#: g10/trustdb.c:463
+#, fuzzy
+msgid "unknown trust"
+msgstr "Unbekannte Version"
+
+#: g10/trustdb.c:464
+#, fuzzy
+msgid "expired"
+msgstr "expire"
+
+#: g10/trustdb.c:465
+msgid "undefined trust"
+msgstr ""
+
+#: g10/trustdb.c:466
+#, fuzzy
+msgid "do NOT trust"
+msgstr " %d = Nein, ihm traue ich NICHT\n"
+
+#: g10/trustdb.c:467
+msgid "marginal trust"
+msgstr ""
+
+#: g10/trustdb.c:468
+#, fuzzy
+msgid "full trust"
+msgstr "trust"
+
+#: g10/trustdb.c:469
+#, fuzzy
+msgid "ultimate trust"
+msgstr "|KEYID|diesem Schlüssel uneingeschränkt vertrauen"
+
+#: g10/trustdb.c:504
+msgid "no need for a trustdb check\n"
+msgstr "\"Trust-DB\"-Überprüfung nicht nötig\n"
+
+#: g10/trustdb.c:510 g10/trustdb.c:1912
+#, c-format
+msgid "next trustdb check due at %s\n"
+msgstr "nächste \"Trust-DB\"-Pflichtüberprüfung am %s\n"
+
+#: g10/trustdb.c:519
+#, fuzzy, c-format
+msgid "no need for a trustdb check with \"%s\" trust model\n"
+msgstr "\"Trust-DB\"-Überprüfung nicht nötig\n"
+
+#: g10/trustdb.c:536
+#, fuzzy, c-format
+msgid "no need for a trustdb update with \"%s\" trust model\n"
+msgstr "\"Trust-DB\"-Überprüfung nicht nötig\n"
+
+#: g10/trustdb.c:708 g10/trustdb.c:1073
+#, c-format
+msgid "public key %08lX not found: %s\n"
+msgstr "Öffentlicher Schlüssel %08lX nicht gefunden: %s\n"
+
+#: g10/trustdb.c:919
+msgid "checking the trustdb\n"
+msgstr "\"Trust-DB\" wird überprüft\n"
+
+#: g10/trustdb.c:1748
+#, c-format
+msgid "public key of ultimately trusted key %08lX not found\n"
+msgstr ""
+"öff.Schlüssel des uneingeschränkt vertrautem Schlüssel %08lX nicht gefunden\n"
+
+#: g10/trustdb.c:1854
+#, c-format
+msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
+msgstr ""
+"überprüfen, Tiefe %d, unterschrieben =%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n"
+
+#: g10/verify.c:108
+msgid ""
+"the signature could not be verified.\n"
+"Please remember that the signature file (.sig or .asc)\n"
+"should be the first file given on the command line.\n"
+msgstr ""
+"Die Unterschrift konnte nicht überprüft werden.\n"
+"Denken Sie daran, daß die Datei mit der Unterschrift (.sig oder .asc)\n"
+"als erster in der Kommandozeile stehen sollte.\n"
+
+#: g10/verify.c:173
+#, c-format
+msgid "input line %u too long or missing LF\n"
+msgstr "Eingabezeile %u ist zu lang oder es fehlt ein LF\n"
+
+#: g10/skclist.c:129 g10/skclist.c:185
+msgid "key is not flagged as insecure - can't use it with the faked RNG!\n"
+msgstr ""
+"Schlüssel ist nicht als unsicher gekennzeichnet - er ist nur mit einem\n"
+"echten Zufallsgenerator verwendbar\n"
+
+#: g10/skclist.c:157
+#, c-format
+msgid "skipped `%s': duplicated\n"
+msgstr "übersprungen '%s': doppelt\n"
+
+#: g10/skclist.c:164 g10/skclist.c:172
+#, c-format
+msgid "skipped `%s': %s\n"
+msgstr "übersprungen '%s': %s\n"
+
+#: g10/skclist.c:168
+msgid "skipped: secret key already present\n"
+msgstr "übersprungen: geheimer Schlüssel bereits vorhanden\n"
+
+#: g10/skclist.c:179
+#, c-format
+msgid ""
+"skipped `%s': this is a PGP generated ElGamal key which is not secure for "
+"signatures!\n"
+msgstr ""
+"'%s übersprungen: Dies ist ein durch PGP erzeugter ElGamal-Schlüssel. Das "
+"ist für Signaturen NICHT sicher genug!\n"
+
+#. do not overwrite
+#: g10/openfile.c:84
+#, c-format
+msgid "File `%s' exists. "
+msgstr "Datei '%s' existiert bereits. "
+
+#: g10/openfile.c:86
+msgid "Overwrite (y/N)? "
+msgstr "Überschreiben (j/N)? "
+
+#: g10/openfile.c:119
+#, c-format
+msgid "%s: unknown suffix\n"
+msgstr "%s: unbekannte Dateinamenerweiterung\n"
+
+#: g10/openfile.c:141
+msgid "Enter new filename"
+msgstr "Neuen Dateinamen eingeben"
+
+#: g10/openfile.c:184
+msgid "writing to stdout\n"
+msgstr "Schreiben auf die Standardausgabe\n"
+
+#: g10/openfile.c:273
+#, c-format
+msgid "assuming signed data in `%s'\n"
+msgstr "die unterzeichneten Daten sind wohl in '%s'\n"
+
+#: g10/openfile.c:326
+#, c-format
+msgid "new configuration file `%s' created\n"
+msgstr "Neue Konfigurationsdatei `%s' erstellt\n"
+
+#: g10/openfile.c:353
+#, c-format
+msgid "%s: can't create directory: %s\n"
+msgstr "%s: Verzeichnis kann nicht erzeugt werden: %s\n"
+
+#: g10/openfile.c:356
+#, c-format
+msgid "%s: directory created\n"
+msgstr "%s: Verzeichnis erzeugt\n"
+
+#: g10/encr-data.c:91
+msgid ""
+"WARNING: message was encrypted with a weak key in the symmetric cipher.\n"
+msgstr ""
+"Warnung: Botschaft wurde mit einem unsicheren Schlüssel verschlüsselt.\n"
+
+#: g10/encr-data.c:98
+msgid "problem handling encrypted packet\n"
+msgstr "Problem beim Bearbeiten des verschlüsselten Pakets\n"
+
+#: g10/seskey.c:52
+msgid "weak key created - retrying\n"
+msgstr "Unsicherer Schlüssel erzeugt - neuer Versuch\n"
+
+#: g10/seskey.c:57
+#, c-format
+msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n"
+msgstr ""
+"Trotz %d-fachen Versuch konnte die Erzeugung eines unsicheren Schlüssels für "
+"sym.Verschlüsselung nicht vermieden werden!\n"
+
+#: g10/seskey.c:200
+msgid "DSA requires the use of a 160 bit hash algorithm\n"
+msgstr "DSA benötigt einen 160-bit Hash Algorithmus\n"
+
+#: g10/delkey.c:120 g10/delkey.c:127
+msgid "(unless you specify the key by fingerprint)\n"
+msgstr "(es sei denn, Sie geben den Schlüssel mittels Fingerprint an)\n"
+
+#: g10/delkey.c:126
+msgid "can't do that in batchmode without \"--yes\"\n"
+msgstr "Dies kann im Batchmodus ohne \"--yes\" nicht durchgeführt werden.\n"
+
+#: g10/delkey.c:138
+msgid "Delete this key from the keyring? "
+msgstr "Diesen Schlüssel aus dem Schlüsselbund löschen? "
+
+#: g10/delkey.c:146
+msgid "This is a secret key! - really delete? "
+msgstr "Dies ist ein privater Schlüssel! - Wirklich löschen? "
+
+#: g10/delkey.c:156
+#, c-format
+msgid "deleting keyblock failed: %s\n"
+msgstr "löschen des Schlüsselblocks fehlgeschlagen: %s\n"
+
+#: g10/delkey.c:166
+msgid "ownertrust information cleared\n"
+msgstr "Der \"Ownertrust\" wurde gelöscht\n"
+
+#: g10/delkey.c:194
+#, c-format
+msgid "there is a secret key for public key \"%s\"!\n"
+msgstr ""
+"Es gibt einen privaten Schlüssel zu diesem öffentlichen Schlüssel \"%s\"!\n"
+
+#: g10/delkey.c:196
+msgid "use option \"--delete-secret-keys\" to delete it first.\n"
+msgstr ""
+"Verwenden Sie zunächst das Kommando \"--delete-secret-key\", um ihn zu "
+"entfernen.\n"
+
+#: g10/helptext.c:47
+msgid ""
+"It's up to you to assign a value here; this value will never be exported\n"
+"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."
+msgstr ""
+"Sie müssen selbst 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\n"
+"(implizit erzeugten) \"Netz der Zertifikate\" zu tun."
+
+#: g10/helptext.c:53
+msgid ""
+"To build the Web-of-Trust, GnuPG needs to know which keys are\n"
+"ultimately trusted - those are usually the keys for which you have\n"
+"access to the secret key. Answer \"yes\" to set this key to\n"
+"ultimately trusted\n"
+msgstr ""
+"Um das Web-of-Trust aufzubauen muß GnuPG wissen, welchen Schlüsseln\n"
+"uneingeschränkt vertraut wird. Das sind üblicherweise die Schlüssel\n"
+"auf deren geheimen Schlüssel Sie Zugruff haben.\n"
+"Antworten Sie mit \"yes\" um diesen Schlüssel uneingeschränkt zu vertrauen\n"
+
+#: g10/helptext.c:60
+msgid "If you want to use this revoked key anyway, answer \"yes\"."
+msgstr ""
+"Wenn Sie diesen widerrufenen Schlüssel trotzdem benutzen wollen,\n"
+"so antworten Sie mit \"ja\"."
+
+#: g10/helptext.c:64
+msgid "If you want to use this untrusted key anyway, answer \"yes\"."
+msgstr ""
+"Wenn Sie diesen nicht vertrauenswürdigen Schlüssel trotzdem benutzen "
+"wollen,\n"
+"so antworten Sie mit \"ja\"."
+
+#: g10/helptext.c:68
+msgid ""
+"Enter the user ID of the addressee to whom you want to send the message."
+msgstr "Geben Sie die User-ID dessen ein, dem Sie die Botschaft senden wollen."
+
+#: g10/helptext.c:72
+msgid ""
+"Select the algorithm to use.\n"
+"\n"
+"DSA (aka DSS) is the digital signature algorithm which can only be used\n"
+"for signatures. This is the suggested algorithm because verification of\n"
+"DSA signatures are much faster than those of ElGamal.\n"
+"\n"
+"ElGamal is an algorithm which can be used for signatures and encryption.\n"
+"OpenPGP distinguishs between two flavors of this algorithms: an encrypt "
+"only\n"
+"and a sign+encrypt; actually it is the same, but some parameters must be\n"
+"selected in a special way to create a safe key for signatures: this program\n"
+"does this but other OpenPGP implementations are not required to understand\n"
+"the signature+encryption flavor.\n"
+"\n"
+"The first (primary) key must always be a key which is capable of signing;\n"
+"this is the reason why the encryption only ElGamal key is not available in\n"
+"this menu."
+msgstr ""
+"Wählen Sie die zu verwendende Methode aus.\n"
+"\n"
+"DSA (alias DSS) bedeutet \"digital signature algorithm\" (Digitales\n"
+" Unterschrift-Verfahren). Es kann nur zum Unterschreiben und Beglaubigen\n"
+" benutzt werden. Dies ist das empfohlene Verfahren, da dessen Überprüfung\n"
+" wesentlich schneller abläuft, als die von \"ElGamal\".\n"
+"\n"
+"ElGamal ist ein Verfahren für Unterschrift, Beglaubigung und "
+"Verschlüsselung\n"
+" OpenPGP unterscheidet zwischen zwei Arten von ElGamal: eines nur zum\n"
+" Unterschreiben/Beglaubigen und eines zusätzlich zum Verschlüsseln.\n"
+" Eigentlich sind diese Arten identisch; allerdings müssen einige Parameter\n"
+" auf eine besondere Art gewählt werden, um einen sicheren Schlüssel für\n"
+" Unterschriften zu erzeugen. Dieses Programm macht dies zwar so, aber "
+"andere\n"
+" Programme sind laut der OpenPGP-Spezifikation nicht verpflichtet, die\n"
+" zweite Art (die mit zusätzlichem Verschlüsseln) zu verstehen.\n"
+"\n"
+"Der Hauptschlüssel (\"primary Key\") muß auf jeden Fall zum Unterschreiben "
+"fähig\n"
+"sein. Deshalb kann ein nur-Verschlüssel-ElGamal-Schlüssel dafür nicht\n"
+"verwendet werden."
+
+#: g10/helptext.c:92
+msgid ""
+"Although these keys are defined in RFC2440 they are not suggested\n"
+"because they are not supported by all programs and signatures created\n"
+"with them are quite large and very slow to verify."
+msgstr ""
+"Obwohl diese Schlüssel in RFC 2440 definiert sind, ist ihre Verwendung "
+"nicht\n"
+"empfohlen. Sie werden nämlich nicht von allen Programmen unterstützt.\n"
+"Außerdem sind damit ezeugte Unterschriften recht groß und ihre Überprüfung\n"
+"ist langsam."
+
+#: g10/helptext.c:98
+msgid ""
+"In general it is not a good idea to use the same key for signing and\n"
+"encryption. This algorithm should only be used in certain domains.\n"
+"Please consult your security expert first."
+msgstr ""
+"Normalerweise ist es nicht gut, denselben Schlüssel zum unterschreiben\n"
+"und verschlüsseln zu nutzen. Dieses Verfahren sollte in speziellen\n"
+"Anwendungsgebiten benutzt werden. Bitte lassen Sie sich zuerst von \n"
+"einem Sicherheistexperten beraten."
+
+#: g10/helptext.c:105
+msgid "Enter the size of the key"
+msgstr "Wählen Sie die gewünschte Schlüssellänge"
+
+#: g10/helptext.c:109 g10/helptext.c:114 g10/helptext.c:126 g10/helptext.c:158
+#: g10/helptext.c:186 g10/helptext.c:191 g10/helptext.c:196
+msgid "Answer \"yes\" or \"no\""
+msgstr "Geben Sie \"ja\" oder \"nein\" ein"
+
+#: g10/helptext.c:119
+msgid ""
+"Enter the required value as shown in the prompt.\n"
+"It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n"
+"get a good error response - instead the system tries to interpret\n"
+"the given value as an interval."
+msgstr ""
+"Geben Sie den benötigten Wert so an, wie er im Prompt erscheint.\n"
+"Es ist zwar möglich ein \"ISO\"-Datum (JJJJ-MM-DD) einzugeben, aber man\n"
+"erhält dann ggfs. keine brauchbaren Fehlermeldungen - stattdessen versucht\n"
+"der Rechner den Wert als Intervall (von-bis) zu deuten."
+
+#: g10/helptext.c:131
+msgid "Enter the name of the key holder"
+msgstr "Geben Sie den Namen des Schlüsselinhabers ein"
+
+#: g10/helptext.c:136
+msgid "please enter an optional but highly suggested email address"
+msgstr ""
+"Geben Sie eine E-Mail-Adresse ein. Dies ist zwar nicht unbedingt notwendig,\n"
+"aber sehr empfehlenswert."
+
+#: g10/helptext.c:140
+msgid "Please enter an optional comment"
+msgstr "Geben Sie - bei Bedarf - einen Kommentar ein"
+
+#: g10/helptext.c:145
+msgid ""
+"N to change the name.\n"
+"C to change the comment.\n"
+"E to change the email address.\n"
+"O to continue with key generation.\n"
+"Q to to quit the key generation."
+msgstr ""
+"N um den Namen zu ändern.\n"
+"K um den Kommentar zu ändern.\n"
+"E um die E-Mail-Adresse zu ändern.\n"
+"F um mit der Schlüsselerzeugung fortzusetzen.\n"
+"B um die Schlüsselerzeugung abbrechen."
+
+#: g10/helptext.c:154
+msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key."
+msgstr ""
+"Geben Sie \"ja\" (oder nur \"j\") ein, um den Unterschlüssel zu erzeugen."
+
+#: g10/helptext.c:162
+msgid ""
+"When you sign a user ID on a key, you should first verify that the key\n"
+"belongs to the person named in the user ID. It is useful for others to\n"
+"know how carefully you verified this.\n"
+"\n"
+"\"0\" means you make no particular claim as to how carefully you verified "
+"the\n"
+" key.\n"
+"\n"
+"\"1\" means you believe the key is owned by the person who claims to own it\n"
+" but you could not, or did not verify the key at all. This is useful "
+"for\n"
+" a \"persona\" verification, where you sign the key of a pseudonymous "
+"user.\n"
+"\n"
+"\"2\" means you did casual verification of the key. For example, this "
+"could\n"
+" mean that you verified the key fingerprint and checked the user ID on "
+"the\n"
+" key against a photo ID.\n"
+"\n"
+"\"3\" means you did extensive verification of the key. For example, this "
+"could\n"
+" mean that you verified the key fingerprint with the owner of the key in\n"
+" person, and that you checked, by means of a hard to forge document with "
+"a\n"
+" photo ID (such as a passport) that the name of the key owner matches "
+"the\n"
+" name in the user ID on the key, and finally that you verified (by "
+"exchange\n"
+" of email) that the email address on the key belongs to the key owner.\n"
+"\n"
+"Note that the examples given above for levels 2 and 3 are *only* examples.\n"
+"In the end, it is up to you to decide just what \"casual\" and \"extensive"
+"\"\n"
+"mean to you when you sign other keys.\n"
+"\n"
+"If you don't know what the right answer is, answer \"0\"."
+msgstr ""
+"Wenn Sie die User-ID eines Schlüssels beglaubigen wollen, sollten Sie "
+"zunächst\n"
+"sicherstellen, daß der Schlüssel demjenigen gehört, der in der User-ID "
+"genannt\n"
+"ist. Für Dritte ist es hilfreich zu wissen, wie gut diese Zuordnung "
+"überprüft\n"
+"wurde.\n"
+"\n"
+"\"0\" zeigt, daß Sie keine bestimmte Aussage über die Sorgfalt der \n"
+" Schlüsselzuordnung machen.\n"
+"\n"
+"\"1\" Sie glauben, daß der Schlüssel der benannten Person gehört,\n"
+" aber Sie konnten oder nahmen die Überpüfung überhaupt nicht vor.\n"
+" Dies ist hilfreich für eine \"persona\"-Überprüfung, wobei man den\n"
+" Schlüssel eines Pseudonym-Trägers beglaubigt\n"
+"\n"
+"\"2\" Sie nahmen eine flüchtige Überprüfung vor. Das heisst Sie haben z.B.\n"
+" den Schlüsselfingerabdruck kontrolliert und die User-ID des Schlüssels\n"
+" anhand des Fotos geprüft.\n"
+"\n"
+"\"3\" Sie haben eine ausführlich Kontrolle des Schlüssels vorgenommen.\n"
+" Das kann z.B. die Kontrolle des Schlüsselfingerabdrucks mit dem\n"
+" Schlüsselinhaber persönlich vorgenommen haben; daß Sie die User-ID des\n"
+" Schlüssel anhand einer schwer zu fälschenden Urkunde mit Foto (wie z.B.\n"
+" einem Paß) abgeglichen haben und schliesslich per E-Mail-Verkehr die\n"
+" E-Mail-Adresse als zum Schlüsselbesitzer gehörig erkannt haben.\n"
+"\n"
+"Beachten Sie, daß diese Beispiele für die Antworten 2 und 3 *nur* Beispiele "
+"sind.\n"
+"Schlußendlich ist es Ihre Sache, was Sie unter \"flüchtig\" oder "
+"\"ausführlich\"\n"
+"verstehen, wenn Sie Schlüssel Dritter beglaubigen.\n"
+"\n"
+"Wenn Sie nicht wissen, wie Sie antworten sollen, wählen Sie \"0\"."
+
+#: g10/helptext.c:200
+msgid "Answer \"yes\" is you want to sign ALL the user IDs"
+msgstr "Geben Sie \"ja\" (oder nur \"j\") ein, um alle User-IDs zu beglaubigen"
+
+#: g10/helptext.c:204
+msgid ""
+"Answer \"yes\" if you really want to delete this user ID.\n"
+"All certificates are then also lost!"
+msgstr ""
+"Geben Sie \"ja\" (oder nur \"j\") ein, um diese User-ID zu LÖSCHEN.\n"
+"Alle Zertifikate werden dann auch weg sein!"
+
+#: g10/helptext.c:209
+msgid "Answer \"yes\" if it is okay to delete the subkey"
+msgstr ""
+"Geben Sie \"ja\" (oder nur \"j\") ein, um diesen Unterschlüssel zu löschen"
+
+#: g10/helptext.c:214
+msgid ""
+"This is a valid signature on the key; you normally don't want\n"
+"to delete this signature because it may be important to establish a\n"
+"trust connection to the key or another key certified by this key."
+msgstr ""
+"Dies ist eine gültige Beglaubigung für den Schlüssel. Es ist normalerweise\n"
+"unnötig sie zu löschen. Sie ist möglicherweise sogar notwendig, um einen\n"
+"Trust-Weg zu diesem oder einem durch diesen Schlüssel beglaubigten "
+"Schlüssel\n"
+"herzustellen."
+
+#: g10/helptext.c:219
+msgid ""
+"This signature can't be checked because you don't have the\n"
+"corresponding key. You should postpone its deletion until you\n"
+"know which key was used because this signing key might establish\n"
+"a trust connection through another already certified key."
+msgstr ""
+"Diese Beglaubigung kann nicht geprüft werden, da Sie den passenden "
+"Schlüssel\n"
+"nicht besitzen. Sie sollten die Löschung der Beglaubigung verschieben, bis\n"
+"sie wissen, welcher Schlüssel verwendet wurde. Denn vielleicht würde genau\n"
+"diese Beglaubigung den \"Trust\"-Weg kompletieren."
+
+#: g10/helptext.c:225
+msgid ""
+"The signature is not valid. It does make sense to remove it from\n"
+"your keyring."
+msgstr ""
+"Diese Beglaubigung ist ungültig. Es ist sinnvoll sie aus Ihrem\n"
+"Schlüsselbund zu entfernen."
+
+#: g10/helptext.c:229
+msgid ""
+"This is a signature which binds the user ID to the key. It is\n"
+"usually not a good idea to remove such a signature. Actually\n"
+"GnuPG might not be able to use this key anymore. So do this\n"
+"only if this self-signature is for some reason not valid and\n"
+"a second one is available."
+msgstr ""
+"Diese Beglaubigung bindet die User-ID an den Schlüssel. Normalerweise ist\n"
+"es nicht gut, solche Beglaubigungen zu entfernen. Um ehrlich zu sein:\n"
+"Es könnte dann sein, daß GnuPG diesen Schlüssel gar nicht mehr benutzen "
+"kann.\n"
+"Sie sollten diese Eigenbeglaubigung also nur dann entfernen, wenn sie aus\n"
+"irgendeinem Grund nicht gültig ist und eine zweite Beglaubigung verfügbar "
+"ist."
+
+#: g10/helptext.c:237
+msgid ""
+"Change the preferences of all user IDs (or just of the selected ones)\n"
+"to the current list of preferences. The timestamp of all affected\n"
+"self-signatures will be advanced by one second.\n"
+msgstr ""
+"Ändern der Voreinstellung aller User-IDs (oder nur der ausgewählten)\n"
+"auf die aktuelle Liste der Voreinstellung. Die Zeitangaben aller "
+"betroffenen\n"
+"Eigenbeglaubigungen werden um eine Sekunde vorgestellt.\n"
+
+#: g10/helptext.c:244
+msgid "Please enter the passhrase; this is a secret sentence \n"
+msgstr "Bitte geben Sie das Mantra ein. Dies ist ein geheimer Satz \n"
+
+#: g10/helptext.c:250
+msgid "Please repeat the last passphrase, so you are sure what you typed in."
+msgstr ""
+"Um sicher zu gehen, daß Sie sich bei der Eingabe des Mantras nicht\n"
+"vertippt haben, geben Sie diese bitte nochmal ein. Nur wenn beide Eingaben\n"
+"übereinstimmen, wird das Mantra akzeptiert."
+
+#: g10/helptext.c:254
+msgid "Give the name of the file to which the signature applies"
+msgstr ""
+"Geben Sie den Namen der Datei an, zu dem die abgetrennte Unterschrift gehört"
+
+#: g10/helptext.c:259
+msgid "Answer \"yes\" if it is okay to overwrite the file"
+msgstr "Geben Sie \"ja\" ein, wenn Sie die Datei überschreiben möchten"
+
+#: g10/helptext.c:264
+msgid ""
+"Please enter a new filename. If you just hit RETURN the default\n"
+"file (which is shown in brackets) will be used."
+msgstr ""
+"Geben Sie bitte einen neuen Dateinamen ein. Falls Sie nur die\n"
+"Eingabetaste betätigen, wird der (in Klammern angezeigte) Standarddateiname\n"
+"verwendet."
+
+#: g10/helptext.c:270
+msgid ""
+"You should specify a reason for the certification. Depending on the\n"
+"context you have the ability to choose from this list:\n"
+" \"Key has been compromised\"\n"
+" Use this if you have a reason to believe that unauthorized persons\n"
+" got access to your secret key.\n"
+" \"Key is superseded\"\n"
+" Use this if you have replaced this key with a newer one.\n"
+" \"Key is no longer used\"\n"
+" Use this if you have retired this key.\n"
+" \"User ID is no longer valid\"\n"
+" Use this to state that the user ID should not longer be used;\n"
+" this is normally used to mark an email address invalid.\n"
+msgstr ""
+"Sie sollten einen Grund für die Zertifizierung angeben. Je nach\n"
+"Zusammenhang können Sie aus dieser Liste auswählen:\n"
+" \"Schlüssel wurde kompromitiert\"\n"
+" Falls Sie Grund zu der Annahme haben, daß nicht berechtigte Personen\n"
+" Zugriff zu Ihrem geheimen Schlüssel hatten\n"
+" \"Schlüssel ist überholt\"\n"
+" Falls Sie diesen Schlüssel durch einem neuen ersetzt haben.\n"
+" \"Schlüssel wird nicht mehr benutzt\"\n"
+" Falls Sie diesen Schlüssel zurückgezogen haben.\n"
+" \"User-ID ist nicht mehr gültig\"\n"
+" Um bekanntzugeben, daß die User-ID nicht mehr benutzt werden soll.\n"
+" So weist man normalerweise auf eine ungültige E-Mailadresse hin.\n"
+
+#: g10/helptext.c:286
+msgid ""
+"If you like, you can enter a text describing why you issue this\n"
+"revocation certificate. Please keep this text concise.\n"
+"An empty line ends the text.\n"
+msgstr ""
+"Wenn Sie möchten, können Sie hier einen Text eingeben, der darlegt, warum\n"
+"Sie diesen Widerruf herausgeben. Der Text sollte möglichst knapp sein.\n"
+"Eine Leerzeile beendet die Eingabe.\n"
+
+#: g10/helptext.c:301
+msgid "No help available"
+msgstr "Keine Hilfe vorhanden."
+
+#: g10/helptext.c:309
+#, c-format
+msgid "No help available for `%s'"
+msgstr "Keine Hilfe für '%s' vorhanden."
+
+#: g10/keydb.c:182
+#, c-format
+msgid "error creating keyring `%s': %s\n"
+msgstr "Fehler beim Erzeugen des Schlüsselbundes `%s': %s\n"
+
+#: g10/keydb.c:189
+#, c-format
+msgid "keyring `%s' created\n"
+msgstr "Schlüsselbund `%s' erstellt\n"
+
+#: g10/keydb.c:608
+#, c-format
+msgid "failed to rebuild keyring cache: %s\n"
+msgstr "Schlüsselbund-Cache konnte nicht neu erzeugt werden: %s\n"
+
+#: g10/keyring.c:1231
+msgid "WARNING: 2 files with confidential information exists.\n"
+msgstr "Warnung: Zwei Dateien mit vertraulichem Inhalt vorhanden.\n"
+
+#: g10/keyring.c:1233
+#, c-format
+msgid "%s is the unchanged one\n"
+msgstr "%s ist der Unveränderte\n"
+
+#: g10/keyring.c:1234
+#, c-format
+msgid "%s is the new one\n"
+msgstr "%s ist der Neue\n"
+
+#: g10/keyring.c:1235
+msgid "Please fix this possible security flaw\n"
+msgstr "Bitte diesen potentiellen Sicherheitsmangel beseitigen\n"
+
+#: g10/keyring.c:1351
+#, c-format
+msgid "checking keyring `%s'\n"
+msgstr "Prüfen des Schlüsselbundes `%s'\n"
+
+#: g10/keyring.c:1382
+#, fuzzy, c-format
+msgid "%lu keys checked so far (%lu signatures)\n"
+msgstr "%lu Schlüssel geprüft (%lu Beglaubigungen)\n"
+
+#: g10/keyring.c:1393
+#, c-format
+msgid "%lu keys checked (%lu signatures)\n"
+msgstr "%lu Schlüssel geprüft (%lu Beglaubigungen)\n"
+
+#: g10/keyring.c:1458
+#, c-format
+msgid "%s: keyring created\n"
+msgstr "%s: Schlüsselbund erstellt\n"
+
+#~ msgid "preference %c%lu is not valid\n"
+#~ msgstr "Voreinstellung %c%lu ist nicht gültig\n"
+
+#, fuzzy
+#~ msgid " (default)"
+#~ msgstr "Daten entschlüsseln (Voreinstellung)"
+
+#~ msgid "requesting key %08lX from %s\n"
+#~ msgstr "Schlüssel %08lX wird von %s angefordert\n"
+
+#~ msgid "can't get key from keyserver: %s\n"
+#~ msgstr "Schlüssel ist beim Schlüsselserver nicht erhältlich: %s\n"
+
+#~ msgid "error sending to `%s': %s\n"
+#~ msgstr "Fehler beim Senden an `%s': %s\n"
+
+#~ msgid "success sending to `%s' (status=%u)\n"
+#~ msgstr "Senden an `%s' erfolgreich (status=%u)\n"
+
+#~ msgid "failed sending to `%s': status=%u\n"
+#~ msgstr "Senden an `%s' erfolglos (status=%u)\n"
+
+#~ msgid "this keyserver is not fully HKP compatible\n"
+#~ msgstr "Dieser Schlüsselserver ist nicht vollständig HKP kompatibel\n"
+
+#~ msgid "searching for \"%s\" from HKP server %s\n"
+#~ msgstr "suche nach \"%s\" auf HKP-Server %s\n"
+
+#~ msgid "can't search keyserver: %s\n"
+#~ msgstr "kann Schlüsselserver nicht durchsuchen: %s\n"
+
+#~ msgid "%lu keys so far checked (%lu signatures)\n"
+#~ msgstr "%lu Schlüssel bislang geprüft (%lu Beglaubigungen)\n"
+
+#~ msgid "no values for group \"%s\"\n"
+#~ msgstr "Keine Werte für Gruppe \"%s\"\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "you have to start GnuPG again, so it can read the new configuration file\n"
+#~ msgstr ""
+#~ "Sie müssen GnuPG noch einmal starten, damit es die neue "
+#~ "Konfigurationsdatei liest\n"
+
+#~ msgid "changing permission of `%s' failed: %s\n"
+#~ msgstr "Ändern der Zugriffsrechte für `%s' ist fehlgeschlagen: %s\n"
+
+#~ msgid "Fingerprint:"
+#~ msgstr "Fingerabdruck:"
+
+#~ msgid " Fingerprint:"
+#~ msgstr " Fingerabdruck:"
+
+#~ msgid "|NAME=VALUE|use this notation data"
+#~ msgstr "|NAME=WERT|diese \"notation\"-Daten verwenden"
+
+#~ msgid ""
+#~ "the first character of a notation name must be a letter or an underscore\n"
+#~ msgstr ""
+#~ "Das erste Zeichen eines \"notation\"-Namens muß ein Buchstabe oder\n"
+#~ "ein Unterstrich sein\n"
+
+#~ msgid "dots in a notation name must be surrounded by other characters\n"
+#~ msgstr ""
+#~ "Punkte in einem \"notation\"-Namen müssen von anderen Zeichen umgeben "
+#~ "sein\n"
+
+#~ msgid ""
+#~ "WARNING: This key already has a photo ID.\n"
+#~ " Adding another photo ID may confuse some versions of PGP.\n"
+#~ msgstr ""
+#~ "WARNUNG: Dieser Schlüssel besitzt bereits eine Foto-ID.\n"
+#~ " Ein hinzugefügte Foto-ID könnte einige Versionen von PGP "
+#~ "verwirren.\n"
+
+#~ msgid "You may only have one photo ID on a key.\n"
+#~ msgstr "Sie können nur eine Foto-ID für diesen Schlüssel haben.\n"
+
+#~ msgid "Are you sure you still want to sign it?\n"
+#~ msgstr "Sind Sie sicher, daß Sie dies wiklich unterschreiben möchten?\n"
+
+#~ msgid " Are you sure you still want to sign it?\n"
+#~ msgstr " Sind Sie sicher, daß Sie dies immer noch unterschreiben wollen?\n"
+
+#~ msgid "Really sign? (y/N) "
+#~ msgstr "Wirklich unterschreiben? (j/N) "
+
+#~ msgid "key %08lX: our copy has no self-signature\n"
+#~ msgstr "Schlüssel %08lX: Unsere Kopie hat keine Eigenbeglaubigung\n"
+
+#~ msgid "Do you really need such a large keysize? "
+#~ msgstr "Brauchen Sie wirklich einen derartig langen Schlüssel? "
+
+#~ msgid " signed by %08lX at %s\n"
+#~ msgstr " beglaubigt durch %08lX um %s\n"
+
+#~ msgid "--delete-secret-key user-id"
+#~ msgstr "--delete-secret-key User-ID"
+
+#~ msgid "--delete-key user-id"
+#~ msgstr "--delete-key User-ID"
+
+#~ msgid "--delete-secret-and-public-key user-id"
+#~ msgstr "--delete-secret-and-public-key User-ID"
+
+#~ msgid "Enter the user ID: "
+#~ msgstr "Geben Sie die User-ID ein: "
+
+#~ msgid "skipped: public key already set with --encrypt-to\n"
+#~ msgstr ""
+#~ "übersprungen: öffentlicher Schlüssel bereits mittels --encrypt-to "
+#~ "gesetzt\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "WARNING: This is a PGP2-style key\n"
+#~ msgstr "WARNUNG: '%s' ist eine leere Datei.\n"
+
+# valid user replies (not including 1..4)
+#~ msgid "sSmMqQ"
+#~ msgstr "sSmMqQ"
+
+#~ msgid "no keyserver known (use option --keyserver)\n"
+#~ msgstr "Kein Schlüsselserver bekannt (Option --keyserver verwenden)\n"
+
+#~ msgid "%s: not a valid key ID\n"
+#~ msgstr "%s: Dies ist keine gültige Schlüssel-ID\n"
+
+#~ msgid "duplicate (short) key ID %08lX\n"
+#~ msgstr "Öffentlicher Schlüssel ist %08lX\n"
+
+#~ msgid "%lu key(s) to refresh\n"
+#~ msgstr "\t%lu Schlüssel mit Fehlern\n"
+
+#~ msgid "|[NAMES]|check the trust database"
+#~ msgstr "|[NAMEN]|Überprüfen der \"Trust\"-Datenbank"
+
+#~ msgid ""
+#~ "Could not find a valid trust path to the key. Let's see whether we\n"
+#~ "can assign some missing owner trust values.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Für diesen Schlüssel konnte kein gültiger \"Trust Path\" gefunden "
+#~ "werden.\n"
+#~ "Mal sehen, ob wir sonst irgendwie ein paar fehlende \"Owner trust\" "
+#~ "Werte \n"
+#~ "ermitteln können.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "No path leading to one of our keys found.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kein Pfad führt zu einem unserer Schlüsseln.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "No certificates with undefined trust found.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Keine Zertifikate mit undefiniertem Vertrauen gefunden.\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "No trust values changed.\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Keine \"trust\" Werte geändert.\n"
+#~ "\n"
+
+#~ msgid "%08lX: no info to calculate a trust probability\n"
+#~ msgstr ""
+#~ "%08lX: Keine Infos zur Berechnung der Vertrauenswahrscheinlichkeit "
+#~ "vorgefunden\n"
+
+#~ msgid "%s: error checking key: %s\n"
+#~ msgstr "%s: Fehler beim Prüfen des Schlüssels: %s\n"
+
+#~ msgid "too many entries in unk cache - disabled\n"
+#~ msgstr "zu viele Einträge im unk-Lager - abgeschaltet\n"
+
+#~ msgid "secret key %08lX not imported (use %s to allow for it)\n"
+#~ msgstr ""
+#~ "Geheimer Schlüssel %08lX nicht importiert (%s verwenden, um das zu "
+#~ "ermöglichen)\n"
+
+#~ msgid "update of trustdb failed: %s\n"
+#~ msgstr "Änderung der \"Trust-DB\" fehlgeschlagen: %s\n"
+
+#~ msgid "assuming bad MDC due to an unknown critical bit\n"
+#~ msgstr ""
+#~ "Vermutlich ist das Siegel (MDC) BESCHÄDIGT (wegen unbekanntem \"critical "
+#~ "bit\")\n"
+
+#~ msgid "error reading dir record for LID %lu: %s\n"
+#~ msgstr "Fehler beim Lesen des Dir-Satzes für LID %lu: %s\n"
+
+#~ msgid "lid %lu: expected dir record, got type %d\n"
+#~ msgstr "lid %lu: Dir-Satz erwartet, aber es kam Typ %d\n"
+
+#~ msgid "no primary key for LID %lu\n"
+#~ msgstr "Kein Hauptschlüssel für LID %lu\n"
+
+#~ msgid "error reading primary key for LID %lu: %s\n"
+#~ msgstr "Fehler beim Lesen den Hauptschlüssels der LID %lu: %s\n"
+
+#~ msgid "get_dir_record: search_record failed: %s\n"
+#~ msgstr "get_dir_record: search_record fehlgeschlagen: %s\n"
+
+#~ msgid "key %08lX: query record failed\n"
+#~ msgstr "Schlüssel %08lX: Satzabfrage fehlgeschlagen\n"
+
+#~ msgid "key %08lX: already in trusted key table\n"
+#~ msgstr "Schlüssel %08lX: Ist bereits in geheimer Schlüsseltabelle\n"
+
+#~ msgid "NOTE: secret key %08lX is NOT protected.\n"
+#~ msgstr "HINWEIS: Geheimer Schlüssel %08lX ist NICHT geschützt.\n"
+
+#~ msgid "key %08lX: secret and public key don't match\n"
+#~ msgstr ""
+#~ "Schlüssel %08lX: geheimer und öffentlicher Schlüssel passen nicht "
+#~ "zusammen.\n"
+
+#~ msgid "enumerate secret keys failed: %s\n"
+#~ msgstr "enum_secret_keys fehlgeschlagen: %s\n"
+
+#~ msgid "key %08lX.%lu: Good subkey binding\n"
+#~ msgstr "Schlüssel %08lX.%lu: Korrekte Unterschlüssel-Anbindung\n"
+
+#~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n"
+#~ msgstr "Schlüssel %08lX.%lu: Ungültige Unterschlüssel-Anbindung: %s\n"
+
+#~ msgid "key %08lX.%lu: Valid key revocation\n"
+#~ msgstr "Schlüssel %08lX.%lu: Gültiger Schlüsselwiderruf\n"
+
+#~ msgid "key %08lX.%lu: Invalid key revocation: %s\n"
+#~ msgstr "Schlüssel %08lX.%lu: Ungültiger Schlüsselwiderruf: %s\n"
+
+#~ msgid "Good self-signature"
+#~ msgstr "Korrekte Eigenbeglaubigung"
+
+#~ msgid "Invalid self-signature"
+#~ msgstr "Ungültige Eigenbeglaubigung"
+
+#~ msgid "Valid user ID revocation skipped due to a newer self signature"
+#~ msgstr ""
+#~ "Gültiger User-ID-Widerruf ignoriert, da eine neuere Eigenbeglaubigung "
+#~ "vorliegt"
+
+#~ msgid "Valid user ID revocation"
+#~ msgstr "Gültiger User-ID-Widerruf"
+
+#~ msgid "Invalid user ID revocation"
+#~ msgstr "Ungültiger User-ID-Widerruf"
+
+#~ msgid "Valid certificate revocation"
+#~ msgstr "Gültiger Zerifikat-Widerruf"
+
+#~ msgid "Good certificate"
+#~ msgstr "Korrektes Zertifikat"
+
+#~ msgid "Invalid certificate revocation"
+#~ msgstr "Ungültiger Zertifikatswiderruf"
+
+#~ msgid "Invalid certificate"
+#~ msgstr "Ungültiges Zertifikat"
+
+#~ msgid "sig record %lu[%d] points to wrong record.\n"
+#~ msgstr "Signatursatz %lu[%d] zeigt auf falschen Satz.\n"
+
+#~ msgid "duplicated certificate - deleted"
+#~ msgstr "Doppelte Zertifikate - entfernt"
+
+#~ msgid "tdbio_search_dir failed: %s\n"
+#~ msgstr "tdbio_search_dir fehlgeschlagen: %s\n"
+
+#~ msgid "lid ?: insert failed: %s\n"
+#~ msgstr "lid ?: Einfügen fehlgeschlagen: %s\n"
+
+#~ msgid "lid %lu: insert failed: %s\n"
+#~ msgstr "lid %lu: Einfügen fehlgeschlagen: %s\n"
+
+#~ msgid "lid %lu: inserted\n"
+#~ msgstr "lid %lu: eingefügt\n"
+
+#~ msgid "error reading dir record: %s\n"
+#~ msgstr "Fehler beim Lesen des Verz.Satzes: %s\n"
+
+#~ msgid "\t%lu keys inserted\n"
+#~ msgstr "\t%lu Schlüssel eingefügt\n"
+
+#~ msgid "enumerate keyblocks failed: %s\n"
+#~ msgstr "enumerate Schlüsselblock fehlgeschlagen: %s\n"
+
+#~ msgid "lid %lu: dir record w/o key - skipped\n"
+#~ msgstr "lid %lu: Dir-Satz ohne Schlüssel - übergangen\n"
+
+#~ msgid "\t%lu due to new pubkeys\n"
+#~ msgstr "\t%lu wegen neuer Schlüssel\n"
+
+#~ msgid "\t%lu keys skipped\n"
+#~ msgstr "\t%lu Schlüssel übersprungen\n"
+
+#~ msgid "\t%lu keys updated\n"
+#~ msgstr "\t%lu Schlüssel geändert\n"
+
+#~ msgid "Ooops, no keys\n"
+#~ msgstr "Huch, keine Schlüssel\n"
+
+#~ msgid "Ooops, no user IDs\n"
+#~ msgstr "Huch, keine User-IDs\n"
+
+#~ msgid "check_trust: search dir record failed: %s\n"
+#~ msgstr "check_trust: Suche nach Dir-Satz fehlgeschlagen: %s\n"
+
+#~ msgid "key %08lX: insert trust record failed: %s\n"
+#~ msgstr "Schlüssel %08lX: 'trust record' einfügen fehlgeschlagen: %s\n"
+
+#~ msgid "key %08lX.%lu: inserted into trustdb\n"
+#~ msgstr "Schlüssel %08lX.%lu: in \"trustdb\" eingefügt\n"
+
+#~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n"
+#~ msgstr ""
+#~ "Schlüssel %08lX.%lu: wurde in der Zukunft erzeugt (Zeitreise oder Uhren "
+#~ "stimmen nicht überein)\n"
+
+#~ msgid "key %08lX.%lu: expired at %s\n"
+#~ msgstr "Schlüssel %08lX.%lu: verfallen am %s\n"
+
+#~ msgid "key %08lX.%lu: trust check failed: %s\n"
+#~ msgstr "Schlüssel %08lX.%lu: Vertrauensprüfung fehlgeschlagen: %s\n"
+
+#~ msgid "user '%s' not found: %s\n"
+#~ msgstr "Benutzer '%s' nicht gefunden: %s\n"
+
+#~ msgid "problem finding '%s' in trustdb: %s\n"
+#~ msgstr "Problem, '%s' in der Trust-DB zu finden: %s\n"
+
+#~ msgid "user '%s' not in trustdb - inserting\n"
+#~ msgstr "User '%s' ist nicht in der 'Trust'-Datenbank - wird eingefügt\n"
+
+#~ msgid "failed to put '%s' into trustdb: %s\n"
+#~ msgstr "konnte '%s' nicht in die 'Trust'-Datenbank hineintun: %s\n"
+
+#~ msgid "too many random bits requested; the limit is %d\n"
+#~ msgstr "Zu viele Zufallswerte angefordert: Die Grenze liegt bei %d\n"
+
+#~ msgid "For info see http://www.gnupg.org"
+#~ msgstr "Weitere Infos: siehe http://www.gnupg.org"
+
+#~ msgid "Do you really want to create a sign and encrypt key? "
+#~ msgstr ""
+#~ "Möchten Sie wirklich einen Unterschriften-/Verschlüsselungschlüssel "
+#~ "erzeugen? "
+
+#~ msgid "%s: user not found: %s\n"
+#~ msgstr "%s: Benutzer nicht gefunden: %s\n"
+
+#~ msgid "certificate read problem: %s\n"
+#~ msgstr "Zertifikat Leseproblem: %s\n"
+
+#~ msgid "can't lock keyring `%s': %s\n"
+#~ msgstr "kann Schlüsselbund `%s' nicht sperren: %s\n"
+
+#~ msgid "%s: user not found\n"
+#~ msgstr "%s: Benutzer nicht gefunden\n"
+
+#~ msgid "WARNING: can't yet handle long pref records\n"
+#~ msgstr "WARNUNG: Lange 'Pref'-Records können noch nicht benutzt werden\n"
+
+#~ msgid "%s: can't create keyring: %s\n"
+#~ msgstr "%s: Schlüsselbund kann nicht erzeugt werden: %s\n"
+
+#~ msgid "invalid"
+#~ msgstr "ungültig"
+
+#~ msgid "RSA key cannot be used in this version\n"
+#~ msgstr "RSA-Schlüssel können in dieser Version nicht verwendet werden\n"
+
+#~ msgid "No key for user ID\n"
+#~ msgstr "Kein Schlüssel für User-ID\n"
+
+#~ msgid "No user ID for key\n"
+#~ msgstr "Keine User-ID für Schlüssel\n"
+
+#~ msgid "no secret key for decryption available\n"
+#~ msgstr "kein geheimer Schlüssel zur Entschlüsselung vorhanden\n"
+
+#~ msgid " (%d) ElGamal in a v3 packet\n"
+#~ msgstr " (%d) ElGamal in einem v3-Paket\n"
+
+#~ msgid "Key generation can only be used in interactive mode\n"
+#~ msgstr ""
+#~ "Die Schlüsselerzeugung kann nur im interaktiven Modus benutzt werden.\n"
diff --git a/scripts/config.guess b/scripts/config.guess
new file mode 100755
index 000000000..27d87fa73
--- /dev/null
+++ b/scripts/config.guess
@@ -0,0 +1,1366 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002 Free Software Foundation, Inc.
+
+timestamp='2002-11-08'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# This shell variable is my proudest work .. or something. --bje
+
+set_cc_for_build='tmpdir=${TMPDIR-/tmp}/config-guess-$$ ;
+(old=`umask` && umask 077 && mkdir $tmpdir && umask $old && unset old)
+ || (echo "$me: cannot create $tmpdir" >&2 && exit 1) ;
+dummy=$tmpdir/dummy ;
+files="$dummy.c $dummy.o $dummy.rel $dummy" ;
+trap '"'"'rm -f $files; rmdir $tmpdir; exit 1'"'"' 1 2 15 ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ rm -f $files ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ;
+unset files'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit 0 ;;
+ amiga:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ arc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ macppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvmeppc:OpenBSD:*:*)
+ echo powerpc-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ pmax:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sgi:OpenBSD:*:*)
+ echo mipseb-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sun3:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ wgrisc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:OpenBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ alpha:OSF1:*:*)
+ if test $UNAME_RELEASE = "V4.0"; then
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ fi
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ eval $set_cc_for_build
+ cat <<EOF >$dummy.s
+ .data
+\$Lformat:
+ .byte 37,100,45,37,120,10,0 # "%d-%x\n"
+
+ .text
+ .globl main
+ .align 4
+ .ent main
+main:
+ .frame \$30,16,\$26,0
+ ldgp \$29,0(\$27)
+ .prologue 1
+ .long 0x47e03d80 # implver \$0
+ lda \$2,-1
+ .long 0x47e20c21 # amask \$2,\$1
+ lda \$16,\$Lformat
+ mov \$0,\$17
+ not \$1,\$18
+ jsr \$26,printf
+ ldgp \$29,0(\$26)
+ mov 0,\$16
+ jsr \$26,exit
+ .end main
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.s 2>/dev/null
+ if test "$?" = 0 ; then
+ case `$dummy` in
+ 0-0)
+ UNAME_MACHINE="alpha"
+ ;;
+ 1-0)
+ UNAME_MACHINE="alphaev5"
+ ;;
+ 1-1)
+ UNAME_MACHINE="alphaev56"
+ ;;
+ 1-101)
+ UNAME_MACHINE="alphapca56"
+ ;;
+ 2-303)
+ UNAME_MACHINE="alphaev6"
+ ;;
+ 2-307)
+ UNAME_MACHINE="alphaev67"
+ ;;
+ 2-1307)
+ UNAME_MACHINE="alphaev68"
+ ;;
+ 3-1307)
+ UNAME_MACHINE="alphaev7"
+ ;;
+ esac
+ fi
+ rm -f $dummy.s $dummy && rmdir $tmpdir
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit 0 ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit 0 ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit 0 ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit 0;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit 0 ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit 0 ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit 0 ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit 0;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit 0;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit 0 ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit 0 ;;
+ DRS?6000:UNIX_SV:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7 && exit 0 ;;
+ esac ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit 0 ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit 0 ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit 0 ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit 0 ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit 0 ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit 0 ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit 0 ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c \
+ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+ && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
+ rm -f $dummy.c $dummy && rmdir $tmpdir
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit 0 ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit 0 ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit 0 ;;
+ Night_Hawk:*:*:PowerMAX_OS)
+ echo powerpc-harris-powermax
+ exit 0 ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit 0 ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit 0 ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit 0 ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit 0 ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit 0 ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit 0 ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit 0 ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit 0 ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
+ rm -f $dummy.c $dummy && rmdir $tmpdir
+ echo rs6000-ibm-aix3.2.5
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit 0 ;;
+ *:AIX:*:[45])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit 0 ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit 0 ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit 0 ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit 0 ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit 0 ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit 0 ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit 0 ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
+ rm -f $dummy.c $dummy && rmdir $tmpdir
+ fi ;;
+ esac
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
+ rm -f $dummy.c $dummy && rmdir $tmpdir
+ echo unknown-hitachi-hiuxwe2
+ exit 0 ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit 0 ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit 0 ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit 0 ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit 0 ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit 0 ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit 0 ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit 0 ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*T3D:*:*:*)
+ echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit 0 ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:FreeBSD:*:*)
+ # Determine whether the default compiler uses glibc.
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #if __GLIBC__ >= 2
+ LIBC=gnu
+ #else
+ LIBC=
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ rm -f $dummy.c && rmdir $tmpdir
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+ exit 0 ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit 0 ;;
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit 0 ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit 0 ;;
+ x86:Interix*:3*)
+ echo i386-pc-interix3
+ exit 0 ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i386-pc-interix
+ exit 0 ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit 0 ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit 0 ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ *:GNU:*:*)
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit 0 ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit 0 ;;
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ mips:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mipsel
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+ rm -f $dummy.c && rmdir $tmpdir
+ test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
+ ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit 0 ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit 0 ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit 0 ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit 0 ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit 0 ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit 0 ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit 0 ;;
+ i*86:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us. cd to the root directory to prevent
+ # problems with other programs or directories called `ld' in the path.
+ # Set LC_ALL=C to ensure ld outputs messages in English.
+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
+ s/[ ][ ]*/ /g
+ s/.*supported targets: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_targets" in
+ elf32-i386)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+ ;;
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ exit 0 ;;
+ coff-i386)
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+ exit 0 ;;
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ exit 0 ;;
+ esac
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <features.h>
+ #ifdef __ELF__
+ # ifdef __GLIBC__
+ # if __GLIBC__ >= 2
+ LIBC=gnu
+ # else
+ LIBC=gnulibc1
+ # endif
+ # else
+ LIBC=gnulibc1
+ # endif
+ #else
+ #ifdef __INTEL_COMPILER
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+ rm -f $dummy.c && rmdir $tmpdir
+ test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+ test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit 0 ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit 0 ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit 0 ;;
+ i*86:*:5:[78]*)
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit 0 ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit 0 ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit 0 ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+ exit 0 ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit 0 ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit 0 ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit 0 ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit 0 ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit 0 ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit 0 ;;
+ M68*:*:R3V[567]*:*)
+ test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+ 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4 && exit 0 ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit 0 ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit 0 ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit 0 ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit 0 ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit 0 ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit 0 ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit 0 ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit 0 ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit 0 ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit 0 ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit 0 ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit 0 ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Darwin:*:*)
+ echo `uname -p`-apple-darwin${UNAME_RELEASE}
+ exit 0 ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit 0 ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit 0 ;;
+ NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit 0 ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit 0 ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit 0 ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit 0 ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit 0 ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit 0 ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit 0 ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit 0 ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit 0 ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit 0 ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit 0 ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit 0 ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit 0 ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
+rm -f $dummy.c $dummy && rmdir $tmpdir
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ c34*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ c38*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ c4*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/scripts/config.sub b/scripts/config.sub
new file mode 100755
index 000000000..c4f0b2f52
--- /dev/null
+++ b/scripts/config.sub
@@ -0,0 +1,1471 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002 Free Software Foundation, Inc.
+
+timestamp='2002-11-08'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit 0;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | freebsd*-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis)
+ os=
+ basic_machine=$1
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+ | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k \
+ | m32r | m68000 | m68k | m88k | mcore \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64vr | mips64vrel \
+ | mips64orion | mips64orionel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | ns16k | ns32k \
+ | openrisc | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
+ | strongarm \
+ | tahoe | thumb | tic80 | tron \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xscale | xstormy16 | xtensa \
+ | z8k)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* \
+ | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
+ | clipper-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* \
+ | m32r-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | mcore-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39 | mipstx39el \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+ | sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+ | xtensa-* \
+ | ymp-* \
+ | z8k-*)
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ mmix*)
+ basic_machine=mmix-knuth
+ os=-mmixware
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ or32 | or32-*)
+ basic_machine=or32-unknown
+ os=-coff
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2)
+ basic_machine=i686-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3d)
+ basic_machine=alpha-cray
+ os=-unicos
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tic4x | c4x*)
+ basic_machine=tic4x-unknown
+ os=-coff
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ windows32)
+ basic_machine=i386-pc
+ os=-windows32-msvcrt
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele)
+ basic_machine=sh-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparc | sparcv9 | sparcv9b)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto*)
+ os=-nto-qnx
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/tests/ChangeLog b/tests/ChangeLog
new file mode 100644
index 000000000..c6b3b9af1
--- /dev/null
+++ b/tests/ChangeLog
@@ -0,0 +1,68 @@
+2002-12-04 Werner Koch <wk@gnupg.org>
+
+ * inittests (gpgsm.conf): Fake system time.
+
+2002-10-31 Neal H. Walfield <neal@g10code.de>
+
+ * Makefile.am (inittests.stamp): Do not set LD_LIBRARY_PATH here.
+ (TESTS_ENVIRONMENT): Do it here. And also frob $(LIBGCRYPT_LIBS)
+ and $(PTH_LIBS).
+
+2002-10-31 Neal H. Walfield <neal@g10code.de>
+
+ * asschk.c (die): New macro.
+ (read_assuan): If in verbose mode, dump the string that was read.
+ (write_assuan): Be more verbose on failure.
+
+2002-09-04 Neal H. Walfield <neal@g10code.de>
+
+ * Makefile.am (inittests.stamp): Do not set LD_LIBRARY_PATH, but
+ rather prepend it. Be more robust and prefer printf over echo -n.
+
+2002-09-04 Marcus Brinkmann <marcus@g10code.de>
+
+ * asschk.c (start_server): Close the parent's file descriptors in
+ the child.
+ (read_assuan): Variable NREAD removed. Cut off the received line
+ currectly if more than one line was read.
+
+2002-09-03 Neal H. Walfield <neal@g10code.de>
+
+ * Makefile.am (inittests.stamp): Construct an LD_LIBRARY_PATH from
+ LDFLAGS.
+
+2002-08-09 Werner Koch <wk@gnupg.org>
+
+ * asschk.c (cmd_getenv): New.
+ (expand_line): Allow / as variable name delimiter.
+ * sm-sign+verify, sm-verify: Use $srcdir so that a VPATH build works.
+
+ * Makefile.am: Fixes for make dist.
+ * samplekets/Makefile.am: New.
+
+2002-08-08 Werner Koch <wk@gnupg.org>
+
+ * asschk.c: Added some new features.
+ * runtest, inittests: New.
+ * text-1.txt, text-2.txt, text-3.txt: New.
+ * text-1.osig.pem, text-1.dsig.pem, text-1.osig-bad.pem: New.
+ * text-2.osig.pem, text-2.osig-bad.pem: New.
+ * samplekeys : New directory
+ * sm-verify, sm-sign+verify: The first test scripts.
+
+2002-08-06 Werner Koch <wk@gnupg.org>
+
+ * Makefile.am, asschk.c: New.
+
+
+ Copyright 2002 Free Software Foundation, Inc.
+
+ This file is free software; as a special exception the author gives
+ unlimited permission to copy and/or distribute it, with or without
+ modifications, as long as this notice is preserved.
+
+ This file is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 000000000..622b5fe58
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,78 @@
+# Makefile.am -tests makefile for libxtime
+# Copyright (C) 2002 Free Software Foundation, Inc.
+#
+# This file is part of GnuPG.
+#
+# GnuPG is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# GnuPG is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+## Process this file with automake to produce Makefile.in
+
+GPGSM = ../sm/gpgsm
+
+# We can't unset a variable here so we unset GPG_AGENT_INFO in runtest
+TESTS_ENVIRONMENT = GNUPGHOME=`pwd` LC_ALL=C GPGSM=$(GPGSM) \
+ LD_LIBRARY_PATH=$$(seen=0; \
+ for i in $(LDFLAGS) $(LIBGCRYPT_LIBS) $(PTH_LIBS); \
+ do \
+ if echo "$$i" | egrep '^-L' >/dev/null 2>&1; \
+ then \
+ if test $$seen = 0; \
+ then \
+ seen=1; \
+ else \
+ printf ":"; \
+ fi; \
+ printf "%s" "$${i}" | sed 's/^-L//'; \
+ fi; \
+ done; \
+ if test $$seen != 0 \
+ && test x$${LD_LIBRARY_PATH} != x; \
+ then \
+ printf ":"; \
+ fi; \
+ printf "%s" "$${LD_LIBRARY_PATH}") $(srcdir)/runtest
+
+testscripts = sm-sign+verify sm-verify
+
+EXTRA_DIST = runtest inittests $(testscripts) \
+ text-1.txt text-2.txt text-3.txt \
+ text-1.osig.pem text-1.dsig.pem text-1.osig-bad.pem \
+ text-2.osig.pem text-2.osig-bad.pem \
+ samplekeys/32100C27173EF6E9C4E9A25D3D69F86D37A4F939.key \
+ samplekeys/cert_g10code_pete1.pem \
+ samplekeys/cert_g10code_test1.pem \
+ samplekeys/cert_g10code_theo1.pem
+
+TESTS = $(testscripts)
+
+CLEANFILES = inittests.stamp x y y z out err
+ *.lock .\#lk*
+
+DISTCLEANFILES = pubring.kbx~ random_seed
+
+noinst_PROGRAMS = asschk
+
+asschk_SOURCES = asschk.c
+
+
+all-local: inittests.stamp
+
+clean-local:
+ srcdir=$(srcdir) $(TESTS_ENVIRONMENT) $(srcdir)/inittests --clean
+
+inittests.stamp: inittests
+ srcdir=$(srcdir) $(TESTS_ENVIRONMENT) $(srcdir)/inittests
+ echo timestamp >./inittests.stamp
+
diff --git a/tests/asschk.c b/tests/asschk.c
new file mode 100644
index 000000000..83a8ca5af
--- /dev/null
+++ b/tests/asschk.c
@@ -0,0 +1,1059 @@
+/* asschk.c - Assuan Server Checker
+ * Copyright (C) 2002 Free Software Foundation, Inc.
+ *
+ * This file is part of GnuPG.
+ *
+ * GnuPG is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GnuPG is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+/* This is a simple stand-alone Assuan server test program. We don't
+ want to use the assuan library because we don't want to hide errors
+ in that library.
+
+ The script language is line based. Empty lines or lines containing
+ only white spaces are ignored, line with a hash sign as first non
+ white space character are treated as comments.
+
+ A simple macro mechanism is implemnted. Macros are expanded before
+ a line is processed but after comment processing. Macros are only
+ expanded once and non existing macros expand to the empty string.
+ A macro is dereferenced by prefixing its name with a dollar sign;
+ the end of the name is currently indicated by a white space, a
+ dollar sign or a slash. To use a dollor sign verbatim, double it.
+
+ A macro is assigned by prefixing a statement with the macro name
+ and an equal sign. The value is assigned verbatim if it does not
+ resemble a command, otherwise the return value of the command will
+ get assigned. The command "let" may be used to assign values
+ unambigiously and it should be used if the value starts with a
+ letter.
+
+ Conditions are not yes implemented except for a simple evaluation
+ which yields false for an empty string or the string "0". The
+ result may be negated by prefixing with a '!'.
+
+ The general syntax of a command is:
+
+ [<name> =] <statement> [<args>]
+
+ If NAME is not specifed but the statement returns a value it is
+ assigned to the name "?" so that it can be referenced using "$?".
+ The following commands are implemented:
+
+ let <value>
+ Return VALUE.
+
+ echo <value>
+ Print VALUE.
+
+ openfile <filename>
+ Open file FILENAME for read access and retrun the file descriptor.
+
+ createfile <filename>
+ Create file FILENAME, open for write access and retrun the file
+ descriptor.
+
+ pipeserver <program>
+ Connect to the Assuan server PROGRAM.
+
+ send <line>
+ Send LINE to the server.
+
+ expect-ok
+ Expect an OK response from the server. Status and data out put
+ is ignored.
+
+ expect-err
+ Expect an ERR response from the server. Status and data out put
+ is ignored.
+
+ count-status <code>
+ Initialize the assigned variable to 0 and assign it as an counter for
+ status code CODE. This command must be called with an assignment.
+
+ quit
+ Terminate the process.
+
+ quit-if <condition>
+ Terminate the process if CONDITION evaluates to true.
+
+ fail-if <condition>
+ Terminate the process with an exit code of 1 if CONDITION
+ evaluates to true.
+
+ cmpfiles <first> <second>
+ Returns true when the content of the files FIRST and SECOND match.
+
+ getenv <name>
+ Return the value of the environment variable NAME.
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 )
+# define ATTR_PRINTF(f,a) __attribute__ ((format (printf,f,a)))
+#else
+# define ATTR_PRINTF(f,a)
+#endif
+
+#define spacep(p) (*(p) == ' ' || *(p) == '\t')
+
+#define MAX_LINELEN 2048
+
+typedef enum {
+ LINE_OK = 0,
+ LINE_ERR,
+ LINE_STAT,
+ LINE_DATA,
+ LINE_END,
+} LINETYPE;
+
+typedef enum {
+ VARTYPE_SIMPLE = 0,
+ VARTYPE_FD,
+ VARTYPE_COUNTER
+} VARTYPE;
+
+
+struct variable_s {
+ struct variable_s *next;
+ VARTYPE type;
+ unsigned int count;
+ char *value;
+ char name[1];
+};
+typedef struct variable_s *VARIABLE;
+
+
+static void die (const char *format, ...) ATTR_PRINTF(1,2);
+
+
+/* Name of this program to be printed in error messages. */
+static const char *invocation_name;
+
+/* Talk a bit about what is going on. */
+static int opt_verbose;
+
+/* Option to ignore the echo command. */
+static int opt_no_echo;
+
+/* File descriptors used to communicate with the current server. */
+static int server_send_fd = -1;
+static int server_recv_fd = -1;
+
+/* The Assuan protocol limits the line length to 1024, so we can
+ safely use a (larger) buffer. The buffer is filled using the
+ read_assuan(). */
+static char recv_line[MAX_LINELEN];
+/* Tell the status of the current line. */
+static LINETYPE recv_type;
+
+/* This is our variable storage. */
+static VARIABLE variable_list;
+
+
+static void
+die (const char *format, ...)
+{
+ va_list arg_ptr;
+
+ fflush (stdout);
+ fprintf (stderr, "%s: ", invocation_name);
+
+ va_start (arg_ptr, format);
+ vfprintf (stderr, format, arg_ptr);
+ va_end (arg_ptr);
+ putc ('\n', stderr);
+
+ exit (1);
+}
+
+#define die(format, args...) (die) ("%s: " format, __FUNCTION__ , ##args)
+
+static void
+err (const char *format, ...)
+{
+ va_list arg_ptr;
+
+ fflush (stdout);
+ fprintf (stderr, "%s: ", invocation_name);
+
+ va_start (arg_ptr, format);
+ vfprintf (stderr, format, arg_ptr);
+ va_end (arg_ptr);
+ putc ('\n', stderr);
+}
+
+static void *
+xmalloc (size_t n)
+{
+ void *p = malloc (n);
+ if (!p)
+ die ("out of core");
+ return p;
+}
+
+static void *
+xcalloc (size_t n, size_t m)
+{
+ void *p = calloc (n, m);
+ if (!p)
+ die ("out of core");
+ return p;
+}
+
+static char *
+xstrdup (const char *s)
+{
+ char *p = xmalloc (strlen (s)+1);
+ strcpy (p, s);
+ return p;
+}
+
+
+/* Write LENGTH bytes from BUFFER to FD. */
+static int
+writen (int fd, const char *buffer, size_t length)
+{
+ while (length)
+ {
+ int nwritten = write (fd, buffer, length);
+
+ if (nwritten < 0)
+ {
+ if (errno == EINTR)
+ continue;
+ return -1; /* write error */
+ }
+ length -= nwritten;
+ buffer += nwritten;
+ }
+ return 0; /* okay */
+}
+
+
+
+
+/* Assuan specific stuff. */
+
+/* Read a line from FD, store it in the global recv_line, analyze the
+ type and store that in recv_type. The function terminates on a
+ communication error. Returns a pointer into the inputline to the
+ first byte of the arguments. The parsing is very strict to match
+ excalty what we want to send. */
+static char *
+read_assuan (int fd)
+{
+ static char pending[MAX_LINELEN];
+ static size_t pending_len;
+ size_t nleft = sizeof recv_line;
+ char *buf = recv_line;
+ char *p;
+
+ while (nleft > 0)
+ {
+ int n;
+
+ if (pending_len)
+ {
+ if (pending_len >= nleft)
+ die ("received line too large");
+ memcpy (buf, pending, pending_len);
+ n = pending_len;
+ pending_len = 0;
+ }
+ else
+ n = read (fd, buf, nleft);
+
+ if (opt_verbose)
+ {
+ int i;
+ printf ("%s: read \"", __FUNCTION__);
+ for (i = 0; i < n; i ++)
+ putc (buf[i], stdout);
+ printf ("\"\n");
+ }
+
+ if (n < 0)
+ {
+ if (errno == EINTR)
+ continue;
+ die ("reading fd %d failed: %s", fd, strerror (errno));
+ }
+ else if (!n)
+ die ("received incomplete line on fd %d", fd);
+ p = buf;
+ nleft -= n;
+ buf += n;
+
+ for (; n && *p != '\n'; n--, p++)
+ ;
+ if (n)
+ {
+ if (n>1)
+ {
+ n--;
+ memcpy (pending, p + 1, n);
+ pending_len = n;
+ }
+ *p = '\0';
+ break;
+ }
+ }
+ if (!nleft)
+ die ("received line too large");
+
+ p = recv_line;
+ if (p[0] == 'O' && p[1] == 'K' && (p[2] == ' ' || !p[2]))
+ {
+ recv_type = LINE_OK;
+ p += 3;
+ }
+ else if (p[0] == 'E' && p[1] == 'R' && p[2] == 'R'
+ && (p[3] == ' ' || !p[3]))
+ {
+ recv_type = LINE_ERR;
+ p += 4;
+ }
+ else if (p[0] == 'S' && (p[1] == ' ' || !p[1]))
+ {
+ recv_type = LINE_STAT;
+ p += 2;
+ }
+ else if (p[0] == 'D' && p[1] == ' ')
+ {
+ recv_type = LINE_DATA;
+ p += 2;
+ }
+ else if (p[0] == 'E' && p[1] == 'N' && p[2] == 'D' && !p[3])
+ {
+ recv_type = LINE_END;
+ p += 3;
+ }
+ else
+ die ("invalid line type (%.5s)", p);
+
+ return p;
+}
+
+/* Write LINE to the server using FD. It is expected that the line
+ contains the terminating linefeed as last character. */
+static void
+write_assuan (int fd, const char *line)
+{
+ char buffer[1026];
+ size_t n = strlen (line);
+
+ if (n > 1024)
+ die ("line too long for Assuan protocol");
+ strcpy (buffer, line);
+ if (!n || buffer[n-1] != '\n')
+ buffer[n++] = '\n';
+
+ if (writen (fd, buffer, n))
+ die ("sending line (\"%s\") to %d failed: %s", buffer, fd,
+ strerror (errno));
+}
+
+
+/* Start the server with path PGMNAME and connect its stdout and
+ strerr to a newly created pipes; the file descriptors are then
+ store in the gloabl variables SERVER_SEND_FD and
+ SERVER_RECV_FD. The initial handcheck is performed.*/
+static void
+start_server (const char *pgmname)
+{
+ int rp[2];
+ int wp[2];
+ pid_t pid;
+
+ if (pipe (rp) < 0)
+ die ("pipe creation failed: %s", strerror (errno));
+ if (pipe (wp) < 0)
+ die ("pipe creation failed: %s", strerror (errno));
+
+ fflush (stdout);
+ fflush (stderr);
+ pid = fork ();
+ if (pid < 0)
+ die ("fork failed");
+
+ if (!pid)
+ {
+ const char *arg0;
+
+ arg0 = strrchr (pgmname, '/');
+ if (arg0)
+ arg0++;
+ else
+ arg0 = pgmname;
+
+ if (wp[0] != STDIN_FILENO)
+ {
+ if (dup2 (wp[0], STDIN_FILENO) == -1)
+ die ("dup2 failed in child: %s", strerror (errno));
+ close (wp[0]);
+ }
+ if (rp[1] != STDOUT_FILENO)
+ {
+ if (dup2 (rp[1], STDOUT_FILENO) == -1)
+ die ("dup2 failed in child: %s", strerror (errno));
+ close (rp[1]);
+ }
+ if (!opt_verbose)
+ {
+ int fd = open ("/dev/null", O_WRONLY);
+ if (fd == -1)
+ die ("can't open `/dev/null': %s", strerror (errno));
+ if (dup2 (fd, STDERR_FILENO) == -1)
+ die ("dup2 failed in child: %s", strerror (errno));
+ close (fd);
+ }
+
+ close (wp[1]);
+ close (rp[0]);
+ execl (pgmname, arg0, "--server", NULL);
+ die ("exec failed for `%s': %s", pgmname, strerror (errno));
+ }
+ close (wp[0]);
+ close (rp[1]);
+ server_send_fd = wp[1];
+ server_recv_fd = rp[0];
+
+ read_assuan (server_recv_fd);
+ if (recv_type != LINE_OK)
+ die ("no greating message");
+}
+
+
+
+
+
+/* Script intepreter. */
+
+static void
+unset_var (const char *name)
+{
+ VARIABLE var;
+
+ for (var=variable_list; var && strcmp (var->name, name); var = var->next)
+ ;
+ if (!var)
+ return;
+/* fprintf (stderr, "unsetting `%s'\n", name); */
+
+ if (var->type == VARTYPE_FD && var->value)
+ {
+ int fd;
+
+ fd = atoi (var->value);
+ if (fd != -1 && fd != 0 && fd != 1 && fd != 2)
+ close (fd);
+ }
+
+ free (var->value);
+ var->value = NULL;
+ var->type = 0;
+ var->count = 0;
+}
+
+
+static void
+set_type_var (const char *name, const char *value, VARTYPE type)
+{
+ VARIABLE var;
+
+ if (!name)
+ name = "?";
+ for (var=variable_list; var && strcmp (var->name, name); var = var->next)
+ ;
+ if (!var)
+ {
+ var = xcalloc (1, sizeof *var + strlen (name));
+ strcpy (var->name, name);
+ var->next = variable_list;
+ variable_list = var;
+ }
+ else
+ free (var->value);
+
+ if (var->type == VARTYPE_FD && var->value)
+ {
+ int fd;
+
+ fd = atoi (var->value);
+ if (fd != -1 && fd != 0 && fd != 1 && fd != 2)
+ close (fd);
+ }
+
+ var->type = type;
+ var->count = 0;
+ if (var->type == VARTYPE_COUNTER)
+ {
+ /* We need some extra sapce as scratch area for get_var. */
+ var->value = xmalloc (strlen (value) + 1 + 20);
+ strcpy (var->value, value);
+ }
+ else
+ var->value = xstrdup (value);
+}
+
+static void
+set_var (const char *name, const char *value)
+{
+ set_type_var (name, value, 0);
+}
+
+
+static const char *
+get_var (const char *name)
+{
+ VARIABLE var;
+
+ for (var=variable_list; var && strcmp (var->name, name); var = var->next)
+ ;
+ if (!var)
+ return NULL;
+ if (var->type == VARTYPE_COUNTER && var->value)
+ { /* Use the scratch space allocated by set_var. */
+ char *p = var->value + strlen(var->value)+1;
+ sprintf (p, "%u", var->count);
+ return p;
+ }
+ else
+ return var->value;
+}
+
+
+/* Incremente all counter type variables with NAME in their VALUE. */
+static void
+inc_counter (const char *name)
+{
+ VARIABLE var;
+
+ if (!*name)
+ return;
+ for (var=variable_list; var; var = var->next)
+ {
+ if (var->type == VARTYPE_COUNTER
+ && var->value && !strcmp (var->value, name))
+ var->count++;
+ }
+}
+
+
+/* Expand variables in LINE and return a new allocated buffer if
+ required. The function might modify LINE if the expanded version
+ fits into it. */
+static char *
+expand_line (char *buffer)
+{
+ char *line = buffer;
+ char *p, *pend;
+ const char *value;
+ size_t valuelen, n;
+ char *result = NULL;
+
+ while (*line)
+ {
+ p = strchr (line, '$');
+ if (!p)
+ return result; /* nothing more to expand */
+
+ if (p[1] == '$') /* quoted */
+ {
+ memmove (p, p+1, strlen (p+1)+1);
+ line = p + 1;
+ continue;
+ }
+ for (pend=p+1; *pend && !spacep (pend)
+ && *pend != '$' && *pend != '/'; pend++)
+ ;
+ if (*pend)
+ {
+ int save = *pend;
+ *pend = 0;
+ value = get_var (p+1);
+ *pend = save;
+ }
+ else
+ value = get_var (p+1);
+ if (!value)
+ value = "";
+ valuelen = strlen (value);
+ if (valuelen <= pend - p)
+ {
+ memcpy (p, value, valuelen);
+ p += valuelen;
+ n = pend - p;
+ if (n)
+ memmove (p, p+n, strlen (p+n)+1);
+ line = p;
+ }
+ else
+ {
+ char *src = result? result : buffer;
+ char *dst;
+
+ dst = xmalloc (strlen (src) + valuelen + 1);
+ n = p - src;
+ memcpy (dst, src, n);
+ memcpy (dst + n, value, valuelen);
+ n += valuelen;
+ strcpy (dst + n, pend);
+ line = dst + n;
+ free (result);
+ result = dst;
+ }
+ }
+ return result;
+}
+
+
+/* Evaluate COND and return the result. */
+static int
+eval_boolean (const char *cond)
+{
+ int true = 1;
+
+ for ( ; *cond == '!'; cond++)
+ true = !true;
+ if (!*cond || (*cond == '0' && !cond[1]))
+ return !true;
+ return true;
+}
+
+
+
+
+
+static void
+cmd_let (const char *assign_to, char *arg)
+{
+ set_var (assign_to, arg);
+}
+
+
+static void
+cmd_echo (const char *assign_to, char *arg)
+{
+ if (!opt_no_echo)
+ printf ("%s\n", arg);
+}
+
+static void
+cmd_send (const char *assign_to, char *arg)
+{
+ if (opt_verbose)
+ fprintf (stderr, "sending `%s'\n", arg);
+ write_assuan (server_send_fd, arg);
+}
+
+static void
+handle_status_line (char *arg)
+{
+ char *p;
+
+ for (p=arg; *p && !spacep (p); p++)
+ ;
+ if (*p)
+ {
+ int save = *p;
+ *p = 0;
+ inc_counter (arg);
+ *p = save;
+ }
+ else
+ inc_counter (arg);
+}
+
+static void
+cmd_expect_ok (const char *assign_to, char *arg)
+{
+ if (opt_verbose)
+ fprintf (stderr, "expecting OK\n");
+ do
+ {
+ char *p = read_assuan (server_recv_fd);
+ if (opt_verbose > 1)
+ fprintf (stderr, "got line `%s'\n", recv_line);
+ if (recv_type == LINE_STAT)
+ handle_status_line (p);
+ }
+ while (recv_type != LINE_OK && recv_type != LINE_ERR);
+ if (recv_type != LINE_OK)
+ die ("expected OK but got `%s'", recv_line);
+}
+
+static void
+cmd_expect_err (const char *assign_to, char *arg)
+{
+ if (opt_verbose)
+ fprintf (stderr, "expecting ERR\n");
+ do
+ {
+ char *p = read_assuan (server_recv_fd);
+ if (opt_verbose > 1)
+ fprintf (stderr, "got line `%s'\n", recv_line);
+ if (recv_type == LINE_STAT)
+ handle_status_line (p);
+ }
+ while (recv_type != LINE_OK && recv_type != LINE_ERR);
+ if (recv_type != LINE_ERR)
+ die ("expected ERR but got `%s'", recv_line);
+}
+
+static void
+cmd_count_status (const char *assign_to, char *arg)
+{
+ char *p;
+
+ if (!*assign_to || !*arg)
+ die ("syntax error: count-status requires an argument and a variable");
+
+ for (p=arg; *p && !spacep (p); p++)
+ ;
+ if (*p)
+ {
+ for (*p++ = 0; spacep (p); p++)
+ ;
+ if (*p)
+ die ("cmpfiles: syntax error");
+ }
+ set_type_var (assign_to, arg, VARTYPE_COUNTER);
+}
+
+static void
+cmd_openfile (const char *assign_to, char *arg)
+{
+ int fd;
+ char numbuf[20];
+
+ do
+ fd = open (arg, O_RDONLY);
+ while (fd == -1 && errno == EINTR);
+ if (fd == -1)
+ die ("error opening `%s': %s", arg, strerror (errno));
+
+ sprintf (numbuf, "%d", fd);
+ set_type_var (assign_to, numbuf, VARTYPE_FD);
+}
+
+static void
+cmd_createfile (const char *assign_to, char *arg)
+{
+ int fd;
+ char numbuf[20];
+
+ do
+ fd = open (arg, O_WRONLY|O_CREAT|O_TRUNC, 0666);
+ while (fd == -1 && errno == EINTR);
+ if (fd == -1)
+ die ("error creating `%s': %s", arg, strerror (errno));
+
+ sprintf (numbuf, "%d", fd);
+ set_type_var (assign_to, numbuf, VARTYPE_FD);
+}
+
+
+static void
+cmd_pipeserver (const char *assign_to, char *arg)
+{
+ if (!*arg)
+ die ("syntax error: servername missing");
+
+ start_server (arg);
+}
+
+
+static void
+cmd_quit_if(const char *assign_to, char *arg)
+{
+ if (eval_boolean (arg))
+ exit (0);
+}
+
+static void
+cmd_fail_if(const char *assign_to, char *arg)
+{
+ if (eval_boolean (arg))
+ exit (1);
+}
+
+
+static void
+cmd_cmpfiles (const char *assign_to, char *arg)
+{
+ char *p = arg;
+ char *second;
+ FILE *fp1, *fp2;
+ char buffer1[2048]; /* note: both must be of equal size. */
+ char buffer2[2048];
+ size_t nread1, nread2;
+ int rc = 0;
+
+ set_var (assign_to, "0");
+ for (p=arg; *p && !spacep (p); p++)
+ ;
+ if (!*p)
+ die ("cmpfiles: syntax error");
+ for (*p++ = 0; spacep (p); p++)
+ ;
+ second = p;
+ for (; *p && !spacep (p); p++)
+ ;
+ if (*p)
+ {
+ for (*p++ = 0; spacep (p); p++)
+ ;
+ if (*p)
+ die ("cmpfiles: syntax error");
+ }
+
+ fp1 = fopen (arg, "rb");
+ if (!fp1)
+ {
+ err ("can't open `%s': %s", arg, strerror (errno));
+ return;
+ }
+ fp2 = fopen (second, "rb");
+ if (!fp2)
+ {
+ err ("can't open `%s': %s", second, strerror (errno));
+ fclose (fp1);
+ return;
+ }
+ while ( (nread1 = fread (buffer1, 1, sizeof buffer1, fp1)))
+ {
+ if (ferror (fp1))
+ break;
+ nread2 = fread (buffer2, 1, sizeof buffer2, fp2);
+ if (ferror (fp2))
+ break;
+ if (nread1 != nread2 || memcmp (buffer1, buffer2, nread1))
+ {
+ rc = 1;
+ break;
+ }
+ }
+ if (feof (fp1) && feof (fp2) && !rc)
+ {
+ if (opt_verbose)
+ err ("files match");
+ set_var (assign_to, "1");
+ }
+ else if (!rc)
+ err ("cmpfiles: read error: %s", strerror (errno));
+ else
+ err ("cmpfiles: mismatch");
+ fclose (fp1);
+ fclose (fp2);
+}
+
+static void
+cmd_getenv (const char *assign_to, char *arg)
+{
+ const char *s;
+ s = *arg? getenv (arg):"";
+ set_var (assign_to, s? s:"");
+}
+
+
+
+
+/* Process the current script line LINE. */
+static int
+interpreter (char *line)
+{
+ static struct {
+ const char *name;
+ void (*fnc)(const char*, char*);
+ } cmdtbl[] = {
+ { "let" , cmd_let },
+ { "echo" , cmd_echo },
+ { "send" , cmd_send },
+ { "expect-ok" , cmd_expect_ok },
+ { "expect-err", cmd_expect_err },
+ { "count-status", cmd_count_status },
+ { "openfile" , cmd_openfile },
+ { "createfile", cmd_createfile },
+ { "pipeserver", cmd_pipeserver },
+ { "quit" , NULL },
+ { "quit-if" , cmd_quit_if },
+ { "fail-if" , cmd_fail_if },
+ { "cmpfiles" , cmd_cmpfiles },
+ { "getenv" , cmd_getenv },
+ { NULL }
+ };
+ char *p, *save_p;
+ int i, save_c;
+ char *stmt = NULL;
+ char *assign_to = NULL;
+ char *must_free = NULL;
+
+ for ( ;spacep (line); line++)
+ ;
+ if (!*line || *line == '#')
+ return 0; /* empty or comment */
+ p = expand_line (line);
+ if (p)
+ {
+ must_free = p;
+ line = p;
+ for ( ;spacep (line); line++)
+ ;
+ if (!*line || *line == '#')
+ {
+ free (must_free);
+ return 0; /* empty or comment */
+ }
+ }
+ for (p=line; *p && !spacep (p) && *p != '='; p++)
+ ;
+ if (*p == '=')
+ {
+ *p = 0;
+ assign_to = line;
+ }
+ else if (*p)
+ {
+ for (*p++ = 0; spacep (p); p++)
+ ;
+ if (*p == '=')
+ assign_to = line;
+ }
+ if (!*line)
+ die ("syntax error");
+ stmt = line;
+ save_c = 0;
+ save_p = NULL;
+ if (assign_to)
+ { /* this is an assignment */
+ for (p++; spacep (p); p++)
+ ;
+ if (!*p)
+ {
+ unset_var (assign_to);
+ free (must_free);
+ return 0;
+ }
+ stmt = p;
+ for (; *p && !spacep (p); p++)
+ ;
+ if (*p)
+ {
+ save_p = p;
+ save_c = *p;
+ for (*p++ = 0; spacep (p); p++)
+ ;
+ }
+ }
+ for (i=0; cmdtbl[i].name && strcmp (stmt, cmdtbl[i].name); i++)
+ ;
+ if (!cmdtbl[i].name)
+ {
+ if (!assign_to)
+ die ("invalid statement `%s'\n", stmt);
+ if (save_p)
+ *save_p = save_c;
+ set_var (assign_to, stmt);
+ free (must_free);
+ return 0;
+ }
+
+ if (cmdtbl[i].fnc)
+ cmdtbl[i].fnc (assign_to, p);
+ free (must_free);
+ return cmdtbl[i].fnc? 0:1;
+}
+
+
+
+int
+main (int argc, char **argv)
+{
+ char buffer[2048];
+ char *p, *pend;
+
+ if (!argc)
+ invocation_name = "asschk";
+ else
+ {
+ invocation_name = *argv++;
+ argc--;
+ p = strrchr (invocation_name, '/');
+ if (p)
+ invocation_name = p+1;
+ }
+
+
+ set_var ("?","1"); /* defaults to true */
+
+ for (; argc; argc--, argv++)
+ {
+ p = *argv;
+ if (*p != '-')
+ break;
+ if (!strcmp (p, "--verbose"))
+ opt_verbose++;
+ else if (!strcmp (p, "--no-echo"))
+ opt_no_echo++;
+ else if (*p == '-' && p[1] == 'D')
+ {
+ p += 2;
+ pend = strchr (p, '=');
+ if (pend)
+ {
+ int tmp = *pend;
+ *pend = 0;
+ set_var (p, pend+1);
+ *pend = tmp;
+ }
+ else
+ set_var (p, "1");
+ }
+ else if (*p == '-' && p[1] == '-' && !p[2])
+ {
+ argc--; argv++;
+ break;
+ }
+ else
+ break;
+ }
+ if (argc)
+ die ("usage: asschk [--verbose] {-D<name>[=<value>]}");
+
+
+ while (fgets (buffer, sizeof buffer, stdin))
+ {
+ p = strchr (buffer,'\n');
+ if (!p)
+ die ("incomplete script line");
+ *p = 0;
+ if (interpreter (buffer))
+ break;
+ fflush (stdout);
+ }
+ return 0;
+}
+
diff --git a/tests/inittests b/tests/inittests
new file mode 100755
index 000000000..05a94eb68
--- /dev/null
+++ b/tests/inittests
@@ -0,0 +1,99 @@
+#!/bin/sh
+# Copyright (C) 2002 Free Software Foundation, Inc.
+#
+# This file is free software; as a special exception the author gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+set -e
+
+sample_certs='
+cert_g10code_test1.pem
+cert_g10code_pete1.pem
+cert_g10code_theo1.pem
+'
+
+private_keys='
+32100C27173EF6E9C4E9A25D3D69F86D37A4F939
+'
+
+clean_files='
+gpgsm.conf gpg-agent.conf trustlist.txt pubring.kbx
+msg msg.sig msg.unsig
+'
+
+
+[ -z "$srcdir" ] && srcdir=.
+[ -z "$GPGSM" ] && GPGSM=../sm/gpgsm
+
+if [ -d $srcdir/samplekeys ] \
+ && grep TESTS_ENVIRONMENT Makefile >/dev/null 2>&1; then
+ :
+else
+ # During make distclean the Makefile has already been removed,
+ # so we need this extra test.
+ if ! grep gnupg-test-directory testdir.stamp >/dev/null 2>&1; then
+ echo "inittests: please cd to the tests directory first" >&2
+ exit 1
+ fi
+fi
+
+if [ "$1" = "--clean" ]; then
+ if [ -d private-keys-v1.d ]; then
+ rm private-keys-v1.d/* 2>/dev/null || true
+ rmdir private-keys-v1.d
+ fi
+ rm ${clean_files} testdir.stamp 2>/dev/null || true
+ exit 0
+fi
+
+if [ "$GNUPGHOME" != "`pwd`" ]; then
+ echo "inittests: please set GNUPGHOME to the test directory" >&2
+ exit 1
+fi
+
+if [ -n "$GPG_AGENT_INFO" ]; then
+ echo "inittests: please unset GPG_AGENT_INFO" >&2
+ exit 1
+fi
+
+# A stamp file used with --clean
+echo gnupg-test-directory > testdir.stamp
+
+
+# Create the private key directy if it does not exists and copy
+# the sample keys.
+[ -d private-keys-v1.d ] || mkdir private-keys-v1.d
+for i in ${private_keys}; do
+ cat ${srcdir}/samplekeys/$i.key >private-keys-v1.d/$i.key
+done
+
+# Create the configuration scripts
+# Note, die to an expired test certificate, we need to use
+# the faked system time option.
+cat > gpgsm.conf <<EOF
+no-secmem-warning
+disable-crl-checks
+agent-program ../agent/gpg-agent
+faked-system-time 1038835799
+EOF
+
+cat > gpg-agent.conf <<EOF
+no-grab
+pinentry-program /home/wk/work/pinentry/gtk/pinentry-gtk
+EOF
+
+cat > trustlist.txt <<EOF
+# CN=test cert 1,OU=Aegypten Project,O=g10 Code GmbH,L=Düsseldorf,C=DE
+3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E S
+EOF
+
+# Make sure that the sample certs are available but ignore errors here
+# because we are not a test script.
+for i in ${sample_certs}; do
+ $GPGSM --import ${srcdir}/samplekeys/$i || true
+done