diff --git a/ChangeLog b/ChangeLog index 99547d5dc..be215c85d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,309 +1,315 @@ +Wed Jul 7 13:08:40 CEST 1999 Werner Koch + + + * Makefile.am: Support for libtool. + * configure.in: Ditto. + Tue Jun 29 21:44:25 CEST 1999 Werner Koch * configure.in (use_local_zlib): The lost dollar is back. * acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): Add EMX case. * configure.in: Another variant of the MX vendor string * configure.in (--with-capabilities): Some test code (Remi). Sat Jun 26 12:15:59 CEST 1999 Werner Koch * acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Support for HPUX and IRIX. * configure.in (HAVE_DL_SHL_LOAD): New for HPUX (Dave Dykstra). * VERSION: Now 0.9.8 Wed Jun 16 20:16:21 CEST 1999 Werner Koch * configure.in: Add test for docbook-to-man Tue Jun 15 12:21:08 CEST 1999 Werner Koch * acinclude.m4 (GNUPG_SYS_NM_PARSE): Support for {net,free}bsd, Thu Jun 10 14:18:23 CEST 1999 Werner Koch * configure.in (ZLIB,GDBM): Check both, header and lib. Sat Jun 5 15:30:33 CEST 1999 Werner Koch * pkclist.c (key_present_in_pk_list): New (Michael). Tue May 25 19:50:32 CEST 1999 Werner Koch * configure.in (IS_DEVELOPMENT_VERSION): Fixed detection. Sun May 23 14:20:22 CEST 1999 Werner Koch * acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): assume yes when cross-compiling. Mon May 17 21:54:43 CEST 1999 Werner Koch * configure.in (socket): Fix for Unisys by Katsuhiro Kondou. Sat May 8 19:28:08 CEST 1999 Werner Koch * NEWS: Add a marker line which I forgot to do for 0.9.6. Thu May 6 14:18:17 CEST 1999 Werner Koch * README: Minor updates * VERSION: Now 0.9.6 Thu Apr 8 09:35:53 CEST 1999 Werner Koch * acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Fix for amiga-openbsd (Peter Reich) (GNUPG_PROG_NM): Ditto Wed Apr 7 20:51:39 CEST 1999 Werner Koch * Makefile.am (g10defs.h): Removed. * configure.in (AC_OUTPUT_COMMANDS): Create g10defs.h Sat Mar 20 12:55:33 CET 1999 Werner Koch * VERSION: Now 0.9.5 Sun Mar 14 19:34:36 CET 1999 Werner Koch * acinclude.m4 (AM_SYS_SYMBOL_UNDERSCORE): Removed because it is now in the latest libtool. Thu Mar 11 16:39:46 CET 1999 Werner Koch * configure.in: Removed the need for libtool Mon Mar 8 20:47:17 CET 1999 Werner Koch * configure.in (DLSYM_NEEDS_UNDERSCORE): Replaced. * acinclude.in (AM_SYS_SYMBOL_UNDERSCORE): New. * VERSION: Now 0.9.4 Sun Feb 28 19:11:00 CET 1999 Werner Koch * configure.in (dld): Test disabled. Fri Feb 26 17:55:41 CET 1999 Werner Koch * encode.c (encode_simple): temporary fix. Wed Feb 24 11:07:27 CET 1999 Werner Koch * configure.in: New option --enable-static-rnd. Mon Feb 22 20:04:00 CET 1999 Werner Koch * BUGS: Now we assign bug numbers. * OBUGS: New to keep rack o fixed bugs (CVS only) Fri Feb 19 18:01:54 CET 1999 Werner Koch * VERSION: Released 0.9.3 Fri Feb 19 15:49:15 CET 1999 Werner Koch * acinclude.m4: Removed gettext macros. Tue Feb 16 14:10:02 CET 1999 Werner Koch * configure.in (socket): Check for -lsocket and -lnsl. (osf4): Disable all warnings for DEC's cc. (-Wall): Add more warning options for gcc Sat Feb 13 12:04:43 CET 1999 Werner Koch * configure.in: Changed detection of compiler flags. * intl/ : Removed directory Wed Feb 10 17:15:39 CET 1999 Werner Koch * acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Fix for freebsd 2.2 * configure.in: a lot of changes to allow selection of modules. Add support for OS/2. * acinclude.m4: add some more caching * README: Spelling and grammar corrections (John A. Martin) * INSTALL: Ditto. Wed Jan 20 21:40:21 CET 1999 Werner Koch * configure.in: --enable-m-guard is now default Wed Jan 13 12:49:36 CET 1999 Werner Koch * INSTALL: Applied new information how to build rpms by Fabio Coatti * Makefile.in (gnupg.spec): Changed the names. Tue Jan 12 11:17:18 CET 1999 Werner Koch * config.links (m68k-atari-mint): New Tue Jan 12 09:17:19 CET 1999 GaКl QuИri * all: Fixed typos all over the place Sat Jan 9 16:02:23 CET 1999 Werner Koch * configure.in: Add a way to statically link rndunix Sun Jan 3 15:28:44 CET 1999 Werner Koch * acinclude.m4 (GNUPG_CHECK_RDYNAMIC): New. * configure.in (DYNLOAD_CFLAGS): Use result from CHECK_RDYNAMIC Wed Dec 23 13:18:14 CET 1998 Werner Koch * README: Replaced the command overview with a short intro. Sat Dec 12 18:40:32 CET 1998 Werner Koch * configure.in: Add check for dlopen in libc (Greg Troxel) and a new define * acconfig.h (DLSYM_NEEDS_UNDERSCORE): New. Thu Dec 10 20:15:36 CET 1998 Werner Koch * acinclude.m (GNUPG_CHECK_PIC): New * configure.in, acinclude.m4: Renamed all WK_ to GNUPG_ Tue Dec 8 15:09:29 CET 1998 Werner Koch * VERSION: Set to 0.4.5 Wed Nov 25 12:38:29 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in (USE_RNDLINUX): New. Fri Nov 20 19:34:57 1998 Werner Koch (wk@isil.d.shuttle.de) * VERSION: Released 0.4.4 * configure.in (try_asm_modules): For option --disable-asm Tue Nov 10 19:32:40 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in (MPI_SFLAGS): New. Tue Nov 10 13:44:53 1998 Werner Koch (wk@isil.d.shuttle.de) * ABOUT-NLS: New * configure.in (AC_REVISION): New. Sun Nov 8 18:20:35 1998 Werner Koch (wk@isil.d.shuttle.de) * VERSION: Set to 0.4.3 Sun Oct 25 19:49:37 1998 Werner Koch (wk@isil.d.shuttle.de) * Makefile.am (g10defs.h): New macro GNUPG_DATADIR. Wed Oct 21 17:24:24 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in: Removed gettext kludge * acinclude.m4: Add patched AM_WITH_NKS macro Tue Oct 20 19:03:36 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in: Kludge to make AM_GNU_GETTEXT work, changed some macors to more modern versions. Also changeg the all makefiles to remove duplicate ../intl. * acinclude.m4: Removed the gettext stuff, as this already comes with automake now. Wed Oct 14 12:11:34 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in (NAME_OF_DEV_RANDOM): New. (DYNLINK_MOD_CFLAGS): New. Thu Oct 8 10:55:15 1998 Werner Koch (wk@isil.d.shuttle.de) * Makefile.am (g10defs.h): creates include file * acconfig.h: now includes g10defs.h * configure.in: Removed G10_LOCALEDIR and GNUPG_LIB Thu Sep 17 18:49:40 1998 Werner Koch (wk@(none)) * Makefile.am (dist-hook): Now creates RPM file. * scripts/gnupg.spec: New template file for RPMs Thu Jul 30 19:17:07 1998 Werner Koch (wk@(none)) * acinclude.h (WK_CHECK_IPC): New * configure.in : Add checks for SysV IPC Thu Jun 25 11:18:49 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in (--disable-dynload): New. Wed Jun 10 07:48:59 1998 Werner Koch,mobil,,, (wk@tobold) * configure.in (GNUPG_LIBDIR): New. Mon May 25 19:10:59 1998 Werner Koch (wk@isil.d.shuttle.de) * rand-unix.c (fast_random_poll): fixed syntax bug. Mon May 11 10:21:31 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in (PRINTABLE_OS_NAME): Linux is now GNU/Linux Tue Apr 14 19:08:05 1998 Werner Koch (wk@isil.d.shuttle.de) * [all files]: Applied Matthew Skala's typo and grammar fixes. Wed Mar 4 10:32:40 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in (getrusage,gettimeofday): New tests. Fri Feb 27 13:14:17 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in (--disable-m-guard): New. Thu Feb 26 17:09:27 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in, acinclude.m4, intl/, po/: New macros taken from GNOME, switched to automake 1.2f Thu Feb 26 09:05:46 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in (doc/Makefile): New Thu Feb 26 07:40:47 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in: Changed gettext stuff Wed Feb 25 11:44:10 1998 Werner Koch (wk@isil.d.shuttle.de) * checks/*test : restructured the directory. Tue Feb 24 15:59:12 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in: Changed the name of the package to GNUPG and chnaged several other names too. Wed Feb 18 17:36:45 1998 Werner Koch (wk@isil.d.shuttle.de) * Makefile.am (checks): New. Sat Feb 14 15:37:55 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in (mpi_config_done): Removed asm links caching. Sat Feb 14 14:02:20 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in (PRINTABLE_OS_NAME): New. * acconfig.h: Likewise. Fri Feb 13 19:43:41 1998 Werner Koch (wk@isil.d.shuttle.de) * configure.in : Fixed zlib stuff * Makefile.am: Likewise diff --git a/Makefile.am b/Makefile.am index b07b909fe..d825afc6b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,42 +1,45 @@ ## Process this file with automake to produce Makefile.in if COMPILE_LIBGCRYPT gcrypt = gcrypt else gcrypt = endif SUBDIRS = intl zlib util mpi cipher tools g10 po doc checks ${gcrypt} EXTRA_DIST = VERSION PROJECTS BUGS dist-hook: @set -e; \ for file in `cd $(top_srcdir); find . -type f -name distfiles`; do \ dir=`dirname $$file` ; $(mkinstalldirs) $(distdir)/$$dir ; \ for i in distfiles `cat $(top_srcdir)/$$file` ; do \ ln $(top_srcdir)/$$dir/$$i $(distdir)/$$dir/$$i 2> /dev/null \ || cp -p $(top_srcdir)/$$dir/$$i $(distdir)/$$dir/$$i; \ done ; \ done @set -e; \ sed -e 's/@pkg_version@/$(VERSION)/g' \ $(top_srcdir)/scripts/gnupg.spec.in \ > $(distdir)/scripts/gnupg.spec + rm $(distdir)/gcrypt/*.[ch] -# maintainer only +if MAINTAINER_MODE +# This is only useful within my local environment (wk) cvs-get: rsync -Cavuzb --exclude scratch --exclude .deps \ wkoch@sigtrap.guug.de:work/gnupg . cvs-put: rsync -Cavuzb --exclude .deps --exclude scratch \ . wkoch@sigtrap.guug.de:work/gnupg cvs-sync: cvs-get cvs-put +endif .PHONY: cvs-get cvs-put cvs-sync diff --git a/NEWS b/NEWS index 185104f91..da00e57f4 100644 --- a/NEWS +++ b/NEWS @@ -1,749 +1,752 @@ * New options --[no-]utf8-strings. * New edit-menu commands "enable" and "disable" for entire keys. * You will be asked for a filename if gpg cannot deduce one. + * Changes to support libtool which is needed for the development + of libgcrypt. + Noteworthy changes in version 0.9.8 ----------------------------------- * New subcommand "delsig" in the edit menu. * The name of the output file is not anymore the one which is embedded in the processed message, but the used filename with the extension stripped. To revert to the old behaviour you can use the option --use-embedded-filename. * Another hack to cope with pgp2 generated detached signatures. * latin-2 character set works (--charset=iso-8859-2). * New option --with-key-data to list the public key parameters. New option -N to insert notations and a --set-policy-url. A couple of other options to allow reseting of options. * Better support for HPUX. Noteworthy changes in version 0.9.7 ----------------------------------- * Add some work arounds for a bugs in pgp 2 which led to bad signatures when used with canoncial texts in some cases. * Enhanced some status outputs. Noteworthy changes in version 0.9.6 ----------------------------------- * Twofish is now statically linked by default. The experimental 128 bit version is now disabled. Full support will be available as soon as the OpenPGP WG has decided on an interpretation of rfc2440. * Dropped support for the ancient Blowfish160 which is not OpenPGP. * Merged gpgm and gpg into one binary. * Add "revsig" and "revkey" commands to the edit menu. It is now possible to revoke signature and subkeys. Noteworthy changes in version 0.9.5 ----------------------------------- * New command "lsign" in the keyedit menu to create non-exportable signatures. Removed --trusted-keys option. * A bunch of changes to the key validation code. * --list-trust-path now has an optional --with-colons format. * New command --recv-keys to import keys from an keyserver. Noteworthy changes in version 0.9.4 ----------------------------------- * New configure option --enable-static-rnd=[egd|linux|unix|none] to select a random gathering module for static linking. * The original text is now verbatim copied to a cleartext signed message. * Bugfixes but there are still a couple of bugs. Noteworthy changes in version 0.9.3 ----------------------------------- * Changed the internal design of getkey which now allows a efficient lookup of multiple keys and add a word match mode. * New options --[no-]encrypt-to. * Some changes to the configure stuff. Switched to automake 1.4. Removed intl/ from CVS, autogen.sh now uses gettextize. * Preferences now include Twofish. Removed preference to Blowfish with a special hack to suppress the "not listed in preferences" warning; this is to allow us to switch completely to Twofish in the near future. * Changed the locking stuff. * Print all user ids of a good signature. Noteworthy changes in version 0.9.2 ----------------------------------- * add some additional time warp checks. * Option --keyserver and command --send-keys to utilize HKP servers. * Upgraded to zlib 1.1.3 and fixed an inflate bug * More cleanup on the cleartext signatures. Noteworthy changes in version 0.9.1 ----------------------------------- * Polish language support. * When querying the passphrase, the key ID of the primary key is displayed along with the one of the used secondary key. * Fixed a bug occurring when decrypting pgp 5 encrypted messages, fixed an infinite loop bug in the 3DES code and in the code which looks for trusted signatures. * Fixed a bug in the mpi library which caused signatures not to compare okay. * Rewrote the handling of cleartext signatures; the code is now better maintainable (I hope so). * New status output VALIDSIG only for valid signatures together with the fingerprint of the signer's key. Noteworthy changes in version 0.9.0 ----------------------------------- * --export does now only exports rfc2440 compatible keys; the old behaviour is available with --export-all. Generation of v3 ElGamal (sign and encrypt) keys is not longer supported. * Fixed the uncompress bug. * Rewrote the rndunix module. There are two environment variables used for debugging now: GNUPG_RNDUNIX_DBG give the file to write debugging information (use "-" for stdout) and if GNUPG_RNDUNIX_DBGALL is set, all programs which are only tried are also printed. * New option --escape-from-lines to "dash-escape" "From " lines to prevent mailers to change them to ">From ". This is not enabled by default because it is not in compliance with rfc2440 - however, you should turn it on. Noteworthy changes in version 0.4.5 ----------------------------------- * The keyrings and the trustdb is now locked, so that other GnuPG processes won't damage these files. You may want to put the option --lock-once into your options file. * The latest self-signatures are now used; this enables --import to see updated preferences etc. * Import of subkeys should now work. * Random gathering modules may now be loaded as extensions. Add such a module for most Unices but it is very experimental! * Brazilian language support. Noteworthy changes in version 0.4.4 ----------------------------------- * Fixed the way the key expiration time is stored. If you have an expiration time on your key you should fix it with --edit-key and the command "expire". I apologize for this inconvenience. * Add option --charset to support "koi8-r" encoding of user ids. (Not yet tested). * Preferences should now work again. You should run "gpgm --check-trustdb \*" to rebuild all preferences. * Checking of certificates should now work but this needs a lot of testing. Key validation values are now cached in the trustdb; they should be recalculated as needed, but you may use --check-trustdb or --update-trustdb to do this. * Spanish translation by Urko Lusa. * Patch files are from now on signed. See the man page for the new option --not-dash-escaped. * New syntax: --edit-key [] If you run it without --batch the commands are executed and then you are put into normal mode unless you use "quit" or "save" as one of the commands. When in batch mode, the program quits after the last command, so you have to use "save" if you did some changes. It does not yet work completely, but may be used to list so the keys etc. Noteworthy changes in version 0.4.3 ----------------------------------- * Fixed the gettext configure bug. * Kludge for RSA keys: keyid and length of a RSA key are correctly reported, but you get an error if you try to use this key (If you do not have the non-US version). * Experimental support for keyrings stored in a GDBM database. This is *much* faster than a standard keyring. You will notice that the import gets slower with time; the reason is that all new keys are used to verify signatures of previous inserted keys. Use "--keyring gnupg-gdbm:". This is not (yet) supported for secret keys. * A Russian language file in the distribution (alternatives are in the contrib directory of the FTP servers) * commandline option processing now works as expected for GNU programs with the exception that you can't mix options and normal arguments. * Now --list-key lists all matching keys. This is needed in some other places too. Noteworthy changes in version 0.4.2 ----------------------------------- * This is only a snapshot: There are still a few bugs. * Fixed this huge memory leak. * Redesigned the trust database: You should run "gpgm --check-trustdb". New command --update-trustdb, which adds new key from the public keyring into your trustdb * Fixed a bug in the armor code, leading to invalid packet errors. (a workaround for this was to use --no-armor). The shorten line length (64 instead of 72) fixes a problem with pgp5 and keyservers. * comment packets are not anymore generated. "--export" filters them out. One Exception: The comment packets in a secret keyring are still used because they carry the factorization of the public prime product. * --import now only looks for KEYBLOCK headers, so you can now simply remove the "- " in front of such a header if someone accidently signed such a message or the keyblock is part of a cleartext signed message. * --with-colons now lists the key expiration time and not anymore the valid period. * Some keyblocks created with old releases have a wrong sequence of packets, so that the keyservers don't accept these keys. Simply using "--edit-key" fixes the problem. * New option --force-v3-sigs to generate signed messages which are compatible to PGP 5. * Add some code to support DLD (for non ELF systems) - but this is not tested because my BSD box is currently broken. * New command "expire" in the edit-key menu. Noteworthy changes in version 0.4.1 ----------------------------------- * A secondary key is used when the primary key is specified but cannot be used for the operation (if it is a sign-only key). * GNUPG can now handle concatenated armored messages: There is still a bug if different kinds of messages are mixed. * Iterated+Salted passphrases now work. If want to be sure that PGP5 is able to handle them you may want to use the options "--s2k-mode 3 --s2k-cipher-algo cast5 --s2k-digest-algo sha1" when changing a passphrase. * doc/OpenPGP talks about OpenPGP compliance, doc/HACKING gives a few hints about the internal structure. * Checked gnupg against the August 1998 draft (07) and I believe it is in compliance with this document (except for one point). * Fixed some bugs in the import merging code and rewrote some code for the trustdb. Noteworthy changes in version 0.4.0 ----------------------------------- * Triple DES is now supported. Michael Roth did this piece of needed work. We have now all the coded needed to be OpenPGP compliant. * Added a simple rpm spec file (see INSTALL). * detached and armored signatures are now using "PGP SIGNATURE", except when --rfc1991 is used. * All times which are not in the yyy-mm-dd format are now printed in local time. Noteworthy changes in version 0.3.5 ----------------------------------- * New option --throw-keyid to create anonymous enciphered messages. If gpg detects such a message it tires all available secret keys in turn so decode it. This is a gnupg extension and not in OpenPGP but it has been discussed there and afaik some products use this scheme too (Suggested by Nimrod Zimmerman). * Fixed a bug with 5 byte length headers. * --delete-[secret-]key is now also available in gpgm. * cleartext signatures are not anymore converted to LF only. * Fixed a trustdb problem. Run "gpgm --check-trustdb" to fix old trust dbs. * Building in another directory should now work. * Weak key detection mechanism (Niklas Hernaeus). Noteworthy changes in version 0.3.4 ----------------------------------- * New options --comment and --set-filename; see g10/OPTIONS * yes/no, y/n localized. * Fixed some bugs. Noteworthy changes in version 0.3.3 ----------------------------------- * IMPORTANT: I found yet another bug in the way the secret keys are encrypted - I did it the way pgp 2.x did it, but OpenPGP and pgp 5.x specify another (in some aspects simpler) method. To convert your secret keys you have to do this: 1. Build the new release but don't install it and keep a copy of the old program. 2. Disable the network, make sure that you are the only user, be sure that there are no Trojan horses etc .... 3. Use your old gpg (version 0.3.[12]) and set the passphrases of ALL your secret keys to empty! (gpg --change-passphrase your-user-id). 4. Save your ownertrusts (see the next point) 5. rm ~/.gnupg/trustdb.gpg 6. install the new version of gpg (0.3.3) 7. For every secret key call "gpg --edit-key your-user-id", enter "passwd" at the prompt, follow the instructions and change your password back, enter "save" to store it. 8. Restore the ownertrust (see next point). * The format of the trust database has changed; you must delete the old one, so gnupg can create a new one. IMPORTANT: Use version 0.3.[12] to save your assigned ownertrusts ("gpgm --list-ownertrust >saved-trust"); then build this new version and restore the ownertrust with this new version ("gpgm --import-ownertrust saved-trust"). Please note that --list-ownertrust has been renamed to --export-ownertrust in this release and it does now only export defined ownertrusts. * The command --edit-key now provides a commandline driven menu which can be used for various tasks. --sign-key is only an an alias to --edit-key and maybe removed in future: use the command "sign" of this new menu - you can select which user ids you want to sign. * Alternate user ids can now be created an signed. * Owner trust values can now be changed with --edit-key (trust) * GNUPG can now run as a coprocess; this enables sophisticated frontends. tools/shmtest.c is a simple sample implementation. This needs some more work: all tty_xxx() are to be replaced by cpr_xxx() and some changes in the display logics is needed. * Removed options --gen-prime and --gen-random. * Removed option --add-key; use --edit-key instead. * Removed option --change-passphrase; use --edit-key instead. * Signatures are now checked even if the output file could not be created. Command "--verify" tries to find the detached data. * gpg now disables core dumps. * compress and symmetric cipher preferences are now used. Because there is no 3DES yet, this is replaced by Blowfish. * We have added the Twofish as an experimental cipher algorithm. Many thanks to Matthew Skala for doing this work. Twofish is the AES submission from Schneier et al.; see "www.counterpane.com/twofish.html" for more information. * Started with a help system: If you enter a question mark at some prompt; you should get a specific help for this prompt. * There is no more backup copy of the secret keyring. * A lot of new bugs. I think this release is not as stable as the previous one. Noteworthy changes in version 0.3.2 ----------------------------------- * Fixed some bugs when using --textmode (-seat) * Now displays the trust status of a positive verified message. * Keyrings are now scanned in the sequence they are added with --[secret-]keyring. Note that the default keyring is implicitly added as the very first one unless --no-default-keyring is used. * Fixed setuid and dlopen bug. Noteworthy changes in version 0.3.1 ----------------------------------- * Partial headers are now written in the OpenPGP format if a key in a v4 packet is used. * Removed some unused options, removed the gnupg.sig stuff. * Key lookup by name now returns a key which can be used for the desired action. * New options --list-ownertrust (gpgm) to make a backup copy of the ownertrust values you assigned. * clear signature headers are now in compliance with OpenPGP. Noteworthy changes in version 0.3.0 ----------------------------------- * New option --emulate-checksum-bug. If your passphrase does not work anymore, use this option and --change-passphrase to rewrite your passphrase. * More complete v4 key support: Preferences and expiration time is set into the self signature. * Key generation defaults to DSA/ElGamal keys, so that new keys are interoperable with pgp5 * DSA key generation is faster and key generation does not anymore remove entropy from the random generator (the primes are public parameters, so there is really no need for a cryptographic secure prime number generator which we had used). * A complete new structure for representing the key parameters. * Removed most public key knowledge into the cipher library. * Support for dynamic loading of new algorithms. * Moved tiger to an extension module. Noteworthy changes in version 0.2.19 ------------------------------------ * Replaced /dev/urandom in checks with new tool mk-tdata. * Some assembler file cleanups; some more functions for the Alpha. * Tiger has now the OpenPGP assigned number 6. Because the OID has changed, old signatures using this algorithm can't be verified. * gnupg now encrypts the compressed packed and not any longer in the reverse order; anyway it can decrypt both versions. Thanks to Tom for telling me this (not security related) bug. * --add-key works and you are now able to generate subkeys. * It is now possible to generate ElGamal keys in v4 packets to create valid OpenPGP keys. * Some new features for better integration into MUAs. Noteworthy changes in version 0.2.18 ------------------------------------ * Splitted cipher/random.c, add new option "--disable-dev-random" to configure to support the development of a random source for other systems. Prepared sourcefiles rand-unix.c, rand-w32.c and rand-dummy.c (which is used to allow compilation on systems without a random source). * Fixed a small bug in the key generation (it was possible that 48 bits of a key were not taken from the random pool) * Add key generation for DSA and v4 signatures. * Add a function trap_unaligned(), so that a SIGBUS is issued on Alphas and not the slow emulation code is used. And success: rmd160 raised a SIGBUS. * Enhanced the formatting facility of argparse and changed the use of \r,\v to @ because gettext does not like it. * New option "--compress-algo 1" to allow the creation of compressed messages which are readable by PGP and "--print-md" (gpgm) to make speed measurement easier. Noteworthy changes in version 0.2.17 ------------------------------------ * Comment packets are now of private type 61. * Passphrase code still used a 160 bit blowfish key, added a silly workaround. Please change your passphrase again - sorry. * Conventional encryption now uses a type 3 packet to describe the used algorithms. * The new algorithm number for Blowfish is 20, 16 is still used for encryption only; for signing it is only used when it is in a v3 packet, so that GNUPG keys are still valid. Noteworthy changes in version 0.2.16 ------------------------------------ * Add experimental support for the TIGER/192 message digest algorithm. (But there is only a dummy ASN OID). * Standard cipher is now Blowfish with 128 bit key in OpenPGP's CFB mode. I renamed the old cipher to Blowfish160. Because the OpenPGP group refused to assign me a number for Blowfish160, I have to drop support for this in the future. You should use "--change-passphrase" to recode your current passphrase with 128 bit Blowfish. Noteworthy changes in version 0.2.15 ------------------------------------ * Fixed a bug with the old checksum calculation for secret keys. If you run the program without --batch, a warning does inform you if your secret key needs to be converted; simply use --change-passphrase to recalculate the checksum. Please do this soon, as the compatible mode will be removed sometime in the future. * CAST5 works (using the PGP's special CFB mode). * Again somewhat more PGP 5 compatible. * Some new test cases Noteworthy changes in version 0.2.14 ------------------------------------ * Changed the internal handling of keyrings. * Add support to list PGP 5 keyrings with subkeys * Timestamps of signatures are now verified. * A expiration time can now be specified during key generation. * Some speedups for Blowfish and SHA-1, rewrote SHA-1 transform. Reduced the amount of random bytes needed for key generation in some cases. Noteworthy changes in version 0.2.13 ------------------------------------ * Verify of DSA signatures works. * Re-implemented the slower random number generator. Noteworthy changes in version 0.2.12 ------------------------------------ * --delete-key checks that there is no secret key. The new option --delete-secret-key maybe used to delete a secret key. * "-kv" now works as expected. Options "--list-{keys,sigs]" and "--check-sigs" are now working. * New options "--verify" and "--decrypt" to better support integration into MUAs (partly done for Mutt). * New option "--with-colons" to make parsing of key lists easier. Noteworthy changes in version 0.2.11 ------------------------------------ * GPG now asks for a recipient's name if option "-r" is not used. * If there is no good trust path, the program asks whether to use the public keys anyway. * "--delete-key" works for public keys. What semantics shall I use when there is a secret key too? Delete the secret key or leave him and auto-regenerate the public key, next time the secret key is used? Noteworthy changes in version 0.2.10 ------------------------------------ * Code for the alpha is much faster (about 20 times); the data was misaligned and the kernel traps this, so nearly all time was used by system to trap the misalignments and to write syslog messages. Shame on me and thanks to Ralph for pointing me at this while drinking some beer yesterday. * Changed some configure options and add an option --disable-m-guard to remove the memory checking code and to compile everything with optimization on. * New environment variable GNUPGHOME, which can be used to set another homedir than ~/.gnupg. Changed default homedir for Windoze version to c:/gnupg. * Fixed detached signatures; detached PGP signatures caused a SEGV. * The Windoze version works (as usual w/o a strong RNG). Noteworthy changes in version 0.2.9 ----------------------------------- * Fixed FreeBSD bug. * Added a simple man page. * Switched to automake1.2f and a newer gettext. Noteworthy changes in version 0.2.8 ----------------------------------- * Changed the name to GNUPG, the binaries are called gpg and gpgm. You must rename rename the directory "~/.g10" to ~/.gnupg/, rename {pub,sec}ring.g10 to {pub,sec}ring.gpg, trustdb.g10 to trustdb.gpg and g10.sig to gnupg.sig. * New or changed passphrases are now salted. Noteworthy changes in version 0.2.7 ----------------------------------- * New command "gen-revoke" to create a key revocation certificate. * New option "homedir" to set the homedir (which defaults to "~/.g10"). This directory is created if it does not exists (only the last part of the name and not the complete hierarchy) * Command "import" works. (Try: "finger gcrypt@ftp.guug.de|g10 --import") * New commands "dearmor/enarmor" for g10maint. These are mainly used for internal test purposes. * Option --version now conforming to the GNU standards and lists the available ciphers, message digests and public key algorithms. * Assembler code for m68k (not tested). * "make check" works. Noteworthy changes in version 0.2.6 ----------------------------------- * Option "--export" works. Noteworthy changes in version 0.2.5 ----------------------------------- * Added zlib for systems which don't have it. Use "./configure --with-zlib" to link with the static version. * Generalized some more functions and rewrote the encoding of message digests into MPIs. * Enhanced the checkit script Noteworthy changes in version 0.2.4 ----------------------------------- * nearly doubled the speed of the ElGamal signature verification. * backup copies of keyrings are created. * assembler stuff for Pentium; gives about 15% better performance. * fixed a lot of bugs. Noteworthy changes in version 0.2.3 ----------------------------------- * Found a bug in the calculation of ELG fingerprints. This is now fixed, but all existing fingerprints and keyids for ELG keys are not any more valid. * armor should now work; including clear signed text. * moved some options to the new program g10maint * It's now 64 bit clean and runs fine on an alpha--linux. * Key generation is much faster now. I fixed this by using not so strong random number for the primes (this was a bug because the ElGamal primes are public parameters and it does not make sense to generate them from strong random). The real secret is the x value which is still generated from strong (okay: /dev/random) random bits. * added option "--status-fd": see g10/OPTIONS * We have secure memory on systems which support mlock(). It is not complete yet, because we do not have signal handler which does a cleanup in very case. We should also check the ulimit for the user in the case that the admin does not have set a limit on locked pages. * started with internationalization support. * The logic to handle the web of trust is now implemented. It is has some bugs; but I'm going to change the algorithm anyway. It works by calculating the trustlevel on the fly. It may ask you to provide trust parameters if the calculated trust probability is too low. I will write a paper which discusses this new approach. * a couple of changes to the configure script. * New option "--quick-random" which uses a much quicker random number generator. Keys generated while this option is in effect are flags with "INSECURE!" in the user-id. This is a development only option. * Read support for new version packets (OpenPGP). * Comment packets are now of correct OpenPGP type 16. Old comment packets written by G10 are detected because they always start with a hash which is an invalid version byte. * The string "(INSECURE!)" is appended to a new user-id if this is generated on a system without a good random number generator. diff --git a/TODO b/TODO index 34b009b03..7a70f6437 100644 --- a/TODO +++ b/TODO @@ -1,52 +1,50 @@ * add some status output put for signing and encryption. replace the putc in primegen with some kind of status-fd outputs. * Speed up calculation of key validity. * print a warning when a revoked/expired _secret_ key is used. * remove more "Fixmes" * when decryptiong multiple key: print a warning only if no usable pubkey encrypt package was found. Extension: display a list of all recipients. * Add NO_PUBKEY and NO_SECKEY status lines. * Solaris make has problems with the generated POTFILES - seems to be a gettext bug. * find a way to allow the import of non-self-signed keys. This is needed for the IN ENCR/SIGN hack. * Not all user names are correctly converted to UTF8. Nice to have ------------ * Let take --help an option to select some topics. * Offcial test vectors for 3DES-EDE3 * use DEL and ^H for erasing the previous character (util/ttyio.c). or better readline. * Print a warning if the directory mode is wrong. * replace the keyserver stuff either by a call to a specialized utility and SOCKSify this utility. * Do a real fix for bug #7 or document that it is a PGP 5 error. * preferences of hash algorithms are not yet used. - * new menu to delete signatures and list signature in menu * Replace the SIGUSR1 stuff by semaphores to avoid loss of a signal. or use POSIX.4 realtime signals. Overhaul the interface and the test program. Use it with the test suite? * add test cases for invalid data (scrambled armor or other random data) * add checking of armor trailers * Burn the buffers used by fopen(), or use read(2). Does this really make sense? And while we are at it: implement a secure deletion stuff? - * Stats about used random numbers. * the pubkey encrypt functions should do some sanity checks. * dynload: implement the hint stuff. * "gpg filename.tar.gz.asc" sollte wie mit --verify funktionieren (-sab). * for messages created with "-t", it might make sense to append the verification status of the message to the output (i.e. write something to the --output file and not only to stderr. diff --git a/cipher/ChangeLog b/cipher/ChangeLog index 2ce644a43..91a27704a 100644 --- a/cipher/ChangeLog +++ b/cipher/ChangeLog @@ -1,469 +1,474 @@ +Wed Jul 7 13:08:40 CEST 1999 Werner Koch + + + * Makefile.am: Support for libtool. + Fri Jul 2 11:45:54 CEST 1999 Werner Koch * dsa.c (gen_k): Changed algorithm to consume less random bytes * elgamal.c (gen_k): Ditto. * random.c (random_dump_stats): New. Thu Jul 1 12:47:31 CEST 1999 Werner Koch * primegen.c, elgamal.c, dsa.c (progess): New and replaced all fputc with a call to this function. Sat Jun 26 12:15:59 CEST 1999 Werner Koch * rndegd.c (do_write): s/ssize_t/int/ due to SunOS 4.1 probs. * cipher.c (do_cbc_encrypt, do_cbc_decrypt): New. * dynload.c (HAVE_DL_SHL_LOAD): Map hpux API to dlopen (Dave Dykstra). * Makefile.am (install-exec-hook): Removed. Sun May 23 14:20:22 CEST 1999 Werner Koch * cipher.c (setup_cipher_table): Enable Twofish * random.c (fast_random_poll): Disable use of times() for mingw32. Mon May 17 21:54:43 CEST 1999 Werner Koch * dynload.c (register_internal_cipher_extension): Minor init fix. Tue May 4 15:47:53 CEST 1999 Werner Koch * primegen.c (gen_prime): Readded the Fermat test. Fixed the bug that we didn't correct for step when passing the prime to the Rabin-Miller test which led to bad performance (Stefan Keller). (check_prime): Add a first Fermat test. Sun Apr 18 10:11:28 CEST 1999 Werner Koch * cipher.c (cipher_setiv): Add ivlen arg, changed all callers. * random.c (randomize_buffer): alway use secure memory because we can't use m_is_secure() on a statically allocated buffer. * twofish.c: Replaced some macros by a loop to reduce text size. * Makefile.am (twofish): No more need for sed editing. Fri Apr 9 12:26:25 CEST 1999 Werner Koch * cipher.c (cipher_open): Reversed the changes for AUTO_CFB. * blowfish.c: Dropped the Blowfish 160 mode. * cipher.c (cipher_open): Ditto. (setup_cipher_table): Ditto. And removed support of twofish128 Wed Apr 7 20:51:39 CEST 1999 Werner Koch * random.c (get_random_bits): Can now handle requests > POOLSIZE * cipher.c (cipher_open): Now uses standard CFB for automode if the blocksize is gt 8 (according to rfc2440). * twofish.c: Applied Matthew Skala's patches for 256 bit key. Tue Apr 6 19:58:12 CEST 1999 Werner Koch * random.c (get_random_bits): Can now handle requests > POOLSIZE * cipher.c (cipher_open): Now uses standard CFB for automode if the blocksize is gt 8 (according to rfc2440). Sat Mar 20 11:44:21 CET 1999 Werner Koch * rndlinux.c (tty_printf) [IS_MODULE]: Removed. * rndegd.c (gather_random): Some fixes. Wed Mar 17 13:09:03 CET 1999 Werner Koch * rndegd.c (do_read): New. (gather_random): Changed the implementation. Mon Mar 8 20:47:17 CET 1999 Werner Koch * dynload.c (DLSYM_NEEDS_UNDERSCORE): Renamed. Fri Feb 26 17:55:41 CET 1999 Werner Koch * md.c: Nearly a total rewrote. Wed Feb 24 11:07:27 CET 1999 Werner Koch * cipher.c (context): Fixed alignment * md.c: Ditto. * rndegd.c: New Mon Feb 22 20:04:00 CET 1999 Werner Koch * rndegd.c: New. Wed Feb 10 17:15:39 CET 1999 Werner Koch * Makefile.am: Modules are now figured out by configure * construct.c: New. Generated by configure. Changed all modules to work with that. * sha1.h: Removed. * md5.h: Removed. * twofish.c: Changed interface to allow Twofish/256 * rndunix.c (start_gatherer): Die on SIGPIPE. Wed Jan 20 18:59:49 CET 1999 Werner Koch * rndunix.c (gather_random): Fix to avoid infinite loop. Sun Jan 17 11:04:33 CET 1999 Werner Koch * des.c (is_weak_key): Replace system memcmp due to bugs in SunOS's memcmp. (des_get_info): Return error on failed selftest. * twofish.c (twofish_setkey): Return error on failed selftest or invalid keylength. * cast5.c (cast_setkey): Ditto. * blowfish.c (bf_setkey): Return error on failed selftest. Tue Jan 12 11:17:18 CET 1999 Werner Koch * random.c (random_is_faked): New. * tiger.c: Only compile if we have the u64 type Sat Jan 9 16:02:23 CET 1999 Werner Koch * rndunix.c (gather_random): check for setuid. * Makefile.am: Add a way to staically link random modules Thu Jan 7 18:00:58 CET 1999 Werner Koch * md.c (md_stop_debug): Do a flush first. (md_open): size of buffer now depends on the secure parameter Sun Jan 3 15:28:44 CET 1999 Werner Koch * rndunix.c (start_gatherer): Fixed stupid ==/= bug 1998-12-31 Geoff Keating * des.c (is_weak_key): Rewrite loop end condition. Tue Dec 29 14:41:47 CET 1998 Werner Koch * random.c: add unistd.h for getpid(). (RAND_MAX): Fallback value for Sun. Wed Dec 23 17:12:24 CET 1998 Werner Koch * md.c (md_copy): Reset debug. Mon Dec 14 21:18:49 CET 1998 Werner Koch * random.c (read_random_source): Changed the interface to the random gathering function. (gather_faked): Use new interface. * dynload.c (dynload_getfnc_fast_random_poll): Ditto. (dynload_getfnc_gather_random): Ditto. * rndlinux.c (gather_random): Ditto. * rndunix.c (gather_random): Ditto. Sat Dec 12 18:40:32 CET 1998 Werner Koch * dynload.c (SYMBOL_VERSION): New to cope with system which needs underscores. * rndunix.c: Rewrote large parts Thu Dec 10 20:15:36 CET 1998 Werner Koch * dynload.c (load_extension): increased needed verbosity level. * random.c (fast_random_poll): Fallback to a default fast random poll function. (read_random_source): Always use the faked entroy gatherer if no gather module is available. * rndlinux.c (fast_poll): Removed. * rndunix.c (fast_poll): Removed. Wed Nov 25 12:33:41 1998 Werner Koch (wk@isil.d.shuttle.de) * rand-*.c: Removed. * rndlinux.c : New. * rndunix.c : New. * random.c : Restructured the interface to the gather modules. (intialize): Call constructor functions (read_radnom_source): Moved to here. * dynload.c (dynload_getfnc_gather_random): New. (dynload_getfnc_fast_random_poll): New. (register_internal_cipher_extension): New. (register_cipher_extension): Support of internal modules. Sun Nov 8 17:44:36 1998 Werner Koch (wk@isil.d.shuttle.de) * rand-unix.c (read_random_source): Removed the assert. Mon Oct 19 18:34:30 1998 me,,, (wk@tobold) * pubkey.c: Hack to allow us to give some info about RSA keys back. Thu Oct 15 11:47:57 1998 Werner Koch (wk@isil.d.shuttle.de) * dynload.c: Support for DLD Wed Oct 14 12:13:07 1998 Werner Koch (wk@isil.d.shuttle.de) * rand-unix.c: Now uses names from configure for /dev/random. 1998-10-10 SL Baur * Makefile.am: fix sed -O substitutions to catch -O6, etc. Tue Oct 6 10:06:32 1998 Werner Koch (wk@isil.d.shuttle.de) * rand-unix.c (HAVE_GETTIMEOFDAY): Fixed (was ..GETTIMEOFTIME :-) * rand-dummy.c (HAVE_GETTIMEOFDAY): Ditto. Mon Sep 28 13:23:09 1998 Werner Koch (wk@isil.d.shuttle.de) * md.c (md_digest): New. (md_reset): New. Wed Sep 23 12:27:02 1998 Werner Koch (wk@isil.d.shuttle.de) * tiger.c (TIGER_CONTEXT): moved "buf", so that it is 64 bit aligned. Mon Sep 21 06:22:53 1998 Werner Koch (wk@(none)) * des.c: Some patches from Michael. Thu Sep 17 19:00:06 1998 Werner Koch (wk@(none)) * des.c : New file from Michael Roth Mon Sep 14 11:10:55 1998 Werner Koch (wk@(none)) * blowfish.c (bf_setkey): Niklas Hernaeus patch to detect weak keys. Mon Sep 14 09:19:25 1998 Werner Koch (wk@(none)) * dynload.c (RTLD_NOW): Now defined to 1 if it is undefined. Mon Sep 7 17:04:33 1998 Werner Koch (wk@(none)) * Makefile.am: Fixes to allow a different build directory Thu Aug 6 17:25:38 1998 Werner Koch,mobil,,, (wk@tobold) * random.c (get_random_byte): Removed and changed all callers to use get_random_bits() Mon Jul 27 10:30:22 1998 Werner Koch (wk@(none)) * cipher.c : Support for other blocksizes (cipher_get_blocksize): New. * twofish.c: New. * Makefile.am: Add twofish module. Mon Jul 13 21:30:52 1998 Werner Koch (wk@isil.d.shuttle.de) * random.c (read_pool): Simple alloc if secure_alloc is not set. (get_random_bits): Ditto. Thu Jul 9 13:01:14 1998 Werner Koch (wk@isil.d.shuttle.de) * dynload.c (load_extension): Function now nbails out if the program is run setuid. Wed Jul 8 18:58:23 1998 Werner Koch (wk@isil.d.shuttle.de) * rmd160.c (rmd160_hash_buffer): New. Thu Jul 2 10:50:30 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.c (cipher_open): algos >=100 use standard CFB Thu Jun 25 11:18:25 1998 Werner Koch (wk@isil.d.shuttle.de) * Makefile.am: Support for extensions Thu Jun 18 12:09:38 1998 Werner Koch (wk@isil.d.shuttle.de) * random.c (mix_pool): simpler handling for level 0 Mon Jun 15 14:40:48 1998 Werner Koch (wk@isil.d.shuttle.de) * tiger.c: Removed from dist, will reappear as dynload module Sat Jun 13 14:16:57 1998 Werner Koch (wk@isil.d.shuttle.de) * pubkey.c: Major changes to allow extensions. Changed the inteface of all public key ciphers and added the ability to load extensions on demand. * misc.c: Removed. Wed Jun 10 07:52:08 1998 Werner Koch,mobil,,, (wk@tobold) * dynload.c: New. * cipher.c: Major changes to allow extensions. Mon Jun 8 22:43:00 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.c: Major internal chnages to support extensions. * blowfish.c (blowfish_get_info): New and made all internal functions static, changed heder. * cast5.c (cast5_get_info): Likewise. Mon Jun 8 12:27:52 1998 Werner Koch (wk@isil.d.shuttle.de) * tiger.c (transform): Fix for big endian * cipher.c (do_cfb_decrypt): Big endian fix. Fri May 22 07:30:39 1998 Werner Koch (wk@isil.d.shuttle.de) * md.c (md_get_oid): Add a new one for TIGER. Thu May 21 13:24:52 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.c: Add support for a dummy cipher Thu May 14 15:40:36 1998 Werner Koch (wk@isil.d.shuttle.de) * rmd160.c (transform): fixed sigbus - I should better add Christian von Roques's new implemenation of rmd160_write. Fri May 8 18:07:44 1998 Werner Koch (wk@isil.d.shuttle.de) * rand-internal.h, rand-unix.c, rand-w32.c, rand_dummy.c: New * random.c: Moved system specific functions to rand-****.c Fri May 8 14:01:17 1998 Werner Koch (wk@isil.d.shuttle.de) * random.c (fast_random_poll): add call to gethrtime. Tue May 5 21:28:55 1998 Werner Koch (wk@isil.d.shuttle.de) * elgamal.c (elg_generate): choosing x was not correct, could yield 6 bytes which are not from the random pool, tsss, tsss.. Tue May 5 14:09:06 1998 Werner Koch (wk@isil.d.shuttle.de) * primegen.c (generate_elg_prime): Add arg mode, changed all callers and implemented mode 1. Mon Apr 27 14:41:58 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.c (cipher_get_keylen): New. Sun Apr 26 14:44:52 1998 Werner Koch (wk@isil.d.shuttle.de) * tiger.c, tiger.h: New. Wed Apr 8 14:57:11 1998 Werner Koch (wk@isil.d.shuttle.de) * misc.c (check_pubkey_algo2): New. Tue Apr 7 18:46:49 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.c: New * misc.c (check_cipher_algo): Moved to cipher.c * cast5.c: Moved many functions to cipher.c * blowfish.c: Likewise. Sat Apr 4 19:52:08 1998 Werner Koch (wk@isil.d.shuttle.de) * cast5.c: Implemented and tested. Wed Apr 1 16:38:27 1998 Werner Koch (wk@isil.d.shuttle.de) * elgamal.c (elg_generate): Faster generation of x in some cases. Thu Mar 19 13:54:48 1998 Werner Koch (wk@isil.d.shuttle.de) * blowfish.c (blowfish_decode_cfb): changed XOR operation (blowfish_encode_cfb): Ditto. Thu Mar 12 14:04:05 1998 Werner Koch (wk@isil.d.shuttle.de) * sha1.c (transform): Rewrote * blowfish.c (encrypt): Unrolled for rounds == 16 (decrypt): Ditto. Tue Mar 10 16:32:08 1998 Werner Koch (wk@isil.d.shuttle.de) * rmd160.c (transform): Unrolled the loop. Tue Mar 10 13:05:14 1998 Werner Koch (wk@isil.d.shuttle.de) * random.c (read_pool): Add pool_balance stuff. (get_random_bits): New. * elgamal.c (elg_generate): Now uses get_random_bits to generate x. Tue Mar 10 11:33:51 1998 Werner Koch (wk@isil.d.shuttle.de) * md.c (md_digest_length): New. Tue Mar 10 11:27:41 1998 Werner Koch (wk@isil.d.shuttle.de) * dsa.c (dsa_verify): Works. Mon Mar 9 12:59:08 1998 Werner Koch (wk@isil.d.shuttle.de) * dsa.c, dsa.h: Removed some unused code. Wed Mar 4 10:39:22 1998 Werner Koch (wk@isil.d.shuttle.de) * md.c (md_open): Add call to fast_random_poll. blowfish.c (blowfish_setkey): Ditto. Tue Mar 3 13:32:54 1998 Werner Koch (wk@isil.d.shuttle.de) * rmd160.c (rmd160_mixblock): New. * random.c: Restructured to start with a new RNG implementation. * random.h: New. Mon Mar 2 19:21:46 1998 Werner Koch (wk@isil.d.shuttle.de) * gost.c, gost.h: Removed because they did only conatin trash. Sun Mar 1 16:42:29 1998 Werner Koch (wk@isil.d.shuttle.de) * random.c (fill_buffer): removed error message if n == -1. Fri Feb 27 16:39:34 1998 Werner Koch (wk@isil.d.shuttle.de) * md.c (md_enable): No init if called twice. Thu Feb 26 07:57:02 1998 Werner Koch (wk@isil.d.shuttle.de) * primegen.c (generate_elg_prime): Changed the progress printing. (gen_prime): Ditto. Tue Feb 24 12:28:42 1998 Werner Koch (wk@isil.d.shuttle.de) * md5.c, md.5 : Replaced by a modified version of md5.c from GNU textutils 1.22. Wed Feb 18 14:08:30 1998 Werner Koch (wk@isil.d.shuttle.de) * md.c, md.h : New debugging support Mon Feb 16 10:08:47 1998 Werner Koch (wk@isil.d.shuttle.de) * misc.c (cipher_algo_to_string): New (pubkey_algo_to_string): New. (digest_algo_to_string): New. diff --git a/cipher/Makefile.am b/cipher/Makefile.am index af6d8024b..164a99b0e 100644 --- a/cipher/Makefile.am +++ b/cipher/Makefile.am @@ -1,100 +1,101 @@ ## Process this file with automake to produce Makefile.in INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/intl -noinst_LIBRARIES = libcipher.a +noinst_LTLIBRARIES = libcipher.la # The configure script greps the module names from the following lines. # You must also add all these names to EXTRA_PROGRAMS some lines below # and EXTRA_foo_SOURCES entries. # Hmmm is there a more easy way to do this? (EXTRA_PROGRAMS # might also list programs which are not modules) # MODULES: rndunix rndlinux rndegd # MODULES: sha1 rmd160 md5 tiger EXTRA_PROGRAMS = rndunix rndlinux rndegd \ sha1 rmd160 md5 tiger EXTRA_rndlinux_SOURCES = rndlinux.c EXTRA_rndunix_SOURCES = rndunix.c EXTRA_rndegd_SOURCES = rndegd.c EXTRA_md5_SOURCES = md5.c EXTRA_rmd160_SOURCES = rmd160.c EXTRA_sha1_SOURCES = sha1.c EXTRA_tiger_SOURCES = tiger.c if ENABLE_GNUPG_EXTENSIONS pkglib_PROGRAMS = @DYNAMIC_CIPHER_MODS@ else pkglib_PROGRAMS = endif DYNLINK_MOD_CFLAGS = -DIS_MODULE @DYNLINK_MOD_CFLAGS@ -libcipher_a_SOURCES = cipher.c \ +libcipher_la_LDFLAGS = +libcipher_la_SOURCES = cipher.c \ pubkey.c \ md.c \ dynload.c \ dynload.h \ des.c \ des.h \ twofish.c \ blowfish.c \ blowfish.h \ cast5.c \ cast5.h \ elgamal.c \ elgamal.h \ primegen.c \ random.h \ random.c \ rand-internal.h \ rmd.h \ dsa.h \ dsa.c \ g10c.c \ smallprime.c \ construct.c # configure creates the constructor file BUILT_SOURCES = construct.c -libcipher_a_DEPENDENCIES = @STATIC_CIPHER_OBJS@ -libcipher_a_LIBADD = @STATIC_CIPHER_OBJS@ +libcipher_la_DEPENDENCIES = @STATIC_CIPHER_OBJS@ +libcipher_la_LIBADD = @STATIC_CIPHER_OBJS@ # If I remember it correct, automake 1.4 has a feature to set # fooFLAGS depending on the program. So we should check it out. tiger: $(srcdir)/tiger.c `echo $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o tiger $(srcdir)/tiger.c | \ sed -e 's/-O[2-9]*/-O1/g' ` tiger.o: $(srcdir)/tiger.c `echo $(COMPILE) -c $(srcdir)/tiger.c | sed -e 's/-O[2-9]*/-O1/g' ` #twofish: $(srcdir)/twofish.c # `echo $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o twofish $(srcdir)/twofish.c | \ # sed -e 's/-O[0-9]*/ /g' ` twofish: $(srcdir)/twofish.c $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o twofish $(srcdir)/twofish.c #twofish.o: $(srcdir)/twofish.c # `echo $(COMPILE) -c $(srcdir)/twofish.c | sed -e 's/-O[0-9]*/ /g' ` rndunix: $(srcdir)/rndunix.c $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o rndunix $(srcdir)/rndunix.c rndlinux: $(srcdir)/rndlinux.c $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o rndlinux $(srcdir)/rndlinux.c rndegd: $(srcdir)/rndegd.c $(COMPILE) $(DYNLINK_MOD_CFLAGS) -o rndegd $(srcdir)/rndegd.c diff --git a/configure.in b/configure.in index e5d79389d..d94a76a6b 100644 --- a/configure.in +++ b/configure.in @@ -1,647 +1,661 @@ dnl dnl Configure template for GNUPG dnl dnl (Process this file with autoconf to produce a configure script.) AC_REVISION($Revision$)dnl dnl Must reset CDPATH so that bash's cd does not print to stdout CDPATH= AC_PREREQ(2.13) AC_INIT(g10/g10.c) AC_CONFIG_AUX_DIR(scripts) AM_CONFIG_HEADER(config.h) VERSION=`cat $srcdir/VERSION` PACKAGE=gnupg ALL_LINGUAS="de es_ES fr it pl pt_BR ru" static_modules="sha1 md5 rmd160" AC_SUBST(VERSION) AC_SUBST(PACKAGE) AC_DEFINE_UNQUOTED(VERSION, "$VERSION") AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") MODULES_IN_CIPHER=`awk '/# MODULES: / { for(i=3;i<=NF;i++) print $i}' \ $srcdir/cipher/Makefile.am` dnl dnl Check for random module options dnl dnl Fixme: get the list of available modules from MODULES_IN_CIPHER dnl and check against this list AC_MSG_CHECKING([which static random module to use]) AC_ARG_ENABLE(static-rnd, [ --enable-static-rnd=[egd|unix|linux|none] ], [use_static_rnd=$enableval], [use_static_rnd=default] ) if test "$use_static_rnd" = no; then use_static_rnd=default fi case "$use_static_rnd" in egd | linux | unix | none | default ) AC_MSG_RESULT($use_static_rnd) ;; * ) AC_MSG_RESULT(invalid argument) AC_MSG_ERROR(there is no random module rnd$use_static_rnd) ;; esac dnl dnl See whether the user wants to disable checking for /dev/random AC_MSG_CHECKING([whether use of /dev/random is requested]) AC_ARG_ENABLE(dev-random, [ --disable-dev-random disable the use of dev random], try_dev_random=$enableval, try_dev_random=yes) AC_MSG_RESULT($try_dev_random) dnl dnl Check other options dnl AC_MSG_CHECKING([whether use of extensions is requested]) AC_ARG_ENABLE(dynload, [ --disable-dynload disable use of extensions], try_dynload=$enableval, try_dynload=yes) AC_MSG_RESULT($try_dynload) AC_MSG_CHECKING([whether assembler modules are requested]) AC_ARG_ENABLE(asm, [ --disable-asm do not use assembler modules], try_asm_modules=$enableval, try_asm_modules=yes) AC_MSG_RESULT($try_asm_modules) AC_MSG_CHECKING([whether memory debugging is requested]) AC_ARG_ENABLE(m-debug, [ --enable-m-debug enable debugging of memory allocation], use_m_debug=$enableval, use_m_debug=no) AC_MSG_RESULT($use_m_debug) if test "$use_m_debug" = yes; then AC_DEFINE(M_DEBUG) use_m_guard=yes else AC_MSG_CHECKING([whether memory guard is requested]) AC_ARG_ENABLE(m-guard, [ --enable-m-guard enable memory guard facility], use_m_guard=$enableval, use_m_guard=no) AC_MSG_RESULT($use_m_guard) fi if test "$use_m_guard" = yes ; then AC_DEFINE(M_GUARD) fi AC_MSG_CHECKING([whether included zlib is requested]) AC_ARG_WITH(included-zlib, [ --with-included-zlib use the zlib code included here], [g10_force_zlib=yes], [g10_force_zlib=no] ) AC_MSG_RESULT($g10_force_zlib) dnl dnl Check wether we want to compile libgcrypt dnl AC_MSG_CHECKING([whether compilation of libgcrypt is requested]) AC_ARG_ENABLE(libgcrypt, [ --enable-libgcrypt compile the libgcrypt [default=no]], [compile_libgcrypt="$enableval"],[compile_libgcrypt=no]) -AM_CONDITIONAL(COMPILE_LIBGCRYPT, test x$compile_libgcrypt = xyes) AC_MSG_RESULT($compile_libgcrypt) +if test x$compile_libgcrypt = xyes ; then + if test -f $srcdir/gcrypt/gcrypt.h; then + : + else + compile_libgcrypt=no + AC_MSG_WARN([[ +*** LIBGCRYPT is not yet ready for public testing. +*** Maybe you have more luck with the next release of GnuPG]]) + fi +fi +AM_CONDITIONAL(COMPILE_LIBGCRYPT, test x$compile_libgcrypt = xyes) dnl dnl Check whether we want to use Linux capabilities dnl AC_MSG_CHECKING([whether use of capabilities is requested]) AC_ARG_WITH(capabilities, [ --with-capabilities use linux capabilities [default=no]], [use_capabilities="$withval"],[use_capabilities=no]) AC_MSG_RESULT($use_capabilities) +AM_MAINTAINER_MODE + dnl Checks for programs. AC_CANONICAL_SYSTEM AC_ARG_PROGRAM AC_PROG_MAKE_SET AM_SANITY_CHECK missing_dir=`cd $ac_aux_dir && pwd` AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) dnl AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) AC_PROG_CC AC_PROG_CPP AC_ISC_POSIX AC_PROG_INSTALL -AC_PROG_RANLIB +AC_PROG_AWK AC_CHECK_PROG(DOCBOOK_TO_MAN, docbook-to-man, yes, no) AM_CONDITIONAL(HAVE_DOCBOOK_TO_MAN, test "$ac_cv_prog_DOCBOOK_TO_MAN" = yes) dnl -dnl Don't default to build shared libs +dnl Build shared libraries only when compilation of libgcrypt +dnl has been requested dnl AM_DISABLE_SHARED +enable_shared="$compile_libgcrypt" AM_PROG_LIBTOOL MPI_OPT_FLAGS="" if test "$GCC" = yes; then CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes" fi try_gettext=yes try_gdbm=yes case "${target}" in i386--mingw32) # special stuff for Windoze NT cross_compiling=yes CC="i386--mingw32-gcc" CPP="i386--mingw32-gcc -E" RANLIB="i386--mingw32-ranlib" ac_cv_have_dev_random=no AC_DEFINE(USE_ONLY_8DOT3) AC_DEFINE(HAVE_DRIVE_LETTERS) AC_DEFINE(HAVE_DOSISH_SYSTEM) try_gettext="no" try_gdbm="no" ;; i386-emx-os2 | i[3456]86-pc-os2*emx ) # OS/2 with the EMX environment ac_cv_have_dev_random=no AC_DEFINE(HAVE_DRIVE_LETTERS) AC_DEFINE(HAVE_DOSISH_SYSTEM) try_gettext="no" try_gdbm="no" ;; *-*-hpux*) if test -z "$GCC" ; then CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE" fi ;; *-dec-osf4*) if test -z "$GCC" ; then # Suppress all warnings # to get rid of the unsigned/signed char mismatch warnings. CFLAGS="$CFLAGS -w" fi ;; m68k-atari-mint) ;; *) ;; esac AC_SUBST(MPI_OPT_FLAGS) GNUPG_SYS_SYMBOL_UNDERSCORE GNUPG_CHECK_PIC GNUPG_CHECK_RDYNAMIC if test "$NO_PIC" = yes; then try_dynload=no fi case "${target}" in i386--mingw32) PRINTABLE_OS_NAME="MingW32" ;; i386-emx-os2 | i[3456]86-pc-os2*emx ) PRINTABLE_OS_NAME="OS/2" ;; *-linux*) PRINTABLE_OS_NAME="GNU/Linux" ;; *) PRINTABLE_OS_NAME=`uname -s || echo "Unknown"` ;; esac AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME") dnl Fixme: Are these the best flags for OpenBSD???? dnl (I have removed the -lc from * ...CFLAGS for test purposes.) case "${target}" in *-openbsd*) NAME_OF_DEV_RANDOM="/dev/srandom" NAME_OF_DEV_URANDOM="/dev/urandom" DYNLINK_MOD_CFLAGS="-shared -rdynamic -fpic -Wl,-Bshareable -Wl,-x" ;; *) NAME_OF_DEV_RANDOM="/dev/random" NAME_OF_DEV_URANDOM="/dev/urandom" DYNLINK_MOD_CFLAGS="-shared $CFLAGS_PIC" ;; esac AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM") AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM") AC_SUBST(MPI_OPT_FLAGS) dnl Checks for libraries. if test "$try_gettext" = yes; then AM_GNU_GETTEXT else USE_NLS=no USE_INCLUDED_LIBINTL=no AC_SUBST(USE_NLS) AC_SUBST(USE_INCLUDED_LIBINTL) fi dnl dnl There are lot of misconfigured systems. We include dnl gdbm support only if the lib and the header is installed. dnl if test "$try_gdbm" = yes; then AC_CHECK_HEADERS(gdbm.h) if test "$ac_cv_header_gdbm_h" = yes ; then AC_CHECK_LIB(gdbm,gdbm_firstkey) fi fi dnl Solaris needs -lsocket and -lnsl. Unisys system includes dnl gethostbyname in libsocket but needs libnsl for socket. AC_CHECK_LIB(nsl, gethostbyname) AC_CHECK_LIB(socket, socket, ac_need_libsocket=1, ac_try_nsl=1) if test x$ac_need_libsocket = x1; then LIBS="$LIBS -lsocket" fi if test x$ac_try_nsl = x1; then AC_CHECK_LIB(nsl, gethostbyname, ac_need_libnsl=1) if test x$ac_need_libnsl = x1 then LIBS="$LIBS -lnsl" fi fi if test "$try_dynload" = yes ; then AC_CHECK_LIB(dl,dlopen) if test "$ac_cv_lib_dl_dlopen" = "yes"; then AC_DEFINE(USE_DYNAMIC_LINKING) AC_DEFINE(HAVE_DL_DLOPEN) DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC" use_gnupg_extensions=yes else AC_CHECK_LIB(c,dlopen) if test "$ac_cv_lib_c_dlopen" = "yes"; then AC_DEFINE(USE_DYNAMIC_LINKING) AC_DEFINE(HAVE_DL_DLOPEN) DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC" use_gnupg_extensions=yes else AC_CHECK_LIB(dld,shl_load) if test "$ac_cv_lib_dld_shl_load" = "yes"; then AC_DEFINE(USE_DYNAMIC_LINKING) AC_DEFINE(HAVE_DL_SHL_LOAD) DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC" use_gnupg_extensions=yes dnl ----------------- dnl DLD is not ready for use. So I better disable this test dnl dnl AC_CHECK_LIB(dld,dld_link) dnl if test "$ac_cv_lib_dld_dld_link" = "yes"; then dnl AC_DEFINE(USE_DYNAMIC_LINKING) dnl AC_DEFINE(HAVE_DLD_DLD_LINK) dnl DYNLINK_LDFLAGS="$CFLAGS_RDYNAMIC" dnl use_gnupg_extensions=yes dnl --------------- fi fi fi else AC_MSG_CHECKING(for dynamic loading) DYNLINK_LDFLAGS= DYNLINK_MOD_CFLAGS= use_gnupg_extensions=no AC_MSG_RESULT(has been disabled) fi AM_CONDITIONAL(ENABLE_GNUPG_EXTENSIONS, test "$use_gnupg_extensions" = yes ) AC_SUBST(DYNLINK_LDFLAGS) AC_SUBST(DYNLINK_MOD_CFLAGS) dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(unistd.h langinfo.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_TYPE_SIZE_T AC_TYPE_SIGNAL AC_DECL_SYS_SIGLIST GNUPG_CHECK_ENDIAN GNUPG_CHECK_TYPEDEF(byte, HAVE_BYTE_TYPEDEF) GNUPG_CHECK_TYPEDEF(ushort, HAVE_USHORT_TYPEDEF) GNUPG_CHECK_TYPEDEF(ulong, HAVE_ULONG_TYPEDEF) GNUPG_CHECK_TYPEDEF(u16, HAVE_U16_TYPEDEF) GNUPG_CHECK_TYPEDEF(u32, HAVE_U32_TYPEDEF) AC_CHECK_SIZEOF(unsigned short, 2) AC_CHECK_SIZEOF(unsigned int, 4) AC_CHECK_SIZEOF(unsigned long, 4) if test "$ac_cv_sizeof_unsigned_short" = "0" \ || test "$ac_cv_sizeof_unsigned_int" = "0" \ || test "$ac_cv_sizeof_unsigned_long" = "0"; then AC_MSG_WARN([Hmmm, something is wrong with the sizes - using defaults]); fi dnl Checks for library functions. AC_FUNC_VPRINTF AC_CHECK_FUNCS(strerror stpcpy strlwr stricmp tcgetattr rand strtoul mmap) AC_CHECK_FUNCS(memmove gettimeofday getrusage gethrtime setrlimit) AC_CHECK_FUNCS(memicmp atexit raise getpagesize strftime nl_langinfo) GNUPG_CHECK_MLOCK dnl dnl Check whether we can use Linux capabilities as requested dnl if test "$use_capabilities" = "yes" ; then use_capabilities=no AC_CHECK_HEADERS(sys/capability.h) if test "$ac_cv_header_sys_capability_h" = "yes" ; then AC_CHECK_LIB(cap, cap_init, ac_need_libcap=1) if test "$ac_cv_lib_cap_cap_init" = "yes"; then AC_DEFINE(USE_CAPABILITIES) use_capabilities=yes fi fi if test "$use_capabilities" = "no" ; then AC_MSG_WARN([[ *** The use of capabilities on this system is not possible. *** You need a recent Linux kernel and some patches: *** fcaps-2.2.9-990610.patch (kernel patch for 2.2.9) *** fcap-module-990613.tar.gz (kernel module) *** libcap-1.92.tar.gz (user mode library and utilities) *** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN *** set (filesystems menu). Be warned: This code is *really* ALPHA.]]) fi fi GNUPG_CHECK_IPC if test "$ac_cv_header_sys_shm_h" = "yes"; then AC_DEFINE(USE_SHM_COPROCESSING) fi dnl dnl check whether we have a random device dnl if test "$try_dev_random" = yes ; then AC_CACHE_CHECK(for random device, ac_cv_have_dev_random, [if test -c "$NAME_OF_DEV_RANDOM" && test -c "$NAME_OF_DEV_URANDOM" ; then ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi]) if test "$ac_cv_have_dev_random" = yes; then AC_DEFINE(HAVE_DEV_RANDOM) fi else AC_MSG_CHECKING(for random device) ac_cv_have_dev_random=no AC_MSG_RESULT(has been disabled) fi dnl dnl and whether this device supports ioctl dnl (Note, that we should do a real test here) dnl if test "$ac_cv_have_dev_random" = yes ; then AC_CHECK_HEADERS(linux/random.h) AC_CACHE_CHECK(for random device ioctl, ac_cv_have_dev_random_ioctl, [ if test "$ac_cv_header_linux_random_h" = yes ; then ac_cv_have_dev_random_ioctl=yes; else ac_cv_have_dev_random_ioctl=no; fi ]) if test "$ac_cv_have_dev_random_ioctl" = yes; then AC_DEFINE(HAVE_DEV_RANDOM_IOCTL) fi fi dnl dnl Figure out the default linkage mode for cipher modules dnl dnl (We always need a static rmd160) static_modules="$static_modules rmd160" if test "$use_static_rnd" = default; then if test "$ac_cv_have_dev_random" = yes; then static_modules="$static_modules rndlinux" else case "${target}" in i386--mingw32) static_modules="$static_modules rndw32" ;; i386-emx-os2|i[3456]86-pc-os2*emx) static_modules="$static_modules rndos2" ;; m68k-atari-mint) static_modules="$static_modules rndatari" ;; *) static_modules="$static_modules rndunix" ;; esac fi else if test "$use_static_rnd" = none; then : else static_modules="$static_modules rnd$use_static_rnd" fi fi dnl dnl Parse the modules list and build the list dnl of static and dymically linked modules dnl STATIC_CIPHER_NAMES="" STATIC_CIPHER_OBJS="" DYNAMIC_CIPHER_MODS="" GNUPG_MSG_PRINT([dynamically linked cipher modules:]) for name in $MODULES_IN_CIPHER; do x="no" for i in $static_modules; do if test "$name" = "$i" ; then x="yes" fi done; if test $x = yes; then STATIC_CIPHER_NAMES="$STATIC_CIPHER_NAMES $name" - STATIC_CIPHER_OBJS="$STATIC_CIPHER_OBJS $name.o" + STATIC_CIPHER_OBJS="$STATIC_CIPHER_OBJS $name.lo" else DYNAMIC_CIPHER_MODS="$DYNAMIC_CIPHER_MODS $name" GNUPG_MSG_PRINT([$name]) fi done AC_MSG_RESULT() AC_SUBST(STATIC_CIPHER_OBJS) AC_SUBST(STATIC_CIPHER_NAMES) AC_SUBST(DYNAMIC_CIPHER_MODS) dnl dnl And build the constructor file dnl test -d cipher || mkdir cipher cat <cipher/construct.c /* automatically generated by configure - do not edit */ G10EOF GNUPG_MSG_PRINT([statically linked cipher modules:]) for name in $STATIC_CIPHER_NAMES; do echo "void ${name}_constructor(void);" >>cipher/construct.c GNUPG_MSG_PRINT([$name]) done AC_MSG_RESULT() cat <>cipher/construct.c void cipher_modules_constructor(void) { static int done = 0; if( done ) return; done = 1; G10EOF for name in $STATIC_CIPHER_NAMES; do echo " ${name}_constructor();" >>cipher/construct.c done echo '}' >>cipher/construct.c dnl dnl Figure how to link the cipher modules dnl AC_SUBST(STATIC_CIPHER_OBJS) AC_SUBST(DYNAMIC_CIPHER_MODS) dnl setup assembler stuff AC_MSG_CHECKING(for mpi assembler functions) if test -f $srcdir/mpi/config.links ; then . $srcdir/mpi/config.links GNUPG_LINK_FILES($mpi_ln_src, $mpi_ln_dst) ac_cv_mpi_extra_asm_modules="$mpi_extra_modules" ac_cv_mpi_sflags="$mpi_sflags" ac_cv_mpi_config_done="yes" AC_MSG_RESULT(done) else AC_MSG_RESULT(failed) AC_MSG_ERROR([mpi/config.links missing!]) fi MPI_EXTRA_ASM_OBJS="" if test "$ac_cv_mpi_extra_asm_modules" != ""; then GNUPG_MSG_PRINT([mpi extra asm functions:]) for i in $ac_cv_mpi_extra_asm_modules; do GNUPG_MSG_PRINT([$i]) - MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o" + MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.lo" done AC_MSG_RESULT() fi AC_SUBST(MPI_EXTRA_ASM_OBJS) MPI_SFLAGS="$ac_cv_mpi_sflags" AC_SUBST(MPI_SFLAGS) dnl Do we have zlib? Must do it here because Solaris failed dnl when compiling a conftest (due to the "-lz" from LIBS). use_local_zlib=yes if test "$g10_force_zlib" = "yes"; then : else AC_CHECK_HEADERS(zlib.h) if test "$ac_cv_header_zlib_h" = yes ; then AC_CHECK_LIB(z,deflateInit2_,use_local_zlib=no,:) fi fi if test "$use_local_zlib" = yes ; then AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, true) GNUPG_LINK_FILES(zlib/zlib.h, zlib.h ) GNUPG_LINK_FILES(zlib/zconf.h, zconf.h ) ZLIBS="../zlib/libzlib.a" else AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, false) ZLIBS= LIBS="-lz $LIBS" fi AC_SUBST(ZLIBS) changequote(,)dnl tmp_pat='[a-zA-Z]' changequote([,])dnl if echo "$VERSION" | grep $tmp_pat >/dev/null ; then AC_DEFINE(IS_DEVELOPMENT_VERSION) fi GNUPG_DO_LINK_FILES AC_OUTPUT_COMMANDS([ cat >g10defs.tmp </dev/null; then echo "g10defs.h is unchanged" rm -f g10defs.tmp else rm -f g10defs.h mv g10defs.tmp g10defs.h echo "g10defs.h created" fi ],[ prefix=$prefix exec_prefix=$exec_prefix libdir=$libdir datadir=$datadir DATADIRNAME=$DATADIRNAME ]) AC_OUTPUT([ Makefile intl/Makefile po/Makefile.in util/Makefile mpi/Makefile cipher/Makefile g10/Makefile doc/Makefile tools/Makefile zlib/Makefile checks/Makefile gcrypt/Makefile ]) dnl *-*wedit:notab*-* Please keep this as the last line. diff --git a/g10/ChangeLog b/g10/ChangeLog index 416016ef7..6828cab45 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,2125 +1,2142 @@ +Wed Jul 7 13:08:40 CEST 1999 Werner Koch + + + * Makefile.am: Support for libtool. + + * keygen.c (ask_expire_interval): Hack to allow for an expire date. + + * trustdb.c (do_update_trust_record,update_trust_record): Splitted. + (check_trust_record): New. + (check_trust,build_cert_tree): Check the dir record as needed. + (upd_pref_record): Removed. + (make_pref_record): New. + (propagate_validity): Stop as soon as we have enough validity. + + * tbdio.c (MAX_CACHE_ENTRIES_HARD): Increased the limit. + + Fri Jul 2 11:45:54 CEST 1999 Werner Koch * g10.c (g10_exit): Dump random stats. * sig-check.c (check_key_signature,check_key_signature2): Enhanced version and wrapper for old function. (do_signature_check,signature_check): Ditto. Thu Jul 1 12:47:31 CEST 1999 Werner Koch * keyedit.c (show_key_with_all_names): Print a notice for disabled keys. (enable_disable_keys): Add functionality * pkclist.c (edit_ownertrust): preserve disabled state. (build_pk_list): Skip disabled keys. * trustdb.c (upd_one_ownertrust): Ditto. (build_cert_tree): Mask the ownertrust. (trust_letter): Mask the value. (do_check): Take disabled flag into account. * passphrase.c (passphrase_to_dek): Add a pubkey_alfo arg and changed all callers. * g10.c (utf8_strings): 2 new options. * trustdb.c (insert_trust_record_by_pk): New, replaces the next one. (insert_trust_record): Now takes a keyblock as arg. Changed all callers to use the appropritae function. * openfile.c (ask_outfile_name): New. * plaintext.c (handle_plaintext): Ask for filename if there is no valid syntax. Don't use fname varbatim but filter it. Tue Jun 29 21:44:25 CEST 1999 Werner Koch * trustdb.h (TRUST_FLAG_DISABLED): New. * status.c (USE_CAPABILITIES): Capabilities support (Remi). * tdbio.c : Added new fields to the DIR record. (tdbio_write_record): Fixed the update of the hash tables. (tdbio_delete_record): Drop the record from the hash tables. (drop_from_hashtbl): New. * status.c (cpr_get): Special online help mode. * helptext.c ("keyedit.cmd"): Removed. * keyedit.c (keyedit_menu): Use only help system. (enable_disable_key): New bit doies not yet work. Sat Jun 26 12:15:59 CEST 1999 Werner Koch * dearmor.c (enarmor_file): Fixed comment string. * tdbdump.c (export_ownertrust): Text fix. * tbio.c (tdbio_invalid): Ditto. * parse-packet.c (parse_key): Made temp buffer larger. * Makefile.am (install-data-local): Add missing backslashes Tue Jun 15 12:21:08 CEST 1999 Werner Koch * g10.c (main): Made iterated+salted the default S2K method. * Makefile.am (install-data-local): Use DESTDIR. * passphrase.c (passphrase_to_dek): Emit missing-passphrase while in batchmode. * parse-packet.c (parse_pubkeyenc): Fixed a SEGV. Mon Jun 14 21:18:54 CEST 1999 Michael Roth * g10.c: New options --openpgp, --no-tty, --emit-version, --default-comment and --lock-multiple Thu Jun 10 14:18:23 CEST 1999 Werner Koch * free-packet.c (free_encrypted): Fixed EOF case (Remi). (free_plaintext): Ditto. * helptext.c (keyedit.delsig.unknown): New (Remi). * keyedit.c (print_and_check_one_sig): Add arg print_without_key and changed all callers to make use of it (Remi): Tue Jun 8 13:36:25 CEST 1999 Werner Koch * keylist.c (print_key_data): New and called elsewhere. * g10.c: New option --with-key-data Wed Jun 2 14:17:19 CEST 1999 Werner Koch * mainproc.c (proc_tree): Yet another bad hack to cope with broken pgp2 created detached messages in textmode. Tue Jun 1 16:01:46 CEST 1999 Werner Koch * openfile.c (make_outfile_name): New. * plaintext.c (handle_plaintext): Outputfile is now the inputfile without the suffix. * g10.c: New option --use-embedded-filename Mon May 31 19:41:10 CEST 1999 Werner Koch * g10.c (main): Fix for SHM init (Michael). * compress.c, encr-data.c, mdfilter.c, plaintext.c, free-packet.c: Speed patches (RИmi). Thu May 27 09:40:55 CEST 1999 Werner Koch * status.c (cpr_get_answer_yes_no_quit): New. * keyedit.c (menu_delsig): New. (check_all_keysigs): Splitted. (print_and_check_one_sig): New. Wed May 26 14:36:29 CEST 1999 Werner Koch * build-packet.c (build_sig_subpkt): Support large packets. * parse-packet.c (enum_sig_subpkt): Replaces parse_sig_subpkt. * mainproc.c (print_notation_data): Print all notation packets. * g10.c (add_notation_data): Add a way to specify the critical flag. (main): Add option --set-policy-url. (check_policy_url): Basic checks. * sign.c (mk_notation_and_policy): Replaces mk_notation. * parse-packet.c (can_handle_critical): Moved decision whether we can handle critical subpacket to an extra function. Tue May 25 19:50:32 CEST 1999 Werner Koch * sign.c (sign_file): Always use compression algo 1 for signed onyl file becuase we can╢ be sure the the verifier supports other algorithms. * build-packet.c (build_sig_subpkt): Support for notation data. * sign.c (sign_file,clearsign_file,make_keysig_packet): Ditto. (mk_notation): New. * g10.c (add_notation_data): New and add option -N * mainproc.c (print_notation_data): New. (check_sig_and_print): Print any notation data of the signed text. Sun May 23 14:20:22 CEST 1999 Werner Koch * pkclist.c (check_signatures_trust): Print a warning and return immediateley if opt.always_trust is true. * g10.c (main): Corrected handling of no-default-keyring * pkclist.c (algo_available): Disable Twofish until we have settled how to do the MDC. * hkp.c: Disable everything for mingw32 Sat May 22 22:47:26 CEST 1999 Werner Koch * mainproc.c (check_sig_and_print): Add sig creation time to the VALIDSIG status output. Add more info to the ERRSIG output. * sig-check.c (signature_check): Add sig time after epoch to SIG_ID. * import.c (import_one): Merge duplicate user IDs. (collapse_uids): New. * kbnode.c (move_kbnode): New. (remove_kbnode): New. * keyedit.c (keyedit_menu): Call collapse_uids. * g10.c: new option --logger-fd. * import.c: s/log_*_f/log_*/ Thu May 20 14:04:08 CEST 1999 Werner Koch * misc.c (pull_in_libs): do the volatile only for gcc * sig-check (signature_check): Emit SIG_iD only for classes 0 and 1. * armor.c (armor_filter): Add detection of PGP2 created clearsigs. (fake_packet): A tab is not a WS for pgp2 - handle this. * textfilter.c (len_without_trailing_chars): New. (copy_clearsig_text): Add pgp2mode arg. * sign.c (clearsign_file): pass old_style to the above fnc. Wed May 19 16:04:30 CEST 1999 Werner Koch * g10.c: New option --interactive. * mainproc.c (proc_plaintext): Add workaround for pgp2 bug (do_check_sig): Ditto. (proc_tree): Ditto. * plaintext.c (do_hash): Ditto. (hash_datafiles): Ditto, add an arg, changed all callers. * mdfilter.c (md_filter): Add support for the alternate hash context. Mon May 17 21:54:43 CEST 1999 Werner Koch * parse-packet.c (parse_encrypted): Support for PKT_ENCRYPTED_MDC. * build-packet.c (do_encrypted_mdc): Ditto. * cipher.c (write_header): Add mdc hashing. (cipher_filter): write out the hash. * mainproc.c (do_proc_packets): Add PKT_ENCRYPTED_MDC. * encr-data.c (decrypt_data): Add mdc hashing. (mdc_decode_filter): New. * parse-packet.c (parse_sig_subpkt): Fixed stupid bug for subpkt length calculation (parse_signature): Fixed even more stupid bug. Sat May 8 19:28:08 CEST 1999 Werner Koch * build-packet.c (do_signature): Removed MDC hack. * encode.c (encode_crypt_mdc): Removed. * mainproc.c (do_check_sig): Removed MDC hack. (check_sig_and_print): Ditto. * parse-packet.c (parse_signature): Ditto. * sig-check.c (mdc_kludge_check): Ditto. * free-packte.c (copy_signature, free_seckey_enc): Ditto. * parse-packet.c (parse_signature,parse_key): Store data of unknown algorithms with mpi_set_opaque inseatd of the old faked data stuff. (read_rest): Removed. (read_rest2): Renamed to read_rest * build-packet.c (write_fake_data): Use mpi_get_opaque. * free-packet.c (cp_fake_data): Removed and cahnged all callers to use mpi_copy. (free_pubkey_enc,free_seckey_enc,release_public_key_parts, release_secret_key_parts): Use mpi_free for opaque data. Thu May 6 14:18:17 CEST 1999 Werner Koch * trustdb.c (check_trust): Check for revoked subkeys. * pkclist.c (do_we_trust): Handled revoked subkeys. (do_we_trust_pre): Ditto. (check_signatures_trust): Ditto. * build-packet.c (hash_public_key): Fix for ancient g10 keys. * mainproc.c (do_proc_packets): Return EOF if no data has been read. * g10.c (main): Catch errors for default operation. Thu Apr 29 12:29:22 CEST 1999 Werner Koch * sign.c (sign_file): Fixed hashing in case of no subpackets. (clearsign_file): Ditto. (make_keysig_packet): Ditto. Wed Apr 28 13:03:03 CEST 1999 Werner Koch * keyedit.c (keyedit_menu): Add new command revkey. * (menu_revkey): New. Mon Apr 26 17:48:15 CEST 1999 Werner Koch * parse-packet.c (parse_signature): Add the MDC hack. * build-packet.c (do_signature): Ditto. * free-packet.c (free_seckey_enc,copy_signature,cmp_signatures): Ditto. * mainproc.c (do_check_sig): Ditto. * sig-check.c (mdc_kludge_check): New. * encode.c (encrypt_mdc_file): New. * keyedit.c (check_all_keysigs): List revocations. * (menu_revsig): New. * sign (make_keysig_packet): Support for class 0x30. Sun Apr 18 20:48:15 CEST 1999 Werner Koch * pkclist.c (select_algo_from_prefs): Fixed the case that one key has no preferences (Remi Guyomarch). keylist.c (list_keyblock): ulti_hack to propagate trust to all uids. Sun Apr 18 10:11:28 CEST 1999 Werner Koch * seckey-cert.c (do_check): Use real IV instead of a 0 one, so that it works even if the length of the IV doesn't match the blocksize. Removed the save_iv stuff. (protect_secret_key): Likewise. Create the IV here. * packet.h (PKT_secret_key): Increased size of IV field and add a ivlen field. * parse-packet.c (parse_key): Use the len protect.ivlen. * build-packet.c (do_secret_key). Ditto. * getkey.c (key_byname): Close keyblocks. * Makefile.am (gpgm): Removed this * g10.c: Merged gpg and gpgm * import.c (import): Utilize option quiet. * tdbio.c (tdbio_set_dbname): Ditto. * ringedit.c (add_keyblock_resource,keyring_copy): Ditto. * keyedit.c (sign_uids): Add some batch support. * g10.c (main): add call to tty_batchmode. Fri Apr 9 12:26:25 CEST 1999 Werner Koch * status.c (write_status_text): Some more status codes. * passphrase_to_dek (passphrase_to_dek): add a status code. * seckey_cert.c (check_secret_key): Likewise. * encr-data.c (decrypt_data): Reverse the last changes * cipher.c (write_header): Ditto. * parse-packet.c (parse_key): Dropped kludge for ancient blowfish mode. Thu Apr 8 09:35:53 CEST 1999 Werner Koch * mainproc.c (proc_encrypted): Add a new status output * passphrase.c (passphrase_to_dek): Ditto. * status.h status.c: Add new status tokens. Wed Apr 7 20:51:39 CEST 1999 Werner Koch * encr-data.c (decrypt_data): Fixes for 128 bit blocksize * cipher.c (write_header): Ditto. * seckey-cert.c (do_check): Ditto. (protect_secret_key). Ditto. * misc.c (print_cipher_algo_note): Twofish is now a standard algo. * keygen.c (do_create): Fixed spelling (GaКl QuИri) (ask_keysize): Only allow keysizes up to 4096 * ringedit.c (add_keyblock_resource): chmod newly created secrings. * import.c (delete_inv_parts): Fixed accidently deleted subkeys. Tue Apr 6 19:58:12 CEST 1999 Werner Koch * armor.c: Removed duped include (John Bley) * mainproc.c: Ditto. * build-packet.c (hash_public_key): Fixed hashing of the header. * import.c (delete_inv_parts): Allow import of own non-exportable sigs. Sat Mar 20 13:59:47 CET 1999 Werner Koch * armor.c (fake_packet): Fix for not not-dash-escaped Sat Mar 20 11:44:21 CET 1999 Werner Koch * g10.c (main): Added command --recv-keys * hkp.c (hkp_import): New. Wed Mar 17 13:09:03 CET 1999 Werner Koch * trustdb.c (check_trust): add new arg add_fnc and changed all callers. (do_check): Ditto. (verify_key): Ditto. (propagate_validity): Use the new add_fnc arg. (print_user_id): Add the FILE arg. (propagate_ownertrust): New. * pkclist.c (add_ownertrust_cb): New and changed the add_ownertrust logic. * getkey.c (get_keyblock_bylid): New. * trustdb.c (print_uid_from_keyblock): New. (dump_tn_tree_with_colons): New. (list_trust_path): Add colon print mode. * trustdb.c (insert_trust_record): Always use the primary key. * encode.c (encode_simple): Added text_mode filter (RИmi Guyomarch) (encode_crypt): Ditto. * mainproc.c (proc_pubkey_enc): Added status ENC_TO. * armor.c (armor_filter): Added status NODATA. * passphrase.c (passphrase_to_dek): Always print NEED_PASSPHRASE * seckey_cert.c (check_secret_key): Added BAD_PASS status. * g10.c (main): Set g10_opt_homedir. Sun Mar 14 19:34:36 CET 1999 Werner Koch * keygen.c (do_create): Changed wording of the note (Hugh Daniel) Thu Mar 11 16:39:46 CET 1999 Werner Koch * tdbdump.c: New * trustdb.c (walk_sigrecs,do_list_sigs,list_sigs, list_records,list_trustdb,export_ownertrust,import_ownertrust): Moved to tdbdump.c (init_trustdb): renamed to setup_trustdb. Changed all callers. (do_init_trustdb): renamed to init_trustdb(). * trustdb.c (die_invalid_db): replaced by tdbio_invalid. * tdbio.c (tdbio_invalid): New. * import.c (delete_inv_parts): Skip non exportable signatures. * keyedit.c (sign_uid_mk_attrib): New. (sign_uids): Add the local argument. (keyedit_menu): New "lsign" command. * trustdb.c (register_trusted_key): Removed this and all related stuff. * g10.c (oTrustedKey): Removed option. * tdbio.h (dir.valcheck): New trustdb field. * tdbio.c: Add support for this field (tdbio_read_modify_stamp): New. (tdbio_write_modify_stamp): New. * trustdb.c (do_check): Check against this field. Removed cache update. (verify_key): Add cache update. (upd_uid_record): Some functional changes. (upd_cert_record): Ditto Wed Mar 10 11:26:18 CET 1999 Werner Koch * keylist.c (list_keyblock): Fixed segv in uid. Print 'u' as validity of sks. Mon Mar 8 20:47:17 CET 1999 Werner Koch * getkey.c (classify_user_id): Add new mode 12 (#). * seckey-cert.c (check_secret_key): replaced error by info. * trustdb.c (query_trust_info): Add another arg, changed all callers. (check_trust): Ditto. (do_check): Ditto. (verify_key): Handle namehash. * keylist.c (list_keyblock): print trust info for user ids. * sig-check.c (signature_check): Add sig-created to status output. Tue Mar 2 16:44:57 CET 1999 Werner Koch * textfilter.c (copy_clearsig_text): New. (clearsign): Removed. * sign.c (clearsign_file): does not use textfiler anymore. * keygen.c (ask_user_id): print a note about the used charset. Tue Mar 2 10:38:42 CET 1999 Werner Koch * sig-check.c (signature_check): sig-id now works for all algos. * armor.c (armor_filter): Fixed armor bypassing. Sun Feb 28 19:11:00 CET 1999 Werner Koch * keygen.c (ask_user_id): Don't change the case of email addresses. (has_invalid_email_chars): Adjusted. * keylist.c (list_one): Really list serect keys (Remi Guyomarch) * keyedit.c (menu_select_uid): Add some braces to make egcs happy. (menu_select_key): Ditto. * mainproc.c (do_proc_packets): List sym-enc packets (Remi Guyomarch) Fri Feb 26 17:55:41 CET 1999 Werner Koch * pkclist.c (build_pk_list): Return error if there are no recipients. * sig-check.c (signature_check): New signature id feature. * armor.c (make_radic64_string): New. * mainproc.c (proc_pubkey_enc): early check for seckey availability. * pkclist.c (do_we_trust_pre): print user id before asking. * ringedit.c (add_keyblock_resource,get_keyblock_handle): Cleaner handling of default resource. Thu Feb 25 18:47:39 CET 1999 Werner Koch * pkclist.c (algo_available): New. (select_algo_from_prefs): Check whether algo is available. * ringedit.c (keyring_copy): Take care of opt.dry_run. (do_gdbm_store): Ditto. * openfile.c (open_outfile). Ditto. (copy_options_file): Ditto. * trustdb.c (update_trustdb): Ditto. (clear_trust_checked_flag): Ditto. (update_trust_record): Ditto. (insert_trust_record): Ditto. Wed Feb 24 11:07:27 CET 1999 Werner Koch * keylist.c (secret_key_list): Now really list the secret key. * trustdb.c (do_init_trustdb): New. Init is now deferred. Mon Feb 22 20:04:00 CET 1999 Werner Koch * getkey.c (lookup_sk): Return G10ERR_NO_SECKEY and not x_PUBKEY. Fri Feb 19 15:49:15 CET 1999 Werner Koch * pkclist.c (select_algo_from_prefs): retrieve LID if not there. * armor.c (fake_packet): Replaced ugly lineending handling. * g10.c (oNoEncryptTo): New. * pkclist.c (build_pk_list): Implemented this option. * g10.c (main): Greeting is now printed to stderr and not to tty. Use add_to_strlist() instead of direct coding. * import.c (import): Use iobuf_push_filter2. * mainproc.c (check_sig_and_print): Print all user ids for good signatures. * getkey.c (get_pubkeyblock): New. * import.c (chk_self_sigs): Fixed SEGV for unbounded class 0x18 keys. (delete_inv_parts): Delete special marked packets. Tue Feb 16 14:10:02 CET 1999 Werner Koch * g10.c (main): New option --encrypt-to * pkclist.c (build_pk_list): Implemented encrypt-to. * parse-packet.c (parse_user_id): Removed the hack to work with utf-8 strings. * g10.c (main): Install lockfile cleanup handler. * tdbio.c (cleanup): Removed: this is now handled by dotlock. Sat Feb 13 14:13:04 CET 1999 Werner Koch * tdbio.c (tdbio_set_dbname): Init lockhandle for a new trustdb Wed Feb 10 17:15:39 CET 1999 Werner Koch * g10.c (main): check for development version now in configure * tdbio.c (tdbio_write_record): Add uid.validity (tdbio_read_record) : Ditto. (tdbio_dump_record) : Ditto. * keygen.c (keygen_add_std_prefs): Replaced Blowfish by Twofish, removed MD5 and Tiger. * pubkey-enc.c (get_it): Suppress warning about missing Blowfish in preferences in certain cases. * ringedit.c (lock_rentry,unlock_rentry): New. * getkey.c (key_byname): Pass ret_kb down to lookup_xx. * armor.c (armor_filter): No output of of empty comment lines. Add option --no-version to suppress the output of the version string. * getkey.c: Release the getkey context for auto context variables. Sun Jan 24 18:16:26 CET 1999 Werner Koch * getkey.c: Changed the internal design to allow simultaneous lookup of multible user ids (get_pubkey_bynames): New. (get_seckey_bynames): New. (get_seckey_next): New. (get_seckey_end): New. * keylist.c (list_one): Use the new functions. * keylist.c (list_keyblock): add a newline for normal listings. * g10.c (--recipient): New option name to replace --remote-user Wed Jan 20 18:59:49 CET 1999 Werner Koch * textfilter.c: Mostly rewritten * plaintext.c (handle_plaintext): Use now text_filter semantics. Tue Jan 19 19:34:58 CET 1999 Werner Koch * export.c (export_pubkeys_stream): New. (do_export_stream): New. * g10.c (aSendKeys): New command. * hkp.c (hkp_export): New. * compress.c (do_uncompress): Hack for algo 1 and 1.1.3 Sun Jan 17 11:04:33 CET 1999 Werner Koch * textfilter.c (text_filter): Now uses iobuf_read_line(). (read_line): Removed. * armor.c (trim_trailing_spaces): Removed and replaced by trim_trailing_ws from libutil Sat Jan 16 12:03:27 CET 1999 Werner Koch * hkp.c (hkp_ask_import): Use only the short keyid Sat Jan 16 09:27:30 CET 1999 Werner Koch * import.c (import_key_stream): New (import): New, moved most of import_keys here. * g10.c: New option --keyserver * mainproc.c (check_sig_and_print): Hook to import a pubkey. * pref.c pref.h : Removed * hkp.c hkp.h: New Wed Jan 13 14:10:15 CET 1999 Werner Koch * armor.c (radix64_read): Print an error if a bad armor was detected. Wed Jan 13 12:49:36 CET 1999 Werner Koch * armor.c (radix64_read): Now handles malformed armors produced by some buggy MUAs. Tue Jan 12 11:17:18 CET 1999 Werner Koch * ringedit.c (find_keyblock_bysk): New. * skc_list.c (is_insecure): New. (build_sk_list): usage check for insecure keys. * import.c (chk_self_sigs): Add handling for subkeys. (delete_inv_parts): Skip unsigned subkeys * sig-check.c (do_check): Print info if the signature is older than the key. * keygen.c (generate_subkeypair): Fail on time warp. * sign.c (do_sign): Ditto. Sun Jan 10 15:10:02 CET 1999 Werner Koch * armor.c (fake_packet): Fixed not-dash-escaped bug. Sat Jan 9 16:02:23 CET 1999 Werner Koch * sig-check.c (do_check): Output time diff on error * status.c (STATUS_VALIDSIG): New. (is_status_enabled): New. * mainproc.c (check_sig_and_print): Issue that status message. * plaintext.c (special_md_putc): Removed * armor.c (armor_filter): print error for truncated lines. * free-packet.c (free_encrypted): Revomed call to set_block_mode. (free_plaintext): Ditto. Thu Jan 7 18:00:58 CET 1999 Werner Koch * pkclist.c (add_ownertrust): Fixed return value. * encr-data.c (decrypt_data): Disabled iobuf_set_limit and iobuf_pop_filter stuff. * compress.c (handle_compressed): Disabled iobuf_pop_filter. * packet.h (PKT_secret_key): Add is_primary flag. * parse-packet.c (parse_key): Set this flag. * passphrase.c (passphrase_to_dek): Kludge to print the primary keyid - changed the API: keyid must now hold 2 keyids. * getkey.c (get_primary_seckey): New. * seckey-cert.c (do_check): pass primary keyid to passphrase query * tbdio.c (open_db): removed the atexit (tdbio_set_dbname): and moved it to here. * armor.c: Rewrote large parts. Tue Dec 29 19:55:38 CET 1998 Werner Koch * revoke.c (gen_revoke): Removed compression. * pkclist.c (do_we_trust_pre): special check for revoked keys * trustdb.c (update_trust_record): Fixed revoke flag. Tue Dec 29 14:41:47 CET 1998 Werner Koch * misc.c (disable_core_dumps): Check for EINVAL (Atari) * getkey (merge_one_pk_and_selfsig): Fixed search of expiredate. (merge_keys_and_selfsig): Ditto. * free-packet.c (cmp_public_keys): cmp expire only for v3 packets (cmp_secret_keys): Ditto. (cmp_public_secret_key): Ditto. Wed Dec 23 17:12:24 CET 1998 Werner Koch * armor.c (find_header): Reset not_dashed at every header Wed Dec 23 13:18:14 CET 1998 Werner Koch * pkclist.c (add_ownertrust): Refresh validity values. * trustdb.c (enum_cert_paths_print): New arg refresh. * ringedit.c: Fixed problems fix keyrings * parse-packet.c (dbg_parse_packet): New debug functions. * getkey.c (getkey_disable_caches): New. * import.c (import_keys): Disable caches. Thu Dec 17 18:31:15 CET 1998 Werner Koch * misc.c (trap_unaligned): Only for glibc 1 * sign.c (write_dash_escaped): Now escapes "From " lines * g10.c: New option --escape-from-lines * trustdb.c (sort_tsl_list): New (list_trust_path): Now prints sorted list. (enum_cert_paths): Likewise. (enum_cert_paths_print): New. (print_paths): New printing format. * pkclist.c (add_ownertrust): New arg quit. (edit_ownertrust): New quit selection and does not query the recipients ownertrust anymore. (add_ownertrust): Print the ceritficate path. Mon Dec 14 21:18:49 CET 1998 Werner Koch * parse-packet.c (parse_signature): Now checks for critical bit (parse_sig_subpkt): Splitted. (parse_one_sig_subpkt): New. * sig-check.c (do_check): handle critical bit. Sun Dec 13 14:10:56 CET 1998 Werner Koch * pcklist.c (select_algo_from_prefs): Preferences should now work (lost the != ? ) Thu Dec 10 20:15:36 CET 1998 Werner Koch * ringedit.c (gdbm_store): Fix for inserts * g10.c (main): New option --export-all * export.c (export_pubkeys): New arg. (do_export): Now may skip old keys. * status.c: Minor patches for Sun's cc * keygen.c (ask_algo): Disabled v3 ElGamal choice, rearranged the numbers. Add a warning question when a sign+encrypt key is selected. * g10.c (do_not_use_RSA): Removed. * misc.c (print_pubkey_algo_note): New as replacement for the do_not_use_RSA() and chnaged all callers. (print_cipher_algo_note): New. (print_hash_algo_note): New. * cipher.c (write_header): Add a call to print_cipher_algo_note. * seckey-cert.c (protect_secret_key): Ditto * sign.c (do_sign): Add a call to print_digest_algo_note. * getkey.c (get_long_user_id_string): New. * mainproc.c (check_sig_and_print): Changed the format of the status output. * encrypt.c (write_pubkey_enc_from_list): print used symmetric cipher. * pkclist.c (do_we_trust): Changed a message. Wed Dec 9 13:41:06 CET 1998 Werner Koch * misc.c (trap_unaligned) [ALPHA]: Only if UAC_SIGBUS is defined. * sign.c (write_dash_escaped): Add the forgotten patch by Brian Moore. * compress.c (do_uncompress): Fixed the inflating bug. Tue Dec 8 13:15:16 CET 1998 Werner Koch * trustdb.c (upd_uid_record): Now uses the newest self-signature (insert_trust_record): Now calls update with recheck set to true. (register_trusted_key): New. (verify_own_keys): Enhanced by list of trusted keys. * g10.c (main): Print a warning when a devel version is used. (main): New option --trusted-key * import.c (merge_blocks): Fixed merging of new user ids and added merging of subkeys. (append_uid): Ditto. (merge_keysig): New. (append_key): New. * getkey.c (merge_one_pk_and_selfsig): Get the expiration time from the newest self-signature. (merge_keys_and_selfsig): Ditto. * free-packet.c (cmp_secret_key): New. Fri Nov 27 21:37:41 CET 1998 Werner Koch * g10.c: New option --lock-once * tdbio.c (open_db): Add an atexit (cleanup): New. (tdbio_sync): Add locking. (tdbio_end_transaction): Ditto. (put_record_into_cache): Ditto. * ringedit.c (keyring_copy): Ditto. (cleanup): New. (add_keyblock_resource): Add an atexit. Fri Nov 27 15:30:24 CET 1998 Werner Koch * armor.c (find_header): Another fix for clearsigs. Fri Nov 27 12:39:29 CET 1998 Werner Koch * status.c (display_help): Removed. * helptext.c: New and removed the N_() from all cpr_gets. Fri Nov 20 16:54:52 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): New option --not-dash-escaped * sign.c (write_dashed_escaped): Ditto. * armor.c (find_header): Support for NotDashEscaped header. * getkey.c: print "disabled cache.." only if verbose is used. Thu Nov 19 07:17:31 1998 Werner Koch * parse-packet.c (dump_sig_subpkt): Fixed expire listing * getkey.c (merge_keys_and_selfsig): Fixed expire calculation. (merge_one_pk_and_selfsig): Ditto. * keyedit.c (menu_expire). Ditto. * keygen.c (keygen_add_key_expire): Ditto. (ask_expire_interval): New and changed all local function to use this instead. (keygen_add_key_expire): Opaque should now be a public key; changed all callers. * parse.packet.c (parse): use skip_rest to skip packets. * keyedit.c (keyedit_menu): New arg for cmdline cmds. Wed Nov 18 20:33:50 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (check_trustdb): Now rechecks all gived userids. (collect_paths): Some fixes. (upd_pref_records): Skips empty items, evaluate all items. * parse-packet.c (dump_sig_subpkt): Better listing of prefs. (skip_packet): Now knows about marker packet * g10.c: removed cmd "--edit-sig". * pubring.asc: Updated. Sat Nov 14 14:01:29 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Changed syntax of --list-trust-path * trustdb.c (list_trust_path): Replaced max_depth by opt.max_cert_depth Fri Nov 13 07:39:58 1998 Werner Koch * trustdb.c (collect_paths): Removed a warning message. (enum_trust_web): Removed. (enum_cert_paths): New. * pkclist.c (add_ownertrust): Changed to use enum_cert_paths. (edit_ownertrust): Now list ceritficates on request. (show_paths): New. Wed Nov 11 18:05:44 1998 Werner Koch * g10.c (main): New option --max-cert-depth * tdbio.h: add new fields to ver and dir record. * tdbio.c: read/write/dump of these fields. (tdbio_db_matches_options): New. * trustdb.c: replaced MAC_CERT_DEPTH by opt.max_cert_depth. (do_check): cache validity and changed other functions to reset the cached value. * keylist.c (list_one): Now lists the ownertrust. * mainproc.c (list_node): Ditto. Tue Nov 10 10:08:59 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (g10_exit): Now looks at the new g10_errors_seen. * mainproc.c (check_sig_and_print): Sets g10_errors_seen. * *.c : i18n many more strings. * ringedit.c (locate_keyblock_by_keyid): Add HAVE_LIBGDBM (locate_keyblock_by_fpr): Ditto. * g10.c (main): removed unsused "int errors". (main): Add new option --charset. * g10.c (main): special message for the unix newbie. Mon Nov 9 07:17:42 1998 Werner Koch * getkey.c (finish_lookup): Kludge to prefere algo 16. * trustdb.c (new_lid_table): Clear cached item. * status.c (cpr_get_utf8): New. * pkclist.c (build_pk_list): Uses this. Sun Nov 8 17:20:39 1998 Werner Koch (wk@isil.d.shuttle.de) * mainproc.c (check_sig_and_print): Why did I use strlen()-1 in the printf? - This truncated the TZ. Sat Nov 7 15:57:28 1998 me,,, (wk@tobold) * getkey.c (lookup): Changes to support a read_next. (get_pubkey): Fixed a memory leak. * keylist.c (list_one): Now lists all matching user IDs. Tue Nov 3 16:19:21 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (ask_user_id): Now converted to UTF-8 * g10.c (main): Kludge for pgp clearsigs and textmode. Fri Oct 30 16:40:39 1998 me,,, (wk@tobold) * signal.c (block_all_signals): New. (unblock_all_signals): New * tdbio.c (tdbio_end_transaction): Now blocks all signals. * trustdb.c (new_lid_table): Changed the representation of the former local_lid_info stuff. * trustdb.c (update_trust_record): Reorganized the whole thing. * sig-check.c (check_key_signature): Now handles class 0x28 Wed Oct 28 18:56:33 1998 me,,, (wk@tobold) * export.c (do_export): Takes care of the exportable sig flag. Tue Oct 27 14:53:04 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (update_trust_record): New "fast" parameter. Sun Oct 25 19:32:05 1998 Werner Koch (wk@isil.d.shuttle.de) * openfile.c (copy_options_File): New. * ringedit.c (add_keyblock_resource): Creates options file * tdbio.c (tdbio_set_dbname): Ditto. Sat Oct 24 14:10:53 1998 brian moore * mainproc.c (proc_pubkey_enc): Don't release the DEK (do_proc_packets): Ditto. Fri Oct 23 06:49:38 1998 me,,, (wk@tobold) * keyedit.c (keyedit_menu): Comments are now allowed * trustdb.c: Rewrote large parts. Thu Oct 22 15:56:45 1998 Michael Roth (mroth@nessie.de) * encode.c: (encode_simple): Only the plain filename without a given directory is stored in generated packets. (encode_crypt): Ditto. * sign.c: (sign_file) Ditto. Thu Oct 22 10:53:41 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (update_trust_record): Add new optional arg. * import.c (import_keys): Add statistics output * trustdb.c (update_trustdb): Ditto. (insert_trustdb): Ditto. * tdbio.c (tdbio_begin_transaction): New. (tdbio_end_transaction): New. (tdbio_cancel_transaction): New. * g10.c (main): New option --quit. * trustdb.c (check_hint_sig): No tests for user-id w/o sig. This caused an assert while checking the sigs. * trustdb.c (upd_sig_record): Splitted into several functions. * import.c (import_keys): New arg "fast". * g10.c (main): New command --fast-import. Wed Oct 21 18:19:36 1998 Michael Roth * ringedit.c (add_keyblock_resource): Directory is now created. * tdbio.c (tdbio_set_dbname): New info message. Wed Oct 21 11:52:04 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (update_trustdb): released keyblock in loop. * keylist.c (list_block): New. (list_all): Changed to use list_block. * trustdb.c: Completed support for GDBM * sign.c (only_old_style): Changed the way force_v3 is handled (sign_file): Ditto. (clearsign_file): Ditto. * keygen.c (has_invalid_email_chars): Splitted into mailbox and host part. * keylist.c (list_one): Add a merge_keys_and_selfsig. * mainproc.c (proc_tree): Ditto. Sun Oct 18 11:49:03 1998 Werner Koch (wk@isil.d.shuttle.de) * sign.c (only_old_style): Add option force_v3_sigs (sign_file): Fixed a bug in sig->version (clearsign_file): Ditto. * parse-packet.c (dump_sig_subpkt): New * keyedit.c (menu_expire): New. * free-packet.c (cmp_signatures): New Sat Oct 17 10:22:39 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c: changed output line length from 72 to 64. * keyedit.c (fix_keyblock): New. Fri Oct 16 10:24:47 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c: Rewrote most. * tdbio.c: Add cache and generalized hash tables. * options.h (ENABLE_COMMENT_PACKETS): New but undef'ed. * encode.c, sign.c, keygen.c: Disabled comment packets. * export.c (do_export): Comment packets are never exported, except for those in the secret keyring. * g10.c (main): Removed option do-no-export-rsa; should be be replaced by a secpial tool. * export.c (do_export): Removed the code for the above option. * armor.c (find_header): Support for new only_keyblocks. * import.c (import_keys): Only looks for keyblock armors. * packet.h: replaced valid_days by expiredate and changed all users. * build-packet.c (do_public_key): calculates valid-days (do_secret_key): Ditto. * parse-packet.c (parse_key): expiredate is calucated from the valid_period in v3 packets. * keyid.c (do_fingerprint_md): calculates valid_dates. * keygen.c (add_key_expire): fixed key expiration time for v4 packets. * armor.c (find_header): A LF in the first 28 bytes was skipped for non-armored data. Thu Oct 8 11:35:51 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (is_armored): Add test on old comment packets. * tdbio.c (tdbio_search_dir_bypk): fixed memory leak. * getkey.c: Changed the caching algorithms. Wed Oct 7 19:33:28 1998 Werner Koch (wk@isil.d.shuttle.de) * kbnodes.c (unused_nodes): New. Wed Oct 7 11:15:36 1998 Werner Koch (wk@isil.d.shuttle.de) * keyedit.c (sign_uids): Fixed a problem with SK which could caused a save of an unprotected key. (menu_adduid): Ditto. * keyedit.c (keyedit_menu): Prefs are now correctly listed for new user ids. * trustdb.c (update_trust_record): New. (insert_trust_record): Now makes use of update_trust_record. Tue Oct 6 16:18:03 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (read_record): replaces most of the tdbio_read_records. (write_record): Ditto. Sat Oct 3 11:01:21 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (ask_alogo): enable ElGamal enc-only only for addmode. Wed Sep 30 10:15:33 1998 Werner Koch (wk@isil.d.shuttle.de) * import.c (import_one): Fixed update of wrong keyblock. Tue Sep 29 08:32:08 1998 me,,, (wk@tobold) * mainproc.c (proc_plaintext): Display note for special filename. * plaintext.c (handle_plaintext): Suppress output of special file. Mon Sep 28 12:57:12 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (verify_own_keys): Add warning if a key is not protected. * passphrase (hash_passphrase): Fixed iterated+salted mode and setup for keysizes > hashsize. * g10.c (main): New options: --s2k-{cipher,digest,mode}. Fri Sep 25 09:34:23 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c: Chnaged some help texts. Tue Sep 22 19:34:39 1998 Werner Koch (wk@isil.d.shuttle.de) * passphrase.c (read_passphrase_from_fd): fixed bug for long passphrases. Mon Sep 21 11:28:05 1998 Werner Koch (wk@(none)) * getkey.c (lookup): Add code to use the sub key if the primary one does not match the usage. * armor.c (armor_filter): New error message: no valid data found. (radix64_read): Changes to support multiple messages. (i18n.h): New. * mainproc.c (add_onepass_sig): bug fix. Mon Sep 21 08:03:16 1998 Werner Koch (wk@isil.d.shuttle.de) * pkclist.c (do_we_trust): Add keyid to most messages. * passphrase.c (read_passphrase_from_fd): New. (have_static_passphrase): New (get_passphrase_fd): Removed. (set_passphrase_fd): Removed. * g10.c (main): passphrase is now read here. * keyedit.c (keyedit_menu): "help" texts should now translate fine. Mon Sep 21 06:40:02 1998 Werner Koch (wk@isil.d.shuttle.de) * encode.c (encode_simple): Now disables compression when --rfc1991 is used. (encode_crypt): Ditto. Fri Sep 18 16:50:32 1998 Werner Koch (wk@isil.d.shuttle.de) * getkey.c (merge_key_and_selfsig): New. Fri Sep 18 10:20:11 1998 Werner Koch (wk@isil.d.shuttle.de) * pkclist.c (select_algo_from_prefs): Removed 3DES kludge. * seskey.c (make_session_key): Fixed SERIOUS bug introduced by adding the weak key detection code. * sign.c (sign_file): Changed aremor header in certain cases. Tue Sep 15 17:52:55 1998 Werner Koch (wk@isil.d.shuttle.de) * mainproc.c (check_sig_and_print): Replaced ascime by asctimestamp. Mon Sep 14 11:40:52 1998 Werner Koch (wk@isil.d.shuttle.de) * seskey.c (make_session_key): Now detects weak keys. * trustdb (clear_trust_checked_flag): New. * plaintext.c (handle_plaintext): Does no anymore suppress CR from cleartext signed messages. Sun Sep 13 12:54:29 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (insert_trust_record): Fixed a stupid bug in the free liunked list loops. Sat Sep 12 15:49:16 1998 Werner Koch (wk@isil.d.shuttle.de) * status.c (remove_shmid): New. (init_shm_comprocess): Now sets permission to the real uid. Wed Sep 9 11:15:03 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h (PKT_pubkey_enc): New flah throw_keyid, and add logic to implement it. * g10.c (main): New Option --throw-keyid * getkey.c (enum_secret_keys): Add new ar and changed all callers. Tue Sep 8 20:04:09 1998 Werner Koch (wk@isil.d.shuttle.de) * delkey.c (delete_key): Moved from keyedit.c. Mon Sep 7 16:37:52 1998 Werner Koch (wk@isil.d.shuttle.de) * build-packet.c (calc_length_header): New arg new_ctb to correctly calculate the length of new style packets. * armor.c (is_armored): Checks for symkey_enc packets. * pkclist.c (select_algo_from_prefs): 3DEs substitute is now CAST5. Tue Aug 11 17:54:50 1998 Werner Koch (wk@isil.d.shuttle.de) * build-packet.c (do_secret_key): Fixed handling of old keys. * getkey.c (compare_name): Fixed exact and email matching * openfile.c (open_outfile): Changed arguments and all callers. Tue Aug 11 09:14:35 1998 Werner Koch (wk@isil.d.shuttle.de) * encode.c (encode_simple): Applied option set-filename and comment. (encode_crypt): Ditto. * sign.c (sign_file): Ditto. * armor.c (armor_filter): Applied option comment. * encode.c (encode_crypt): Moved init_packet to the begin. (encode_simple): add an init_packet(). * comment (write_comment): Now enforces a hash sign as the 1st byte. * import.c (import_one): Add explanation for "no user ids". * compress.c (do_uncompress): Applied Brian Warner's patch to support zlib 1.1.3 etc. * trustdb.c (check_trust): Fixed a problem after inserting new keys. * getkey (lookup): do not return the primary key if usage is given (lookup_sk): Ditto and take usage into account. * status.c (cpr_get_answer_is_yes): add display_help. Mon Aug 10 10:11:28 1998 Werner Koch (wk@isil.d.shuttle.de) * getkey.c (lookup_sk): Now always returns the primary if arg primary is true. (lookup): Likewise. (get_pubkey_byname): Now returns the primary key (get_seckey_byname): Ditto. Mon Aug 10 08:34:03 1998 Werner Koch (wk@isil.d.shuttle.de) * keyid.c (pubkey_letter): ELG_E is now a small g. Sat Aug 8 17:26:12 1998 Werner Koch (wk@isil.d.shuttle.de) * openfile (overwrite_filep): Changed semantics and all callers. Sat Aug 8 12:17:07 1998 Werner Koch (wk@isil.d.shuttle.de) * status.c (display_help): New. Thu Aug 6 16:30:41 1998 Werner Koch,mobil,,, (wk@tobold) * seskey.c (encode_session_key): Now uses get_random_bits(). Thu Aug 6 07:34:56 1998 Werner Koch,mobil,,, (wk@tobold) * ringedit.c (keyring_copy): No more backupfiles for secret keyrings and add additional warning in case of a failed secret keyring operation. Wed Aug 5 11:54:37 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (check_opts): Moved to main. Changed def_cipher_algo semantics and chnaged all users. * pubkey-enc.c (get_sssion_key): New informational output about preferences. * parse-packet.c (parse_symkeyenc): Fixed salted+iterated S2K (parse_key): Ditto. * build-packet.c (do_secret_key): Ditto. (do_symkey_enc): Ditto. Tue Aug 4 08:59:10 1998 Werner Koch (wk@isil.d.shuttle.de) * getkey.c (enum_secret_keys): Now returns only primary keys. * getkey (lookup): Now sets the new namehash field. * parse-packet.c (parse_sig_subpkt2): New. * sign.c (sign_file): one-pass sigs are now emiited reverse. Preference data is considered when selecting the compress algo. Wed Jul 29 12:53:03 1998 Werner Koch (wk@isil.d.shuttle.de) * free-packet.c (copy_signature): New. * keygen.c (generate_subkeypair): rewritten * g10.c (aKeyadd): Removed option --add-key Mon Jul 27 10:37:28 1998 Werner Koch (wk@isil.d.shuttle.de) * seckey-cert.c (do_check): Additional check on cipher blocksize. (protect_secret_key): Ditto. * encr-data.c: Support for other blocksizes. * cipher.c (write_header): Ditto. Fri Jul 24 16:47:59 1998 Werner Koch (wk@isil.d.shuttle.de) * kbnode.c (insert_kbnode): Changed semantics and all callers. * keyedit.c : More or less a complete rewrite Wed Jul 22 17:10:04 1998 Werner Koch (wk@isil.d.shuttle.de) * build-packet.c (write_sign_packet_header): New. Tue Jul 21 14:37:09 1998 Werner Koch (wk@isil.d.shuttle.de) * import.c (import_one): Now creates a trustdb record. * g10.c (main): New command --check-trustdb Mon Jul 20 11:15:07 1998 Werner Koch (wk@isil.d.shuttle.de) * genkey.c (generate_keypair): Default key is now DSA with encryption only ElGamal subkey. Thu Jul 16 10:58:33 1998 Werner Koch (wk@isil.d.shuttle.de) * keyid.c (keyid_from_fingerprint): New. * getkey.c (get_pubkey_byfprint): New. Tue Jul 14 18:09:51 1998 Werner Koch (wk@isil.d.shuttle.de) * keyid.c (fingerprint_from_pk): Add argument and changed all callers. (fingerprint_from_sk): Ditto. Tue Jul 14 10:10:03 1998 Werner Koch (wk@isil.d.shuttle.de) * plaintext.c (handle_plaintext): Now returns create error if the file could not be created or the user responded not to overwrite the file. * mainproc.c (proc_plaintext): Tries again if the file could not be created to check the signature without output. * misc.c (disable_core_dumps): New. * g10.c (main): disable coredumps for gpg * g10.c (MAINTAINER_OPTIONS): New to disable some options Mon Jul 13 16:47:54 1998 Werner Koch (wk@isil.d.shuttle.de) * plaintext.c (hash_datafiles): New arg for better support of detached sigs. Changed all callers. * mainproc.c (proc_signature_packets): Ditto. * g10.c (main): New option "compress-sigs" * sig.c (sign_file): detached signatures are not anymore compressed unless the option --compress-sigs is used. Thu Jul 9 19:54:54 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c: Fixes to allow zero length cleartext signatures Thu Jul 9 14:52:47 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (build_list): Now drops setuid. (main): Changed the way keyrings and algorithms are registered . Wed Jul 8 14:17:30 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h (PKT_public_key): Add field keyid. * parse-packet.c (parse_key): Reset the above field. * keyid.c (keyid_from_pk): Use above field as cache. * tdbio.c, tdbio.h: New * trustdb.c: Moved some functions to tdbio.c. (print_keyid): New. * pkclist.c (check_signatures_trust): New. Wed Jul 8 10:45:28 1998 Werner Koch (wk@isil.d.shuttle.de) * plaintext.c (special_md_putc): New. (handle_plaintext): add clearsig argument * mainproc.c (proc_plaintext): detection of clearsig * sign.c (write_dased_escaped): Changed clearsig format Tue Jul 7 18:56:19 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (find_header): Now makes sure that there is only one empty line for clearsigs, as this is what OP now says. Mon Jul 6 13:09:07 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): New option default-secret-key * getkey.c (get_seckey_byname): support for this option. Mon Jul 6 09:03:49 1998 Werner Koch (wk@isil.d.shuttle.de) * getkey.c (add_keyring): Keyrings are now added to end of the list of keyrings. The first added keyringwill be created. (add_secret_keyring): Likewise. * ringedit.c (add_keyblock_resource): Files are created here. * g10.c (aNOP): Removed * getkey.c (lookup): Add checking of usage for name lookups * packet.h (pubkey_usage): Add a field which may be used to store usage capabilities. * pkclist.c (build_pk_list): getkey now called with usage arg. * skclist.c (build_sk_list): Ditto. * sign.c (clearsign_file): Fixed "Hash:" headers Sat Jul 4 13:33:31 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (list_ownertrust): New. * g10.c (aListOwnerTrust): New. * g10.c (def_pubkey_algo): Removed. * trustdb.c (verify_private_data): Removed and also the call to it. (sign_private_data): Removed. Fri Jul 3 13:26:10 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (aEditKey): was aEditSig. Changed usage msg. * keyedit.c: Done some i18n stuff. * g10.c (do_not_use_RSA): New. * sign.c (do_sign): Add call to above function. * encode.c (write_pubkey_enc_from_list): Ditto. Thu Jul 2 21:01:25 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c: Now is able sto store data of unknown algorithms. * free-packet.c: Support for this. * build-packet.c: Can write data of packet with unknown algos. Thu Jul 2 11:46:36 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c (parse): fixed 4 byte length header Wed Jul 1 12:36:55 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h (new_ctb): New field for some packets * build-packet.c (build_packet): Support for new_ctb * parse-packet.c (parse): Ditto. Mon Jun 29 12:54:45 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h: changed all "_cert" to "_key", "subcert" to "subkey". * free-packet.c (free_packet): Removed memory leak for subkeys. Sun Jun 28 18:32:27 1998 Werner Koch (wk@isil.d.shuttle.de) * import.c (import_keys): Renamed from import_pubkeys. (import_secret_one): New. * g10.c (aExportSecret): New. * export.c (export_seckeys): New. * parse-packet.c (parse_certificate): Cleaned up. (parse_packet): Trust packets are now considered as unknown. (parse_pubkey_warning): New. Fri Jun 26 10:37:35 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (has_invalid_email_chars): New. Wed Jun 24 16:40:22 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (armor_filter): Now creates valid onepass_sig packets with all detected hash algorithms. * mainproc.c (proc_plaintext): Now uses the hash algos as specified in the onepass_sig packets (if there are any) Mon Jun 22 11:54:08 1998 Werner Koch (wk@isil.d.shuttle.de) * plaintext.c (handle_plaintext): add arg to disable outout * mainproc.c (proc_plaintext): disable output when in sigs_only mode. Thu Jun 18 13:17:27 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c: Removed all rsa packet stuff, chnaged defaults for key generation. Sun Jun 14 21:28:31 1998 Werner Koch (wk@isil.d.shuttle.de) * misc.c (checksum_u16): Fixed a stupid bug which caused a wrong checksum calculation for the secret key protection and add a backward compatibility option. * g10.c (main): Add option --emulate-checksum-bug. Thu Jun 11 13:26:44 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h: Major changes to the structure of public key material which is now stored in an array and not anaymore in a union of algorithm specific structures. These is needed to make the system more extendable and makes a lot of stuff much simpler. Changed all over the system. * dsa.c, rsa.c, elg.c: Removed. Wed Jun 10 07:22:02 1998 Werner Koch,mobil,,, (wk@tobold) * g10.c ("load-extension"): New option. Mon Jun 8 22:23:37 1998 Werner Koch (wk@isil.d.shuttle.de) * seckey-cert.c (do_check): Removed cipher constants (protect_secret_key): Ditto. Fri May 29 10:00:28 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (query_trust_info): New. * keylist.c (list_one): Add output of trust info * mainproc (list_node): ditto. * g10.c (main): full trustdb init if -with-colons and any of the key list modes. Thu May 28 10:34:42 1998 Werner Koch (wk@isil.d.shuttle.de) * status.c (STATUS_RSA_OR_IDEA): New. * sig-check.c (check_signature): Output special status message. * pubkey-enc.c (get_session_key): Ditto. * mainproc.c (check_sig_and_print): Changed format of output. * passpharse.c (passphrase_to_dek): Likewise. Wed May 27 13:46:48 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (aListSecretKeys): New option --list-secret-keys * keylist.c (std_key_list): Renamed to public_key_list. (secret_key_list): New (list_one, list_all): Add support for secret keys. * getkey.c (get_secret_keyring): New. * mainproc.c (list_node): Add option --with-colons for secret keys * sig-check.c (check_key_signature): detection of selfsigs * mainproc.c (list_node): fixed listing. * g10.c (aListSecretKeys): New option --always-trust * pkclist.c (do_we_trust): Override per option added * status.c (write_status_text): Add a prefix to every output line. Wed May 27 07:49:21 1998 Werner Koch (wk@isil.d.shuttle.de) * g10 (--compress-keys): New. * options.h (compress_keys): New. * export.c (export_pubkeys): Only compresses with the new option. Tue May 26 11:24:33 1998 Werner Koch (wk@isil.d.shuttle.de) * passphrase.c (get_last_passphrase): New (set_next_passphrase): New. (passphrase_to_dek): add support for the above functions. * keyedit.c (make_keysig_packet): Add sigclass 0x18, changed all callers due to a new argument. * keygen.c (write_keybinding): New (generate_subkeypair): Add functionality (ask_algo, ask_keysize, ask_valid_days): Broke out of generate_keypair (ask_user_id, ask_passphrase): Ditto. Thu May 21 11:26:13 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c,gpgd.c (main): Does now return an int, so that egcs does not complain. * armor.c (fake_packet): Removed erro message and add a noticed that this part should be fixed. * sign.c (sign_file): Compression now comes in front of encryption. * encode.c (encode_simple): Ditto. (encode_crypt): Ditto. Tue May 19 16:18:19 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (fake_packet): Changed assertion to log_error Sat May 16 16:02:06 1998 Werner Koch (wk@isil.d.shuttle.de) * build-packet.c (build_packet): Add SUBKEY packets. Fri May 15 17:57:23 1998 Werner Koch (wk@isil.d.shuttle.de) * sign.c (hash_for): New and used in all places here. * main.h (DEFAULT_): new macros. * g10.c (opt.def_digest_algo): Now set to 0 * compress.c (init_compress): Add support for algo 1 * options.h (def_compress_algo): New * g10.c (main): New option --compress-algo Fri May 15 13:23:59 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (print_mds): New feature to print only one hash, chnaged formatting. Thu May 14 15:36:24 1998 Werner Koch (wk@isil.d.shuttle.de) * misc.c (trap_unaligned) [__alpha__]: New * g10.c (trap_unaligned): Add call to this to track down SIGBUS on Alphas (to avoid the slow emulation code). Wed May 13 11:48:27 1998 Werner Koch (wk@isil.d.shuttle.de) * build-packet.c (do_signature): Support for v4 pakets. * keyedit.c (make_keysig_packet): Ditto. * build-packet.c (build_sig_subpkt_from_sig): New. (build_sig_subpkt): New. * elg.c (g10_elg_sign): removed keyid_from_skc. * dsa.c (g10_dsa_sign): Ditto. * rsa.c (g10_rsa_sign): Ditto. * keyedit.c (make_keysig_packet): Add call to keyid_from_skc * sign.c (clearsign_file): Support for v4 signatures. (sign_file): Ditto. Wed May 6 09:31:24 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c (do_parse): add support for 5 byte length leader. (parse_subpkt): Ditto. * build-packet.c (write_new_header): Ditto. * packet.h (SIGSUBPKT_): New constants. * parse-packet.c (parse_sig_subpkt): Changed name, made global, and arg to return packet length, chnaged all callers Tue May 5 22:11:59 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (gen_dsa): New. * build_packet.c (do_secret_cert): Support for DSA Mon May 4 19:01:25 1998 Werner Koch (wk@isil.d.shuttle.de) * compress.c: doubled buffer sizes * parse-packet.c (do_plaintext): now uses iobuf_read/write. Mon May 4 09:35:53 1998 Werner Koch (wk@isil.d.shuttle.de) * seskey.c (encode_md_value): Add optional argument hash_algo, changed all callers. * passphrase.c (make_dek_from_passphrase): Removed * (get_passhrase_hash): Changed name to passphrase_to_dek, add arg, changed all callers. * all: Introduced the new ELG identifier and added support for the encryption only one (which is okay to use by GNUPG for signatures). Sun May 3 17:50:26 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h (PKT_OLD_COMMENT): New name for type 16. * parse-packet.c (parse_comment): Now uses type 61 Fri May 1 12:44:39 1998 Werner Koch,mobil,,, (wk@tobold) * packet.h (count): Chnaged s2k count from byte to u32. * seckey-cert.c (do_check): Changed s2k algo 3 to 4, changed reading of count. * build-packet.c (do_secret_cert): ditto. * parse-packet.c (parse_certificate): ditto. * parse-packet.c (parse_symkeyenc): New. * build-packet.c (do_symkey_enc): New. Thu Apr 30 16:33:34 1998 Werner Koch (wk@isil.d.shuttle.de) * sign.c (clearsign_file): Fixed "Hash: " armor line. Tue Apr 28 14:27:42 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c (parse_subpkt): Some new types. Mon Apr 27 12:53:59 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Add option --skip-verify. * mainproc.c (check_sig_and_print): Ditto. * g10.c (print_mds): Add output for Tiger. * sign.c (sign_file): Now uses partial length headers if used in canonical textmode (kludge to fix a bug). * parse-packet.c (parse_certificate): Changed BLOWFISH id. * pubkey-enc.c (get_session_key): Ditto. * seskey.c (make_session_key): Ditto. * seckey-cert.c (protect_secret_key,do_check): Add BLOWFISH160. Fri Apr 24 17:38:48 1998 Werner Koch,mobil,,, (wk@tobold) * sig-check.c (check_key_signature): Add sig-class 0x14..0x17 * keyedit.c (sign-key): Some changes to start with support of the above new sig-classes. Wed Apr 22 09:01:57 1998 Werner Koch,mobil,,, (wk@tobold) * getkey.c (compare_name): add email matching Tue Apr 21 16:17:12 1998 Werner Koch,mobil,,, (wk@tobold) * armor.c (armor_filter): fixed missing last LF before CSUM. Thu Apr 9 11:35:22 1998 Werner Koch (wk@isil.d.shuttle.de) * seckey-cert.c (do_check): New; combines all the check functions into one. * sign.c: removed all key management functions * keyedit.c: New. Thu Apr 9 09:49:36 1998 Werner Koch (wk@isil.d.shuttle.de) * import.c (chk_self_sigs): Changed an error message. Wed Apr 8 16:19:39 1998 Werner Koch (wk@isil.d.shuttle.de) * packet.h: packet structs now uses structs from the pubkey, removed all copy operations from packet to pubkey structs. Wed Apr 8 13:40:33 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (verify_own_certs): Fixed "public key not found". * getkey.c (key_byname): New, combines public and secret key search. * pkclist.c (build_pkc_list): Add new arg usage, changed all callers. * skclist.c (build_skc_list): Likewise. * ringedit.c (find_keyblock, keyring_search2): Removed. Wed Apr 8 09:47:21 1998 Werner Koch (wk@isil.d.shuttle.de) * sig-check.c (do_check): Applied small fix from Ulf MЖller. Tue Apr 7 19:28:07 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.c, encr-data.c, seckey-cert.c: Now uses cipher_xxxx functions instead of blowfish_xxx or cast_xxx Tue Apr 7 11:04:02 1998 Werner Koch (wk@isil.d.shuttle.de) * Makefile.am (g10maint.o): Changed the way it is created. Mon Apr 6 11:17:08 1998 Werner Koch (wk@isil.d.shuttle.de) * misc.c: New. * keygen.c (checksum,checksum_u16,checksum_mpi): Moved to misc.c * seckey-cert.c: Kludge for wrong ELG checksum implementation. Sat Apr 4 20:07:01 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.c (cipher_filter): Support for CAST5 * encr-data.c (decode_filter): Ditto. (decrypt_data): Ditto. * seskey.c (make_session_key): Ditto. * seckey-cert.c (check_elg, check_dsa): Ditto, (protect_secret_key): Ditto. * pubkey-enc.c (get_session_key): Ditto. * passphrase.c (hash_passphrase): Ditto. Thu Apr 2 20:22:35 1998 Werner Koch (wk@isil.d.shuttle.de) * gpgd.c: New Thu Apr 2 10:38:16 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (generate_keypair): Add valid_days stuff. * trustdb.c (check_trust): Add check for valid_days. Wed Apr 1 16:15:58 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (generate_keypair): Addional question whether the selected large keysize is really needed. Wed Apr 1 15:56:33 1998 Werner Koch (wk@isil.d.shuttle.de) * seckey-cert.c (protect_secret_key): merged protect_xxx to here. Wed Apr 1 10:34:46 1998 Werner Koch (wk@isil.d.shuttle.de) * Makefile.am (g10maint.c): Changed creation rule, so that it works on FreeBSD (missing CFLAGS). * parse-packet.c (parse_subkey): Removed. Thu Mar 19 15:22:36 1998 Werner Koch (wk@isil.d.shuttle.de) * ringedit.c (keyring_enum): Fixed problem with reading too many packets. Add support to read secret keyrings. * getkey.c (scan_keyring): Removed (lookup): New to replace scan_keyring. (scan_secret_keyring): Removed. (lookup_skc): New. Wed Mar 18 11:47:34 1998 Werner Koch (wk@isil.d.shuttle.de) * ringedit.c (enum_keyblocks): New read mode 11. * keyid.c (elg_fingerprint_md): New and changed all other functions to call this if the packet version is 4 or above. Tue Mar 17 20:46:16 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c (parse_certificate): Add listing support for subkeys. Tue Mar 17 20:32:22 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (is_armored): Allow marker packet. Thu Mar 12 13:36:49 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (check_trust): Checks timestamp of pubkey. * sig-check. (do_check): Compares timestamps. Tue Mar 10 17:01:56 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Add call to init_signals. * signal.c: New. Mon Mar 9 12:43:42 1998 Werner Koch (wk@isil.d.shuttle.de) * dsa.c: New * packet.h, free-packet.c, parse-packet.c : Add support for DSA * sig-check.c, getkey.c, keyid.c, ringedit.c: Ditto. * seckey-cert.c: Ditto. * packet.h : Moved .digest_algo of signature packets to outer structure. Changed all references Sun Mar 8 13:06:42 1998 Werner Koch (wk@isil.d.shuttle.de) * openfile.c : Support for stdout filename "-". * mainproc.c (check_sig_and_print): Enhanced status output: * status.c (write_status_text): New. Fri Mar 6 16:10:54 1998 Werner Koch (wk@isil.d.shuttle.de) * kbnode.c (clone_kbnode): Fixed private_flag. * mainproc.c (list_node): Output of string "Revoked" as user-id. Fri Mar 6 14:26:39 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Add userids to "-kv" and cleaned up this stuff. Fri Mar 6 12:45:58 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Changed semantics of the list-... commands and added a new one. Removed option "-d" * decrypt.c: New. * trustdb.c (init_trustdb): Autocreate directory only if it ends in "/.gnupg". Thu Mar 5 12:12:11 1998 Werner Koch (wk@isil.d.shuttle.de) * mainproc.c (do_proc_packets): New. Common part of proc_packet. (proc_signature_packets): special version to handle signature data. * verify.c: New. * g10.c (aVerify): New. * plaintext.c (hash_datafiles): New. * compress.c (handle_compressed): Add callback arg, changed caller. Thu Mar 5 10:20:06 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c: Is nom the common source for gpg and gpgm * g10maint.c: Removed * Makefile.am: Add rule to build g10maint.c Thu Mar 5 08:43:59 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Changed the way clear text sigs are faked. Wed Mar 4 19:47:37 1998 Werner Koch (wk@isil.d.shuttle.de) * g10maint.c (aMuttKeyList): New * keylist.c: New. Wed Mar 4 17:20:33 1998 Werner Koch (wk@isil.d.shuttle.de) * getkey.c (get_pubkey_byname): Kludge to allow 0x prefix. Tue Mar 3 13:46:55 1998 Werner Koch (wk@isil.d.shuttle.de) * g10maint.c (main): New option --gen-random. Tue Mar 3 09:50:08 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (aDeleteSecretKey): New. (aEditSig): Add option "--edit-key" as synonym for "--edit-sig". (aDeleteSecretKey): New. * getkey.c (seckey_available): New. * sign.c (delete_key): Enhanced to delete secret keys, changed all callers. Mon Mar 2 21:23:48 1998 Werner Koch (wk@isil.d.shuttle.de) * pkc_list.c (build_pkc_list): Add interactive input of user ID. Mon Mar 2 20:54:05 1998 Werner Koch (wk@isil.d.shuttle.de) * pkclist.c (do_we_trust_pre): New. (add_ownertrust): Add message. * trustdb.c (enum_trust_web): Quick fix. Mon Mar 2 13:50:53 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): New action aDeleteKey * sign.c (delete_key): New. Sun Mar 1 16:38:58 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (do_check): No returns TRUST_UNDEFINED instead of eof error. Fri Feb 27 18:14:03 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (find_header): Removed trailing CR on headers. Fri Feb 27 18:02:48 1998 Werner Koch (wk@isil.d.shuttle.de) * ringedit.c (keyring_search) [MINGW32]: Open and close file here because rename does not work on open files. Chnaged callers. Fri Feb 27 16:43:11 1998 Werner Koch (wk@isil.d.shuttle.de) * sig-check.c (do_check): Add an md_enable. * mainproc.c (do_check_sig): Use md_open in case of detached sig (proc_tree): Take detached sigs into account. Fri Feb 27 15:22:46 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): Make use of GNUPGHOME envvar. * g10main.c (main): Ditto. Wed Feb 25 11:40:04 1998 Werner Koch (wk@isil.d.shuttle.de) * plaintext.c (ask_for_detached_datafile): add opt.verbose to info output. * openfile.c (open_sigfile): Try also name ending in ".asc" Wed Feb 25 08:41:00 1998 Werner Koch (wk@isil.d.shuttle.de) * keygen.c (generate_keypair): Fixed memory overflow. Tue Feb 24 15:51:55 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c (parse_certificate): Support for S2K. * build-packet.c (do_secret_cert): Ditto. * keygen.c (gen_elg): Ditto. * seckey-cert.c (check_elg): Ditto (protect_elg): Ditto. * sign.c (chnage_passphrase): Ditto. * passphrase.c (get_passphrase_hash): Support for a salt and changed all callers. (make_dek_from_passphrase): Ditto. Tue Feb 24 12:30:56 1998 Werner Koch (wk@isil.d.shuttle.de) * build-packet.c (hash_public_cert): Disabled debug output. Fri Feb 20 17:22:28 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (init_trustdb) [MINGW32]: Removed 2nd mkdir arg. (keyring_copy) [MINGW32]: Add a remove prior to the renames. Wed Feb 18 18:39:02 1998 Werner Koch (wk@isil.d.shuttle.de) * Makefile.am (OMIT_DEPENDENCIES): New. * rsa.c: Replaced log_bug by BUG. Wed Feb 18 13:35:58 1998 Werner Koch (wk@isil.d.shuttle.de) * mainproc.c (do_check_sig): Now uses hash_public_cert. * parse-packet.c (parse_certificate): Removed hashing. * packet.h (public_cert): Removed hash variable. * free-packet.c (copy_public_cert, free_public_cert): Likewise. * sig-check.c (check_key_signatures): Changed semantics. Wed Feb 18 12:11:28 1998 Werner Koch (wk@isil.d.shuttle.de) * trustdb.c (do_check): Add handling for revocation certificates. (build_sigrecs): Ditto. (check_sigs): Ditto. Wed Feb 18 09:31:04 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (armor_filter): Add afx->hdrlines. * revoke.c (gen_revoke): Add comment line. * dearmor.c (enarmor_file): Ditto. * sig-check.c (check_key_signature): Add handling for class 0x20. * mainproc.c : Ditto. Tue Feb 17 21:24:17 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c : Add header lines "...ARMORED FILE .." * dearmor.c (enarmor_file): New. * g10maint.c (main): New option "--enarmor" Tue Feb 17 19:03:33 1998 Werner Koch (wk@isil.d.shuttle.de) * mainproc.c : Changed a lot, because the packets are now stored a simple linlked list and not anymore in a complicatd tree structure. Tue Feb 17 10:14:48 1998 Werner Koch (wk@isil.d.shuttle.de) * free_packet.c (cmp_public_certs): New. (cmp_user_ids): New. * kbnode.c (clone_kbnode): New. (release_kbnode): Add clone support. * ringedit.c (find_keyblock_bypkc): New. * sign.c (remove_keysigs): Self signatures are now skipped, changed arguments and all callers. * import.c : Add functionality. Tue Feb 17 09:31:40 1998 Werner Koch (wk@isil.d.shuttle.de) * options.h (homedir): New option. * g10.c, g10maint.c, getkey.c, keygen.c, trustdb.c (opt.homedir): New. * trustdb.c (init_trustdb): mkdir for hoem directory (sign_private_data): Renamed "sig" to "g10.sig" Mon Feb 16 20:02:03 1998 Werner Koch (wk@isil.d.shuttle.de) * kbnode.c (commit_kbnode): New. (delete_kbnode): removed unused first arg. Changed all Callers. * ringedit.c (keyblock_resource_name): New. (get_keyblock_handle): NULL for filename returns default resource. Mon Feb 16 19:38:48 1998 Werner Koch (wk@isil.d.shuttle.de) * sig-check.s (check_key_signature): Now uses the supplied public key to check the signature and not any more the one from the getkey.c (do_check): New. (check_signature): Most work moved to do_check. Mon Feb 16 14:48:57 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (find_header): Fixed another bug. Mon Feb 16 12:18:34 1998 Werner Koch (wk@isil.d.shuttle.de) * getkey.c (scan_keyring): Add handling of compressed keyrings. Mon Feb 16 10:44:51 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c, g10maint.c (strusage): Rewrote. (build_list): New Mon Feb 16 08:58:41 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (use_armor): New. Sat Feb 14 14:30:57 1998 Werner Koch (wk@isil.d.shuttle.de) * mainproc.c (proc_tree): Sigclass fix. Sat Feb 14 14:16:33 1998 Werner Koch (wk@isil.d.shuttle.de) * armor.c (armor_filter): Changed version and comment string. * encode.c, sign.c, keygen.c: Changed all comment packet strings. Sat Feb 14 12:39:24 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (aGenRevoke): New command. * revoke.c: New. * sign.c (make_keysig_packet): Add support for sigclass 0x20. Fri Feb 13 20:18:14 1998 Werner Koch (wk@isil.d.shuttle.de) * ringedit.c (enum_keyblocks, keyring_enum): New. Fri Feb 13 19:33:40 1998 Werner Koch (wk@isil.d.shuttle.de) * export.c: Add functionality. * keygen.c (generate_keypair): Moved the leading comment behind the key packet. * kbnode.c (walk_kbnode): Fixed. * g10.c (main): listing armored keys now work. Fri Feb 13 16:17:43 1998 Werner Koch (wk@isil.d.shuttle.de) * parse-packet.c (parse_publickey, parse_signature): Fixed calls to mpi_read used for ELG b. Fri Feb 13 15:13:23 1998 Werner Koch (wk@isil.d.shuttle.de) * g10.c (main): changed formatting of help output. Thu Feb 12 22:24:42 1998 Werner Koch (wk@frodo) * pubkey-enc.c (get_session_key): rewritten diff --git a/g10/Makefile.am b/g10/Makefile.am index 6170b1691..af727cda8 100644 --- a/g10/Makefile.am +++ b/g10/Makefile.am @@ -1,93 +1,93 @@ ## Process this file with automake to produce Makefile.in INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/intl EXTRA_DIST = OPTIONS pubring.asc options.skel OMIT_DEPENDENCIES = zlib.h zconf.h LDFLAGS = @LDFLAGS@ @DYNLINK_LDFLAGS@ -needed_libs = ../cipher/libcipher.a ../mpi/libmpi.a ../util/libutil.a +needed_libs = ../cipher/libcipher.la ../mpi/libmpi.la ../util/libutil.la #noinst_PROGRAMS = gpgd bin_PROGRAMS = gpg common_source = \ build-packet.c \ compress.c \ filter.h \ free-packet.c \ getkey.c \ keydb.h \ delkey.c \ pkclist.c \ skclist.c \ ringedit.c \ kbnode.c \ main.h \ mainproc.c \ armor.c \ mdfilter.c \ textfilter.c \ cipher.c \ misc.c \ options.h \ openfile.c \ keyid.c \ trustdb.c \ trustdb.h \ tdbdump.c \ tdbio.c \ tdbio.h \ hkp.h \ hkp.c \ packet.h \ parse-packet.c \ passphrase.c \ pubkey-enc.c \ seckey-cert.c \ seskey.c \ import.c \ export.c \ comment.c \ status.c \ status.h \ sign.c \ plaintext.c \ encr-data.c \ encode.c \ revoke.c \ keylist.c \ sig-check.c \ signal.c \ helptext.c gpg_SOURCES = g10.c \ $(common_source) \ verify.c \ decrypt.c \ keyedit.c \ dearmor.c \ keygen.c #gpgd_SOURCES = gpgd.c \ # ks-proto.h \ # ks-proto.c \ # ks-db.c \ # ks-db.h \ # $(common_source) LDADD = $(needed_libs) @ZLIBS@ @INTLLIBS@ $(PROGRAMS): $(needed_libs) install-data-local: $(mkinstalldirs) $(DESTDIR)$(pkgdatadir) $(INSTALL_DATA) $(srcdir)/options.skel \ $(DESTDIR)$(pkgdatadir)/options.skel @set -e;\ if test -f $(DESTDIR)$(bindir)/gpgm ; then \ echo "removing obsolete gpgm binary" ; \ rm $(DESTDIR)$(bindir)/gpgm ; \ fi diff --git a/g10/helptext.c b/g10/helptext.c index 5fb800784..df7d4ad4f 100644 --- a/g10/helptext.c +++ b/g10/helptext.c @@ -1,252 +1,255 @@ /* helptext.c - English help texts * Copyright (C) 1998 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 #include #include #include #include "util.h" #include "ttyio.h" #include "main.h" #include "i18n.h" /**************** * These helptexts are used for the "online" help feature. We use * a key consisting of words and dots. Because the lookup is only * done in an interactive mode on a user request (when she enters a "?" * as response to a prompt) we can use a simple search through the list. * Translators should use the key as msgid, this is to keep the msgid short * and to allow for easy changing of the helptexts. * * Mini glossary: * * "user ID", "trustdb", "NOTE" and "WARNING". */ static struct helptexts { const char *key; const char *help; } helptexts[] = { /* begin of list */ { N_("edit_ownertrust.value"), "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." }, { N_("revoked_key.override"), "If you want to use this revoked key anyway, answer \"yes\"." }, { N_("untrusted_key.override"), "If you want to use this untrusted key anyway, answer \"yes\"." }, { N_("pklist.user_id.enter"), "Enter the user id of the addressee to whom you want to send the message." }, { N_("keygen.algo"), "Select the algorithm to use.\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" "ElGamal is a algorithm which can be used for signatures and encryption.\n" "OpenPGP distunguishs between two flavors of this algorithms: a 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 implemenations are not required to understand\n" "the signature+encryption flavor.\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 disabled in this." }, { N_("keygen.algo.elg_se"), "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." }, { N_("keygen.size"), "Enter the size of the key" }, { N_("keygen.size.huge.okay"), "Answer \"yes\" or \"no\"" }, { N_("keygen.size.large.okay"), "Answer \"yes\" or \"no\"" }, { N_("keygen.valid"), - "Enter the required value" + "Enter the required value as shown in the pronpt.\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." }, { N_("keygen.valid.okay"), "Answer \"yes\" or \"no\"" }, { N_("keygen.name"), "Enter the name of the key holder" }, { N_("keygen.email"), "please enter an optional but highly suggested email address" }, { N_("keygen.comment"), "Please enter an optional comment" }, { N_("keygen.userid.cmd"), "" "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." }, { N_("keygen.sub.okay"), "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." }, { N_("sign_uid.okay"), "Answer \"yes\" or \"no\"" }, { N_("change_passwd.empty.okay"), "Answer \"yes\" or \"no\"" }, { N_("keyedit.save.okay"), "Answer \"yes\" or \"no\"" }, { N_("keyedit.cancel.okay"), "Answer \"yes\" or \"no\"" }, { N_("keyedit.sign_all.okay"), "Answer \"yes\" is you want to sign ALL the user IDs" }, { N_("keyedit.remove.uid.okay"), "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" }, { N_("keyedit.remove.subkey.okay"), "Answer \"yes\" if it is okay to delete the subkey" }, { N_("keyedit.delsig.valid"), "This is a valid signature on the key; you normally don't want\n" "to delete this signature may be important to establish a trust\n" "connection to the key or another key certified by this key." }, { N_("keyedit.delsig.unknown"), "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" "a trust connection through another already certified key." }, { N_("keyedit.delsig.invalid"), "The signature is not valid. It does make sense to remove it from\n" "your keyring." }, { N_("keyedit.delsig.selfsig"), "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." }, { N_("passphrase.enter"), "" "Please enter the passhrase; this is a secret sentence \n" " Blurb, blurb,.... " }, { N_("passphrase.repeat"), "Please repeat the last passphrase, so you are sure what you typed in." }, { N_("detached_signature.filename"), "Give the name fo the file to which the signature applies" }, /* openfile.c (overwrite_filep) */ { N_("openfile.overwrite.okay"), "Answer \"yes\" if it is okay to overwrite the file" }, /* openfile.c (ask_outfile_name) */ { N_("openfile.askoutname"), "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." }, /* end of list */ { NULL, NULL } }; void display_online_help( const char *keyword ) { tty_kill_prompt(); if( !keyword ) tty_printf(_("No help available") ); else { const char *p = _(keyword); if( strcmp( p, keyword ) ) tty_printf("%s", p ); else { int i; for(i=0; (p=helptexts[i].key) && strcmp( p, keyword ); i++ ) ; if( !p || !*helptexts[i].help ) tty_printf(_("No help available for `%s'"), keyword ); else tty_printf("%s", helptexts[i].help ); } } tty_printf("\n"); } diff --git a/g10/keyedit.c b/g10/keyedit.c index e93634034..8d7e44a9b 100644 --- a/g10/keyedit.c +++ b/g10/keyedit.c @@ -1,1897 +1,1897 @@ /* keyedit.c - keyedit stuff * Copyright (C) 1998, 1999 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 #include #include #include #include #include #include #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" static void show_prefs( KBNODE keyblock, PKT_user_id *uid ); static void show_key_with_all_names( KBNODE keyblock, int only_marked, int with_fpr, int with_subkeys, int with_prefs ); static void show_key_and_fingerprint( KBNODE keyblock ); static void show_fingerprint( PKT_public_key *pk ); static int menu_adduid( KBNODE keyblock, KBNODE sec_keyblock ); static void menu_deluid( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int menu_delsig( KBNODE pub_keyblock ); static void menu_delkey( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int menu_expire( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int menu_select_uid( KBNODE keyblock, int idx ); static int menu_select_key( KBNODE keyblock, int idx ); static int count_uids( KBNODE keyblock ); static int count_uids_with_flag( KBNODE keyblock, unsigned flag ); static int count_keys_with_flag( KBNODE keyblock, unsigned flag ); static int count_selected_uids( KBNODE keyblock ); static int count_selected_keys( KBNODE keyblock ); static int menu_revsig( KBNODE keyblock ); static int menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int enable_disable_key( KBNODE keyblock, int disable ); #define CONTROL_D ('D' - 'A' + 1) #define NODFLG_BADSIG (1<<0) /* bad signature */ #define NODFLG_NOKEY (1<<1) /* no public key */ #define NODFLG_SIGERR (1<<2) /* other sig error */ #define NODFLG_MARK_A (1<<4) /* temporary mark */ #define NODFLG_SELUID (1<<8) /* indicate the selected userid */ #define NODFLG_SELKEY (1<<9) /* indicate the selected key */ #define NODFLG_SELSIG (1<<10) /* indicate a selected signature */ struct sign_uid_attrib { int non_exportable; }; static int get_keyblock_byname( KBNODE *keyblock, KBPOS *kbpos, const char *username ) { int rc; *keyblock = NULL; /* search the userid */ rc = find_keyblock_byname( kbpos, username ); if( rc ) { log_error(_("%s: user not found\n"), username ); return rc; } /* read the keyblock */ rc = read_keyblock( kbpos, keyblock ); if( rc ) log_error("%s: keyblock read problem: %s\n", username, g10_errstr(rc)); else merge_keys_and_selfsig( *keyblock ); return rc; } /**************** * Print information about a signature, chek it and return true * if the signature is okay. NODE must be a signature packet. */ static int print_and_check_one_sig( KBNODE keyblock, KBNODE node, int *inv_sigs, int *no_key, int *oth_err, int *is_selfsig, int print_without_key ) { PKT_signature *sig = node->pkt->pkt.signature; int rc, sigrc; int is_rev = sig->sig_class == 0x30; switch( (rc = check_key_signature( keyblock, node, is_selfsig)) ) { case 0: node->flag &= ~(NODFLG_BADSIG|NODFLG_NOKEY|NODFLG_SIGERR); sigrc = '!'; break; case G10ERR_BAD_SIGN: node->flag = NODFLG_BADSIG; sigrc = '-'; if( inv_sigs ) ++*inv_sigs; break; case G10ERR_NO_PUBKEY: node->flag = NODFLG_NOKEY; sigrc = '?'; if( no_key ) ++*no_key; break; default: node->flag = NODFLG_SIGERR; sigrc = '%'; if( oth_err ) ++*oth_err; break; } if( sigrc != '?' || print_without_key ) { tty_printf("%s%c %08lX %s ", is_rev? "rev":"sig", sigrc, sig->keyid[1], datestr_from_sig(sig)); if( sigrc == '%' ) tty_printf("[%s] ", g10_errstr(rc) ); else if( sigrc == '?' ) ; else if( *is_selfsig ) { tty_printf( is_rev? _("[revocation]") : _("[self-signature]") ); } else { size_t n; char *p = get_user_id( sig->keyid, &n ); tty_print_string( p, n > 40? 40 : n ); m_free(p); } tty_printf("\n"); } return (sigrc == '!'); } /**************** * Check the keysigs and set the flags to indicate errors. * Returns true if error found. */ static int check_all_keysigs( KBNODE keyblock, int only_selected ) { KBNODE kbctx; KBNODE node; int inv_sigs = 0; int no_key = 0; int oth_err = 0; int has_selfsig = 0; int mis_selfsig = 0; int selected = !only_selected; int anyuid = 0; for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) { if( node->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *uid = node->pkt->pkt.user_id; if( only_selected ) selected = (node->flag & NODFLG_SELUID); if( selected ) { tty_printf("uid "); tty_print_string( uid->name, uid->len ); tty_printf("\n"); if( anyuid && !has_selfsig ) mis_selfsig++; has_selfsig = 0; anyuid = 1; } } else if( selected && node->pkt->pkttype == PKT_SIGNATURE && ( (node->pkt->pkt.signature->sig_class&~3) == 0x10 || node->pkt->pkt.signature->sig_class == 0x30 ) ) { int selfsig; if( print_and_check_one_sig( keyblock, node, &inv_sigs, &no_key, &oth_err, &selfsig, 0 ) ) { if( selfsig ) has_selfsig = 1; } /* Hmmm: should we update the trustdb here? */ } } if( !has_selfsig ) mis_selfsig++; if( inv_sigs == 1 ) tty_printf(_("1 bad signature\n"), inv_sigs ); else if( inv_sigs ) tty_printf(_("%d bad signatures\n"), inv_sigs ); if( no_key == 1 ) tty_printf(_("1 signature not checked due to a missing key\n") ); else if( no_key ) tty_printf(_("%d signatures not checked due to missing keys\n"), no_key ); if( oth_err == 1 ) tty_printf(_("1 signature not checked due to an error\n") ); else if( oth_err ) tty_printf(_("%d signatures not checked due to errors\n"), oth_err ); if( mis_selfsig == 1 ) tty_printf(_("1 user id without valid self-signature detected\n")); else if( mis_selfsig ) tty_printf(_("%d user ids without valid self-signatures detected\n"), mis_selfsig); return inv_sigs || no_key || oth_err || mis_selfsig; } int sign_uid_mk_attrib( PKT_signature *sig, void *opaque ) { struct sign_uid_attrib *attrib = opaque; byte buf[8]; if( attrib->non_exportable ) { buf[0] = 0; /* not exportable */ build_sig_subpkt( sig, SIGSUBPKT_EXPORTABLE, buf, 1 ); } return 0; } /**************** * Loop over all locusr and and sign the uids after asking. * If no user id is marked, all user ids will be signed; * if some user_ids are marked those will be signed. */ static int sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified, int local ) { int rc = 0; SK_LIST sk_list = NULL; SK_LIST sk_rover = NULL; PKT_secret_key *sk = NULL; KBNODE node, uidnode; PKT_public_key *primary_pk=NULL; int select_all = !count_selected_uids(keyblock); int upd_trust = 0; /* build a list of all signators */ rc=build_sk_list( locusr, &sk_list, 0, 1 ); if( rc ) goto leave; /* loop over all signaturs */ for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { u32 sk_keyid[2]; size_t n; char *p; /* we have to use a copy of the sk, because make_keysig_packet * may remove the protection from sk and if we did other * changes to the secret key, we would save the unprotected * version */ if( sk ) free_secret_key(sk); sk = copy_secret_key( NULL, sk_rover->sk ); keyid_from_sk( sk, sk_keyid ); /* set mark A for all selected user ids */ for( node=keyblock; node; node = node->next ) { if( select_all || (node->flag & NODFLG_SELUID) ) node->flag |= NODFLG_MARK_A; else node->flag &= ~NODFLG_MARK_A; } /* reset mark for uids which are already signed */ uidnode = NULL; for( node=keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID ) { uidnode = (node->flag & NODFLG_MARK_A)? node : NULL; } else if( uidnode && node->pkt->pkttype == PKT_SIGNATURE && (node->pkt->pkt.signature->sig_class&~3) == 0x10 ) { if( sk_keyid[0] == node->pkt->pkt.signature->keyid[0] && sk_keyid[1] == node->pkt->pkt.signature->keyid[1] ) { /* Fixme: see whether there is a revocation in which * case we should allow to sign it again. */ tty_printf(_("Already signed by key %08lX\n"), (ulong)sk_keyid[1] ); uidnode->flag &= ~NODFLG_MARK_A; /* remove mark */ } } } /* check whether any uids are left for signing */ if( !count_uids_with_flag(keyblock, NODFLG_MARK_A) ) { tty_printf(_("Nothing to sign with key %08lX\n"), (ulong)sk_keyid[1] ); continue; } /* Ask whether we really should sign these user id(s) */ tty_printf("\n"); show_key_with_all_names( keyblock, 1, 1, 0, 0 ); tty_printf("\n"); tty_printf(_( "Are you really sure that you want to sign this key\n" "with your key: \"")); p = get_user_id( sk_keyid, &n ); tty_print_string( p, n ); m_free(p); p = NULL; tty_printf("\"\n\n"); if( local ) tty_printf( _("The signature will be marked as non-exportable.\n\n")); if( opt.batch && opt.answer_yes ) ; else if( !cpr_get_answer_is_yes("sign_uid.okay", _("Really sign? ")) ) continue; /* now we can sign the user ids */ reloop: /* (must use this, because we are modifing the list) */ primary_pk = NULL; for( node=keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_KEY ) primary_pk = node->pkt->pkt.public_key; else if( node->pkt->pkttype == PKT_USER_ID && (node->flag & NODFLG_MARK_A) ) { PACKET *pkt; PKT_signature *sig; struct sign_uid_attrib attrib; assert( primary_pk ); memset( &attrib, 0, sizeof attrib ); attrib.non_exportable = local; node->flag &= ~NODFLG_MARK_A; rc = make_keysig_packet( &sig, primary_pk, node->pkt->pkt.user_id, NULL, sk, 0x10, 0, sign_uid_mk_attrib, &attrib ); if( rc ) { log_error(_("signing failed: %s\n"), g10_errstr(rc)); goto leave; } *ret_modified = 1; /* we changed the keyblock */ upd_trust = 1; pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; insert_kbnode( node, new_kbnode(pkt), PKT_SIGNATURE ); goto reloop; } } } /* end loop over signators */ if( upd_trust && primary_pk ) { rc = clear_trust_checked_flag( primary_pk ); } leave: release_sk_list( sk_list ); if( sk ) free_secret_key(sk); return rc; } /**************** * Change the passphrase of the primary and all secondary keys. * We use only one passphrase for all keys. */ static int change_passphrase( KBNODE keyblock ) { int rc = 0; int changed=0; KBNODE node; PKT_secret_key *sk; char *passphrase = NULL; node = find_kbnode( keyblock, PKT_SECRET_KEY ); if( !node ) { log_error("Oops; secret key not found anymore!\n"); goto leave; } sk = node->pkt->pkt.secret_key; switch( is_secret_key_protected( sk ) ) { case -1: rc = G10ERR_PUBKEY_ALGO; break; case 0: tty_printf(_("This key is not protected.\n")); break; default: tty_printf(_("Key is protected.\n")); rc = check_secret_key( sk, 0 ); if( !rc ) passphrase = get_last_passphrase(); break; } /* unprotect all subkeys (use the supplied passphrase or ask)*/ for(node=keyblock; !rc && node; node = node->next ) { if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) { PKT_secret_key *subsk = node->pkt->pkt.secret_key; set_next_passphrase( passphrase ); rc = check_secret_key( subsk, 0 ); } } if( rc ) tty_printf(_("Can't edit this key: %s\n"), g10_errstr(rc)); else { DEK *dek = NULL; STRING2KEY *s2k = m_alloc_secure( sizeof *s2k ); tty_printf(_("Enter the new passphrase for this secret key.\n\n") ); set_next_passphrase( NULL ); for(;;) { s2k->mode = opt.s2k_mode; s2k->hash_algo = opt.s2k_digest_algo; dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2 ); if( !dek ) { tty_printf(_("passphrase not correctly repeated; try again.\n")); } else if( !dek->keylen ) { rc = 0; tty_printf(_( "You don't want a passphrase -" " this is probably a *bad* idea!\n\n")); if( cpr_get_answer_is_yes("change_passwd.empty.okay", _("Do you really want to do this? "))) changed++; break; } else { /* okay */ sk->protect.algo = dek->algo; sk->protect.s2k = *s2k; rc = protect_secret_key( sk, dek ); for(node=keyblock; !rc && node; node = node->next ) { if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) { PKT_secret_key *subsk = node->pkt->pkt.secret_key; subsk->protect.algo = dek->algo; subsk->protect.s2k = *s2k; rc = protect_secret_key( subsk, dek ); } } if( rc ) log_error("protect_secret_key failed: %s\n", g10_errstr(rc) ); else changed++; break; } } m_free(s2k); m_free(dek); } leave: m_free( passphrase ); set_next_passphrase( NULL ); return changed && !rc; } /**************** * There are some keys out (due to a bug in gnupg), where the sequence * of the packets is wrong. This function fixes that. * Returns: true if the keyblock has been fixed. * * Note: This function does not work if there is more than one user ID. */ static int fix_keyblock( KBNODE keyblock ) { KBNODE node, last, subkey; int fixed=0; /* locate key signatures of class 0x10..0x13 behind sub key packets */ for( subkey=last=NULL, node = keyblock; node; last=node, node = node->next ) { switch( node->pkt->pkttype ) { case PKT_PUBLIC_SUBKEY: case PKT_SECRET_SUBKEY: if( !subkey ) subkey = last; /* actually it is the one before the subkey */ break; case PKT_SIGNATURE: if( subkey ) { PKT_signature *sig = node->pkt->pkt.signature; if( sig->sig_class >= 0x10 && sig->sig_class <= 0x13 ) { log_info(_( "moving a key signature to the correct place\n")); last->next = node->next; node->next = subkey->next; subkey->next = node; node = last; fixed=1; } } break; default: break; } } return fixed; } /**************** * Menu driven key editor * * Note: to keep track of some selection we use node->mark MARKBIT_xxxx. */ void keyedit_menu( const char *username, STRLIST locusr, STRLIST commands ) { enum cmdids { cmdNONE = 0, cmdQUIT, cmdHELP, cmdFPR, cmdLIST, cmdSELUID, cmdCHECK, cmdSIGN, cmdLSIGN, cmdREVSIG, cmdREVKEY, cmdDELSIG, cmdDEBUG, cmdSAVE, cmdADDUID, cmdDELUID, cmdADDKEY, cmdDELKEY, cmdTOGGLE, cmdSELKEY, cmdPASSWD, cmdTRUST, cmdPREF, cmdEXPIRE, cmdENABLEKEY, cmdDISABLEKEY, cmdNOP }; static struct { const char *name; enum cmdids id; int need_sk; const char *desc; } cmds[] = { { N_("quit") , cmdQUIT , 0, N_("quit this menu") }, { N_("q") , cmdQUIT , 0, NULL }, { N_("save") , cmdSAVE , 0, N_("save and quit") }, { N_("help") , cmdHELP , 0, N_("show this help") }, { "?" , cmdHELP , 0, NULL }, { N_("fpr") , cmdFPR , 0, N_("show fingerprint") }, { N_("list") , cmdLIST , 0, N_("list key and user ids") }, { N_("l") , cmdLIST , 0, NULL }, { N_("uid") , cmdSELUID , 0, N_("select user id N") }, { N_("key") , cmdSELKEY , 0, N_("select secondary key N") }, { N_("check") , cmdCHECK , 0, N_("list signatures") }, { N_("c") , cmdCHECK , 0, NULL }, { N_("sign") , cmdSIGN , 0, N_("sign the key") }, { N_("s") , cmdSIGN , 0, NULL }, { N_("lsign") , cmdLSIGN , 0, N_("sign the key locally") }, { N_("debug") , cmdDEBUG , 0, NULL }, { N_("adduid") , cmdADDUID , 1, N_("add a user id") }, { N_("deluid") , cmdDELUID , 0, N_("delete user id") }, { N_("addkey") , cmdADDKEY , 1, N_("add a secondary key") }, { N_("delkey") , cmdDELKEY , 0, N_("delete a secondary key") }, { N_("delsig") , cmdDELSIG , 0, N_("delete signatures") }, { N_("expire") , cmdEXPIRE , 1, N_("change the expire date") }, { N_("toggle") , cmdTOGGLE , 1, N_("toggle between secret " "and public key listing") }, { N_("t" ) , cmdTOGGLE , 1, NULL }, { N_("pref") , cmdPREF , 0, N_("list preferences") }, { N_("passwd") , cmdPASSWD , 1, N_("change the passphrase") }, { N_("trust") , cmdTRUST , 0, N_("change the ownertrust") }, { N_("revsig") , cmdREVSIG , 0, N_("revoke signatures") }, { N_("revkey") , cmdREVKEY , 1, N_("revoke a secondary key") }, { N_("disable") , cmdDISABLEKEY , 0, N_("disable a key") }, { N_("enable") , cmdENABLEKEY , 0, N_("enable a key") }, { NULL, cmdNONE } }; - enum cmdids cmd; + enum cmdids cmd = 0; int rc = 0; KBNODE keyblock = NULL; KBPOS keyblockpos; KBNODE sec_keyblock = NULL; KBPOS sec_keyblockpos; KBNODE cur_keyblock; char *answer = NULL; int redisplay = 1; int modified = 0; int sec_modified = 0; int toggle; int have_commands = !!commands; if( opt.batch && !have_commands ) { log_error(_("can't do that in batchmode\n")); goto leave; } /* first try to locate it as secret key */ rc = find_secret_keyblock_byname( &sec_keyblockpos, username ); if( !rc ) { rc = read_keyblock( &sec_keyblockpos, &sec_keyblock ); if( rc ) { log_error("%s: secret keyblock read problem: %s\n", username, g10_errstr(rc)); goto leave; } merge_keys_and_selfsig( sec_keyblock ); if( fix_keyblock( sec_keyblock ) ) sec_modified++; } /* and now get the public key */ rc = get_keyblock_byname( &keyblock, &keyblockpos, username ); if( rc ) goto leave; if( fix_keyblock( keyblock ) ) modified++; if( collapse_uids( &keyblock ) ) modified++; if( sec_keyblock ) { /* check that they match */ /* FIXME: check that they both match */ tty_printf(_("Secret key is available.\n")); } toggle = 0; cur_keyblock = keyblock; for(;;) { /* main loop */ - int i, arg_number; + int i, arg_number=0; char *p; tty_printf("\n"); if( redisplay ) { show_key_with_all_names( cur_keyblock, 0, 0, 1, 0 ); tty_printf("\n"); redisplay = 0; } do { m_free(answer); if( have_commands ) { if( commands ) { answer = m_strdup( commands->d ); commands = commands->next; } else if( opt.batch ) { answer = m_strdup("quit"); } else have_commands = 0; } if( !have_commands ) { answer = cpr_get("", _("Command> ")); cpr_kill_prompt(); } trim_spaces(answer); } while( *answer == '#' ); arg_number = 0; if( !*answer ) cmd = cmdLIST; else if( *answer == CONTROL_D ) cmd = cmdQUIT; else if( isdigit( *answer ) ) { cmd = cmdSELUID; arg_number = atoi(answer); } else { if( (p=strchr(answer,' ')) ) { *p++ = 0; trim_spaces(answer); trim_spaces(p); arg_number = atoi(p); } for(i=0; cmds[i].name; i++ ) if( !stricmp( answer, cmds[i].name ) ) break; if( cmds[i].need_sk && !sec_keyblock ) { tty_printf(_("Need the secret key to do this.\n")); cmd = cmdNOP; } else cmd = cmds[i].id; } switch( cmd ) { case cmdHELP: for(i=0; cmds[i].name; i++ ) { if( cmds[i].need_sk && !sec_keyblock ) ; /* skip if we do not have the secret key */ else if( cmds[i].desc ) tty_printf("%-10s %s\n", cmds[i].name, _(cmds[i].desc) ); } break; case cmdQUIT: if( have_commands ) goto leave; if( !modified && !sec_modified ) goto leave; if( !cpr_get_answer_is_yes("keyedit.save.okay", _("Save changes? ")) ) { if( cpr_enabled() || cpr_get_answer_is_yes("keyedit.cancel.okay", _("Quit without saving? ")) ) goto leave; break; } /* fall thru */ case cmdSAVE: if( modified || sec_modified ) { if( modified ) { rc = update_keyblock( &keyblockpos, keyblock ); if( rc ) { log_error(_("update failed: %s\n"), g10_errstr(rc) ); break; } } if( sec_modified ) { rc = update_keyblock( &sec_keyblockpos, sec_keyblock ); if( rc ) { log_error(_("update secret failed: %s\n"), g10_errstr(rc) ); break; } } } else tty_printf(_("Key not changed so no update needed.\n")); rc = update_trust_record( keyblock, 0, NULL ); if( rc ) log_error(_("update of trustdb failed: %s\n"), g10_errstr(rc) ); goto leave; case cmdLIST: redisplay = 1; break; case cmdFPR: show_key_and_fingerprint( keyblock ); break; case cmdSELUID: if( menu_select_uid( cur_keyblock, arg_number ) ) redisplay = 1; break; case cmdSELKEY: if( menu_select_key( cur_keyblock, arg_number ) ) redisplay = 1; break; case cmdCHECK: /* we can only do this with the public key becuase the * check functions can't cope with secret keys and it * is questionable whether this would make sense at all */ check_all_keysigs( keyblock, count_selected_uids(keyblock) ); break; case cmdSIGN: /* sign (only the public key) */ case cmdLSIGN: /* sign (only the public key) */ if( count_uids(keyblock) > 1 && !count_selected_uids(keyblock) ) { if( !cpr_get_answer_is_yes("keyedit.sign_all.okay", _("Really sign all user ids? ")) ) { tty_printf(_("Hint: Select the user ids to sign\n")); break; } } sign_uids( keyblock, locusr, &modified, cmd == cmdLSIGN ); break; case cmdDEBUG: dump_kbnode( cur_keyblock ); break; case cmdTOGGLE: toggle = !toggle; cur_keyblock = toggle? sec_keyblock : keyblock; redisplay = 1; break; case cmdADDUID: if( menu_adduid( keyblock, sec_keyblock ) ) { redisplay = 1; sec_modified = modified = 1; /* must update the trustdb already here, so that preferences * get listed correctly */ rc = update_trust_record( keyblock, 0, NULL ); if( rc ) { log_error(_("update of trustdb failed: %s\n"), g10_errstr(rc) ); rc = 0; } } break; case cmdDELUID: { int n1; if( !(n1=count_selected_uids(keyblock)) ) tty_printf(_("You must select at least one user id.\n")); else if( count_uids(keyblock) - n1 < 1 ) tty_printf(_("You can't delete the last user id!\n")); else if( cpr_get_answer_is_yes( "keyedit.remove.uid.okay", n1 > 1? _("Really remove all selected user ids? ") : _("Really remove this user id? ") ) ) { menu_deluid( keyblock, sec_keyblock ); redisplay = 1; modified = 1; if( sec_keyblock ) sec_modified = 1; } } break; case cmdDELSIG: { int n1; if( !(n1=count_selected_uids(keyblock)) ) tty_printf(_("You must select at least one user id.\n")); else if( menu_delsig( keyblock ) ) { /* no redisplay here, because it may scroll away some * status output of delsig */ modified = 1; } } break; case cmdADDKEY: if( generate_subkeypair( keyblock, sec_keyblock ) ) { redisplay = 1; sec_modified = modified = 1; } break; case cmdDELKEY: { int n1; if( !(n1=count_selected_keys( keyblock )) ) tty_printf(_("You must select at least one key.\n")); else if( sec_keyblock && !cpr_get_answer_is_yes( "keyedit.remove.subkey.okay", n1 > 1? _("Do you really want to delete the selected keys? "): _("Do you really want to delete this key? ") )) ; else { menu_delkey( keyblock, sec_keyblock ); redisplay = 1; modified = 1; if( sec_keyblock ) sec_modified = 1; } } break; case cmdREVKEY: { int n1; if( !(n1=count_selected_keys( keyblock )) ) tty_printf(_("You must select at least one key.\n")); else if( sec_keyblock && !cpr_get_answer_is_yes( "keyedit.revoke.subkey.okay", n1 > 1? _("Do you really want to revoke the selected keys? "): _("Do you really want to revoke this key? ") )) ; else { if( menu_revkey( keyblock, sec_keyblock ) ) { modified = 1; /*sec_modified = 1;*/ } redisplay = 1; } } break; case cmdEXPIRE: if( menu_expire( keyblock, sec_keyblock ) ) { merge_keys_and_selfsig( sec_keyblock ); merge_keys_and_selfsig( keyblock ); sec_modified = 1; modified = 1; redisplay = 1; } break; case cmdPASSWD: if( change_passphrase( sec_keyblock ) ) sec_modified = 1; break; case cmdTRUST: show_key_with_all_names( keyblock, 0, 0, 1, 0 ); tty_printf("\n"); if( edit_ownertrust( find_kbnode( keyblock, PKT_PUBLIC_KEY )->pkt->pkt.public_key->local_id, 1 ) ) redisplay = 1; /* we don't need to set modified here, as the trustvalues * are updated immediately */ break; case cmdPREF: show_key_with_all_names( keyblock, 0, 0, 0, 1 ); break; case cmdNOP: break; case cmdREVSIG: if( menu_revsig( keyblock ) ) { redisplay = 1; modified = 1; } break; case cmdENABLEKEY: case cmdDISABLEKEY: if( enable_disable_key( keyblock, cmd == cmdDISABLEKEY ) ) { redisplay = 1; modified = 1; } break; default: tty_printf("\n"); tty_printf(_("Invalid command (try \"help\")\n")); break; } } /* end main loop */ leave: release_kbnode( keyblock ); release_kbnode( sec_keyblock ); m_free(answer); } /**************** * show preferences of a public keyblock. */ static void show_prefs( KBNODE keyblock, PKT_user_id *uid ) { KBNODE node = find_kbnode( keyblock, PKT_PUBLIC_KEY ); PKT_public_key *pk; byte *p; int i; size_t n; byte namehash[20]; if( !node ) return; /* is a secret keyblock */ pk = node->pkt->pkt.public_key; if( !pk->local_id ) { log_error("oops: no LID\n"); return; } rmd160_hash_buffer( namehash, uid->name, uid->len ); p = get_pref_data( pk->local_id, namehash, &n ); if( !p ) return; tty_printf(" "); for(i=0; i < n; i+=2 ) { if( p[i] ) tty_printf( " %c%d", p[i] == PREFTYPE_SYM ? 'S' : p[i] == PREFTYPE_HASH ? 'H' : p[i] == PREFTYPE_COMPR ? 'Z' : '?', p[i+1]); } tty_printf("\n"); m_free(p); } /**************** * Display the key a the user ids, if only_marked is true, do only * so for user ids with mark A flag set and dont display the index number */ static void show_key_with_all_names( KBNODE keyblock, int only_marked, int with_fpr, int with_subkeys, int with_prefs ) { KBNODE node; int i, rc; /* the keys */ for( node = keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_KEY || (with_subkeys && node->pkt->pkttype == PKT_PUBLIC_SUBKEY) ) { PKT_public_key *pk = node->pkt->pkt.public_key; int otrust=0, trust=0; if( node->pkt->pkttype == PKT_PUBLIC_KEY ) { /* do it here, so that debug messages don't clutter the * output */ trust = query_trust_info(pk, NULL); otrust = get_ownertrust_info( pk->local_id ); } tty_printf("%s%c %4u%c/%08lX created: %s expires: %s", node->pkt->pkttype == PKT_PUBLIC_KEY? "pub":"sub", (node->flag & NODFLG_SELKEY)? '*':' ', nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ), (ulong)keyid_from_pk(pk,NULL), datestr_from_pk(pk), expirestr_from_pk(pk) ); if( node->pkt->pkttype == PKT_PUBLIC_KEY ) { tty_printf(" trust: %c/%c", otrust, trust ); if( node->pkt->pkttype == PKT_PUBLIC_KEY && (get_ownertrust( pk->local_id )&TRUST_FLAG_DISABLED)) { tty_printf("\n*** "); tty_printf(_("This key has been disabled")); } if( with_fpr ) { tty_printf("\n"); show_fingerprint( pk ); } } tty_printf("\n"); } else if( node->pkt->pkttype == PKT_SECRET_KEY || (with_subkeys && node->pkt->pkttype == PKT_SECRET_SUBKEY) ) { PKT_secret_key *sk = node->pkt->pkt.secret_key; tty_printf("%s%c %4u%c/%08lX created: %s expires: %s\n", node->pkt->pkttype == PKT_SECRET_KEY? "sec":"sbb", (node->flag & NODFLG_SELKEY)? '*':' ', nbits_from_sk( sk ), pubkey_letter( sk->pubkey_algo ), (ulong)keyid_from_sk(sk,NULL), datestr_from_sk(sk), expirestr_from_sk(sk) ); } else if( with_subkeys && node->pkt->pkttype == PKT_SIGNATURE && node->pkt->pkt.signature->sig_class == 0x28 ) { PKT_signature *sig = node->pkt->pkt.signature; rc = check_key_signature( keyblock, node, NULL ); if( !rc ) tty_printf( "rev! subkey has been revoked: %s\n", datestr_from_sig( sig ) ); else if( rc == G10ERR_BAD_SIGN ) tty_printf( "rev- faked revocation found\n" ); else if( rc ) tty_printf( "rev? problem checking revocation: %s\n", g10_errstr(rc) ); } } /* the user ids */ i = 0; for( node = keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *uid = node->pkt->pkt.user_id; ++i; if( !only_marked || (only_marked && (node->flag & NODFLG_MARK_A))){ if( only_marked ) tty_printf(" "); else if( node->flag & NODFLG_SELUID ) tty_printf("(%d)* ", i); else tty_printf("(%d) ", i); tty_print_string( uid->name, uid->len ); tty_printf("\n"); if( with_prefs ) show_prefs( keyblock, uid ); } } } } static void show_key_and_fingerprint( KBNODE keyblock ) { KBNODE node; PKT_public_key *pk = NULL; for( node = keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_KEY ) { pk = node->pkt->pkt.public_key; tty_printf("pub %4u%c/%08lX %s ", nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ), (ulong)keyid_from_pk(pk,NULL), datestr_from_pk(pk) ); } else if( node->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *uid = node->pkt->pkt.user_id; tty_print_string( uid->name, uid->len ); break; } } tty_printf("\n"); if( pk ) show_fingerprint( pk ); } static void show_fingerprint( PKT_public_key *pk ) { byte array[MAX_FINGERPRINT_LEN], *p; size_t i, n; fingerprint_from_pk( pk, array, &n ); p = array; tty_printf(" Fingerprint:"); if( n == 20 ) { for(i=0; i < n ; i++, i++, p += 2 ) { if( i == 10 ) tty_printf(" "); tty_printf(" %02X%02X", *p, p[1] ); } } else { for(i=0; i < n ; i++, p++ ) { if( i && !(i%8) ) tty_printf(" "); tty_printf(" %02X", *p ); } } tty_printf("\n"); } /**************** * Ask for a new user id , do the selfsignature and put it into * both keyblocks. * Return true if there is a new user id */ static int menu_adduid( KBNODE pub_keyblock, KBNODE sec_keyblock ) { PKT_user_id *uid; PKT_public_key *pk=NULL; PKT_secret_key *sk=NULL; PKT_signature *sig=NULL; PACKET *pkt; KBNODE node; KBNODE pub_where=NULL, sec_where=NULL; int rc; uid = generate_user_id(); if( !uid ) return 0; for( node = pub_keyblock; node; pub_where = node, node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_KEY ) pk = node->pkt->pkt.public_key; else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) break; } if( !node ) /* no subkey */ pub_where = NULL; for( node = sec_keyblock; node; sec_where = node, node = node->next ) { if( node->pkt->pkttype == PKT_SECRET_KEY ) sk = copy_secret_key( NULL, node->pkt->pkt.secret_key); else if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) break; } if( !node ) /* no subkey */ sec_where = NULL; assert(pk && sk ); rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x13, 0, keygen_add_std_prefs, pk ); free_secret_key( sk ); if( rc ) { log_error("signing failed: %s\n", g10_errstr(rc) ); free_user_id(uid); return 0; } /* insert/append to secret keyblock */ pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_USER_ID; pkt->pkt.user_id = copy_user_id(NULL, uid); node = new_kbnode(pkt); if( sec_where ) insert_kbnode( sec_where, node, 0 ); else add_kbnode( sec_keyblock, node ); pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = copy_signature(NULL, sig); if( sec_where ) insert_kbnode( node, new_kbnode(pkt), 0 ); else add_kbnode( sec_keyblock, new_kbnode(pkt) ); /* insert/append to public keyblock */ pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_USER_ID; pkt->pkt.user_id = uid; node = new_kbnode(pkt); if( pub_where ) insert_kbnode( pub_where, node, 0 ); else add_kbnode( pub_keyblock, node ); pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = copy_signature(NULL, sig); if( pub_where ) insert_kbnode( node, new_kbnode(pkt), 0 ); else add_kbnode( pub_keyblock, new_kbnode(pkt) ); return 1; } /**************** * Remove all selceted userids from the keyrings */ static void menu_deluid( KBNODE pub_keyblock, KBNODE sec_keyblock ) { KBNODE node; int selected=0; for( node = pub_keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID ) { selected = node->flag & NODFLG_SELUID; if( selected ) { delete_kbnode( node ); if( sec_keyblock ) { KBNODE snode; int s_selected = 0; PKT_user_id *uid = node->pkt->pkt.user_id; for( snode = sec_keyblock; snode; snode = snode->next ) { if( snode->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *suid = snode->pkt->pkt.user_id; s_selected = (uid->len == suid->len && !memcmp( uid->name, suid->name, uid->len)); if( s_selected ) delete_kbnode( snode ); } else if( s_selected && snode->pkt->pkttype == PKT_SIGNATURE ) delete_kbnode( snode ); else if( snode->pkt->pkttype == PKT_SECRET_SUBKEY ) s_selected = 0; } } } } else if( selected && node->pkt->pkttype == PKT_SIGNATURE ) delete_kbnode( node ); else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) selected = 0; } commit_kbnode( &pub_keyblock ); if( sec_keyblock ) commit_kbnode( &sec_keyblock ); } static int menu_delsig( KBNODE pub_keyblock ) { KBNODE node; PKT_user_id *uid = NULL; int changed=0; for( node = pub_keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID ) { uid = (node->flag & NODFLG_SELUID)? node->pkt->pkt.user_id : NULL; } else if( uid && node->pkt->pkttype == PKT_SIGNATURE ) { int okay, valid, selfsig, inv_sig, no_key, other_err; tty_printf("uid "); tty_print_string( uid->name, uid->len ); tty_printf("\n"); okay = inv_sig = no_key = other_err = 0; valid = print_and_check_one_sig( pub_keyblock, node, &inv_sig, &no_key, &other_err, &selfsig, 1 ); if( valid ) okay = cpr_get_answer_yes_no_quit( "keyedit.delsig.valid", _("Delete this good signature? (y/N/q)")); else if( inv_sig || other_err ) okay = cpr_get_answer_yes_no_quit( "keyedit.delsig.invalid", _("Delete this invalid signature? (y/N/q)")); else if( no_key ) okay = cpr_get_answer_yes_no_quit( "keyedit.delsig.unknown", _("Delete this unknown signature? (y/N/q)")); if( okay == -1 ) break; if( okay && selfsig && !cpr_get_answer_is_yes( "keyedit.delsig.selfsig", _("Really delete this self-signature? (y/N)") )) okay = 0; if( okay ) { delete_kbnode( node ); changed++; } } else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) uid = NULL; } if( changed ) { commit_kbnode( &pub_keyblock ); tty_printf( changed == 1? _("Deleted %d signature.\n") : _("Deleted %d signatures.\n"), changed ); } else tty_printf( _("Nothing deleted.\n") ); return changed; } /**************** * Remove some of the secondary keys */ static void menu_delkey( KBNODE pub_keyblock, KBNODE sec_keyblock ) { KBNODE node; int selected=0; for( node = pub_keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { selected = node->flag & NODFLG_SELKEY; if( selected ) { delete_kbnode( node ); if( sec_keyblock ) { KBNODE snode; int s_selected = 0; u32 ki[2]; keyid_from_pk( node->pkt->pkt.public_key, ki ); for( snode = sec_keyblock; snode; snode = snode->next ) { if( snode->pkt->pkttype == PKT_SECRET_SUBKEY ) { u32 ki2[2]; keyid_from_sk( snode->pkt->pkt.secret_key, ki2 ); s_selected = (ki[0] == ki2[0] && ki[1] == ki2[1]); if( s_selected ) delete_kbnode( snode ); } else if( s_selected && snode->pkt->pkttype == PKT_SIGNATURE ) delete_kbnode( snode ); else s_selected = 0; } } } } else if( selected && node->pkt->pkttype == PKT_SIGNATURE ) delete_kbnode( node ); else selected = 0; } commit_kbnode( &pub_keyblock ); if( sec_keyblock ) commit_kbnode( &sec_keyblock ); } static int menu_expire( KBNODE pub_keyblock, KBNODE sec_keyblock ) { int n1, signumber, rc; u32 expiredate; int mainkey=0; PKT_secret_key *sk; /* copy of the main sk */ PKT_public_key *main_pk, *sub_pk; PKT_user_id *uid; KBNODE node; u32 keyid[2]; if( count_selected_keys( sec_keyblock ) ) { tty_printf(_("Please remove selections from the secret keys.\n")); return 0; } n1 = count_selected_keys( pub_keyblock ); if( n1 > 1 ) { tty_printf(_("Please select at most one secondary key.\n")); return 0; } else if( n1 ) tty_printf(_("Changing expiration time for a secondary key.\n")); else { tty_printf(_("Changing expiration time for the primary key.\n")); mainkey=1; } expiredate = ask_expiredate(); node = find_kbnode( sec_keyblock, PKT_SECRET_KEY ); sk = copy_secret_key( NULL, node->pkt->pkt.secret_key); /* Now we can actually change the self signature(s) */ main_pk = sub_pk = NULL; uid = NULL; signumber = 0; for( node=pub_keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_KEY ) { main_pk = node->pkt->pkt.public_key; keyid_from_pk( main_pk, keyid ); main_pk->expiredate = expiredate; } else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY && (node->flag & NODFLG_SELKEY ) ) { sub_pk = node->pkt->pkt.public_key; sub_pk->expiredate = expiredate; } else if( node->pkt->pkttype == PKT_USER_ID ) uid = node->pkt->pkt.user_id; else if( main_pk && node->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *sig = node->pkt->pkt.signature; if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] && ( (mainkey && uid && (sig->sig_class&~3) == 0x10) || (!mainkey && sig->sig_class == 0x18) ) ) { /* this is a selfsignature which is to be replaced */ PKT_signature *newsig; PACKET *newpkt; KBNODE sn; int signumber2 = 0; signumber++; if( (mainkey && main_pk->version < 4) || (!mainkey && sub_pk->version < 4 ) ) { log_info(_( "You can't change the expiration date of a v3 key\n")); free_secret_key( sk ); return 0; } /* find the corresponding secret self-signature */ for( sn=sec_keyblock; sn; sn = sn->next ) { if( sn->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *b = sn->pkt->pkt.signature; if( keyid[0] == b->keyid[0] && keyid[1] == b->keyid[1] && sig->sig_class == b->sig_class && ++signumber2 == signumber ) break; } } if( !sn ) log_info(_("No corresponding signature in secret ring\n")); /* create new self signature */ if( mainkey ) rc = make_keysig_packet( &newsig, main_pk, uid, NULL, sk, 0x13, 0, keygen_add_std_prefs, main_pk ); else rc = make_keysig_packet( &newsig, main_pk, NULL, sub_pk, sk, 0x18, 0, keygen_add_key_expire, sub_pk ); if( rc ) { log_error("make_keysig_packet failed: %s\n", g10_errstr(rc)); free_secret_key( sk ); return 0; } /* replace the packet */ newpkt = m_alloc_clear( sizeof *newpkt ); newpkt->pkttype = PKT_SIGNATURE; newpkt->pkt.signature = newsig; free_packet( node->pkt ); m_free( node->pkt ); node->pkt = newpkt; if( sn ) { newpkt = m_alloc_clear( sizeof *newpkt ); newpkt->pkttype = PKT_SIGNATURE; newpkt->pkt.signature = copy_signature( NULL, newsig ); free_packet( sn->pkt ); m_free( sn->pkt ); sn->pkt = newpkt; } } } } free_secret_key( sk ); return 1; } /**************** * Select one user id or remove all selection if index is 0. * Returns: True if the selection changed; */ static int menu_select_uid( KBNODE keyblock, int idx ) { KBNODE node; int i; /* first check that the index is valid */ if( idx ) { for( i=0, node = keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID ) { if( ++i == idx ) break; } } if( !node ) { tty_printf(_("No user id with index %d\n"), idx ); return 0; } } else { /* reset all */ for( i=0, node = keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID ) node->flag &= ~NODFLG_SELUID; } return 1; } /* and toggle the new index */ for( i=0, node = keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID ) { if( ++i == idx ) { if( (node->flag & NODFLG_SELUID) ) node->flag &= ~NODFLG_SELUID; else node->flag |= NODFLG_SELUID; } } } return 1; } /**************** * Select secondary keys * Returns: True if the selection changed; */ static int menu_select_key( KBNODE keyblock, int idx ) { KBNODE node; int i; /* first check that the index is valid */ if( idx ) { for( i=0, node = keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY || node->pkt->pkttype == PKT_SECRET_SUBKEY ) { if( ++i == idx ) break; } } if( !node ) { tty_printf(_("No secondary key with index %d\n"), idx ); return 0; } } else { /* reset all */ for( i=0, node = keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY || node->pkt->pkttype == PKT_SECRET_SUBKEY ) node->flag &= ~NODFLG_SELKEY; } return 1; } /* and set the new index */ for( i=0, node = keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY || node->pkt->pkttype == PKT_SECRET_SUBKEY ) { if( ++i == idx ) { if( (node->flag & NODFLG_SELKEY) ) node->flag &= ~NODFLG_SELKEY; else node->flag |= NODFLG_SELKEY; } } } return 1; } static int count_uids_with_flag( KBNODE keyblock, unsigned flag ) { KBNODE node; int i=0; for( node = keyblock; node; node = node->next ) if( node->pkt->pkttype == PKT_USER_ID && (node->flag & flag) ) i++; return i; } static int count_keys_with_flag( KBNODE keyblock, unsigned flag ) { KBNODE node; int i=0; for( node = keyblock; node; node = node->next ) if( ( node->pkt->pkttype == PKT_PUBLIC_SUBKEY || node->pkt->pkttype == PKT_SECRET_SUBKEY) && (node->flag & flag) ) i++; return i; } static int count_uids( KBNODE keyblock ) { KBNODE node; int i=0; for( node = keyblock; node; node = node->next ) if( node->pkt->pkttype == PKT_USER_ID ) i++; return i; } /**************** * Returns true if there is at least one selected user id */ static int count_selected_uids( KBNODE keyblock ) { return count_uids_with_flag( keyblock, NODFLG_SELUID); } static int count_selected_keys( KBNODE keyblock ) { return count_keys_with_flag( keyblock, NODFLG_SELKEY); } /* * Ask whether the signature should be revoked. If the user commits this, * flag bit MARK_A is set on the signature and the user ID. */ static void ask_revoke_sig( KBNODE keyblock, KBNODE node ) { PKT_signature *sig = node->pkt->pkt.signature; KBNODE unode = find_prev_kbnode( keyblock, node, PKT_USER_ID ); if( !unode ) { log_error("Oops: no user ID for signature\n"); return; } tty_printf(_("user ID: \"")); tty_print_string( unode->pkt->pkt.user_id->name, unode->pkt->pkt.user_id->len ); tty_printf(_("\"\nsigned with your key %08lX at %s\n"), sig->keyid[1], datestr_from_sig(sig) ); if( cpr_get_answer_is_yes("ask_revoke_sig.one", _("Create a revocation certificate for this signature? (y/N)")) ) { node->flag |= NODFLG_MARK_A; unode->flag |= NODFLG_MARK_A; } } /**************** * Display all user ids of the current public key together with signatures * done by one of our keys. Then walk over all this sigs and ask the user * whether he wants to revoke this signature. * Return: True when the keyblock has changed. */ static int menu_revsig( KBNODE keyblock ) { PKT_signature *sig; PKT_public_key *primary_pk; KBNODE node; int changed = 0; int upd_trust = 0; int rc, any; /* FIXME: detect duplicates here */ tty_printf("You have signed these user IDs:\n"); for( node = keyblock; node; node = node->next ) { node->flag &= ~(NODFLG_SELSIG | NODFLG_MARK_A); if( node->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *uid = node->pkt->pkt.user_id; /* Hmmm: Should we show only UIDs with a signature? */ tty_printf(" "); tty_print_string( uid->name, uid->len ); tty_printf("\n"); } else if( node->pkt->pkttype == PKT_SIGNATURE && ((sig = node->pkt->pkt.signature), !seckey_available( sig->keyid ) ) ) { if( (sig->sig_class&~3) == 0x10 ) { tty_printf(" signed by %08lX at %s\n", sig->keyid[1], datestr_from_sig(sig) ); node->flag |= NODFLG_SELSIG; } else if( sig->sig_class == 0x30 ) { tty_printf(" revoked by %08lX at %s\n", sig->keyid[1], datestr_from_sig(sig) ); } } } /* ask */ for( node = keyblock; node; node = node->next ) { if( !(node->flag & NODFLG_SELSIG) ) continue; ask_revoke_sig( keyblock, node ); } /* present selected */ any = 0; for( node = keyblock; node; node = node->next ) { if( !(node->flag & NODFLG_MARK_A) ) continue; if( !any ) { any = 1; tty_printf("You are about to revoke these signatures:\n"); } if( node->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *uid = node->pkt->pkt.user_id; tty_printf(" "); tty_print_string( uid->name, uid->len ); tty_printf("\n"); } else if( node->pkt->pkttype == PKT_SIGNATURE ) { sig = node->pkt->pkt.signature; tty_printf(" signed by %08lX at %s\n", sig->keyid[1], datestr_from_sig(sig) ); } } if( !any ) return 0; /* none selected */ if( !cpr_get_answer_is_yes("ask_revoke_sig.okay", _("Really create the revocation certificates? (y/N)")) ) return 0; /* forget it */ /* now we can sign the user ids */ reloop: /* (must use this, because we are modifing the list) */ primary_pk = keyblock->pkt->pkt.public_key; for( node=keyblock; node; node = node->next ) { KBNODE unode; PACKET *pkt; struct sign_uid_attrib attrib; PKT_secret_key *sk; if( !(node->flag & NODFLG_MARK_A) || node->pkt->pkttype != PKT_SIGNATURE ) continue; unode = find_prev_kbnode( keyblock, node, PKT_USER_ID ); assert( unode ); /* we already checked this */ memset( &attrib, 0, sizeof attrib ); node->flag &= ~NODFLG_MARK_A; sk = m_alloc_secure_clear( sizeof *sk ); if( get_seckey( sk, node->pkt->pkt.signature->keyid ) ) { log_info(_("no secret key\n")); continue; } rc = make_keysig_packet( &sig, primary_pk, unode->pkt->pkt.user_id, NULL, sk, 0x30, 0, sign_uid_mk_attrib, &attrib ); free_secret_key(sk); if( rc ) { log_error(_("signing failed: %s\n"), g10_errstr(rc)); return changed; } changed = 1; /* we changed the keyblock */ upd_trust = 1; pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; insert_kbnode( unode, new_kbnode(pkt), 0 ); goto reloop; } if( upd_trust ) clear_trust_checked_flag( primary_pk ); return changed; } /**************** * Revoke some of the secondary keys. * Hmmm: Should we add a revocation to the secret keyring too? * Does its all make sense to duplicate most of the information? */ static int menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock ) { PKT_public_key *mainpk; KBNODE node; int changed = 0; int upd_trust = 0; int rc; reloop: /* (better this way because we are modifing the keyring) */ mainpk = pub_keyblock->pkt->pkt.public_key; for( node = pub_keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY && (node->flag & NODFLG_SELKEY) ) { PACKET *pkt; PKT_signature *sig; PKT_secret_key *sk; PKT_public_key *subpk = node->pkt->pkt.public_key; node->flag &= ~NODFLG_SELKEY; sk = copy_secret_key( NULL, sec_keyblock->pkt->pkt.secret_key ); rc = make_keysig_packet( &sig, mainpk, NULL, subpk, sk, 0x28, 0, NULL, NULL ); free_secret_key(sk); if( rc ) { log_error(_("signing failed: %s\n"), g10_errstr(rc)); return changed; } changed = 1; /* we changed the keyblock */ upd_trust = 1; pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; insert_kbnode( node, new_kbnode(pkt), 0 ); goto reloop; } } commit_kbnode( &pub_keyblock ); /*commit_kbnode( &sec_keyblock );*/ if( upd_trust ) clear_trust_checked_flag( mainpk ); return changed; } static int enable_disable_key( KBNODE keyblock, int disable ) { ulong lid = find_kbnode( keyblock, PKT_PUBLIC_KEY ) ->pkt->pkt.public_key->local_id; unsigned int trust, newtrust; /* Note: Because the keys have beed displayed, we have * ensured that local_id has been set */ trust = newtrust = get_ownertrust( lid ); newtrust &= ~TRUST_FLAG_DISABLED; if( disable ) newtrust |= TRUST_FLAG_DISABLED; if( trust == newtrust ) return 0; /* already in that state */ if( !update_ownertrust( lid, newtrust ) ) return 1; return 0; } diff --git a/g10/keygen.c b/g10/keygen.c index 74840e8c6..e1ed9aa47 100644 --- a/g10/keygen.c +++ b/g10/keygen.c @@ -1,1071 +1,1083 @@ /* keygen.c - generate a key pair * Copyright (C) 1998, 1999 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 #include #include #include #include #include #include #include "util.h" #include "main.h" #include "packet.h" #include "cipher.h" #include "ttyio.h" #include "options.h" #include "keydb.h" #include "status.h" #include "i18n.h" static void write_uid( KBNODE root, const char *s ) { PACKET *pkt = m_alloc_clear(sizeof *pkt ); size_t n = strlen(s); pkt->pkttype = PKT_USER_ID; pkt->pkt.user_id = m_alloc( sizeof *pkt->pkt.user_id + n - 1 ); pkt->pkt.user_id->len = n; strcpy(pkt->pkt.user_id->name, s); add_kbnode( root, new_kbnode( pkt ) ); } int keygen_add_key_expire( PKT_signature *sig, void *opaque ) { PKT_public_key *pk = opaque; byte buf[8]; u32 u; if( pk->expiredate ) { u = pk->expiredate > pk->timestamp? pk->expiredate - pk->timestamp : pk->timestamp; buf[0] = (u >> 24) & 0xff; buf[1] = (u >> 16) & 0xff; buf[2] = (u >> 8) & 0xff; buf[3] = u & 0xff; build_sig_subpkt( sig, SIGSUBPKT_KEY_EXPIRE, buf, 4 ); } return 0; } /**************** * Add preference to the self signature packet. * This is only called for packets with version > 3. */ int keygen_add_std_prefs( PKT_signature *sig, void *opaque ) { byte buf[8]; keygen_add_key_expire( sig, opaque ); buf[0] = CIPHER_ALGO_TWOFISH; buf[1] = CIPHER_ALGO_CAST5; build_sig_subpkt( sig, SIGSUBPKT_PREF_SYM, buf, 2 ); buf[0] = DIGEST_ALGO_RMD160; buf[1] = DIGEST_ALGO_SHA1; build_sig_subpkt( sig, SIGSUBPKT_PREF_HASH, buf, 2 ); buf[0] = 2; buf[1] = 1; build_sig_subpkt( sig, SIGSUBPKT_PREF_COMPR, buf, 2 ); buf[0] = 0x80; /* no modify - It is reasonable that a key holder * has the possibility to reject signatures from users * who are known to sign everything without any * validation - so a signed key should be send * to the holder who in turn can put it on a keyserver */ build_sig_subpkt( sig, SIGSUBPKT_KS_FLAGS, buf, 1 ); return 0; } static int write_selfsig( KBNODE root, KBNODE pub_root, PKT_secret_key *sk ) { PACKET *pkt; PKT_signature *sig; PKT_user_id *uid; int rc=0; KBNODE node; PKT_public_key *pk; if( opt.verbose ) log_info(_("writing self signature\n")); /* get the uid packet from the list */ node = find_kbnode( root, PKT_USER_ID ); if( !node ) BUG(); /* no user id packet in tree */ uid = node->pkt->pkt.user_id; /* get the pk packet from the pub_tree */ node = find_kbnode( pub_root, PKT_PUBLIC_KEY ); if( !node ) BUG(); pk = node->pkt->pkt.public_key; /* and make the signature */ rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x13, 0, keygen_add_std_prefs, pk ); if( rc ) { log_error("make_keysig_packet failed: %s\n", g10_errstr(rc) ); return rc; } pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; add_kbnode( root, new_kbnode( pkt ) ); return rc; } static int write_keybinding( KBNODE root, KBNODE pub_root, PKT_secret_key *sk ) { PACKET *pkt; PKT_signature *sig; int rc=0; KBNODE node; PKT_public_key *pk, *subpk; if( opt.verbose ) log_info(_("writing key binding signature\n")); /* get the pk packet from the pub_tree */ node = find_kbnode( pub_root, PKT_PUBLIC_KEY ); if( !node ) BUG(); pk = node->pkt->pkt.public_key; /* find the last subkey */ subpk = NULL; for(node=pub_root; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) subpk = node->pkt->pkt.public_key; } if( !subpk ) BUG(); /* and make the signature */ rc = make_keysig_packet( &sig, pk, NULL, subpk, sk, 0x18, 0, keygen_add_key_expire, subpk ); if( rc ) { log_error("make_keysig_packet failed: %s\n", g10_errstr(rc) ); return rc; } pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; add_kbnode( root, new_kbnode( pkt ) ); return rc; } static int gen_elg(int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, STRING2KEY *s2k, PKT_secret_key **ret_sk, u32 expireval, int version ) { int rc; int i; PACKET *pkt; PKT_secret_key *sk; PKT_public_key *pk; MPI skey[4]; MPI *factors; assert( is_ELGAMAL(algo) ); rc = pubkey_generate( algo, nbits, skey, &factors ); if( rc ) { log_error("pubkey_generate failed: %s\n", g10_errstr(rc) ); return rc; } sk = m_alloc_clear( sizeof *sk ); pk = m_alloc_clear( sizeof *pk ); sk->timestamp = pk->timestamp = make_timestamp(); sk->version = pk->version = version; if( expireval ) { sk->expiredate = pk->expiredate = sk->timestamp + expireval; } sk->pubkey_algo = pk->pubkey_algo = algo; pk->pkey[0] = mpi_copy( skey[0] ); pk->pkey[1] = mpi_copy( skey[1] ); pk->pkey[2] = mpi_copy( skey[2] ); sk->skey[0] = skey[0]; sk->skey[1] = skey[1]; sk->skey[2] = skey[2]; sk->skey[3] = skey[3]; sk->is_protected = 0; sk->protect.algo = 0; sk->csum = checksum_mpi_counted_nbits( sk->skey[3] ); if( ret_sk ) /* not a subkey: return an unprotected version of the sk */ *ret_sk = copy_secret_key( NULL, sk ); if( dek ) { sk->protect.algo = dek->algo; sk->protect.s2k = *s2k; rc = protect_secret_key( sk, dek ); if( rc ) { log_error("protect_secret_key failed: %s\n", g10_errstr(rc) ); free_public_key(pk); free_secret_key(sk); return rc; } } pkt = m_alloc_clear(sizeof *pkt); pkt->pkttype = ret_sk ? PKT_PUBLIC_KEY : PKT_PUBLIC_SUBKEY; pkt->pkt.public_key = pk; add_kbnode(pub_root, new_kbnode( pkt )); /* don't know whether it makes sense to have the factors, so for now * we store them in the secret keyring (but they are not secret) */ pkt = m_alloc_clear(sizeof *pkt); pkt->pkttype = ret_sk ? PKT_SECRET_KEY : PKT_SECRET_SUBKEY; pkt->pkt.secret_key = sk; add_kbnode(sec_root, new_kbnode( pkt )); for(i=0; factors[i]; i++ ) add_kbnode( sec_root, make_mpi_comment_node("#:ELG_factor:", factors[i] )); return 0; } /**************** * Generate a DSA key */ static int gen_dsa(unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, STRING2KEY *s2k, PKT_secret_key **ret_sk, u32 expireval ) { int rc; int i; PACKET *pkt; PKT_secret_key *sk; PKT_public_key *pk; MPI skey[5]; MPI *factors; if( nbits > 1024 ) nbits = 1024; rc = pubkey_generate( PUBKEY_ALGO_DSA, nbits, skey, &factors ); if( rc ) { log_error("pubkey_generate failed: %s\n", g10_errstr(rc) ); return rc; } sk = m_alloc_clear( sizeof *sk ); pk = m_alloc_clear( sizeof *pk ); sk->timestamp = pk->timestamp = make_timestamp(); sk->version = pk->version = 4; if( expireval ) { sk->expiredate = pk->expiredate = sk->timestamp + expireval; } sk->pubkey_algo = pk->pubkey_algo = PUBKEY_ALGO_DSA; pk->pkey[0] = mpi_copy( skey[0] ); pk->pkey[1] = mpi_copy( skey[1] ); pk->pkey[2] = mpi_copy( skey[2] ); pk->pkey[3] = mpi_copy( skey[3] ); sk->skey[0] = skey[0]; sk->skey[1] = skey[1]; sk->skey[2] = skey[2]; sk->skey[3] = skey[3]; sk->skey[4] = skey[4]; sk->is_protected = 0; sk->protect.algo = 0; sk->csum = checksum_mpi_counted_nbits( sk->skey[4] ); if( ret_sk ) /* not a subkey: return an unprotected version of the sk */ *ret_sk = copy_secret_key( NULL, sk ); if( dek ) { sk->protect.algo = dek->algo; sk->protect.s2k = *s2k; rc = protect_secret_key( sk, dek ); if( rc ) { log_error("protect_secret_key failed: %s\n", g10_errstr(rc) ); free_public_key(pk); free_secret_key(sk); return rc; } } pkt = m_alloc_clear(sizeof *pkt); pkt->pkttype = ret_sk ? PKT_PUBLIC_KEY : PKT_PUBLIC_SUBKEY; pkt->pkt.public_key = pk; add_kbnode(pub_root, new_kbnode( pkt )); /* don't know whether it makes sense to have the factors, so for now * we store them in the secret keyring (but they are not secret) * p = 2 * q * f1 * f2 * ... * fn * We store only f1 to f_n-1; fn can be calculated because p and q * are known. */ pkt = m_alloc_clear(sizeof *pkt); pkt->pkttype = ret_sk ? PKT_SECRET_KEY : PKT_SECRET_SUBKEY; pkt->pkt.secret_key = sk; add_kbnode(sec_root, new_kbnode( pkt )); for(i=1; factors[i]; i++ ) /* the first one is q */ add_kbnode( sec_root, make_mpi_comment_node("#:DSA_factor:", factors[i] )); return 0; } /**************** * check valid days: * return 0 on error or the multiplier */ static int check_valid_days( const char *s ) { if( !isdigit(*s) ) return 0; for( s++; *s; s++) if( !isdigit(*s) ) break; if( !*s ) return 1; if( s[1] ) return 0; /* e.g. "2323wc" */ if( *s == 'd' || *s == 'D' ) return 1; if( *s == 'w' || *s == 'W' ) return 7; if( *s == 'm' || *s == 'M' ) return 30; if( *s == 'y' || *s == 'Y' ) return 365; return 0; } /**************** * Returns: 0 to create both a DSA and a ElGamal key. */ static int ask_algo( int *ret_v4, int addmode ) { char *answer; int algo; tty_printf(_("Please select what kind of key you want:\n")); if( !addmode ) tty_printf(_(" (%d) DSA and ElGamal (default)\n"), 1 ); tty_printf( _(" (%d) DSA (sign only)\n"), 2 ); if( addmode ) tty_printf( _(" (%d) ElGamal (encrypt only)\n"), 3 ); tty_printf( _(" (%d) ElGamal (sign and encrypt)\n"), 4 ); #if 0 tty_printf( _(" (%d) ElGamal in a v3 packet\n"), 5 ); #endif *ret_v4 = 1; for(;;) { answer = cpr_get("keygen.algo",_("Your selection? ")); cpr_kill_prompt(); algo = *answer? atoi(answer): 1; m_free(answer); if( algo == 1 && !addmode ) { algo = 0; /* create both keys */ break; } else if( algo == 4 ) { if( cpr_get_answer_is_yes("keygen.algo.elg_se",_( "Do you really want to create a sign and encrypt key? "))) { algo = PUBKEY_ALGO_ELGAMAL; break; } } else if( algo == 3 && addmode ) { algo = PUBKEY_ALGO_ELGAMAL_E; break; } else if( algo == 2 ) { algo = PUBKEY_ALGO_DSA; break; } #if 0 else if( algo == 5 ) { algo = PUBKEY_ALGO_ELGAMAL_E; *ret_v4 = 0; break; } #endif else tty_printf(_("Invalid selection.\n")); } return algo; } static unsigned ask_keysize( int algo ) { char *answer; unsigned nbits; tty_printf(_("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"), pubkey_algo_to_string(algo) ); for(;;) { answer = cpr_get("keygen.size", _("What keysize do you want? (1024) ")); cpr_kill_prompt(); nbits = *answer? atoi(answer): 1024; m_free(answer); if( algo == PUBKEY_ALGO_DSA && (nbits < 512 || nbits > 1024) ) tty_printf(_("DSA only allows keysizes from 512 to 1024\n")); else if( nbits < 768 ) tty_printf(_("keysize too small; 768 is smallest value allowed.\n")); else if( nbits > 4096 ) { /* 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. */ tty_printf(_("keysize too large; %d is largest value allowed.\n"), 4096); } else if( nbits > 2048 && !cpr_enabled() ) { tty_printf( _("Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n")); if( cpr_get_answer_is_yes("keygen.size.huge.okay",_( "Are you sure that you want this keysize? ")) ) { tty_printf(_("Okay, but keep in mind that your monitor " "and keyboard radiation is also very vulnerable " "to attacks!\n")); break; } } else if( nbits > 1536 && !cpr_enabled() ) { if( cpr_get_answer_is_yes("keygen.size.large.okay",_( "Do you really need such a large keysize? ")) ) break; } else break; } tty_printf(_("Requested keysize is %u bits\n"), nbits ); if( algo == PUBKEY_ALGO_DSA && (nbits % 64) ) { nbits = ((nbits + 63) / 64) * 64; tty_printf(_("rounded up to %u bits\n"), nbits ); } else if( (nbits % 32) ) { nbits = ((nbits + 31) / 32) * 32; tty_printf(_("rounded up to %u bits\n"), nbits ); } return nbits; } static u32 ask_expire_interval(void) { char *answer; int valid_days=0; u32 interval = 0; tty_printf(_("Please specify how long the key should be valid.\n" " 0 = key does not expire\n" " = key expires in n days\n" " w = key expires in n weeks\n" " m = key expires in n months\n" " y = key expires in n years\n")); /* Note: The elgamal subkey for DSA has no expiration date because * it must be signed with the DSA key and this one has the expiration * date */ answer = NULL; for(;;) { int mult; + u32 abs_date=0; + u32 curtime=0;; m_free(answer); answer = cpr_get("keygen.valid",_("Key is valid for? (0) ")); cpr_kill_prompt(); trim_spaces(answer); + curtime = make_timestamp(); if( !*answer ) valid_days = 0; + else if( (abs_date = scan_isodatestr(answer)) && abs_date > curtime ) { + /* This calculation is not perfectly okay because we + * are later going to simply multiply by 86400 and don't + * correct for leapseconds. A solution would be to change + * the whole implemenation to work with dates and not intervals + * which are required for v3 keys. + */ + valid_days = abs_date/86400-curtime/86400+1; + } else if( (mult=check_valid_days(answer)) ) { valid_days = atoi(answer) * mult; if( valid_days < 0 || valid_days > 32767 ) valid_days = 0; } else { tty_printf(_("invalid value\n")); continue; } if( !valid_days ) { tty_printf(_("Key does not expire at all\n")); interval = 0; } else { interval = valid_days * 86400L; /* print the date when the key expires */ tty_printf(_("Key expires at %s\n"), - asctimestamp(make_timestamp() + interval ) ); + asctimestamp(curtime + interval ) ); } if( !cpr_enabled() && cpr_get_answer_is_yes("keygen.valid.okay", _("Is this correct (y/n)? ")) ) break; } m_free(answer); return interval; } u32 ask_expiredate() { u32 x = ask_expire_interval(); return x? make_timestamp() + x : 0; } static int has_invalid_email_chars( const char *s ) { int at_seen=0; static char valid_chars[] = "01234567890_-." "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; for( ; *s; s++ ) { if( *s & 0x80 ) return 1; if( *s == '@' ) at_seen=1; else if( !at_seen && !( !!strchr( valid_chars, *s ) || *s == '+' ) ) return 1; else if( at_seen && !strchr( valid_chars, *s ) ) return 1; } return 0; } static char * ask_user_id( int mode ) { char *answer; char *aname, *acomment, *amail, *uid; if( !mode ) tty_printf( _("\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) \"\n\n") ); uid = aname = acomment = amail = NULL; for(;;) { char *p; if( !aname ) { for(;;) { m_free(aname); aname = cpr_get("keygen.name",_("Real name: ")); trim_spaces(aname); cpr_kill_prompt(); if( strpbrk( aname, "<([])>" ) ) tty_printf(_("Invalid character in name\n")); else if( isdigit(*aname) ) tty_printf(_("Name may not start with a digit\n")); else if( strlen(aname) < 5 ) tty_printf(_("Name must be at least 5 characters long\n")); else break; } } if( !amail ) { for(;;) { m_free(amail); amail = cpr_get("keygen.email",_("Email address: ")); trim_spaces(amail); cpr_kill_prompt(); if( !*amail ) break; /* no email address is okay */ else if( has_invalid_email_chars(amail) || string_count_chr(amail,'@') != 1 || *amail == '@' || amail[strlen(amail)-1] == '@' || amail[strlen(amail)-1] == '.' || strstr(amail, "..") ) tty_printf(_("Not a valid email address\n")); else break; } } if( !acomment ) { for(;;) { m_free(acomment); acomment = cpr_get("keygen.comment",_("Comment: ")); trim_spaces(acomment); cpr_kill_prompt(); if( !*acomment ) break; /* no comment is okay */ else if( strpbrk( acomment, "()" ) ) tty_printf(_("Invalid character in comment\n")); else break; } } m_free(uid); uid = p = m_alloc(strlen(aname)+strlen(amail)+strlen(acomment)+12+10); p = stpcpy(p, aname ); if( *acomment ) p = stpcpy(stpcpy(stpcpy(p," ("), acomment),")"); if( *amail ) p = stpcpy(stpcpy(stpcpy(p," <"), amail),">"); /* append a warning if we do not have dev/random * or it is switched into quick testmode */ if( quick_random_gen(-1) ) strcpy(p, " (INSECURE!)" ); /* print a note in case that UTF8 mapping has to be done */ for(p=uid; *p; p++ ) { if( *p & 0x80 ) { tty_printf(_("You are using the `%s' character set.\n"), get_native_charset() ); break; } } tty_printf(_("You selected this USER-ID:\n \"%s\"\n\n"), uid); /* fixme: add a warning if this user-id already exists */ for(;;) { char *ansstr = _("NnCcEeOoQq"); if( strlen(ansstr) != 10 ) BUG(); if( cpr_enabled() ) { answer = m_strdup(ansstr+6); answer[1] = 0; } else { answer = cpr_get("keygen.userid.cmd",_( "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? ")); cpr_kill_prompt(); } if( strlen(answer) > 1 ) ; else if( *answer == ansstr[0] || *answer == ansstr[1] ) { m_free(aname); aname = NULL; break; } else if( *answer == ansstr[2] || *answer == ansstr[3] ) { m_free(acomment); acomment = NULL; break; } else if( *answer == ansstr[4] || *answer == ansstr[5] ) { m_free(amail); amail = NULL; break; } else if( *answer == ansstr[6] || *answer == ansstr[7] ) { m_free(aname); aname = NULL; m_free(acomment); acomment = NULL; m_free(amail); amail = NULL; break; } else if( *answer == ansstr[8] || *answer == ansstr[9] ) { m_free(aname); aname = NULL; m_free(acomment); acomment = NULL; m_free(amail); amail = NULL; m_free(uid); uid = NULL; break; } m_free(answer); } m_free(answer); if( !amail && !acomment && !amail ) break; m_free(uid); uid = NULL; } if( uid ) { char *p = native_to_utf8( uid ); m_free( uid ); uid = p; } return uid; } static DEK * ask_passphrase( STRING2KEY **ret_s2k ) { DEK *dek = NULL; STRING2KEY *s2k; tty_printf(_("You need a Passphrase to protect your secret key.\n\n") ); s2k = m_alloc_secure( sizeof *s2k ); for(;;) { s2k->mode = opt.s2k_mode; s2k->hash_algo = opt.s2k_digest_algo; dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2 ); if( !dek ) { tty_printf(_("passphrase not correctly repeated; try again.\n")); } else if( !dek->keylen ) { m_free(dek); dek = NULL; m_free(s2k); s2k = NULL; tty_printf(_( "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")); break; } else break; /* okay */ } *ret_s2k = s2k; return dek; } static int do_create( int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, STRING2KEY *s2k, PKT_secret_key **sk, u32 expiredate, int v4_packet ) { int rc=0; tty_printf(_( "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") ); if( algo == PUBKEY_ALGO_ELGAMAL || algo == PUBKEY_ALGO_ELGAMAL_E ) rc = gen_elg(algo, nbits, pub_root, sec_root, dek, s2k, sk, expiredate, v4_packet? 4:3 ); else if( algo == PUBKEY_ALGO_DSA ) rc = gen_dsa(nbits, pub_root, sec_root, dek, s2k, sk, expiredate); else BUG(); #ifdef ENABLE_COMMENT_PACKETS if( !rc ) { add_kbnode( pub_root, make_comment_node("#created by GNUPG v" VERSION " (" PRINTABLE_OS_NAME ")")); add_kbnode( sec_root, make_comment_node("#created by GNUPG v" VERSION " (" PRINTABLE_OS_NAME ")")); } #endif return rc; } /**************** * Generate a new user id packet, or return NULL if canceled */ PKT_user_id * generate_user_id() { PKT_user_id *uid; char *p; size_t n; p = ask_user_id( 1 ); if( !p ) return NULL; n = strlen(p); uid = m_alloc( sizeof *uid + n - 1 ); uid->len = n; strcpy(uid->name, p); return uid; } /**************** * Generate a keypair */ void generate_keypair() { unsigned nbits; char *pub_fname = NULL; char *sec_fname = NULL; char *uid = NULL; KBNODE pub_root = NULL; KBNODE sec_root = NULL; PKT_secret_key *sk = NULL; DEK *dek; STRING2KEY *s2k; int rc; int algo; u32 expire; int v4; int both = 0; if( opt.batch || opt.answer_yes || opt.answer_no ) { log_error(_("Key generation can only be used in interactive mode\n")); return; } algo = ask_algo( &v4, 0 ); if( !algo ) { algo = PUBKEY_ALGO_ELGAMAL_E; both = 1; tty_printf(_("DSA keypair will have 1024 bits.\n")); } nbits = ask_keysize( algo ); expire = ask_expire_interval(); uid = ask_user_id(0); if( !uid ) { log_error(_("Key generation canceled.\n")); return; } dek = ask_passphrase( &s2k ); /* now check whether we are allowed to write to the keyrings */ pub_fname = make_filename(opt.homedir, "pubring.gpg", NULL ); sec_fname = make_filename(opt.homedir, "secring.gpg", NULL ); if( opt.verbose ) { tty_printf(_("writing public certificate to `%s'\n"), pub_fname ); tty_printf(_("writing secret certificate to `%s'\n"), sec_fname ); } /* we create the packets as a tree of kbnodes. Because the structure * we create is known in advance we simply generate a linked list * The first packet is a dummy comment packet which we flag * as deleted. The very first packet must always be a KEY packet. */ pub_root = make_comment_node("#"); delete_kbnode(pub_root); sec_root = make_comment_node("#"); delete_kbnode(sec_root); if( both ) rc = do_create( PUBKEY_ALGO_DSA, 1024, pub_root, sec_root, dek, s2k, &sk, expire, 1); else rc = do_create( algo, nbits, pub_root, sec_root, dek, s2k, &sk, expire, v4); if( !rc ) write_uid(pub_root, uid ); if( !rc ) write_uid(sec_root, uid ); if( !rc ) rc = write_selfsig(pub_root, pub_root, sk); if( !rc ) rc = write_selfsig(sec_root, pub_root, sk); if( both ) { rc = do_create( algo, nbits, pub_root, sec_root, dek, s2k, NULL, expire, 1 ); if( !rc ) rc = write_keybinding(pub_root, pub_root, sk); if( !rc ) rc = write_keybinding(sec_root, pub_root, sk); } if( !rc ) { KBPOS pub_kbpos; KBPOS sec_kbpos; int rc1 = -1; int rc2 = -1; /* we can now write the certificates */ if( get_keyblock_handle( pub_fname, 0, &pub_kbpos ) ) { if( add_keyblock_resource( pub_fname, 1, 0 ) ) { log_error("can add keyblock file `%s'\n", pub_fname ); rc = G10ERR_CREATE_FILE; } else if( get_keyblock_handle( pub_fname, 0, &pub_kbpos ) ) { log_error("can get keyblock handle for `%s'\n", pub_fname ); rc = G10ERR_CREATE_FILE; } } if( rc ) ; else if( get_keyblock_handle( sec_fname, 1, &sec_kbpos ) ) { if( add_keyblock_resource( sec_fname, 1, 1 ) ) { log_error("can add keyblock file `%s'\n", sec_fname ); rc = G10ERR_CREATE_FILE; } else if( get_keyblock_handle( sec_fname, 1, &sec_kbpos ) ) { log_error("can get keyblock handle for `%s'\n", sec_fname ); rc = G10ERR_CREATE_FILE; } } if( rc ) ; else if( (rc=rc1=lock_keyblock( &pub_kbpos )) ) log_error("can't lock public keyring: %s\n", g10_errstr(rc) ); else if( (rc=rc2=lock_keyblock( &sec_kbpos )) ) log_error("can't lock secret keyring: %s\n", g10_errstr(rc) ); else if( (rc=insert_keyblock( &pub_kbpos, pub_root )) ) log_error("can't write public key: %s\n", g10_errstr(rc) ); else if( (rc=insert_keyblock( &sec_kbpos, sec_root )) ) log_error("can't write secret key: %s\n", g10_errstr(rc) ); else { tty_printf(_("public and secret key created and signed.\n") ); if( algo == PUBKEY_ALGO_DSA ) tty_printf(_("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") ); } if( !rc1 ) unlock_keyblock( &pub_kbpos ); if( !rc2 ) unlock_keyblock( &sec_kbpos ); } if( rc ) tty_printf(_("Key generation failed: %s\n"), g10_errstr(rc) ); release_kbnode( pub_root ); release_kbnode( sec_root ); if( sk ) /* the unprotected secret key */ free_secret_key(sk); m_free(uid); m_free(dek); m_free(s2k); m_free(pub_fname); m_free(sec_fname); } /**************** * add a new subkey to an existing key. * Returns true if a new key has been generated and put into the keyblocks. */ int generate_subkeypair( KBNODE pub_keyblock, KBNODE sec_keyblock ) { int okay=0, rc=0; KBNODE node; PKT_secret_key *sk = NULL; /* this is the primary sk */ int v4, algo; u32 expire; unsigned nbits; char *passphrase = NULL; DEK *dek = NULL; STRING2KEY *s2k = NULL; u32 cur_time; /* break out the primary secret key */ node = find_kbnode( sec_keyblock, PKT_SECRET_KEY ); if( !node ) { log_error("Oops; secret key not found anymore!\n"); goto leave; } /* make a copy of the sk to keep the protected one in the keyblock */ sk = copy_secret_key( NULL, node->pkt->pkt.secret_key ); cur_time = make_timestamp(); if( sk->timestamp > cur_time ) { ulong d = sk->timestamp - cur_time; log_info( d==1 ? _("key has been created %lu second " "in future (time warp or clock problem)\n") : _("key has been created %lu seconds " "in future (time warp or clock problem)\n"), d ); rc = G10ERR_TIME_CONFLICT; goto leave; } /* unprotect to get the passphrase */ switch( is_secret_key_protected( sk ) ) { case -1: rc = G10ERR_PUBKEY_ALGO; break; case 0: tty_printf("This key is not protected.\n"); break; default: tty_printf("Key is protected.\n"); rc = check_secret_key( sk, 0 ); if( !rc ) passphrase = get_last_passphrase(); break; } if( rc ) goto leave; algo = ask_algo( &v4, 1 ); assert(algo); nbits = ask_keysize( algo ); expire = ask_expire_interval(); if( !cpr_enabled() && !cpr_get_answer_is_yes("keygen.sub.okay", _("Really create? ") ) ) goto leave; if( passphrase ) { s2k = m_alloc_secure( sizeof *s2k ); s2k->mode = opt.s2k_mode; s2k->hash_algo = opt.s2k_digest_algo; set_next_passphrase( passphrase ); dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2 ); } rc = do_create( algo, nbits, pub_keyblock, sec_keyblock, dek, s2k, NULL, expire, v4 ); if( !rc ) rc = write_keybinding(pub_keyblock, pub_keyblock, sk); if( !rc ) rc = write_keybinding(sec_keyblock, pub_keyblock, sk); if( !rc ) okay = 1; leave: if( rc ) log_error(_("Key generation failed: %s\n"), g10_errstr(rc) ); m_free( passphrase ); m_free( dek ); m_free( s2k ); if( sk ) /* release the copy of the (now unprotected) secret key */ free_secret_key(sk); set_next_passphrase( NULL ); return okay; } diff --git a/g10/tdbio.c b/g10/tdbio.c index 8e5f5d084..0abfcb1da 100644 --- a/g10/tdbio.c +++ b/g10/tdbio.c @@ -1,1763 +1,1763 @@ /* tdbio.c * Copyright (C) 1998 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 #include #include #include #include #include #include #include #include #include #include "errors.h" #include "iobuf.h" #include "memory.h" #include "util.h" #include "options.h" #include "main.h" #include "i18n.h" #include "trustdb.h" #include "tdbio.h" /**************** * Yes, this is a very simple implementation. We should really * use a page aligned buffer and read complete pages. * To implement a simple trannsaction system, this is sufficient. */ typedef struct cache_ctrl_struct *CACHE_CTRL; struct cache_ctrl_struct { CACHE_CTRL next; struct { unsigned used:1; unsigned dirty:1; } flags; ulong recno; char data[TRUST_RECORD_LEN]; }; -#define MAX_CACHE_ENTRIES_SOFT 200 /* may be increased while in a */ -#define MAX_CACHE_ENTRIES_HARD 1000 /* transaction to this one */ +#define MAX_CACHE_ENTRIES_SOFT 200 /* may be increased while in a */ +#define MAX_CACHE_ENTRIES_HARD 10000 /* transaction to this one */ static CACHE_CTRL cache_list; static int cache_entries; static int cache_is_dirty; /* a type used to pass infomation to cmp_krec_fpr */ struct cmp_krec_fpr_struct { int pubkey_algo; const char *fpr; int fprlen; }; /* a type used to pass infomation to cmp_[s]dir */ struct cmp_xdir_struct { int pubkey_algo; u32 keyid[2]; }; static char *db_name; static DOTLOCK lockhandle; static int is_locked; static int db_fd = -1; static int in_transaction; static void open_db(void); /************************************* ************* record cache ********** *************************************/ /**************** * Get the data from therecord cache and return a * pointer into that cache. Caller should copy * the return data. NULL is returned on a cache miss. */ static const char * get_record_from_cache( ulong recno ) { CACHE_CTRL r; for( r = cache_list; r; r = r->next ) { if( r->flags.used && r->recno == recno ) return r->data; } return NULL; } static int write_cache_item( CACHE_CTRL r ) { int n; if( lseek( db_fd, r->recno * TRUST_RECORD_LEN, SEEK_SET ) == -1 ) { log_error(_("trustdb rec %lu: lseek failed: %s\n"), r->recno, strerror(errno) ); return G10ERR_WRITE_FILE; } n = write( db_fd, r->data, TRUST_RECORD_LEN); if( n != TRUST_RECORD_LEN ) { log_error(_("trustdb rec %lu: write failed (n=%d): %s\n"), r->recno, n, strerror(errno) ); return G10ERR_WRITE_FILE; } r->flags.dirty = 0; return 0; } /**************** * Put data into the cache. This function may flush the * some cache entries if there is not enough space available. */ int put_record_into_cache( ulong recno, const char *data ) { CACHE_CTRL r, unused; int dirty_count = 0; int clean_count = 0; /* see whether we already cached this one */ for( unused = NULL, r = cache_list; r; r = r->next ) { if( !r->flags.used ) { if( !unused ) unused = r; } else if( r->recno == recno ) { if( !r->flags.dirty ) { /* Hmmm: should we use a a copy and compare? */ if( memcmp(r->data, data, TRUST_RECORD_LEN ) ) { r->flags.dirty = 1; cache_is_dirty = 1; } } memcpy( r->data, data, TRUST_RECORD_LEN ); return 0; } if( r->flags.used ) { if( r->flags.dirty ) dirty_count++; else clean_count++; } } /* not in the cache: add a new entry */ if( unused ) { /* reuse this entry */ r = unused; r->flags.used = 1; r->recno = recno; memcpy( r->data, data, TRUST_RECORD_LEN ); r->flags.dirty = 1; cache_is_dirty = 1; cache_entries++; return 0; } /* see whether we reached the limit */ if( cache_entries < MAX_CACHE_ENTRIES_SOFT ) { /* no */ r = m_alloc( sizeof *r ); r->flags.used = 1; r->recno = recno; memcpy( r->data, data, TRUST_RECORD_LEN ); r->flags.dirty = 1; r->next = cache_list; cache_list = r; cache_is_dirty = 1; cache_entries++; return 0; } /* cache is full: discard some clean entries */ if( clean_count ) { int n = clean_count / 3; /* discard a third of the clean entries */ if( !n ) n = 1; for( unused = NULL, r = cache_list; r; r = r->next ) { if( r->flags.used && !r->flags.dirty ) { if( !unused ) unused = r; r->flags.used = 0; cache_entries--; if( !--n ) break; } } assert( unused ); r = unused; r->flags.used = 1; r->recno = recno; memcpy( r->data, data, TRUST_RECORD_LEN ); r->flags.dirty = 1; cache_is_dirty = 1; cache_entries++; return 0; } /* no clean entries: have to flush some dirty entries */ if( in_transaction ) { /* but we can't do this while in a transaction * we increase the cache size instead */ if( cache_entries < MAX_CACHE_ENTRIES_HARD ) { /* no */ if( opt.debug && !(cache_entries % 100) ) log_debug("increasing tdbio cache size\n"); r = m_alloc( sizeof *r ); r->flags.used = 1; r->recno = recno; memcpy( r->data, data, TRUST_RECORD_LEN ); r->flags.dirty = 1; r->next = cache_list; cache_list = r; cache_is_dirty = 1; cache_entries++; return 0; } log_info(_("trustdb transaction too large\n")); return G10ERR_RESOURCE_LIMIT; } if( dirty_count ) { int n = dirty_count / 5; /* discard some dirty entries */ if( !n ) n = 1; if( !is_locked ) { if( make_dotlock( lockhandle, -1 ) ) log_fatal("can't acquire lock - giving up\n"); else is_locked = 1; } for( unused = NULL, r = cache_list; r; r = r->next ) { if( r->flags.used && r->flags.dirty ) { int rc = write_cache_item( r ); if( rc ) return rc; if( !unused ) unused = r; r->flags.used = 0; cache_entries--; if( !--n ) break; } } if( !opt.lock_once ) { if( !release_dotlock( lockhandle ) ) is_locked = 0; } assert( unused ); r = unused; r->flags.used = 1; r->recno = recno; memcpy( r->data, data, TRUST_RECORD_LEN ); r->flags.dirty = 1; cache_is_dirty = 1; cache_entries++; return 0; } BUG(); } int tdbio_is_dirty() { return cache_is_dirty; } /**************** * Flush the cache. This cannot be used while in a transaction. */ int tdbio_sync() { CACHE_CTRL r; int did_lock = 0; if( db_fd == -1 ) open_db(); if( in_transaction ) log_bug("tdbio: syncing while in transaction\n"); if( !cache_is_dirty ) return 0; if( !is_locked ) { if( make_dotlock( lockhandle, -1 ) ) log_fatal("can't acquire lock - giving up\n"); else is_locked = 1; did_lock = 1; } for( r = cache_list; r; r = r->next ) { if( r->flags.used && r->flags.dirty ) { int rc = write_cache_item( r ); if( rc ) return rc; } } cache_is_dirty = 0; if( did_lock && !opt.lock_once ) { if( !release_dotlock( lockhandle ) ) is_locked = 0; } return 0; } /**************** * Simple transactions system: * Everything between begin_transaction and end/cancel_transaction * is not immediatly written but at the time of end_transaction. * */ int tdbio_begin_transaction() { int rc; if( in_transaction ) log_bug("tdbio: nested transactions\n"); /* flush everything out */ rc = tdbio_sync(); if( rc ) return rc; in_transaction = 1; return 0; } int tdbio_end_transaction() { int rc; if( !in_transaction ) log_bug("tdbio: no active transaction\n"); if( !is_locked ) { if( make_dotlock( lockhandle, -1 ) ) log_fatal("can't acquire lock - giving up\n"); else is_locked = 1; } block_all_signals(); in_transaction = 0; rc = tdbio_sync(); unblock_all_signals(); if( !opt.lock_once ) { if( !release_dotlock( lockhandle ) ) is_locked = 0; } return rc; } int tdbio_cancel_transaction() { CACHE_CTRL r; if( !in_transaction ) log_bug("tdbio: no active transaction\n"); /* remove all dirty marked entries, so that the original ones * are read back the next time */ if( cache_is_dirty ) { for( r = cache_list; r; r = r->next ) { if( r->flags.used && r->flags.dirty ) { r->flags.used = 0; cache_entries--; } } cache_is_dirty = 0; } in_transaction = 0; return 0; } /******************************************************** **************** cached I/O functions ****************** ********************************************************/ static void cleanup(void) { if( is_locked ) { if( !release_dotlock(lockhandle) ) is_locked = 0; } } int tdbio_set_dbname( const char *new_dbname, int create ) { char *fname; static int initialized = 0; if( !initialized ) { atexit( cleanup ); initialized = 1; } fname = new_dbname? m_strdup( new_dbname ) : make_filename(opt.homedir, "trustdb.gpg", NULL ); if( access( fname, R_OK ) ) { if( errno != ENOENT ) { log_error( _("%s: can't access: %s\n"), fname, strerror(errno) ); m_free(fname); return G10ERR_TRUSTDB; } if( create ) { FILE *fp; TRUSTREC rec; int rc; char *p = strrchr( fname, '/' ); assert(p); *p = 0; if( access( fname, F_OK ) ) { if( strlen(fname) >= 7 && !strcmp(fname+strlen(fname)-7, "/.gnupg" ) ) { #if HAVE_DOSISH_SYSTEM if( mkdir( fname ) ) #else if( mkdir( fname, S_IRUSR|S_IWUSR|S_IXUSR ) ) #endif log_fatal( _("%s: can't create directory: %s\n"), fname, strerror(errno) ); else if( !opt.quiet ) log_info( _("%s: directory created\n"), fname ); copy_options_file( fname ); } else log_fatal( _("%s: directory does not exist!\n"), fname ); } *p = '/'; fp =fopen( fname, "wb" ); if( !fp ) log_fatal( _("%s: can't create: %s\n"), fname, strerror(errno) ); fclose(fp); m_free(db_name); db_name = fname; #ifdef HAVE_DOSISH_SYSTEM db_fd = open( db_name, O_RDWR | O_BINARY ); #else db_fd = open( db_name, O_RDWR ); #endif if( db_fd == -1 ) log_fatal( _("%s: can't open: %s\n"), db_name, strerror(errno) ); if( !lockhandle ) lockhandle = create_dotlock( db_name ); if( !lockhandle ) log_fatal( _("%s: can't create lock\n"), db_name ); memset( &rec, 0, sizeof rec ); rec.r.ver.version = 2; rec.r.ver.created = make_timestamp(); rec.r.ver.marginals = opt.marginals_needed; rec.r.ver.completes = opt.completes_needed; rec.r.ver.cert_depth = opt.max_cert_depth; rec.rectype = RECTYPE_VER; rec.recnum = 0; rc = tdbio_write_record( &rec ); if( !rc ) tdbio_sync(); if( rc ) log_fatal( _("%s: failed to create version record: %s"), fname, g10_errstr(rc)); /* and read again to check that we are okay */ if( tdbio_read_record( 0, &rec, RECTYPE_VER ) ) log_fatal( _("%s: invalid trustdb created\n"), db_name ); if( !opt.quiet ) log_info(_("%s: trustdb created\n"), db_name); return 0; } } m_free(db_name); db_name = fname; return 0; } const char * tdbio_get_dbname() { return db_name; } static void open_db() { TRUSTREC rec; assert( db_fd == -1 ); if( !lockhandle ) lockhandle = create_dotlock( db_name ); if( !lockhandle ) log_fatal( _("%s: can't create lock\n"), db_name ); #ifdef HAVE_DOSISH_SYSTEM db_fd = open( db_name, O_RDWR | O_BINARY ); #else db_fd = open( db_name, O_RDWR ); #endif if( db_fd == -1 ) log_fatal( _("%s: can't open: %s\n"), db_name, strerror(errno) ); if( tdbio_read_record( 0, &rec, RECTYPE_VER ) ) log_fatal( _("%s: invalid trustdb\n"), db_name ); } /**************** * Make a hashtable: type 0 = key hash, 1 = sdir hash */ static void create_hashtable( TRUSTREC *vr, int type ) { TRUSTREC rec; off_t offset; ulong recnum; int i, n, rc; offset = lseek( db_fd, 0, SEEK_END ); if( offset == -1 ) log_fatal("trustdb: lseek to end failed: %s\n", strerror(errno) ); recnum = offset / TRUST_RECORD_LEN; assert(recnum); /* this is will never be the first record */ if( !type ) vr->r.ver.keyhashtbl = recnum; else vr->r.ver.sdirhashtbl = recnum; /* Now write the records */ n = (256+ITEMS_PER_HTBL_RECORD-1) / ITEMS_PER_HTBL_RECORD; for(i=0; i < n; i++, recnum++ ) { memset( &rec, 0, sizeof rec ); rec.rectype = RECTYPE_HTBL; rec.recnum = recnum; rc = tdbio_write_record( &rec ); if( rc ) log_fatal( _("%s: failed to create hashtable: %s\n"), db_name, g10_errstr(rc)); } /* update the version record */ rc = tdbio_write_record( vr ); if( !rc ) rc = tdbio_sync(); if( rc ) log_fatal( _("%s: error updating version record: %s\n"), db_name, g10_errstr(rc)); } int tdbio_db_matches_options() { static int yes_no = -1; if( yes_no == -1 ) { TRUSTREC vr; int rc; rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); if( rc ) log_fatal( _("%s: error reading version record: %s\n"), db_name, g10_errstr(rc) ); if( !vr.r.ver.marginals && !vr.r.ver.completes && !vr.r.ver.cert_depth ) { /* special hack for trustdbs created by old versions of GnuPG */ vr.r.ver.marginals = opt.marginals_needed; vr.r.ver.completes = opt.completes_needed; vr.r.ver.cert_depth = opt.max_cert_depth; rc = tdbio_write_record( &vr ); if( !rc && !in_transaction ) rc = tdbio_sync(); if( rc ) log_error( _("%s: error writing version record: %s\n"), db_name, g10_errstr(rc) ); } yes_no = vr.r.ver.marginals == opt.marginals_needed && vr.r.ver.completes == opt.completes_needed && vr.r.ver.cert_depth == opt.max_cert_depth; } return yes_no; } /**************** * Return the modifiy stamp. * if modify_down is true, the modify_down stamp will be * returned, otherwise the modify_up stamp. */ ulong tdbio_read_modify_stamp( int modify_down ) { TRUSTREC vr; int rc; ulong mod; rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); if( rc ) log_fatal( _("%s: error reading version record: %s\n"), db_name, g10_errstr(rc) ); mod = modify_down? vr.r.ver.mod_down : vr.r.ver.mod_up; /* Always return at least 1 to make comparison easier; * this is still far back in history (before Led Zeppelin III :-) */ return mod ? mod : 1; } void tdbio_write_modify_stamp( int up, int down ) { TRUSTREC vr; int rc; ulong stamp; if( !(up || down) ) return; rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); if( rc ) log_fatal( _("%s: error reading version record: %s\n"), db_name, g10_errstr(rc) ); stamp = make_timestamp(); if( down ) vr.r.ver.mod_down = stamp; if( up ) vr.r.ver.mod_up = stamp; rc = tdbio_write_record( &vr ); if( rc ) log_fatal( _("%s: error writing version record: %s\n"), db_name, g10_errstr(rc) ); } /**************** * Return the record number of the keyhash tbl or create a new one. */ static ulong get_keyhashrec(void) { static ulong keyhashtbl; /* record number of the key hashtable */ if( !keyhashtbl ) { TRUSTREC vr; int rc; rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); if( rc ) log_fatal( _("%s: error reading version record: %s\n"), db_name, g10_errstr(rc) ); if( !vr.r.ver.keyhashtbl ) create_hashtable( &vr, 0 ); keyhashtbl = vr.r.ver.keyhashtbl; } return keyhashtbl; } /**************** * Return the record number of the shadow direcory hash table * or create a new one. */ static ulong get_sdirhashrec(void) { static ulong sdirhashtbl; /* record number of the hashtable */ if( !sdirhashtbl ) { TRUSTREC vr; int rc; rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); if( rc ) log_fatal( _("%s: error reading version record: %s\n"), db_name, g10_errstr(rc) ); if( !vr.r.ver.sdirhashtbl ) create_hashtable( &vr, 1 ); sdirhashtbl = vr.r.ver.sdirhashtbl; } return sdirhashtbl; } /**************** * Update a hashtable. * table gives the start of the table, key and keylen is the key, * newrecnum is the record number to insert. */ static int upd_hashtable( ulong table, byte *key, int keylen, ulong newrecnum ) { TRUSTREC lastrec, rec; ulong hashrec, item; int msb; int level=0; int rc, i; hashrec = table; next_level: msb = key[level]; hashrec += msb / ITEMS_PER_HTBL_RECORD; rc = tdbio_read_record( hashrec, &rec, RECTYPE_HTBL ); if( rc ) { log_error( db_name, "upd_hashtable: read failed: %s\n", g10_errstr(rc) ); return rc; } item = rec.r.htbl.item[msb % ITEMS_PER_HTBL_RECORD]; if( !item ) { /* insert a new item into the hash table */ rec.r.htbl.item[msb % ITEMS_PER_HTBL_RECORD] = newrecnum; rc = tdbio_write_record( &rec ); if( rc ) { log_error( db_name, "upd_hashtable: write htbl failed: %s\n", g10_errstr(rc) ); return rc; } } else if( item != newrecnum ) { /* must do an update */ lastrec = rec; rc = tdbio_read_record( item, &rec, 0 ); if( rc ) { log_error( "upd_hashtable: read item failed: %s\n", g10_errstr(rc) ); return rc; } if( rec.rectype == RECTYPE_HTBL ) { hashrec = item; level++; if( level >= keylen ) { log_error( "hashtable has invalid indirections.\n"); return G10ERR_TRUSTDB; } goto next_level; } else if( rec.rectype == RECTYPE_HLST ) { /* extend list */ /* see whether the key is already in this list */ for(;;) { for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) { if( rec.r.hlst.rnum[i] == newrecnum ) { return 0; /* okay, already in the list */ } } if( rec.r.hlst.next ) { rc = tdbio_read_record( rec.r.hlst.next, &rec, RECTYPE_HLST); if( rc ) { log_error( "scan keyhashtbl read hlst failed: %s\n", g10_errstr(rc) ); return rc; } } else break; /* not there */ } /* find the next free entry and put it in */ for(;;) { for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) { if( !rec.r.hlst.rnum[i] ) { rec.r.hlst.rnum[i] = newrecnum; rc = tdbio_write_record( &rec ); if( rc ) log_error( "upd_hashtable: write hlst failed: %s\n", g10_errstr(rc) ); return rc; /* done */ } } if( rec.r.hlst.next ) { rc = tdbio_read_record( rec.r.hlst.next, &rec, RECTYPE_HLST ); if( rc ) { log_error( "upd_hashtable: read hlst failed: %s\n", g10_errstr(rc) ); return rc; } } else { /* add a new list record */ rec.r.hlst.next = item = tdbio_new_recnum(); rc = tdbio_write_record( &rec ); if( rc ) { log_error( "upd_hashtable: write hlst failed: %s\n", g10_errstr(rc) ); return rc; } memset( &rec, 0, sizeof rec ); rec.rectype = RECTYPE_HLST; rec.recnum = item; rec.r.hlst.rnum[0] = newrecnum; rc = tdbio_write_record( &rec ); if( rc ) log_error( "upd_hashtable: write ext hlst failed: %s\n", g10_errstr(rc) ); return rc; /* done */ } } /* end loop over hlst slots */ } else if( rec.rectype == RECTYPE_KEY || rec.rectype == RECTYPE_DIR || rec.rectype == RECTYPE_SDIR ) { /* insert a list record */ if( rec.recnum == newrecnum ) { return 0; } item = rec.recnum; /* save number of key record */ memset( &rec, 0, sizeof rec ); rec.rectype = RECTYPE_HLST; rec.recnum = tdbio_new_recnum(); rec.r.hlst.rnum[0] = item; /* old keyrecord */ rec.r.hlst.rnum[1] = newrecnum; /* and new one */ rc = tdbio_write_record( &rec ); if( rc ) { log_error( "upd_hashtable: write new hlst failed: %s\n", g10_errstr(rc) ); return rc; } /* update the hashtable record */ lastrec.r.htbl.item[msb % ITEMS_PER_HTBL_RECORD] = rec.recnum; rc = tdbio_write_record( &lastrec ); if( rc ) log_error( "upd_hashtable: update htbl failed: %s\n", g10_errstr(rc) ); return rc; /* ready */ } else { log_error( "hashtbl %lu: %lu/%d points to an invalid record %lu\n", table, hashrec, (msb % ITEMS_PER_HTBL_RECORD), item); list_trustdb(NULL); return G10ERR_TRUSTDB; } } return 0; } /**************** * Drop an entry from a hashtable * table gives the start of the table, key and keylen is the key, */ static int drop_from_hashtable( ulong table, byte *key, int keylen, ulong recnum ) { TRUSTREC rec; ulong hashrec, item; int msb; int level=0; int rc, i; hashrec = table; next_level: msb = key[level]; hashrec += msb / ITEMS_PER_HTBL_RECORD; rc = tdbio_read_record( hashrec, &rec, RECTYPE_HTBL ); if( rc ) { log_error( db_name, "drop_from_hashtable: read failed: %s\n", g10_errstr(rc) ); return rc; } item = rec.r.htbl.item[msb % ITEMS_PER_HTBL_RECORD]; if( !item ) /* not found - forget about it */ return 0; if( item == recnum ) { /* tables points direct to the record */ rec.r.htbl.item[msb % ITEMS_PER_HTBL_RECORD] = 0; rc = tdbio_write_record( &rec ); if( rc ) log_error( db_name, "drop_from_hashtable: write htbl failed: %s\n", g10_errstr(rc) ); return rc; } rc = tdbio_read_record( item, &rec, 0 ); if( rc ) { log_error( "drop_from_hashtable: read item failed: %s\n", g10_errstr(rc) ); return rc; } if( rec.rectype == RECTYPE_HTBL ) { hashrec = item; level++; if( level >= keylen ) { log_error( "hashtable has invalid indirections.\n"); return G10ERR_TRUSTDB; } goto next_level; } if( rec.rectype == RECTYPE_HLST ) { for(;;) { for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) { if( rec.r.hlst.rnum[i] == recnum ) { rec.r.hlst.rnum[i] = 0; /* drop */ rc = tdbio_write_record( &rec ); if( rc ) log_error( db_name, "drop_from_hashtable: write htbl failed: %s\n", g10_errstr(rc) ); return rc; } } if( rec.r.hlst.next ) { rc = tdbio_read_record( rec.r.hlst.next, &rec, RECTYPE_HLST); if( rc ) { log_error( "scan keyhashtbl read hlst failed: %s\n", g10_errstr(rc) ); return rc; } } else return 0; /* key not in table */ } } log_error( "hashtbl %lu: %lu/%d points to wrong record %lu\n", table, hashrec, (msb % ITEMS_PER_HTBL_RECORD), item); return G10ERR_TRUSTDB; } /**************** * Lookup a record via the hashtable tablewith key/keylen and return the * result in rec. cmp() should return if the record is the desired one. * Returns -1 if not found, 0 if found or another errocode */ static int lookup_hashtable( ulong table, const byte *key, size_t keylen, int (*cmpfnc)(void*, const TRUSTREC *), void *cmpdata, TRUSTREC *rec ) { int rc; ulong hashrec, item; int msb; int level=0; hashrec = table; next_level: msb = key[level]; hashrec += msb / ITEMS_PER_HTBL_RECORD; rc = tdbio_read_record( hashrec, rec, RECTYPE_HTBL ); if( rc ) { log_error( db_name, "lookup_hashtable failed: %s\n", g10_errstr(rc) ); return rc; } item = rec->r.htbl.item[msb % ITEMS_PER_HTBL_RECORD]; if( !item ) return -1; /* not found */ rc = tdbio_read_record( item, rec, 0 ); if( rc ) { log_error( db_name, "hashtable read failed: %s\n", g10_errstr(rc) ); return rc; } if( rec->rectype == RECTYPE_HTBL ) { hashrec = item; level++; if( level >= keylen ) { log_error( db_name, "hashtable has invalid indirections\n"); return G10ERR_TRUSTDB; } goto next_level; } else if( rec->rectype == RECTYPE_HLST ) { for(;;) { int i; for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) { if( rec->r.hlst.rnum[i] ) { TRUSTREC tmp; rc = tdbio_read_record( rec->r.hlst.rnum[i], &tmp, 0 ); if( rc ) { log_error( "lookup_hashtable: read item failed: %s\n", g10_errstr(rc) ); return rc; } if( (*cmpfnc)( cmpdata, &tmp ) ) { *rec = tmp; return 0; } } } if( rec->r.hlst.next ) { rc = tdbio_read_record( rec->r.hlst.next, rec, RECTYPE_HLST ); if( rc ) { log_error( "lookup_hashtable: read hlst failed: %s\n", g10_errstr(rc) ); return rc; } } else return -1; /* not found */ } } if( (*cmpfnc)( cmpdata, rec ) ) return 0; /* really found */ return -1; /* no: not found */ } /**************** * Update the key hashtbl or create the table if it does not exist */ static int update_keyhashtbl( TRUSTREC *kr ) { return upd_hashtable( get_keyhashrec(), kr->r.key.fingerprint, kr->r.key.fingerprint_len, kr->recnum ); } /**************** * Update the shadow dir hashtbl or create the table if it does not exist */ static int update_sdirhashtbl( TRUSTREC *sr ) { byte key[8]; u32tobuf( key , sr->r.sdir.keyid[0] ); u32tobuf( key+4 , sr->r.sdir.keyid[1] ); return upd_hashtable( get_sdirhashrec(), key, 8, sr->recnum ); } /**************** * Drop the records from the key-hashtbl */ static int drop_from_keyhashtbl( TRUSTREC *kr ) { return drop_from_hashtable( get_keyhashrec(), kr->r.key.fingerprint, kr->r.key.fingerprint_len, kr->recnum ); } /**************** * Drop record drom the shadow dir hashtbl */ static int drop_from_sdirhashtbl( TRUSTREC *sr ) { byte key[8]; u32tobuf( key , sr->r.sdir.keyid[0] ); u32tobuf( key+4 , sr->r.sdir.keyid[1] ); return drop_from_hashtable( get_sdirhashrec(), key, 8, sr->recnum ); } void tdbio_dump_record( TRUSTREC *rec, FILE *fp ) { int i; ulong rnum = rec->recnum; byte *p; fprintf(fp, "rec %5lu, ", rnum ); switch( rec->rectype ) { case 0: fprintf(fp, "blank\n"); break; case RECTYPE_VER: fprintf(fp, "version, kd=%lu, sd=%lu, free=%lu, m/c/d=%d/%d/%d down=%s", rec->r.ver.keyhashtbl, rec->r.ver.sdirhashtbl, rec->r.ver.firstfree, rec->r.ver.marginals, rec->r.ver.completes, rec->r.ver.cert_depth, strtimestamp(rec->r.ver.mod_down) ); fprintf(fp, ", up=%s\n", strtimestamp(rec->r.ver.mod_up) ); break; case RECTYPE_FREE: fprintf(fp, "free, next=%lu\n", rec->r.free.next ); break; case RECTYPE_DIR: fprintf(fp, "dir %lu, keys=%lu, uids=%lu, t=%02x", rec->r.dir.lid, rec->r.dir.keylist, rec->r.dir.uidlist, rec->r.dir.ownertrust ); if( rec->r.dir.valcheck ) fprintf( fp, ", v=%02x/%s", rec->r.dir.validity, strtimestamp(rec->r.dir.valcheck) ); if( rec->r.dir.checkat ) fprintf( fp, ", a=%s", strtimestamp(rec->r.dir.checkat) ); if( rec->r.dir.dirflags & DIRF_CHECKED ) { if( rec->r.dir.dirflags & DIRF_VALID ) fputs(", valid", fp ); if( rec->r.dir.dirflags & DIRF_EXPIRED ) fputs(", expired", fp ); if( rec->r.dir.dirflags & DIRF_REVOKED ) fputs(", revoked", fp ); } putc('\n', fp); break; case RECTYPE_KEY: fprintf(fp, "key %lu, n=%lu a=%d ", rec->r.key.lid, rec->r.key.next, rec->r.key.pubkey_algo ); for(i=0; i < rec->r.key.fingerprint_len; i++ ) fprintf(fp, "%02X", rec->r.key.fingerprint[i] ); if( rec->r.key.keyflags & KEYF_CHECKED ) { if( rec->r.key.keyflags & KEYF_VALID ) fputs(", valid", fp ); if( rec->r.key.keyflags & KEYF_EXPIRED ) fputs(", expired", fp ); if( rec->r.key.keyflags & KEYF_REVOKED ) fputs(", revoked", fp ); } putc('\n', fp); break; case RECTYPE_UID: fprintf(fp, "uid %lu, next=%lu, pref=%lu, sig=%lu, hash=%02X%02X", rec->r.uid.lid, rec->r.uid.next, rec->r.uid.prefrec, rec->r.uid.siglist, rec->r.uid.namehash[18], rec->r.uid.namehash[19]); fprintf( fp, ", v=%02x", rec->r.uid.validity ); if( rec->r.uid.uidflags & UIDF_CHECKED ) { if( rec->r.uid.uidflags & UIDF_VALID ) fputs(", valid", fp ); if( rec->r.uid.uidflags & UIDF_REVOKED ) fputs(", revoked", fp ); } putc('\n', fp); break; case RECTYPE_PREF: fprintf(fp, "pref %lu, next=%lu,", rec->r.pref.lid, rec->r.pref.next); for(i=0,p=rec->r.pref.data; i < ITEMS_PER_PREF_RECORD; i+=2,p+=2 ) { if( *p ) fprintf(fp, " %c%d", *p == PREFTYPE_SYM ? 'S' : *p == PREFTYPE_HASH ? 'H' : *p == PREFTYPE_COMPR ? 'Z' : '?', p[1]); } putc('\n', fp); break; case RECTYPE_SIG: fprintf(fp, "sig %lu, next=%lu,", rec->r.sig.lid, rec->r.sig.next ); for(i=0; i < SIGS_PER_RECORD; i++ ) { if( rec->r.sig.sig[i].lid ) { fprintf(fp, " %lu:", rec->r.sig.sig[i].lid ); if( rec->r.sig.sig[i].flag & SIGF_CHECKED ) { fprintf(fp,"%c%c%c", (rec->r.sig.sig[i].flag & SIGF_VALID) ? 'V': (rec->r.sig.sig[i].flag & SIGF_IGNORED) ? 'I':'-', (rec->r.sig.sig[i].flag & SIGF_EXPIRED) ? 'E':'-', (rec->r.sig.sig[i].flag & SIGF_REVOKED) ? 'R':'-'); } else if( rec->r.sig.sig[i].flag & SIGF_NOPUBKEY) fputs("?--", fp); else fputs("---", fp); } } putc('\n', fp); break; case RECTYPE_SDIR: fprintf(fp, "sdir %lu, keyid=%08lX%08lX, algo=%d, hint=%lu\n", rec->r.sdir.lid, (ulong)rec->r.sdir.keyid[0], (ulong)rec->r.sdir.keyid[1], rec->r.sdir.pubkey_algo, (ulong)rec->r.sdir.hintlist ); break; case RECTYPE_CACH: fprintf(fp, "cach\n"); break; case RECTYPE_HTBL: fprintf(fp, "htbl,"); for(i=0; i < ITEMS_PER_HTBL_RECORD; i++ ) fprintf(fp, " %lu", rec->r.htbl.item[i] ); putc('\n', fp); break; case RECTYPE_HLST: fprintf(fp, "hlst, next=%lu,", rec->r.hlst.next ); for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) fprintf(fp, " %lu", rec->r.hlst.rnum[i] ); putc('\n', fp); break; default: fprintf(fp, "unknown type %d\n", rec->rectype ); break; } } /**************** * read the record with number recnum * returns: -1 on error, 0 on success */ int tdbio_read_record( ulong recnum, TRUSTREC *rec, int expected ) { byte readbuf[TRUST_RECORD_LEN]; const byte *buf, *p; int rc = 0; int n, i; if( db_fd == -1 ) open_db(); buf = get_record_from_cache( recnum ); if( !buf ) { if( lseek( db_fd, recnum * TRUST_RECORD_LEN, SEEK_SET ) == -1 ) { log_error(_("trustdb: lseek failed: %s\n"), strerror(errno) ); return G10ERR_READ_FILE; } n = read( db_fd, readbuf, TRUST_RECORD_LEN); if( !n ) { return -1; /* eof */ } else if( n != TRUST_RECORD_LEN ) { log_error(_("trustdb: read failed (n=%d): %s\n"), n, strerror(errno) ); return G10ERR_READ_FILE; } buf = readbuf; } rec->recnum = recnum; rec->dirty = 0; p = buf; rec->rectype = *p++; if( expected && rec->rectype != expected ) { log_error("%lu: read expected rec type %d, got %d\n", recnum, expected, rec->rectype ); return G10ERR_TRUSTDB; } p++; /* skip reserved byte */ switch( rec->rectype ) { case 0: /* unused (free) record */ break; case RECTYPE_VER: /* version record */ if( memcmp(buf+1, "gpg", 3 ) ) { log_error( _("%s: not a trustdb file\n"), db_name ); rc = G10ERR_TRUSTDB; } p += 2; /* skip "pgp" */ rec->r.ver.version = *p++; rec->r.ver.marginals = *p++; rec->r.ver.completes = *p++; rec->r.ver.cert_depth = *p++; p += 4; /* lock flags */ rec->r.ver.created = buftoulong(p); p += 4; rec->r.ver.mod_down = buftoulong(p); p += 4; rec->r.ver.mod_up = buftoulong(p); p += 4; rec->r.ver.keyhashtbl=buftoulong(p); p += 4; rec->r.ver.firstfree =buftoulong(p); p += 4; rec->r.ver.sdirhashtbl =buftoulong(p); p += 4; if( recnum ) { log_error( _("%s: version record with recnum %lu\n"), db_name, (ulong)recnum ); rc = G10ERR_TRUSTDB; } else if( rec->r.ver.version != 2 ) { log_error( _("%s: invalid file version %d\n"), db_name, rec->r.ver.version ); rc = G10ERR_TRUSTDB; } break; case RECTYPE_FREE: rec->r.free.next = buftoulong(p); p += 4; break; case RECTYPE_DIR: /*directory record */ rec->r.dir.lid = buftoulong(p); p += 4; rec->r.dir.keylist = buftoulong(p); p += 4; rec->r.dir.uidlist = buftoulong(p); p += 4; rec->r.dir.cacherec = buftoulong(p); p += 4; rec->r.dir.ownertrust = *p++; rec->r.dir.dirflags = *p++; rec->r.dir.validity = *p++; rec->r.dir.valcheck = buftoulong(p); p += 4; rec->r.dir.checkat = buftoulong(p); p += 4; switch( rec->r.dir.validity ) { case 0: case TRUST_UNDEFINED: case TRUST_NEVER: case TRUST_MARGINAL: case TRUST_FULLY: case TRUST_ULTIMATE: break; default: log_info("lid %lu: invalid validity value - cleared\n", recnum); } if( rec->r.dir.lid != recnum ) { log_error( "%s: dir LID != recnum (%lu,%lu)\n", db_name, rec->r.dir.lid, (ulong)recnum ); rc = G10ERR_TRUSTDB; } break; case RECTYPE_KEY: /* public key record */ rec->r.key.lid = buftoulong(p); p += 4; rec->r.key.next = buftoulong(p); p += 4; p += 7; rec->r.key.keyflags = *p++; rec->r.key.pubkey_algo = *p++; rec->r.key.fingerprint_len = *p++; if( rec->r.key.fingerprint_len < 1 || rec->r.key.fingerprint_len > 20 ) rec->r.key.fingerprint_len = 20; memcpy( rec->r.key.fingerprint, p, 20); break; case RECTYPE_UID: /* user id record */ rec->r.uid.lid = buftoulong(p); p += 4; rec->r.uid.next = buftoulong(p); p += 4; rec->r.uid.prefrec = buftoulong(p); p += 4; rec->r.uid.siglist = buftoulong(p); p += 4; rec->r.uid.uidflags = *p++; rec->r.uid.validity = *p++; switch( rec->r.uid.validity ) { case 0: case TRUST_UNDEFINED: case TRUST_NEVER: case TRUST_MARGINAL: case TRUST_FULLY: case TRUST_ULTIMATE: break; default: log_info("lid %lu: invalid validity value - cleared\n", recnum); } memcpy( rec->r.uid.namehash, p, 20); break; case RECTYPE_PREF: /* preference record */ rec->r.pref.lid = buftoulong(p); p += 4; rec->r.pref.next = buftoulong(p); p += 4; memcpy( rec->r.pref.data, p, 30 ); break; case RECTYPE_SIG: rec->r.sig.lid = buftoulong(p); p += 4; rec->r.sig.next = buftoulong(p); p += 4; for(i=0; i < SIGS_PER_RECORD; i++ ) { rec->r.sig.sig[i].lid = buftoulong(p); p += 4; rec->r.sig.sig[i].flag = *p++; } break; case RECTYPE_SDIR: /* shadow directory record */ rec->r.sdir.lid = buftoulong(p); p += 4; rec->r.sdir.keyid[0]= buftou32(p); p += 4; rec->r.sdir.keyid[1]= buftou32(p); p += 4; rec->r.sdir.pubkey_algo = *p++; p += 3; rec->r.sdir.hintlist = buftoulong(p); if( rec->r.sdir.lid != recnum ) { log_error( "%s: sdir LID != recnum (%lu,%lu)\n", db_name, rec->r.sdir.lid, (ulong)recnum ); rc = G10ERR_TRUSTDB; } break; case RECTYPE_CACH: /* cache record */ rec->r.cache.lid = buftoulong(p); p += 4; memcpy(rec->r.cache.blockhash, p, 20); p += 20; rec->r.cache.trustlevel = *p++; break; case RECTYPE_HTBL: for(i=0; i < ITEMS_PER_HTBL_RECORD; i++ ) { rec->r.htbl.item[i] = buftoulong(p); p += 4; } break; case RECTYPE_HLST: rec->r.hlst.next = buftoulong(p); p += 4; for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) { rec->r.hlst.rnum[i] = buftoulong(p); p += 4; } break; default: log_error( "%s: invalid record type %d at recnum %lu\n", db_name, rec->rectype, (ulong)recnum ); rc = G10ERR_TRUSTDB; break; } return rc; } /**************** * Write the record at RECNUM */ int tdbio_write_record( TRUSTREC *rec ) { byte buf[TRUST_RECORD_LEN], *p; int rc = 0; int i; ulong recnum = rec->recnum; if( db_fd == -1 ) open_db(); memset(buf, 0, TRUST_RECORD_LEN); p = buf; *p++ = rec->rectype; p++; switch( rec->rectype ) { case 0: /* unused record */ break; case RECTYPE_VER: /* version record */ if( recnum ) BUG(); memcpy(p-1, "gpg", 3 ); p += 2; *p++ = rec->r.ver.version; *p++ = rec->r.ver.marginals; *p++ = rec->r.ver.completes; *p++ = rec->r.ver.cert_depth; p += 4; /* skip lock flags */ ulongtobuf(p, rec->r.ver.created); p += 4; ulongtobuf(p, rec->r.ver.mod_down); p += 4; ulongtobuf(p, rec->r.ver.mod_up); p += 4; ulongtobuf(p, rec->r.ver.keyhashtbl); p += 4; ulongtobuf(p, rec->r.ver.firstfree ); p += 4; ulongtobuf(p, rec->r.ver.sdirhashtbl ); p += 4; break; case RECTYPE_FREE: ulongtobuf(p, rec->r.free.next); p += 4; break; case RECTYPE_DIR: /*directory record */ ulongtobuf(p, rec->r.dir.lid); p += 4; ulongtobuf(p, rec->r.dir.keylist); p += 4; ulongtobuf(p, rec->r.dir.uidlist); p += 4; ulongtobuf(p, rec->r.dir.cacherec); p += 4; *p++ = rec->r.dir.ownertrust; *p++ = rec->r.dir.dirflags; *p++ = rec->r.dir.validity; ulongtobuf(p, rec->r.dir.valcheck); p += 4; ulongtobuf(p, rec->r.dir.checkat); p += 4; assert( rec->r.dir.lid == recnum ); break; case RECTYPE_KEY: ulongtobuf(p, rec->r.key.lid); p += 4; ulongtobuf(p, rec->r.key.next); p += 4; p += 7; *p++ = rec->r.key.keyflags; *p++ = rec->r.key.pubkey_algo; *p++ = rec->r.key.fingerprint_len; memcpy( p, rec->r.key.fingerprint, 20); p += 20; break; case RECTYPE_UID: /* user id record */ ulongtobuf(p, rec->r.uid.lid); p += 4; ulongtobuf(p, rec->r.uid.next); p += 4; ulongtobuf(p, rec->r.uid.prefrec); p += 4; ulongtobuf(p, rec->r.uid.siglist); p += 4; *p++ = rec->r.uid.uidflags; *p++ = rec->r.uid.validity; memcpy( p, rec->r.uid.namehash, 20 ); p += 20; break; case RECTYPE_PREF: ulongtobuf(p, rec->r.pref.lid); p += 4; ulongtobuf(p, rec->r.pref.next); p += 4; memcpy( p, rec->r.pref.data, 30 ); break; case RECTYPE_SIG: ulongtobuf(p, rec->r.sig.lid); p += 4; ulongtobuf(p, rec->r.sig.next); p += 4; for(i=0; i < SIGS_PER_RECORD; i++ ) { ulongtobuf(p, rec->r.sig.sig[i].lid); p += 4; *p++ = rec->r.sig.sig[i].flag; } break; case RECTYPE_SDIR: ulongtobuf( p, rec->r.sdir.lid); p += 4; u32tobuf( p, rec->r.sdir.keyid[0] ); p += 4; u32tobuf( p, rec->r.sdir.keyid[1] ); p += 4; *p++ = rec->r.sdir.pubkey_algo; p += 3; ulongtobuf( p, rec->r.sdir.hintlist ); break; case RECTYPE_CACH: ulongtobuf(p, rec->r.cache.lid); p += 4; memcpy(p, rec->r.cache.blockhash, 20); p += 20; *p++ = rec->r.cache.trustlevel; break; case RECTYPE_HTBL: for(i=0; i < ITEMS_PER_HTBL_RECORD; i++ ) { ulongtobuf( p, rec->r.htbl.item[i]); p += 4; } break; case RECTYPE_HLST: ulongtobuf( p, rec->r.hlst.next); p += 4; for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) { ulongtobuf( p, rec->r.hlst.rnum[i]); p += 4; } break; default: BUG(); } rc = put_record_into_cache( recnum, buf ); if( rc ) ; else if( rec->rectype == RECTYPE_KEY ) rc = update_keyhashtbl( rec ); else if( rec->rectype == RECTYPE_SDIR ) rc = update_sdirhashtbl( rec ); return rc; } int tdbio_delete_record( ulong recnum ) { TRUSTREC vr, rec; int rc; /* Must read the record fist, so we can drop it from the hash tables */ rc = tdbio_read_record( recnum, &rec, 0 ); if( rc ) ; else if( rec.rectype == RECTYPE_KEY ) rc = drop_from_keyhashtbl( &rec ); else if( rec.rectype == RECTYPE_SDIR ) rc = drop_from_sdirhashtbl( &rec ); if( rc ) return rc; /* now we can chnage it to a free record */ rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); if( rc ) log_fatal( _("%s: error reading version record: %s\n"), db_name, g10_errstr(rc) ); rec.recnum = recnum; rec.rectype = RECTYPE_FREE; rec.r.free.next = vr.r.ver.firstfree; vr.r.ver.firstfree = recnum; rc = tdbio_write_record( &rec ); if( !rc ) rc = tdbio_write_record( &vr ); return rc; } /**************** * create a new record and return its record number */ ulong tdbio_new_recnum() { off_t offset; ulong recnum; TRUSTREC vr, rec; int rc; /* look for unused records */ rc = tdbio_read_record( 0, &vr, RECTYPE_VER ); if( rc ) log_fatal( _("%s: error reading version record: %s\n"), db_name, g10_errstr(rc) ); if( vr.r.ver.firstfree ) { recnum = vr.r.ver.firstfree; rc = tdbio_read_record( recnum, &rec, RECTYPE_FREE ); if( rc ) { log_error( _("%s: error reading free record: %s\n"), db_name, g10_errstr(rc) ); return rc; } /* update dir record */ vr.r.ver.firstfree = rec.r.free.next; rc = tdbio_write_record( &vr ); if( rc ) { log_error( _("%s: error writing dir record: %s\n"), db_name, g10_errstr(rc) ); return rc; } /*zero out the new record */ memset( &rec, 0, sizeof rec ); rec.rectype = 0; /* unused record */ rec.recnum = recnum; rc = tdbio_write_record( &rec ); if( rc ) log_fatal(_("%s: failed to zero a record: %s\n"), db_name, g10_errstr(rc)); } else { /* not found, append a new record */ offset = lseek( db_fd, 0, SEEK_END ); if( offset == -1 ) log_fatal("trustdb: lseek to end failed: %s\n", strerror(errno) ); recnum = offset / TRUST_RECORD_LEN; assert(recnum); /* this is will never be the first record */ /* we must write a record, so that the next call to this function * returns another recnum */ memset( &rec, 0, sizeof rec ); rec.rectype = 0; /* unused record */ rec.recnum = recnum; rc = 0; if( lseek( db_fd, recnum * TRUST_RECORD_LEN, SEEK_SET ) == -1 ) { log_error(_("trustdb rec %lu: lseek failed: %s\n"), recnum, strerror(errno) ); rc = G10ERR_WRITE_FILE; } else { int n = write( db_fd, &rec, TRUST_RECORD_LEN); if( n != TRUST_RECORD_LEN ) { log_error(_("trustdb rec %lu: write failed (n=%d): %s\n"), recnum, n, strerror(errno) ); rc = G10ERR_WRITE_FILE; } } if( rc ) log_fatal(_("%s: failed to append a record: %s\n"), db_name, g10_errstr(rc)); } return recnum ; } /**************** * Search the trustdb for a key which matches PK and return the dir record * The local_id of PK is set to the correct value */ int tdbio_search_dir_bypk( PKT_public_key *pk, TRUSTREC *rec ) { byte fingerprint[MAX_FINGERPRINT_LEN]; size_t fingerlen; u32 keyid[2]; int rc; keyid_from_pk( pk, keyid ); fingerprint_from_pk( pk, fingerprint, &fingerlen ); rc = tdbio_search_dir_byfpr( fingerprint, fingerlen, pk->pubkey_algo, rec ); if( !rc ) { if( pk->local_id && pk->local_id != rec->recnum ) log_error("%s: found record, but LID from memory does " "not match recnum (%lu,%lu)\n", db_name, pk->local_id, rec->recnum ); pk->local_id = rec->recnum; } return rc; } static int cmp_krec_fpr( void *dataptr, const TRUSTREC *rec ) { const struct cmp_krec_fpr_struct *d = dataptr; return rec->rectype == RECTYPE_KEY && ( !d->pubkey_algo || rec->r.key.pubkey_algo == d->pubkey_algo ) && rec->r.key.fingerprint_len == d->fprlen && !memcmp( rec->r.key.fingerprint, d->fpr, d->fprlen ); } int tdbio_search_dir_byfpr( const byte *fingerprint, size_t fingerlen, int pubkey_algo, TRUSTREC *rec ) { struct cmp_krec_fpr_struct cmpdata; ulong recnum; int rc; assert( fingerlen == 20 || fingerlen == 16 ); /* locate the key using the hash table */ cmpdata.pubkey_algo = pubkey_algo; cmpdata.fpr = fingerprint; cmpdata.fprlen = fingerlen; rc = lookup_hashtable( get_keyhashrec(), fingerprint, fingerlen, cmp_krec_fpr, &cmpdata, rec ); if( !rc ) { recnum = rec->r.key.lid; /* Now read the dir record */ rc = tdbio_read_record( recnum, rec, RECTYPE_DIR); if( rc ) log_error("%s: can't read dirrec %lu: %s\n", db_name, recnum, g10_errstr(rc) ); } return rc; } static int cmp_sdir( void *dataptr, const TRUSTREC *rec ) { const struct cmp_xdir_struct *d = dataptr; return rec->rectype == RECTYPE_SDIR && ( !d->pubkey_algo || rec->r.sdir.pubkey_algo == d->pubkey_algo ) && rec->r.sdir.keyid[0] == d->keyid[0] && rec->r.sdir.keyid[1] == d->keyid[1]; } int tdbio_search_sdir( u32 *keyid, int pubkey_algo, TRUSTREC *rec ) { struct cmp_xdir_struct cmpdata; int rc; byte key[8]; /* locate the shadow dir record using the hash table */ u32tobuf( key , keyid[0] ); u32tobuf( key+4 , keyid[1] ); cmpdata.pubkey_algo = pubkey_algo; cmpdata.keyid[0] = keyid[0]; cmpdata.keyid[1] = keyid[1]; rc = lookup_hashtable( get_sdirhashrec(), key, 8, cmp_sdir, &cmpdata, rec ); return rc; } void tdbio_invalid(void) { log_error(_( "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n") ); g10_exit(2); } diff --git a/g10/trustdb.c b/g10/trustdb.c index b386d7049..497fa9e65 100644 --- a/g10/trustdb.c +++ b/g10/trustdb.c @@ -1,2636 +1,2592 @@ /* trustdb.c * Copyright (C) 1998, 1999 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 #include #include #include #include #include #include #include #include #include #include #include "errors.h" #include "iobuf.h" #include "keydb.h" #include "memory.h" #include "util.h" #include "trustdb.h" #include "options.h" #include "packet.h" #include "main.h" #include "i18n.h" #include "tdbio.h" #include "ttyio.h" #if MAX_FINGERPRINT_LEN > 20 #error Must change structure of trustdb #endif struct keyid_list { struct keyid_list *next; u32 keyid[2]; }; struct local_id_item { struct local_id_item *next; ulong lid; unsigned flag; }; struct local_id_table { struct local_id_table *next; /* only used to keep a list of unused tables */ struct local_id_item *items[16]; }; typedef struct local_id_table *LOCAL_ID_TABLE; struct enum_cert_paths_ctx { int init; int idx; }; struct recno_list_struct { struct recno_list_struct *next; ulong recno; int type; }; typedef struct recno_list_struct *RECNO_LIST; typedef struct trust_node *TN; struct trust_node { TN back; /* parent */ TN list; /* list of other node (should all be of the same type)*/ TN next; /* used to build the list */ int is_uid; /* set if this is an uid node */ ulong lid; /* key or uid recordnumber */ union { struct { int ownertrust; int validity; /* helper */ int buckstop; } k; struct { int marginal_count; int fully_count; int validity; } u; } n; }; static TN used_tns; static int alloced_tns; static int max_alloced_tns; static LOCAL_ID_TABLE new_lid_table(void); static int ins_lid_table_item( LOCAL_ID_TABLE tbl, ulong lid, unsigned flag ); static int qry_lid_table_flag( LOCAL_ID_TABLE tbl, ulong lid, unsigned *flag ); static int propagate_validity( TN root, TN node, int (*add_fnc)(ulong), unsigned *retflgs ); static void print_user_id( FILE *fp, const char *text, u32 *keyid ); static int do_check( TRUSTREC *drec, unsigned *trustlevel, const char *nhash, int (*add_fnc)(ulong), unsigned *retflgs); static int get_dir_record( PKT_public_key *pk, TRUSTREC *rec ); +static int do_update_trust_record( KBNODE keyblock, TRUSTREC *drec, + int recheck, int *modified ); +static int check_trust_record( TRUSTREC *drec ); /* a table used to keep track of ultimately trusted keys * which are the ones from our secrings and the trusted keys */ static LOCAL_ID_TABLE ultikey_table; /* list of unused lid items and tables */ static LOCAL_ID_TABLE unused_lid_tables; static struct local_id_item *unused_lid_items; static struct { int init; int level; char *dbname; } trustdb_args; /********************************************** *********** record read write ************** **********************************************/ /**************** * Read a record but die if it does not exist */ static void read_record( ulong recno, TRUSTREC *rec, int rectype ) { int rc = tdbio_read_record( recno, rec, rectype ); if( !rc ) return; log_error(_("trust record %lu, req type %d: read failed: %s\n"), recno, rectype, g10_errstr(rc) ); tdbio_invalid(); } /**************** * Wirte a record but die on error */ static void write_record( TRUSTREC *rec ) { int rc = tdbio_write_record( rec ); if( !rc ) return; log_error(_("trust record %lu, type %d: write failed: %s\n"), rec->recnum, rec->rectype, g10_errstr(rc) ); tdbio_invalid(); } /**************** * Delete a record but die on error */ static void delete_record( ulong recno ) { int rc = tdbio_delete_record( recno ); if( !rc ) return; log_error(_("trust record %lu: delete failed: %s\n"), recno, g10_errstr(rc) ); tdbio_invalid(); } /**************** * sync the db */ static void do_sync(void) { int rc = tdbio_sync(); if( !rc ) return; log_error(_("trustdb: sync failed: %s\n"), g10_errstr(rc) ); g10_exit(2); } /********************************************** ***************** helpers ****************** **********************************************/ static LOCAL_ID_TABLE new_lid_table(void) { LOCAL_ID_TABLE a; a = unused_lid_tables; if( a ) { unused_lid_tables = a->next; memset( a, 0, sizeof *a ); } else a = m_alloc_clear( sizeof *a ); return a; } #if 0 static void release_lid_table( LOCAL_ID_TABLE tbl ) { struct local_id_item *a, *a2; int i; for(i=0; i < 16; i++ ) { for(a=tbl->items[i]; a; a = a2 ) { a2 = a->next; a->next = unused_lid_items; unused_lid_items = a; } } tbl->next = unused_lid_tables; unused_lid_tables = tbl; } #endif /**************** * Add a new item to the table or return 1 if we already have this item */ static int ins_lid_table_item( LOCAL_ID_TABLE tbl, ulong lid, unsigned flag ) { struct local_id_item *a; for( a = tbl->items[lid & 0x0f]; a; a = a->next ) if( a->lid == lid ) return 1; a = unused_lid_items; if( a ) unused_lid_items = a->next; else a = m_alloc( sizeof *a ); a->lid = lid; a->flag = flag; a->next = tbl->items[lid & 0x0f]; tbl->items[lid & 0x0f] = a; return 0; } static int qry_lid_table_flag( LOCAL_ID_TABLE tbl, ulong lid, unsigned *flag ) { struct local_id_item *a; for( a = tbl->items[lid & 0x0f]; a; a = a->next ) if( a->lid == lid ) { if( flag ) *flag = a->flag; return 0; } return -1; } static TN new_tn(void) { TN t; if( used_tns ) { t = used_tns; used_tns = t->next; memset( t, 0, sizeof *t ); } else t = m_alloc_clear( sizeof *t ); if( ++alloced_tns > max_alloced_tns ) max_alloced_tns = alloced_tns; return t; } static void release_tn( TN t ) { if( t ) { t->next = used_tns; used_tns = t; alloced_tns--; } } static void release_tn_tree( TN kr ) { TN kr2; for( ; kr; kr = kr2 ) { release_tn_tree( kr->list ); kr2 = kr->next; release_tn( kr ); } } /********************************************** ****** access by LID and other helpers ******* **********************************************/ /**************** * Return the keyid from the primary key identified by LID. */ int keyid_from_lid( ulong lid, u32 *keyid ) { TRUSTREC rec; int rc; init_trustdb(); keyid[0] = keyid[1] = 0; rc = tdbio_read_record( lid, &rec, 0 ); if( rc ) { log_error(_("error reading dir record for LID %lu: %s\n"), lid, g10_errstr(rc)); return G10ERR_TRUSTDB; } if( rec.rectype == RECTYPE_SDIR ) return 0; if( rec.rectype != RECTYPE_DIR ) { log_error(_("lid %lu: expected dir record, got type %d\n"), lid, rec.rectype ); return G10ERR_TRUSTDB; } if( !rec.r.dir.keylist ) { log_error(_("no primary key for LID %lu\n"), lid ); return G10ERR_TRUSTDB; } rc = tdbio_read_record( rec.r.dir.keylist, &rec, RECTYPE_KEY ); if( rc ) { log_error(_("error reading primary key for LID %lu: %s\n"), lid, g10_errstr(rc)); return G10ERR_TRUSTDB; } keyid_from_fingerprint( rec.r.key.fingerprint, rec.r.key.fingerprint_len, keyid ); return 0; } ulong lid_from_keyblock( KBNODE keyblock ) { KBNODE node = find_kbnode( keyblock, PKT_PUBLIC_KEY ); PKT_public_key *pk; if( !node ) BUG(); pk = node->pkt->pkt.public_key; if( !pk->local_id ) { TRUSTREC rec; init_trustdb(); get_dir_record( pk, &rec ); } return pk->local_id; } static int get_dir_record( PKT_public_key *pk, TRUSTREC *rec ) { int rc=0; if( pk->local_id ) { read_record( pk->local_id, rec, RECTYPE_DIR ); } else { /* no local_id: scan the trustdb */ if( (rc=tdbio_search_dir_bypk( pk, rec )) && rc != -1 ) log_error(_("get_dir_record: search_record failed: %s\n"), g10_errstr(rc)); } return rc; } -/**************** - * Get the LID of a public key. - * Returns: The LID of the key (note, that this may be a shadow dir) - * or 0 if not available. - * fixme: make this ftser by putting entries into the sdir hash table - */ -#if 0 -static ulong -lid_from_keyid( u32 *keyid ) -{ - PKT_public_key *pk = m_alloc_clear( sizeof *pk ); - TRUSTREC rec; - ulong lid = 0; - int rc; - - rc = get_pubkey( pk, keyid ); - if( !rc ) { - if( pk->local_id ) - lid = pk->local_id; - else { - rc = tdbio_search_dir_bypk( pk, &rec ); - if( !rc ) - lid = rec.recnum; - else if( rc == -1 ) { /* see whether there is a sdir instead */ - u32 akid[2]; - - keyid_from_pk( pk, akid ); - rc = tdbio_search_sdir( akid, pk->pubkey_algo, &rec ); - if( !rc ) - lid = rec.recnum; - } - } - } - free_public_key( pk ); - return lid; -} -#endif - static ulong lid_from_keyid_no_sdir( u32 *keyid ) { PKT_public_key *pk = m_alloc_clear( sizeof *pk ); TRUSTREC rec; ulong lid = 0; int rc; rc = get_pubkey( pk, keyid ); if( !rc ) { if( pk->local_id ) lid = pk->local_id; else { rc = tdbio_search_dir_bypk( pk, &rec ); if( !rc ) lid = rec.recnum; } } free_public_key( pk ); return lid; } /*********************************************** ************* Initialization **************** ***********************************************/ /**************** * Verify that all our public keys are in the trustdb. */ static int verify_own_keys(void) { int rc; void *enum_context = NULL; PKT_secret_key *sk = m_alloc_clear( sizeof *sk ); PKT_public_key *pk = m_alloc_clear( sizeof *pk ); u32 keyid[2]; while( !(rc=enum_secret_keys( &enum_context, sk, 0 ) ) ) { int have_pk = 0; keyid_from_sk( sk, keyid ); if( DBG_TRUST ) log_debug("key %08lX: checking secret key\n", (ulong)keyid[1] ); if( is_secret_key_protected( sk ) < 1 ) log_info(_("NOTE: secret key %08lX is NOT protected.\n"), (ulong)keyid[1] ); /* see whether we can access the public key of this secret key */ memset( pk, 0, sizeof *pk ); rc = get_pubkey( pk, keyid ); if( rc ) { log_info(_("key %08lX: secret key without public key - skipped\n"), (ulong)keyid[1] ); goto skip; } have_pk=1; if( cmp_public_secret_key( pk, sk ) ) { log_info(_("key %08lX: secret and public key don't match\n"), (ulong)keyid[1] ); goto skip; } /* make sure that the pubkey is in the trustdb */ rc = query_trust_record( pk ); if( rc == -1 ) { /* put it into the trustdb */ rc = insert_trust_record_by_pk( pk ); if( rc ) { log_error(_("key %08lX: can't put it into the trustdb\n"), (ulong)keyid[1] ); goto skip; } } else if( rc ) { log_error(_("key %08lX: query record failed\n"), (ulong)keyid[1] ); goto skip; } if( DBG_TRUST ) log_debug("key %08lX.%lu: stored into ultikey_table\n", (ulong)keyid[1], pk->local_id ); if( ins_lid_table_item( ultikey_table, pk->local_id, 0 ) ) log_error(_("key %08lX: already in trusted key table\n"), (ulong)keyid[1]); else if( opt.verbose > 1 ) log_info(_("key %08lX: accepted as trusted key.\n"), (ulong)keyid[1]); skip: release_secret_key_parts( sk ); if( have_pk ) release_public_key_parts( pk ); } if( rc != -1 ) log_error(_("enumerate secret keys failed: %s\n"), g10_errstr(rc) ); else rc = 0; enum_secret_keys( &enum_context, NULL, 0 ); /* free context */ free_secret_key( sk ); free_public_key( pk ); return rc; } /**************** * Perform some checks over the trustdb * level 0: only open the db * 1: used for initial program startup */ int setup_trustdb( int level, const char *dbname ) { /* just store the args */ if( trustdb_args.init ) return 0; trustdb_args.level = level; trustdb_args.dbname = dbname? m_strdup(dbname): NULL; return 0; } void init_trustdb() { int rc=0; int level = trustdb_args.level; const char* dbname = trustdb_args.dbname; if( trustdb_args.init ) return; trustdb_args.init = 1; if( !ultikey_table ) ultikey_table = new_lid_table(); if( !level || level==1 ) { rc = tdbio_set_dbname( dbname, !!level ); if( !rc ) { if( !level ) return; /* verify that our own keys are in the trustDB * or move them to the trustdb. */ rc = verify_own_keys(); /* should we check whether there is no other ultimately trusted * key in the database? */ } } else BUG(); if( rc ) log_fatal("can't init trustdb: %s\n", g10_errstr(rc) ); } /*********************************************** ************* Print helpers **************** ***********************************************/ static void print_user_id( FILE *fp, const char *text, u32 *keyid ) { char *p; size_t n; p = get_user_id( keyid, &n ); if( fp ) { fprintf( fp, "%s \"", text ); print_string( fp, p, n, 0 ); putc('\"', fp); putc('\n', fp); } else { tty_printf( "%s \"", text ); tty_print_string( p, n ); tty_printf( "\"\n" ); } m_free(p); } /**************** * This function returns a letter for a trustvalue Trust flags * are ignore. */ int trust_letter( unsigned value ) { switch( (value & TRUST_MASK) ) { case TRUST_UNKNOWN: return '-'; case TRUST_EXPIRED: return 'e'; case TRUST_UNDEFINED: return 'q'; case TRUST_NEVER: return 'n'; case TRUST_MARGINAL: return 'm'; case TRUST_FULLY: return 'f'; case TRUST_ULTIMATE: return 'u'; default: return 0 ; } } #if 0 static void print_path( int pathlen, TN ME .........., FILE *fp, ulong highlight ) { int rc, c, i; u32 keyid[2]; char *p; size_t n; for( i = 0; i < pathlen; i++ ) { if( highlight ) fputs(highlight == path[i].lid? "* ":" ", fp ); rc = keyid_from_lid( path[i].lid, keyid ); if( rc ) fprintf(fp, "????????.%lu:", path[i].lid ); else fprintf(fp,"%08lX.%lu:", (ulong)keyid[1], path[i].lid ); c = trust_letter(path[i].otrust); if( c ) putc( c, fp ); else fprintf( fp, "%02x", path[i].otrust ); putc('/', fp); c = trust_letter(path[i].trust); if( c ) putc( c, fp ); else fprintf( fp, "%02x", path[i].trust ); putc(' ', fp); p = get_user_id( keyid, &n ); putc(' ', fp); putc('\"', fp); print_string( fp, p, n > 40? 40:n, 0 ); putc('\"', fp); m_free(p); putc('\n', fp ); } } #endif static void print_default_uid( FILE *fp, ulong lid ) { u32 keyid[2]; if( !keyid_from_lid( lid, keyid ) ) print_user_id( fp, "", keyid ); } static void print_uid_from_keyblock( FILE *fp, KBNODE keyblock, ulong urecno ) { TRUSTREC urec; KBNODE node; byte uhash[20]; read_record( urecno, &urec, RECTYPE_UID ); for( node=keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *uidpkt = node->pkt->pkt.user_id; rmd160_hash_buffer( uhash, uidpkt->name, uidpkt->len ); if( !memcmp( uhash, urec.r.uid.namehash, 20 ) ) { print_string( fp, uidpkt->name, uidpkt->len, ':' ); return; } } } fputs("[?]", fp ); } static void dump_tn_tree( FILE *fp, int level, TN tree ) { TN kr, ur; for( kr=tree; kr; kr = kr->next ) { if( fp ) { fprintf( fp, "%*s", level*4, "" ); fprintf( fp, "K%lu(ot=%d,val=%d) ", kr->lid, kr->n.k.ownertrust, kr->n.k.validity ); } else { tty_printf("%*s", level*4, "" ); tty_printf("K%lu(ot=%d,val=%d) ", kr->lid, kr->n.k.ownertrust, kr->n.k.validity ); } print_default_uid( fp, kr->lid ); for( ur=kr->list; ur; ur = ur->next ) { if( fp ) { fprintf(fp, "%*s ", level*4, "" ); fprintf(fp, "U%lu(mc=%d,fc=%d,val=%d)\n", ur->lid, ur->n.u.marginal_count, ur->n.u.fully_count, ur->n.u.validity ); } else { tty_printf("%*s ", level*4, "" ); tty_printf("U%lu(mc=%d,fc=%d,val=%d)\n", ur->lid, ur->n.u.marginal_count, ur->n.u.fully_count, ur->n.u.validity ); } dump_tn_tree( fp, level+1, ur->list ); } } } /**************** * Special version of dump_tn_tree, which prints it colon delimited. * Format: * level:keyid:type:recno:ot:val:mc:cc:name: * With TYPE = U for a user ID * K for a key * The RECNO is either the one of the dir record or the one of the uid record. * OT is the the usual trust letter and only availabel on K lines. * VAL is the calcualted validity * MC is the marginal trust counter and only available on U lines * CC is the same for the complete count * NAME ist the username and only printed on U lines */ static void dump_tn_tree_with_colons( int level, TN tree ) { TN kr, ur; for( kr=tree; kr; kr = kr->next ) { KBNODE kb = NULL; u32 kid[2]; keyid_from_lid( kr->lid, kid ); get_keyblock_bylid( &kb, kr->lid ); printf( "%d:%08lX%08lX:K:%lu:%c:%c::::\n", level, (ulong)kid[0], (ulong)kid[1], kr->lid, trust_letter( kr->n.k.ownertrust ), trust_letter( kr->n.k.validity ) ); for( ur=kr->list; ur; ur = ur->next ) { printf( "%d:%08lX%08lX:U:%lu::%c:%d:%d:", level, (ulong)kid[0], (ulong)kid[1], ur->lid, trust_letter( kr->n.u.validity ), ur->n.u.marginal_count, ur->n.u.fully_count ); print_uid_from_keyblock( stdout, kb, ur->lid ); putchar(':'); putchar('\n'); dump_tn_tree_with_colons( level+1, ur->list ); } release_kbnode( kb ); } } /*********************************************** ************* trustdb maintenance *********** ***********************************************/ /**************** * Create or update shadow dir record and return the LID of the record */ static ulong create_shadow_dir( PKT_signature *sig ) { TRUSTREC sdir; int rc; /* first see whether we already have such a record */ rc = tdbio_search_sdir( sig->keyid, sig->pubkey_algo, &sdir ); if( rc && rc != -1 ) { log_error(_("tdbio_search_sdir failed: %s\n"), g10_errstr(rc)); tdbio_invalid(); } if( rc == -1 ) { /* not found: create */ memset( &sdir, 0, sizeof sdir ); sdir.recnum = tdbio_new_recnum(); sdir.rectype= RECTYPE_SDIR; sdir.r.sdir.lid = sdir.recnum; sdir.r.sdir.keyid[0] = sig->keyid[0]; sdir.r.sdir.keyid[1] = sig->keyid[1]; sdir.r.sdir.pubkey_algo = sig->pubkey_algo; write_record( &sdir ); } return sdir.recnum; } static ulong find_or_create_lid( PKT_signature *sig ) { ulong lid; lid = lid_from_keyid_no_sdir( sig->keyid ); if( !lid ) lid = create_shadow_dir( sig ); return lid; } -#if 0 -static void -upd_pref_record( TRUSTREC *urec, u32 *keyid, PKT_signature *sig ) -{ - static struct { - sigsubpkttype_t subpkttype; - int preftype; - } ptable[] = { - { SIGSUBPKT_PREF_SYM, PREFTYPE_SYM }, - { SIGSUBPKT_PREF_HASH, PREFTYPE_HASH }, - { SIGSUBPKT_PREF_COMPR, PREFTYPE_COMPR }, - { 0, 0 } - }; - TRUSTREC prec; - ulong lid = urec->r.uid.lid ; - const byte *uidhash = urec->r.uid.namehash; - const byte *s; - size_t n; - int k, i; - ulong recno; - byte prefs_sig[200]; - int n_prefs_sig = 0; - byte prefs_rec[200]; - int n_prefs_rec = 0; - - if( DBG_TRUST ) - log_debug("upd_pref_record for %08lX.%lu/%02X%02X\n", - (ulong)keyid[1], lid, uidhash[18], uidhash[19] ); - - - /* check for changed preferences */ - for(k=0; ptable[k].subpkttype; k++ ) { - s = parse_sig_subpkt2( sig, ptable[k].subpkttype, &n ); - if( s ) { - for( ; n; n--, s++ ) { - if( n_prefs_sig >= DIM(prefs_sig)-1 ) { - log_info("uid %08lX.%lu/%02X%02X: %s\n", - (ulong)keyid[1], lid, uidhash[18], uidhash[19], - _("Too many preferences") ); - break; - } - prefs_sig[n_prefs_sig++] = ptable[k].preftype; - prefs_sig[n_prefs_sig++] = *s; - } - } - } - for( recno=urec->r.uid.prefrec; recno; recno = prec.r.pref.next ) { - read_record( recno, &prec, RECTYPE_PREF ); - for(i = 0; i < ITEMS_PER_PREF_RECORD; i +=2 ) { - if( n_prefs_rec >= DIM(prefs_rec)-1 ) { - log_info("uid %08lX.%lu/%02X%02X: %s\n", - (ulong)keyid[1], lid, uidhash[18], uidhash[19], - _("Too many preference items") ); - break; - } - if( prec.r.pref.data[i] ) { - prefs_rec[n_prefs_rec++] = prec.r.pref.data[i]; - prefs_rec[n_prefs_rec++] = prec.r.pref.data[i+1]; - } - } - } - if( n_prefs_sig == n_prefs_rec - && !memcmp( prefs_sig, prefs_rec, n_prefs_sig ) ) - return; /* not changed */ - - /* Preferences have changed: Delete all pref records - * This is much simpler than checking whether we have to - * do update the record at all - the record cache may care about it - */ - for( recno=urec->r.uid.prefrec; recno; recno = prec.r.pref.next ) { - read_record( recno, &prec, RECTYPE_PREF ); - delete_record( recno ); - } - - if( n_prefs_sig > ITEMS_PER_PREF_RECORD ) - log_info(_("WARNING: can't yet handle long pref records\n")); - - memset( &prec, 0, sizeof prec ); - prec.recnum = tdbio_new_recnum(); - prec.rectype = RECTYPE_PREF; - prec.r.pref.lid = lid; - if( n_prefs_sig <= ITEMS_PER_PREF_RECORD ) - memcpy( prec.r.pref.data, prefs_sig, n_prefs_sig ); - else { /* need more than one pref record */ - TRUSTREC tmp; - ulong nextrn; - byte *pp = prefs_sig; - - n = n_prefs_sig; - memcpy( prec.r.pref.data, pp, ITEMS_PER_PREF_RECORD ); - n -= ITEMS_PER_PREF_RECORD; - pp += ITEMS_PER_PREF_RECORD; - nextrn = prec.r.pref.next = tdbio_new_recnum(); - do { - memset( &tmp, 0, sizeof tmp ); - tmp.recnum = nextrn; - tmp.rectype = RECTYPE_PREF; - tmp.r.pref.lid = lid; - if( n <= ITEMS_PER_PREF_RECORD ) { - memcpy( tmp.r.pref.data, pp, n ); - n = 0; - } - else { - memcpy( tmp.r.pref.data, pp, ITEMS_PER_PREF_RECORD ); - n -= ITEMS_PER_PREF_RECORD; - pp += ITEMS_PER_PREF_RECORD; - nextrn = tmp.r.pref.next = tdbio_new_recnum(); - } - write_record( &tmp ); - } while( n ); - } - write_record( &prec ); - urec->r.uid.prefrec = prec.recnum; - urec->dirty = 1; -} -#endif - - /**************** * Check the validity of a key and calculate the keyflags * keynode points to * a node with a [sub]key. mainkid has the key ID of the primary key * keyblock is the complete keyblock which is needed for signature * checking. LID and PK is only used in verbose mode. */ static unsigned int check_keybinding( KBNODE keyblock, KBNODE keynode, u32 *mainkid, ulong lid, PKT_public_key *pk ) { KBNODE node; int keybind_seen = 0; int revoke_seen = 0; unsigned int keyflags=0; int is_main = (keynode->pkt->pkttype == PKT_PUBLIC_KEY); int rc; if( DBG_TRUST ) log_debug("check_keybinding: %08lX.%lu\n", (ulong)mainkid[1], lid ); if( is_main ) { /* a primary key is always valid (user IDs are handled elsewhere)*/ keyflags = KEYF_CHECKED | KEYF_VALID; } for( node=keynode->next; node; node = node->next ) { PKT_signature *sig; if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) break; /* ready */ if( node->pkt->pkttype != PKT_SIGNATURE ) continue; /* don't care about other packets */ sig = node->pkt->pkt.signature; if( mainkid[0] != sig->keyid[0] || mainkid[1] != sig->keyid[1] ) continue; /* we only care about self-signatures */ if( sig->sig_class == 0x18 && !keybind_seen && !is_main ) { /* check until we find a valid keybinding */ rc = check_key_signature( keyblock, node, NULL ); if( !rc ) { if( opt.verbose ) log_info(_("key %08lX.%lu: Good subkey binding\n"), (ulong)keyid_from_pk(pk,NULL), lid ); keyflags |= KEYF_CHECKED | KEYF_VALID; } else { log_info(_( "key %08lX.%lu: Invalid subkey binding: %s\n"), (ulong)keyid_from_pk(pk,NULL), lid, g10_errstr(rc) ); keyflags |= KEYF_CHECKED; keyflags &= ~KEYF_VALID; } keybind_seen = 1; } else if( sig->sig_class == 0x20 && !revoke_seen ) { /* this is a key revocation certificate: check it */ rc = check_key_signature( keyblock, node, NULL ); if( !rc ) { if( opt.verbose ) log_info(_("key %08lX.%lu: Valid key revocation\n"), (ulong)keyid_from_pk(pk, NULL), lid ); - keyflags |= KEYF_REVOKED; /* fixme: revoke the main key too*/ + keyflags |= KEYF_REVOKED; } else { log_info(_( "key %08lX.%lu: Invalid key revocation: %s\n"), (ulong)keyid_from_pk(pk,NULL), lid, g10_errstr(rc) ); } revoke_seen = 1; } else if( sig->sig_class == 0x28 && !revoke_seen && !is_main ) { /* this is a subkey revocation certificate: check it */ - /* fixme: we should also check that the revocation - * is newer than the key (OpenPGP) */ rc = check_key_signature( keyblock, node, NULL ); if( !rc ) { if( opt.verbose ) log_info(_( "key %08lX.%lu: Valid subkey revocation\n"), (ulong)keyid_from_pk(pk,NULL), lid ); keyflags |= KEYF_REVOKED; } else { log_info(_( "key %08lX.%lu: Invalid subkey binding: %s\n"), (ulong)keyid_from_pk(pk,NULL), lid, g10_errstr(rc) ); } revoke_seen = 1; } /* Hmmm: should we handle direct key signatures here? */ } return keyflags; } static ulong -make_key_records( KBNODE keyblock, ulong lid, u32 *keyid ) +make_key_records( KBNODE keyblock, ulong lid, u32 *keyid, int *mainrev ) { TRUSTREC *krecs, **kend, *k, *k2; KBNODE node; PKT_public_key *pk; byte fpr[MAX_FINGERPRINT_LEN]; size_t fprlen; ulong keyrecno; + *mainrev = 0; krecs = NULL; kend = &krecs; for( node=keyblock; node; node = node->next ) { if( node->pkt->pkttype != PKT_PUBLIC_KEY && node->pkt->pkttype != PKT_PUBLIC_SUBKEY ) continue; pk = node->pkt->pkt.public_key; fingerprint_from_pk( pk, fpr, &fprlen ); /* create the key record */ k = m_alloc_clear( sizeof *k ); k->rectype = RECTYPE_KEY; k->r.key.lid = lid; k->r.key.pubkey_algo = pk->pubkey_algo; k->r.key.fingerprint_len = fprlen; memcpy(k->r.key.fingerprint, fpr, fprlen ); k->recnum = tdbio_new_recnum(); *kend = k; kend = &k->next; k->r.key.keyflags = check_keybinding( keyblock, node, keyid, lid, pk ); - + if( (k->r.key.keyflags & KEYF_REVOKED) + && node->pkt->pkttype == PKT_PUBLIC_KEY ) + *mainrev = 1; } keyrecno = krecs? krecs->recnum : 0; /* write the keylist and release the memory */ for( k = krecs; k ; k = k2 ) { if( k->next ) k->r.key.next = k->next->recnum; write_record( k ); k2 = k->next; m_free( k ); } return keyrecno; } /**************** * Check the validity of a user ID and calculate the uidflags - * keynode points to - * a node with a user ID. mainkid has the key ID of the primary key - * keyblock is the complete keyblock which is needed for signature - * checking. + * keynode points to a node with a user ID. + * mainkid has the key ID of the primary key, keyblock is the complete + * keyblock which is needed for signature checking. + * Returns: The uid flags and the self-signature which is considered to + * be the most current. */ static unsigned int -check_uidsigs( KBNODE keyblock, KBNODE keynode, u32 *mainkid, ulong lid ) +check_uidsigs( KBNODE keyblock, KBNODE keynode, u32 *mainkid, ulong lid, + PKT_signature **bestsig ) { KBNODE node; unsigned int uidflags = 0; PKT_signature *sig; PKT_signature *selfsig = NULL; /* the latest valid self signature */ int rc; if( DBG_TRUST ) { PKT_user_id *uid; log_debug("check_uidsigs: %08lX.%lu \"", (ulong)mainkid[1], lid ); assert(keynode->pkt->pkttype == PKT_USER_ID ); uid = keynode->pkt->pkt.user_id; print_string( log_stream(), uid->name, uid->len, '\"' ); fputs("\"\n", log_stream()); } /* first we check only the selfsignatures */ for( node=keynode->next; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) break; /* ready */ if( node->pkt->pkttype != PKT_SIGNATURE ) continue; /* don't care about other packets */ sig = node->pkt->pkt.signature; if( mainkid[0] != sig->keyid[0] || mainkid[1] != sig->keyid[1] ) continue; /* we only care about self-signatures for now */ if( (sig->sig_class&~3) == 0x10 ) { /* regular self signature */ rc = check_key_signature( keyblock, node, NULL ); if( !rc ) { if( opt.verbose ) log_info( "uid %08lX.%lu: %s\n", (ulong)mainkid[1], lid, _("Good self-signature") ); uidflags |= UIDF_CHECKED | UIDF_VALID; if( !selfsig ) selfsig = sig; /* use the first valid sig */ else if( sig->timestamp > selfsig->timestamp && sig->sig_class >= selfsig->sig_class ) selfsig = sig; /* but this one is newer */ } else { log_info( "uid %08lX: %s: %s\n", (ulong)mainkid[1], _("Invalid self-signature"), g10_errstr(rc) ); uidflags |= UIDF_CHECKED; } } } /* and now check for revocations - we must do this after the * self signature check because a self-signature which is newer * than a revocation makes the revocation invalid. - * Fixme: Is this correct - check with rfc2440 */ + * RFC2440 is quiet about tis but I feel this is reasonable for + * non-primary-key revocations. */ for( node=keynode->next; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) break; /* ready */ if( node->pkt->pkttype != PKT_SIGNATURE ) continue; /* don't care about other packets */ sig = node->pkt->pkt.signature; if( mainkid[0] != sig->keyid[0] || mainkid[1] != sig->keyid[1] ) continue; /* we only care about self-signatures for now */ if( sig->sig_class == 0x30 ) { /* cert revocation */ rc = check_key_signature( keyblock, node, NULL ); if( !rc && selfsig && selfsig->timestamp > sig->timestamp ) { log_info( "uid %08lX.%lu: %s\n", (ulong)mainkid[1], lid, _("Valid user ID revocation skipped " "due to a newer self signature") ); } else if( !rc ) { if( opt.verbose ) log_info( "uid %08lX.%lu: %s\n", (ulong)mainkid[1], lid, _("Valid user ID revocation") ); uidflags |= UIDF_CHECKED | UIDF_VALID | UIDF_REVOKED; } else { log_info("uid %08lX: %s: %s\n", (ulong)mainkid[1], _("Invalid user ID revocation"), g10_errstr(rc) ); } } } - + *bestsig = selfsig; return uidflags; } static unsigned int check_sig_record( KBNODE keyblock, KBNODE signode, ulong siglid, int sigidx, u32 *keyid, ulong lid, u32 *r_expire ) { PKT_signature *sig = signode->pkt->pkt.signature; unsigned int sigflag = 0; TRUSTREC tmp; int revocation=0, rc; if( DBG_TRUST ) log_debug("check_sig_record: %08lX.%lu %lu[%d]\n", (ulong)keyid[1], lid, siglid, sigidx ); *r_expire = 0; if( (sig->sig_class&~3) == 0x10 ) /* regular certification */ ; else if( sig->sig_class == 0x30 ) /* cert revocation */ revocation = 1; else return SIGF_CHECKED | SIGF_IGNORED; read_record( siglid, &tmp, 0 ); if( tmp.rectype == RECTYPE_DIR ) { /* the public key is in the trustdb: check sig */ rc = check_key_signature2( keyblock, signode, NULL, r_expire ); if( !rc ) { /* valid signature */ if( opt.verbose ) log_info("sig %08lX.%lu/%lu[%d]/%08lX: %s\n", (ulong)keyid[1], lid, siglid, sigidx, (ulong)sig->keyid[1], revocation? _("Valid certificate revocation") : _("Good certificate") ); sigflag |= SIGF_CHECKED | SIGF_VALID; if( revocation ) { sigflag |= SIGF_REVOKED; /**mod_down = 1;*/ } else /**mod_up = 1*/; } else if( rc == G10ERR_NO_PUBKEY ) { /* This may happen if the key is still in the trustdb * but not available in the keystorage */ sigflag |= SIGF_NOPUBKEY; /**mod_down = 1;*/ if( revocation ) sigflag |= SIGF_REVOKED; } else { log_info("sig %08lX.%lu/%lu[%d]/%08lX: %s: %s\n", (ulong)keyid[1], lid, siglid, sigidx, (ulong)sig->keyid[1], revocation? _("Invalid certificate revocation") : _("Invalid certificate"), g10_errstr(rc)); sigflag |= SIGF_CHECKED; if( revocation ) { sigflag |= SIGF_REVOKED; /**mod_down = 1;*/ } } } else if( tmp.rectype == RECTYPE_SDIR ) { /* better check that it is the right one */ if( tmp.r.sdir.keyid[0] == sig->keyid[0] && tmp.r.sdir.keyid[1] == sig->keyid[1] && (!tmp.r.sdir.pubkey_algo || tmp.r.sdir.pubkey_algo == sig->pubkey_algo )) sigflag |= SIGF_NOPUBKEY; else log_error(_("sig record %lu[%d] points to wrong record.\n"), siglid, sigidx ); } else { log_error(_("sig record %lu[%d] points to wrong record.\n"), siglid, sigidx ); tdbio_invalid(); } return sigflag; } /**************** * Make the sig records for the given uid record * We don't set flags here or even check the signatures; this will * happen latter. */ static ulong make_sig_records( KBNODE keyblock, KBNODE uidnode, ulong lid, u32 *mainkid, u32 *min_expire ) { TRUSTREC *srecs, **s_end, *s=NULL, *s2; KBNODE node; PKT_signature *sig; ulong sigrecno, siglid; int i, sigidx = 0; u32 expire; srecs = NULL; s_end = &srecs; for( node=uidnode->next; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) break; /* ready */ if( node->pkt->pkttype != PKT_SIGNATURE ) continue; /* don't care about other packets */ sig = node->pkt->pkt.signature; if( mainkid[0] == sig->keyid[0] && mainkid[1] == sig->keyid[1] ) continue; /* we don't care about self-signatures here */ siglid = find_or_create_lid( sig ); /* smash dups */ for( s2 = s; s2 ; s2 = s2->next ) { for(i=0; i < sigidx; i++ ) { if( s2->r.sig.sig[i].lid == siglid ) goto leaveduptest; } } for( s2 = srecs; s2 ; s2 = s2->next ) { for(i=0; i < SIGS_PER_RECORD; i++ ) { if( s2->r.sig.sig[i].lid == siglid ) goto leaveduptest; } } leaveduptest: if( s2 ) { log_info( "sig %08lX.%lu: %s\n", (ulong)mainkid[1], lid, _("duplicated certificate - deleted") ); continue; } /* create the sig record */ if( !sigidx ) { s = m_alloc_clear( sizeof *s ); s->rectype = RECTYPE_SIG; s->r.sig.lid = lid; } s->r.sig.sig[sigidx].lid = siglid; s->r.sig.sig[sigidx].flag= check_sig_record( keyblock, node, siglid, sigidx, mainkid, lid, &expire ); sigidx++; if( sigidx == SIGS_PER_RECORD ) { s->recnum = tdbio_new_recnum(); *s_end = s; s_end = &s->next; sigidx = 0; } /* keep track of signers pk expire time */ if( expire && (!*min_expire || *min_expire > expire ) ) *min_expire = expire; } if( sigidx ) { s->recnum = tdbio_new_recnum(); *s_end = s; s_end = &s->next; } sigrecno = srecs? srecs->recnum : 0; /* write the keylist and release the memory */ for( s = srecs; s ; s = s2 ) { if( s->next ) s->r.sig.next = s->next->recnum; write_record( s ); s2 = s->next; m_free( s ); } return sigrecno; } + +/**************** + * Make a preference record (or a list of them) according to the supplied + * signature. + * Returns: The record number of the first pref record. + */ +static ulong +make_pref_record( PKT_signature *sig, ulong lid ) +{ + static struct { + sigsubpkttype_t subpkttype; + int preftype; + } ptable[] = { + { SIGSUBPKT_PREF_SYM, PREFTYPE_SYM }, + { SIGSUBPKT_PREF_HASH, PREFTYPE_HASH }, + { SIGSUBPKT_PREF_COMPR, PREFTYPE_COMPR }, + { 0, 0 } + }; + TRUSTREC *precs, **p_end, *p=NULL, *p2; + ulong precno; + int k, idx=0; + const byte *s; + size_t n; + + #if (ITEMS_PER_PREF_RECORD % 2) != 0 + #error ITEMS_PER_PREF_RECORD must have an even value + #endif + + precs = NULL; p_end = &precs; + for(k=0; ptable[k].subpkttype; k++ ) { + s = parse_sig_subpkt2( sig, ptable[k].subpkttype, &n ); + if( !s ) + continue; + for( ; n; n--, s++ ) { + if( !idx ) { + p = m_alloc_clear( sizeof *p ); + p->rectype = RECTYPE_PREF; + p->r.pref.lid = lid; + } + p->r.pref.data[idx++] = ptable[k].preftype; + p->r.pref.data[idx++] = *s; + if( idx >= ITEMS_PER_PREF_RECORD ) { + p->recnum = tdbio_new_recnum(); + *p_end = p; + p_end = &p->next; + idx = 0; + } + } + } + if( idx ) { + p->recnum = tdbio_new_recnum(); + *p_end = p; + p_end = &p->next; + } + + precno = precs? precs->recnum : 0; + /* write the precs and release the memory */ + for( p = precs; p ; p = p2 ) { + if( p->next ) + p->r.pref.next = p->next->recnum; + write_record( p ); + p2 = p->next; + m_free( p ); + } + return precno; +} + + static ulong make_uid_records( KBNODE keyblock, ulong lid, u32 *keyid, u32 *min_expire ) { TRUSTREC *urecs, **uend, *u, *u2; KBNODE node; PKT_user_id *uid; byte uidhash[20]; ulong uidrecno; urecs = NULL; uend = &urecs; for( node=keyblock; node; node = node->next ) { + PKT_signature *bestsig; + if( node->pkt->pkttype != PKT_USER_ID ) continue; uid = node->pkt->pkt.user_id; rmd160_hash_buffer( uidhash, uid->name, uid->len ); /* create the uid record */ u = m_alloc_clear( sizeof *u ); u->rectype = RECTYPE_UID; u->r.uid.lid = lid; memcpy(u->r.uid.namehash, uidhash, 20 ); u->recnum = tdbio_new_recnum(); *uend = u; uend = &u->next; - u->r.uid.uidflags = check_uidsigs( keyblock, node, keyid, lid ); + u->r.uid.uidflags = check_uidsigs( keyblock, node, keyid, + lid, &bestsig ); if( (u->r.uid.uidflags & UIDF_CHECKED) - && (u->r.uid.uidflags & UIDF_VALID) ) - /*make_pref_record( &urec, keyid, selfsig )*/; + && (u->r.uid.uidflags & UIDF_VALID) ) { + u->r.uid.prefrec = bestsig? make_pref_record( bestsig, lid ) : 0; + } /* create the list of signatures */ u->r.uid.siglist = make_sig_records( keyblock, node, lid, keyid, min_expire ); } uidrecno = urecs? urecs->recnum : 0; /* write the uidlist and release the memory */ for( u = urecs; u ; u = u2 ) { if( u->next ) u->r.uid.next = u->next->recnum; write_record( u ); u2 = u->next; m_free( u ); } return uidrecno; } /**************** * Update all the info from the public keyblock. * The key must already exist in the keydb. */ int update_trust_record( KBNODE keyblock, int recheck, int *modified ) { - PKT_public_key *primary_pk; - KBNODE node; - TRUSTREC drec, krec, urec, prec, helprec; - int rc = 0; - u32 keyid[2]; /* keyid of primary key */ -/* int mod_up = 0; - int mod_down = 0; */ - ulong recno, r2; - u32 expire; + TRUSTREC drec; + int rc; if( opt.dry_run ) return 0; - - init_trustdb(); if( modified ) *modified = 0; - - node = find_kbnode( keyblock, PKT_PUBLIC_KEY ); - primary_pk = node->pkt->pkt.public_key; - rc = get_dir_record( primary_pk, &drec ); + init_trustdb(); + rc = get_dir_record( find_kbnode( keyblock, PKT_PUBLIC_KEY ) + ->pkt->pkt.public_key, &drec ); if( rc ) return rc; + + rc = do_update_trust_record( keyblock, &drec, recheck, modified ); + return rc; +} + +/**************** + * Same as update_trust_record, but tghis functions expects the dir record. + * On exit the dirrecord will reflect any changes made. + */ +static int +do_update_trust_record( KBNODE keyblock, TRUSTREC *drec, + int recheck, int *modified ) +{ + PKT_public_key *primary_pk; + TRUSTREC krec, urec, prec, helprec; + int i, rc = 0; + u32 keyid[2]; /* keyid of primary key */ +/* int mod_up = 0; + int mod_down = 0; */ + ulong recno, r2; + u32 expire; + + primary_pk = find_kbnode( keyblock, PKT_PUBLIC_KEY )->pkt->pkt.public_key; if( !primary_pk->local_id ) - primary_pk->local_id = drec.recnum; + primary_pk->local_id = drec->recnum; keyid_from_pk( primary_pk, keyid ); if( DBG_TRUST ) - log_debug("update_trust_record: %08lX.%lu\n", (ulong)keyid[1], drec.recnum ); + log_debug("do_update_trust_record: %08lX.%lu\n", + (ulong)keyid[1], drec->recnum ); rc = tdbio_begin_transaction(); if( rc ) return rc; /* delete the old stuff */ - for( recno=drec.r.dir.keylist; recno; recno = krec.r.key.next ) { + for( recno=drec->r.dir.keylist; recno; recno = krec.r.key.next ) { read_record( recno, &krec, RECTYPE_KEY ); delete_record( recno ); } - drec.r.dir.keylist = 0; - for( recno=drec.r.dir.uidlist; recno; recno = urec.r.uid.next ) { + drec->r.dir.keylist = 0; + for( recno=drec->r.dir.uidlist; recno; recno = urec.r.uid.next ) { read_record( recno, &urec, RECTYPE_UID ); for(r2=urec.r.uid.prefrec ; r2; r2 = prec.r.pref.next ) { read_record( r2, &prec, RECTYPE_PREF ); delete_record( r2 ); } for(r2=urec.r.uid.siglist ; r2; r2 = helprec.r.sig.next ) { read_record( r2, &helprec, RECTYPE_SIG ); delete_record( r2 ); } delete_record( recno ); } - drec.r.dir.uidlist = 0; + drec->r.dir.uidlist = 0; /* insert new stuff */ - drec.r.dir.dirflags &= ~DIRF_REVOKED; - drec.r.dir.keylist = make_key_records( keyblock, drec.recnum, keyid ); + drec->r.dir.dirflags &= ~DIRF_REVOKED; + drec->r.dir.keylist = make_key_records( keyblock, drec->recnum, keyid, &i ); + if( i ) /* primary key has been revoked */ + drec->r.dir.dirflags &= DIRF_REVOKED; expire = 0; - drec.r.dir.uidlist = make_uid_records( keyblock, drec.recnum, keyid, - &expire ); + drec->r.dir.uidlist = make_uid_records( keyblock, drec->recnum, keyid, + &expire ); #if 0 if( orig_uidflags != urec.r.uid.uidflags ) { write_record( &urec ); if( !( urec.r.uid.uidflags & UIDF_VALID ) || ( urec.r.uid.uidflags & UIDF_REVOKED ) ) *mod_down=1; else *mod_up=1; /*(maybe a new user id)*/ #endif - /* FIXME: if the primary key has been revoked, we should - set the revoked flag in the dir records */ - if( rc ) rc = tdbio_cancel_transaction(); else { if( modified && tdbio_is_dirty() ) *modified = 1; - drec.r.dir.dirflags |= DIRF_CHECKED; - drec.r.dir.valcheck = 0; - drec.r.dir.checkat = expire; - write_record( &drec ); + drec->r.dir.dirflags |= DIRF_CHECKED; + drec->r.dir.valcheck = 0; + drec->r.dir.checkat = expire; + write_record( drec ); /*tdbio_write_modify_stamp( mod_up, mod_down );*/ rc = tdbio_end_transaction(); } return rc; } /**************** * Insert a trust record into the TrustDB * This function assumes that the record does not yet exist. */ int insert_trust_record( KBNODE keyblock ) { TRUSTREC dirrec; TRUSTREC shadow; KBNODE node; int rc = 0; PKT_public_key *pk; if( opt.dry_run ) return 0; init_trustdb(); pk = find_kbnode( keyblock, PKT_PUBLIC_KEY )->pkt->pkt.public_key; if( pk->local_id ) { log_debug("insert_trust_record with pk->local_id=%lu (2)\n", pk->local_id ); rc = update_trust_record( keyblock, 1, NULL ); return rc; } /* We have to look for a shadow dir record which must be reused * as the dir record. */ rc = tdbio_search_sdir( pk->keyid, pk->pubkey_algo, &shadow ); if( rc && rc != -1 ) { log_error(_("tdbio_search_dir failed: %s\n"), g10_errstr(rc)); tdbio_invalid(); } memset( &dirrec, 0, sizeof dirrec ); dirrec.rectype = RECTYPE_DIR; if( !rc ) /* we have a shadow dir record - convert to dir record */ dirrec.recnum = shadow.recnum; else dirrec.recnum = tdbio_new_recnum(); dirrec.r.dir.lid = dirrec.recnum; write_record( &dirrec ); /* put the LID into the keyblock */ pk->local_id = dirrec.r.dir.lid; for( node=keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_KEY || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { PKT_public_key *a_pk = node->pkt->pkt.public_key; a_pk->local_id = dirrec.r.dir.lid; } else if( node->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *a_sig = node->pkt->pkt.signature; a_sig->local_id = dirrec.r.dir.lid; } } /* mark tdb as modified upwards */ tdbio_write_modify_stamp( 1, 0 ); /* and put all the other stuff into the keydb */ - rc = update_trust_record( keyblock, 1, NULL ); + rc = do_update_trust_record( keyblock, &dirrec, 1, NULL ); do_sync(); return rc; } /**************** * Insert a trust record indentified by a PK into the TrustDB */ int insert_trust_record_by_pk( PKT_public_key *pk ) { KBNODE keyblock = NULL; byte fingerprint[MAX_FINGERPRINT_LEN]; size_t fingerlen; int rc; /* get the keyblock */ fingerprint_from_pk( pk, fingerprint, &fingerlen ); rc = get_keyblock_byfprint( &keyblock, fingerprint, fingerlen ); if( rc ) { /* that should never happen */ log_debug( "insert_trust_record_by_pk: keyblock not found: %s\n", g10_errstr(rc) ); } else { rc = insert_trust_record( keyblock ); if( !rc ) /* copy the LID into the PK */ pk->local_id = find_kbnode( keyblock, PKT_PUBLIC_KEY ) ->pkt->pkt.public_key->local_id; } release_kbnode( keyblock ); return rc; } +/**************** + * Check one trust record. This function is called for every + * directory record which is to be checked. The supplied + * dir record is modified according to the performed actions. + * Currently we only do an update_trust_record. + */ +static int +check_trust_record( TRUSTREC *drec ) +{ + KBNODE keyblock; + int modified, rc; + + rc = get_keyblock_bylid( &keyblock, drec->recnum ); + if( rc ) { + log_debug( "check_trust_record %lu: keyblock not found: %s\n", + drec->recnum, g10_errstr(rc) ); + return rc; + } + + rc = do_update_trust_record( keyblock, drec, 0, &modified ); + release_kbnode( keyblock ); + + return rc; +} + /**************** * Walk over the keyrings and create trustdb records for all keys + * which are not currently in the trustdb. * It is intended to be used after a fast-import operation. */ void update_trustdb() { KBNODE keyblock = NULL; KBPOS kbpos; int rc; if( opt.dry_run ) return; init_trustdb(); rc = enum_keyblocks( 0, &kbpos, &keyblock ); if( !rc ) { - ulong count=0, upd_count=0, err_count=0, new_count=0; + ulong count=0, err_count=0, new_count=0; while( !(rc = enum_keyblocks( 1, &kbpos, &keyblock )) ) { int modified; + TRUSTREC drec; + PKT_public_key *pk = find_kbnode( keyblock, PKT_PUBLIC_KEY ) + ->pkt->pkt.public_key; - rc = update_trust_record( keyblock, 1, &modified ); - if( rc == -1 ) { /* not yet in trustdb: insert */ - PKT_public_key *pk; + rc = get_dir_record( pk, &drec ); + if( rc == -1 ) { /* not in trustdb: insert */ rc = insert_trust_record( keyblock ); - pk = keyblock->pkt->pkt.public_key; if( rc && !pk->local_id ) { log_error(_("lid ?: insert failed: %s\n"), g10_errstr(rc) ); err_count++; } else if( rc ) { log_error(_("lid %lu: insert failed: %s\n"), pk->local_id, g10_errstr(rc) ); err_count++; } else { if( opt.verbose ) log_info(_("lid %lu: inserted\n"), pk->local_id ); new_count++; } } else if( rc ) { - log_error(_("lid %lu: update failed: %s\n"), - lid_from_keyblock(keyblock), g10_errstr(rc) ); + log_error(_("error reading dir record: %s\n"), g10_errstr(rc)); err_count++; } - else if( modified ) { - if( opt.verbose ) - log_info(_("lid %lu: updated\n"), - lid_from_keyblock(keyblock)); - upd_count++; - } - else if( opt.verbose > 1 ) - log_info(_("lid %lu: okay\n"), lid_from_keyblock(keyblock) ); release_kbnode( keyblock ); keyblock = NULL; if( !(++count % 100) ) log_info(_("%lu keys so far processed\n"), count); } log_info(_("%lu keys processed\n"), count); if( err_count ) log_info(_("\t%lu keys with errors\n"), err_count); - if( upd_count ) - log_info(_("\t%lu keys updated\n"), upd_count); if( new_count ) log_info(_("\t%lu keys inserted\n"), new_count); } if( rc && rc != -1 ) log_error(_("enumerate keyblocks failed: %s\n"), g10_errstr(rc)); enum_keyblocks( 2, &kbpos, &keyblock ); /* close */ release_kbnode( keyblock ); } /**************** * Do all required check in the trustdb. This function walks over all * records in the trustdb and does scheduled processing. */ void check_trustdb( const char *username ) { TRUSTREC rec; ulong recnum; ulong count=0, upd_count=0, err_count=0, skip_count=0; ulong current_time = make_timestamp(); if( username ) log_info("given user IDs ignored in check_trustdb\n"); init_trustdb(); for(recnum=0; !tdbio_read_record( recnum, &rec, 0); recnum++ ) { if( rec.rectype != RECTYPE_DIR ) continue; /* we only want the dir records */ if( count && !(count % 100) && !opt.quiet ) log_info(_("%lu keys so far processed\n"), count); count++; if( !rec.r.dir.checkat || rec.r.dir.checkat > current_time ) { skip_count++; continue; /* not scheduled for checking */ } if( !rec.r.dir.keylist ) { log_info(_("lid %lu: dir record w/o key - skipped\n"), recnum); skip_count++; continue; } + check_trust_record( &rec ); + } log_info(_("%lu keys processed\n"), count); if( skip_count ) log_info(_("\t%lu keys skipped\n"), skip_count); if( err_count ) log_info(_("\t%lu keys with errors\n"), err_count); if( upd_count ) log_info(_("\t%lu keys updated\n"), upd_count); } /*********************************************** ********* Trust calculation ***************** ***********************************************/ /**************** * Find all certification paths of a given LID. * Limit the search to MAX_DEPTH. stack is a helper variable which * should have been allocated with size max_depth, stack[0] should * be setup to the key we are investigating, so the minimal depth * we should ever see in this function is 1. * Returns: a new tree * certchain_set must be a valid set or point to NULL; this function * may modifiy it. * - * Fixme: add a fastscan mode which stops ad valid validity nodes. + * Hmmm: add a fastscan mode which stops at valid validity nodes. */ static TN build_cert_tree( ulong lid, int depth, int max_depth, TN helproot ) { TRUSTREC dirrec; TRUSTREC uidrec; ulong uidrno; TN keynode; if( depth >= max_depth ) return NULL; keynode = new_tn(); if( !helproot ) helproot = keynode; keynode->lid = lid; if( !qry_lid_table_flag( ultikey_table, lid, NULL ) ) { /* this is an ultimately trusted key; * which means that we have found the end of the chain: * We do this here prior to reading the dir record * because we don't really need the info from that record */ keynode->n.k.ownertrust = TRUST_ULTIMATE; keynode->n.k.buckstop = 1; return keynode; } read_record( lid, &dirrec, 0 ); if( dirrec.rectype != RECTYPE_DIR ) { if( dirrec.rectype != RECTYPE_SDIR ) log_debug("lid %lu, has rectype %d" " - skipped\n", lid, dirrec.rectype ); m_free(keynode); return NULL; } + + if( dirrec.r.dir.checkat && dirrec.r.dir.checkat <= make_timestamp() ) + check_trust_record( &dirrec ); + keynode->n.k.ownertrust = dirrec.r.dir.ownertrust & TRUST_MASK; /* loop over all user ids */ for( uidrno = dirrec.r.dir.uidlist; uidrno; uidrno = uidrec.r.uid.next ) { TRUSTREC sigrec; ulong sigrno; TN uidnode = NULL; read_record( uidrno, &uidrec, RECTYPE_UID ); if( !(uidrec.r.uid.uidflags & UIDF_CHECKED) ) continue; /* user id has not been checked */ if( !(uidrec.r.uid.uidflags & UIDF_VALID) ) continue; /* user id is not valid */ if( (uidrec.r.uid.uidflags & UIDF_REVOKED) ) continue; /* user id has been revoked */ /* loop over all signature records */ for(sigrno=uidrec.r.uid.siglist; sigrno; sigrno = sigrec.r.sig.next ) { int i; TN tn; read_record( sigrno, &sigrec, RECTYPE_SIG ); for(i=0; i < SIGS_PER_RECORD; i++ ) { if( !sigrec.r.sig.sig[i].lid ) continue; /* skip deleted sigs */ if( !(sigrec.r.sig.sig[i].flag & SIGF_CHECKED) ) continue; /* skip unchecked signatures */ if( !(sigrec.r.sig.sig[i].flag & SIGF_VALID) ) continue; /* skip invalid signatures */ if( (sigrec.r.sig.sig[i].flag & SIGF_EXPIRED) ) continue; /* skip expired signatures */ if( (sigrec.r.sig.sig[i].flag & SIGF_REVOKED) ) continue; /* skip revoked signatures */ /* check for cycles */ for( tn=keynode; tn && tn->lid != sigrec.r.sig.sig[i].lid; tn = tn->back ) ; if( tn ) continue; /* cycle found */ tn = build_cert_tree( sigrec.r.sig.sig[i].lid, depth+1, max_depth, helproot ); if( !tn ) continue; /* cert chain too deep or error */ if( !uidnode ) { uidnode = new_tn(); uidnode->back = keynode; uidnode->lid = uidrno; uidnode->is_uid = 1; uidnode->next = keynode->list; keynode->list = uidnode; } tn->back = uidnode; tn->next = uidnode->list; uidnode->list = tn; - #if 0 /* optimazation - fixme: reenable this later */ if( tn->n.k.buckstop ) { /* ultimately trusted key found: * no need to check more signatures of this uid */ sigrec.r.sig.next = 0; break; } - #endif } } /* end loop over sig recs */ } /* end loop over user ids */ if( !keynode->list ) { release_tn_tree( keynode ); keynode = NULL; } return keynode; } static void upd_one_ownertrust( ulong lid, unsigned new_trust, unsigned *retflgs ) { TRUSTREC rec; read_record( lid, &rec, RECTYPE_DIR ); if( DBG_TRUST ) log_debug("upd_one_ownertrust of %lu from %u to %u\n", lid, (unsigned)rec.r.dir.ownertrust, new_trust ); if( retflgs ) { if( (new_trust & TRUST_MASK) > (rec.r.dir.ownertrust & TRUST_MASK) ) *retflgs |= 16; /* modified up */ else *retflgs |= 32; /* modified down */ } /* we preserve the disabled state here */ if( (rec.r.dir.ownertrust & TRUST_FLAG_DISABLED) ) rec.r.dir.ownertrust = new_trust | TRUST_FLAG_DISABLED; else rec.r.dir.ownertrust = new_trust & ~TRUST_FLAG_DISABLED; write_record( &rec ); } /**************** * Update the ownertrust in the complete tree. */ static void propagate_ownertrust( TN kr, ulong lid, unsigned trust ) { TN ur; for( ; kr; kr = kr->next ) { if( kr->lid == lid ) kr->n.k.ownertrust = trust; for( ur=kr->list; ur; ur = ur->next ) propagate_ownertrust( ur->list, lid, trust ); } } /**************** * Calculate the validity of all keys in the tree and especially * the one of the top key. If add_fnc is not NULL, it is used to * ask for missing ownertrust values (but only if this will help * us to increase the validity. * add_fnc is expected to take the LID of the key under question * and return a ownertrust value or an error: positive values * are assumed to be the new ownertrust value; a 0 does mean no change, * a -1 is a request to cancel this validation procedure, a -2 requests * a listing of the sub-tree using the tty functions. * * * Returns: 0 = okay */ static int propagate_validity( TN root, TN node, int (*add_fnc)(ulong), unsigned *retflgs ) { TN kr, ur; int max_validity = 0; assert( !node->is_uid ); if( node->n.k.ownertrust == TRUST_ULTIMATE ) { /* this is one of our keys */ assert( !node->list ); /* it should be a leaf */ node->n.k.validity = TRUST_ULTIMATE; if( retflgs ) *retflgs |= 1; /* found a path to an ultimately trusted key */ return 0; } /* loop over all user ids */ - for( ur=node->list; ur; ur = ur->next ) { + for( ur=node->list; ur && max_validity < TRUST_FULLY; ur = ur->next ) { assert( ur->is_uid ); /* loop over all signators */ - for(kr=ur->list; kr; kr = kr->next ) { + for(kr=ur->list; kr && max_validity < TRUST_FULLY; kr = kr->next ) { if( propagate_validity( root, kr, add_fnc, retflgs ) ) return -1; /* quit */ if( kr->n.k.validity == TRUST_ULTIMATE ) { ur->n.u.fully_count = opt.completes_needed; } else if( kr->n.k.validity == TRUST_FULLY ) { if( add_fnc && !kr->n.k.ownertrust ) { int rc; if( retflgs ) *retflgs |= 2; /* found key with undefined ownertrust*/ do { rc = add_fnc( kr->lid ); switch( rc ) { case TRUST_NEVER: case TRUST_MARGINAL: case TRUST_FULLY: propagate_ownertrust( root, kr->lid, rc ); upd_one_ownertrust( kr->lid, rc, retflgs ); if( retflgs ) *retflgs |= 4; /* changed */ break; case -1: return -1; /* cancel */ case -2: dump_tn_tree( NULL, 0, kr ); tty_printf("\n"); break; default: break; } } while( rc == -2 ); } if( kr->n.k.ownertrust == TRUST_FULLY ) ur->n.u.fully_count++; else if( kr->n.k.ownertrust == TRUST_MARGINAL ) ur->n.u.marginal_count++; } - } - /* fixme: We can move this test into the loop to stop as soon as - * we have a level of FULLY and return from this function - * We dont do this now to get better debug output */ - if( ur->n.u.fully_count >= opt.completes_needed - || ur->n.u.marginal_count >= opt.marginals_needed ) - ur->n.u.validity = TRUST_FULLY; - else if( ur->n.u.fully_count || ur->n.u.marginal_count ) - ur->n.u.validity = TRUST_MARGINAL; - if( ur->n.u.validity >= max_validity ) - max_validity = ur->n.u.validity; + if( ur->n.u.fully_count >= opt.completes_needed + || ur->n.u.marginal_count >= opt.marginals_needed ) + ur->n.u.validity = TRUST_FULLY; + else if( ur->n.u.fully_count || ur->n.u.marginal_count ) + ur->n.u.validity = TRUST_MARGINAL; + + if( ur->n.u.validity >= max_validity ) + max_validity = ur->n.u.validity; + } } node->n.k.validity = max_validity; return 0; } /**************** * Given the directory record of a key, check whether we can * find a path to an ultimately trusted key. We do this by * checking all key signatures up to a some depth. */ static int verify_key( int max_depth, TRUSTREC *drec, const char *namehash, int (*add_fnc)(ulong), unsigned *retflgs ) { TN tree; int keytrust; int pv_result; tree = build_cert_tree( drec->r.dir.lid, 0, opt.max_cert_depth, NULL ); if( !tree ) return TRUST_UNDEFINED; pv_result = propagate_validity( tree, tree, add_fnc, retflgs ); if( namehash ) { /* find the matching user id. * fixme: the way we handle this is too inefficient */ TN ur; TRUSTREC rec; keytrust = 0; for( ur=tree->list; ur; ur = ur->next ) { read_record( ur->lid, &rec, RECTYPE_UID ); if( !memcmp( namehash, rec.r.uid.namehash, 20 ) ) { keytrust = ur->n.u.validity; break; } } } else keytrust = tree->n.k.validity; /* update the cached validity values */ if( !pv_result && keytrust >= TRUST_UNDEFINED && tdbio_db_matches_options() && ( !drec->r.dir.valcheck || drec->r.dir.validity != keytrust ) ) { TN ur; TRUSTREC rec; for( ur=tree->list; ur; ur = ur->next ) { read_record( ur->lid, &rec, RECTYPE_UID ); if( rec.r.uid.validity != ur->n.u.validity ) { rec.r.uid.validity = ur->n.u.validity; write_record( &rec ); } } drec->r.dir.validity = tree->n.k.validity; drec->r.dir.valcheck = make_timestamp(); write_record( drec ); do_sync(); } release_tn_tree( tree ); return keytrust; } /**************** * we have the pubkey record and all needed informations are in the trustdb * but nothing more is known. */ static int do_check( TRUSTREC *dr, unsigned *validity, const char *namehash, int (*add_fnc)(ulong), unsigned *retflgs ) { if( !dr->r.dir.keylist ) { log_error(_("Ooops, no keys\n")); return G10ERR_TRUSTDB; } if( !dr->r.dir.uidlist ) { log_error(_("Ooops, no user ids\n")); return G10ERR_TRUSTDB; } if( retflgs ) *retflgs &= ~(16|32); /* reset the 2 special flags */ if( (dr->r.dir.ownertrust & TRUST_FLAG_DISABLED) ) *validity = 0; /* no need to check further */ else if( namehash ) { - /* Fixme: use the cache */ + /* Fixme: use a cache */ *validity = verify_key( opt.max_cert_depth, dr, namehash, add_fnc, retflgs ); } else if( !add_fnc && tdbio_db_matches_options() && dr->r.dir.valcheck > tdbio_read_modify_stamp( (dr->r.dir.validity < TRUST_FULLY) ) && dr->r.dir.validity ) *validity = dr->r.dir.validity; else *validity = verify_key( opt.max_cert_depth, dr, NULL, add_fnc, retflgs ); if( !(*validity & TRUST_MASK) ) *validity = TRUST_UNDEFINED; if( (dr->r.dir.ownertrust & TRUST_FLAG_DISABLED) ) *validity |= TRUST_FLAG_DISABLED; if( dr->r.dir.dirflags & DIRF_REVOKED ) *validity |= TRUST_FLAG_REVOKED; /* If we have changed some ownertrusts, set the trustdb timestamps * and do a sync */ if( retflgs && (*retflgs & (16|32)) ) { tdbio_write_modify_stamp( (*retflgs & 16), (*retflgs & 32) ); do_sync(); } return 0; } /*********************************************** ********* Change trustdb values ************** ***********************************************/ int update_ownertrust( ulong lid, unsigned new_trust ) { TRUSTREC rec; init_trustdb(); read_record( lid, &rec, RECTYPE_DIR ); if( DBG_TRUST ) log_debug("update_ownertrust of %lu from %u to %u\n", lid, (unsigned)rec.r.dir.ownertrust, new_trust ); rec.r.dir.ownertrust = new_trust; write_record( &rec ); do_sync(); return 0; } int clear_trust_checked_flag( PKT_public_key *pk ) { TRUSTREC rec; int rc; if( opt.dry_run ) return 0; init_trustdb(); rc = get_dir_record( pk, &rec ); if( rc ) return rc; /* check whether they are already reset */ if( !(rec.r.dir.dirflags & DIRF_CHECKED) && !rec.r.dir.valcheck ) return 0; /* reset the flag */ rec.r.dir.dirflags &= ~DIRF_CHECKED; rec.r.dir.valcheck = 0; write_record( &rec ); do_sync(); return 0; } /*********************************************** ********* Query trustdb values ************** ***********************************************/ /**************** * This function simply looks for the key in the trustdb * and makes sure that pk->local_id is set to the correct value. * Return: 0 = found * -1 = not found * other = error */ int query_trust_record( PKT_public_key *pk ) { TRUSTREC rec; init_trustdb(); return get_dir_record( pk, &rec ); } /**************** * Get the trustlevel for this PK. * Note: This does not ask any questions * Returns: 0 okay of an errorcode * * It operates this way: * locate the pk in the trustdb * found: * Do we have a valid cache record for it? * yes: return trustlevel from cache * no: make a cache record and all the other stuff * not found: * try to insert the pubkey into the trustdb and check again * * Problems: How do we get the complete keyblock to check that the * cache record is actually valid? Think we need a clever * cache in getkey.c to keep track of this stuff. Maybe it * is not necessary to check this if we use a local pubring. Hmmmm. */ int check_trust( PKT_public_key *pk, unsigned *r_trustlevel, const byte *namehash, int (*add_fnc)(ulong), unsigned *retflgs ) { TRUSTREC rec; unsigned trustlevel = TRUST_UNKNOWN; int rc=0; u32 cur_time; u32 keyid[2]; init_trustdb(); keyid_from_pk( pk, keyid ); /* get the pubkey record */ if( pk->local_id ) { read_record( pk->local_id, &rec, RECTYPE_DIR ); } else { /* no local_id: scan the trustdb */ if( (rc=tdbio_search_dir_bypk( pk, &rec )) && rc != -1 ) { log_error(_("check_trust: search dir record failed: %s\n"), g10_errstr(rc)); return rc; } else if( rc == -1 ) { /* not found - insert */ rc = insert_trust_record_by_pk( pk ); if( rc ) { log_error(_("key %08lX: insert trust record failed: %s\n"), (ulong)keyid[1], g10_errstr(rc)); goto leave; } log_info(_("key %08lX.%lu: inserted into trustdb\n"), (ulong)keyid[1], pk->local_id ); /* and re-read the dir record */ read_record( pk->local_id, &rec, RECTYPE_DIR ); } } cur_time = make_timestamp(); if( pk->timestamp > cur_time ) { log_info(_("key %08lX.%lu: created in future " "(time warp or clock problem)\n"), (ulong)keyid[1], pk->local_id ); return G10ERR_TIME_CONFLICT; } + if( rec.r.dir.checkat && rec.r.dir.checkat <= cur_time ) + check_trust_record( &rec ); if( pk->expiredate && pk->expiredate <= cur_time ) { log_info(_("key %08lX.%lu: expired at %s\n"), (ulong)keyid[1], pk->local_id, asctimestamp( pk->expiredate) ); trustlevel = TRUST_EXPIRED; } else { rc = do_check( &rec, &trustlevel, namehash, add_fnc, retflgs ); if( rc ) { log_error(_("key %08lX.%lu: trust check failed: %s\n"), (ulong)keyid[1], pk->local_id, g10_errstr(rc)); return rc; } } /* is a subkey has been requested, we have to check its keyflags */ if( !rc ) { TRUSTREC krec; byte fpr[MAX_FINGERPRINT_LEN] = {0}; /* to avoid compiler warnings */ size_t fprlen = 0; ulong recno; int kcount=0; for( recno = rec.r.dir.keylist; recno; recno = krec.r.key.next ) { read_record( recno, &krec, RECTYPE_KEY ); if( ++kcount == 1 ) continue; /* skip the primary key */ if( kcount == 2 ) /* now we need the fingerprint */ fingerprint_from_pk( pk, fpr, &fprlen ); if( krec.r.key.fingerprint_len == fprlen && !memcmp( krec.r.key.fingerprint, fpr, fprlen ) ) { /* found the subkey */ if( (krec.r.key.keyflags & KEYF_REVOKED) ) trustlevel |= TRUST_FLAG_SUB_REVOKED; /* should we check for keybinding here??? */ /* Hmmm: Maybe this whole checking stuff should not go * into the trustdb, but be done direct from the keyblock. * Chnage this all when we add an abstarction layer around * the way certificates are handled by different standards */ break; } } } leave: if( DBG_TRUST ) log_debug("check_trust() returns trustlevel %04x.\n", trustlevel); *r_trustlevel = trustlevel; return 0; } int query_trust_info( PKT_public_key *pk, const byte *namehash ) { unsigned trustlevel; int c; init_trustdb(); if( check_trust( pk, &trustlevel, namehash, NULL, NULL ) ) return '?'; if( trustlevel & TRUST_FLAG_DISABLED ) return 'd'; if( trustlevel & TRUST_FLAG_REVOKED ) return 'r'; c = trust_letter( (trustlevel & TRUST_MASK) ); if( !c ) c = '?'; return c; } /**************** * Return the assigned ownertrust value for the given LID */ unsigned get_ownertrust( ulong lid ) { TRUSTREC rec; init_trustdb(); read_record( lid, &rec, RECTYPE_DIR ); return rec.r.dir.ownertrust; } int get_ownertrust_info( ulong lid ) { unsigned otrust; int c; init_trustdb(); otrust = get_ownertrust( lid ); c = trust_letter( (otrust & TRUST_MASK) ); if( !c ) c = '?'; return c; } void list_trust_path( const char *username ) { int rc; ulong lid; TRUSTREC rec; TN tree; PKT_public_key *pk = m_alloc_clear( sizeof *pk ); init_trustdb(); if( (rc = get_pubkey_byname(NULL, pk, username, NULL )) ) log_error(_("user '%s' not found: %s\n"), username, g10_errstr(rc) ); else if( (rc=tdbio_search_dir_bypk( pk, &rec )) && rc != -1 ) log_error(_("problem finding '%s' in trustdb: %s\n"), username, g10_errstr(rc)); else if( rc == -1 ) { log_info(_("user '%s' not in trustdb - inserting\n"), username); rc = insert_trust_record_by_pk( pk ); if( rc ) log_error(_("failed to put '%s' into trustdb: %s\n"), username, g10_errstr(rc)); else { assert( pk->local_id ); } } lid = pk->local_id; tree = build_cert_tree( lid, 0, opt.max_cert_depth, NULL ); if( tree ) propagate_validity( tree, tree, NULL, NULL ); if( opt.with_colons ) dump_tn_tree_with_colons( 0, tree ); else dump_tn_tree( stdout, 0, tree ); /*printf("(alloced tns=%d max=%d)\n", alloced_tns, max_alloced_tns );*/ release_tn_tree( tree ); /*printf("Ownertrust=%c Validity=%c\n", get_ownertrust_info( lid ), query_trust_info( pk, NULL ) ); */ free_public_key( pk ); } /**************** * Enumerate all keys, which are needed to build all trust paths for * the given key. This function does not return the key itself or * the ultimate key (the last point in cerificate chain). Only * certificate chains which ends up at an ultimately trusted key * are listed. If ownertrust or validity is not NULL, the corresponding * value for the returned LID is also returned in these variable(s). * * 1) create a void pointer and initialize it to NULL * 2) pass this void pointer by reference to this function. * Set lid to the key you want to enumerate and pass it by reference. * 3) call this function as long as it does not return -1 * to indicate EOF. LID does contain the next key used to build the web * 4) Always call this function a last time with LID set to NULL, * so that it can free its context. * * Returns: -1 on EOF or the level of the returned LID */ int enum_cert_paths( void **context, ulong *lid, unsigned *ownertrust, unsigned *validity ) { return -1; #if 0 struct enum_cert_paths_ctx *ctx; fixme: ..... tsl; init_trustdb(); if( !lid ) { /* release the context */ if( *context ) { FIXME: ........tsl2; ctx = *context; for(tsl = ctx->tsl_head; tsl; tsl = tsl2 ) { tsl2 = tsl->next; m_free( tsl ); } *context = NULL; } return -1; } if( !*context ) { FIXME .... *tmppath; TRUSTREC rec; if( !*lid ) return -1; ctx = m_alloc_clear( sizeof *ctx ); *context = ctx; /* collect the paths */ #if 0 read_record( *lid, &rec, RECTYPE_DIR ); tmppath = m_alloc_clear( (opt.max_cert_depth+1)* sizeof *tmppath ); tsl = NULL; collect_paths( 0, opt.max_cert_depth, 1, &rec, tmppath, &tsl ); m_free( tmppath ); sort_tsl_list( &tsl ); #endif /* setup the context */ ctx->tsl_head = tsl; ctx->tsl = ctx->tsl_head; ctx->idx = 0; } else ctx = *context; while( ctx->tsl && ctx->idx >= ctx->tsl->pathlen ) { ctx->tsl = ctx->tsl->next; ctx->idx = 0; } tsl = ctx->tsl; if( !tsl ) return -1; /* eof */ if( ownertrust ) *ownertrust = tsl->path[ctx->idx].otrust; if( validity ) *validity = tsl->path[ctx->idx].trust; *lid = tsl->path[ctx->idx].lid; ctx->idx++; return ctx->idx-1; #endif } /**************** * Print the current path */ void enum_cert_paths_print( void **context, FILE *fp, int refresh, ulong selected_lid ) { return; #if 0 struct enum_cert_paths_ctx *ctx; FIXME......... tsl; if( !*context ) return; init_trustdb(); ctx = *context; if( !ctx->tsl ) return; tsl = ctx->tsl; if( !fp ) fp = stderr; if( refresh ) { /* update the ownertrust and if possible the validity */ int i; int match = tdbio_db_matches_options(); for( i = 0; i < tsl->pathlen; i++ ) { TRUSTREC rec; read_record( tsl->path[i].lid, &rec, RECTYPE_DIR ); tsl->path[i].otrust = rec.r.dir.ownertrust; /* update validity only if we have it in the cache * calculation is too time consuming */ if( match && rec.r.dir.valcheck && rec.r.dir.validity ) { tsl->path[i].trust = rec.r.dir.validity; if( rec.r.dir.dirflags & DIRF_REVOKED ) tsl->path[i].trust = TRUST_FLAG_REVOKED; } } } print_path( tsl->pathlen, tsl->path, fp, selected_lid ); #endif } /* * Return an allocated buffer with the preference values for * the key with LID and the userid which is identified by the * HAMEHASH or the firstone if namehash is NULL. ret_n receives * the length of the allocated buffer. Structure of the buffer is * a repeated sequences of 2 bytes; where the first byte describes the * type of the preference and the second one the value. The constants * PREFTYPE_xxxx should be used to reference a type. */ byte * get_pref_data( ulong lid, const byte *namehash, size_t *ret_n ) { TRUSTREC rec; ulong recno; init_trustdb(); read_record( lid, &rec, RECTYPE_DIR ); for( recno=rec.r.dir.uidlist; recno; recno = rec.r.uid.next ) { read_record( recno, &rec, RECTYPE_UID ); if( rec.r.uid.prefrec && ( !namehash || !memcmp(namehash, rec.r.uid.namehash, 20) )) { byte *buf; /* found the correct one or the first one */ read_record( rec.r.uid.prefrec, &rec, RECTYPE_PREF ); if( rec.r.pref.next ) log_info(_("WARNING: can't yet handle long pref records\n")); buf = m_alloc( ITEMS_PER_PREF_RECORD ); memcpy( buf, rec.r.pref.data, ITEMS_PER_PREF_RECORD ); *ret_n = ITEMS_PER_PREF_RECORD; return buf; } } return NULL; } /**************** * Check whether the algorithm is in one of the pref records */ int is_algo_in_prefs( ulong lid, int preftype, int algo ) { TRUSTREC rec; ulong recno; int i; byte *pref; init_trustdb(); read_record( lid, &rec, RECTYPE_DIR ); for( recno=rec.r.dir.uidlist; recno; recno = rec.r.uid.next ) { read_record( recno, &rec, RECTYPE_UID ); if( rec.r.uid.prefrec ) { read_record( rec.r.uid.prefrec, &rec, RECTYPE_PREF ); if( rec.r.pref.next ) log_info(_("WARNING: can't yet handle long pref records\n")); pref = rec.r.pref.data; for(i=0; i+1 < ITEMS_PER_PREF_RECORD; i+=2 ) { if( pref[i] == preftype && pref[i+1] == algo ) return 1; } } } return 0; } diff --git a/include/mpi.h b/include/mpi.h index e845bec50..2293af8fd 100644 --- a/include/mpi.h +++ b/include/mpi.h @@ -1,175 +1,178 @@ /* mpi.h - Multi Precision Integers * Copyright (C) 1994, 1996, 1998 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 * * Note: This code is heavily based on the GNU MP Library. * Actually it's the same code with only minor changes in the * way the data is stored; this is to support the abstraction * of an optional secure memory allocation which may be used * to avoid revealing of sensitive data due to paging etc. * The GNU MP Library itself is published under the LGPL; * however I decided to publish this code under the plain GPL. */ #ifndef G10_MPI_H #define G10_MPI_H #include #include "iobuf.h" #include "types.h" #include "memory.h" #define DBG_MPI mpi_debug_mode int mpi_debug_mode; #define BITS_PER_MPI_LIMB (8*SIZEOF_UNSIGNED_LONG) #define BYTES_PER_MPI_LIMB SIZEOF_UNSIGNED_LONG typedef unsigned long int mpi_limb_t; typedef signed long int mpi_limb_signed_t; struct gcry_mpi { int alloced; /* array size (# of allocated limbs) */ int nlimbs; /* number of valid limbs */ int nbits; /* the real number of valid bits (info only) */ int sign; /* indicates a negative number */ unsigned flags; /* bit 0: array must be allocated in secure memory space */ /* bit 1: the mpi is encrypted */ /* bit 2: the limb is a pointer to some m_alloced data */ mpi_limb_t *d; /* array with the limbs */ }; typedef struct gcry_mpi *MPI; #define MPI_NULL NULL #define mpi_get_nlimbs(a) ((a)->nlimbs) #define mpi_get_nbit_info(a) ((a)->nbits) #define mpi_set_nbit_info(a,b) ((a)->nbits = (b)) #define mpi_is_neg(a) ((a)->sign) /*-- mpiutil.c --*/ #ifdef M_DEBUG #define mpi_alloc(n) mpi_debug_alloc((n), M_DBGINFO( __LINE__ ) ) #define mpi_alloc_secure(n) mpi_debug_alloc_secure((n), M_DBGINFO( __LINE__ ) ) #define mpi_free(a) mpi_debug_free((a), M_DBGINFO(__LINE__) ) #define mpi_resize(a,b) mpi_debug_resize((a),(b), M_DBGINFO(__LINE__) ) #define mpi_copy(a) mpi_debug_copy((a), M_DBGINFO(__LINE__) ) MPI mpi_debug_alloc( unsigned nlimbs, const char *info ); MPI mpi_debug_alloc_secure( unsigned nlimbs, const char *info ); void mpi_debug_free( MPI a, const char *info ); void mpi_debug_resize( MPI a, unsigned nlimbs, const char *info ); MPI mpi_debug_copy( MPI a, const char *info ); #else MPI mpi_alloc( unsigned nlimbs ); MPI mpi_alloc_secure( unsigned nlimbs ); void mpi_free( MPI a ); void mpi_resize( MPI a, unsigned nlimbs ); MPI mpi_copy( MPI a ); #endif #define mpi_is_opaque(a) ((a) && ((a)->flags&4)) MPI mpi_set_opaque( MPI a, void *p, int len ); void *mpi_get_opaque( MPI a, int *len ); #define mpi_is_protected(a) ((a) && ((a)->flags&2)) #define mpi_set_protect_flag(a) ((a)->flags |= 2) #define mpi_clear_protect_flag(a) ((a)->flags &= ~2) #define mpi_is_secure(a) ((a) && ((a)->flags&1)) void mpi_set_secure( MPI a ); void mpi_clear( MPI a ); MPI mpi_alloc_like( MPI a ); void mpi_set( MPI w, MPI u); void mpi_set_ui( MPI w, ulong u); MPI mpi_alloc_set_ui( unsigned long u); void mpi_m_check( MPI a ); void mpi_swap( MPI a, MPI b); /*-- mpicoder.c --*/ int mpi_write( IOBUF out, MPI a ); #ifdef M_DEBUG #define mpi_read(a,b,c) mpi_debug_read((a),(b),(c), M_DBGINFO( __LINE__ ) ) MPI mpi_debug_read(IOBUF inp, unsigned *nread, int secure, const char *info); #else MPI mpi_read(IOBUF inp, unsigned *nread, int secure); #endif MPI mpi_read_from_buffer(byte *buffer, unsigned *ret_nread, int secure); int mpi_fromstr(MPI val, const char *str); int mpi_print( FILE *fp, MPI a, int mode ); +void g10_log_mpidump( const char *text, MPI a ); u32 mpi_get_keyid( MPI a, u32 *keyid ); byte *mpi_get_buffer( MPI a, unsigned *nbytes, int *sign ); byte *mpi_get_secure_buffer( MPI a, unsigned *nbytes, int *sign ); void mpi_set_buffer( MPI a, const byte *buffer, unsigned nbytes, int sign ); +#define log_mpidump g10_log_mpidump + /*-- mpi-add.c --*/ void mpi_add_ui(MPI w, MPI u, ulong v ); void mpi_add(MPI w, MPI u, MPI v); void mpi_addm(MPI w, MPI u, MPI v, MPI m); void mpi_sub_ui(MPI w, MPI u, ulong v ); void mpi_sub( MPI w, MPI u, MPI v); void mpi_subm( MPI w, MPI u, MPI v, MPI m); /*-- mpi-mul.c --*/ void mpi_mul_ui(MPI w, MPI u, ulong v ); void mpi_mul_2exp( MPI w, MPI u, ulong cnt); void mpi_mul( MPI w, MPI u, MPI v); void mpi_mulm( MPI w, MPI u, MPI v, MPI m); /*-- mpi-div.c --*/ ulong mpi_fdiv_r_ui( MPI rem, MPI dividend, ulong divisor ); void mpi_fdiv_r( MPI rem, MPI dividend, MPI divisor ); void mpi_fdiv_q( MPI quot, MPI dividend, MPI divisor ); void mpi_fdiv_qr( MPI quot, MPI rem, MPI dividend, MPI divisor ); void mpi_tdiv_r( MPI rem, MPI num, MPI den); void mpi_tdiv_qr( MPI quot, MPI rem, MPI num, MPI den); void mpi_tdiv_q_2exp( MPI w, MPI u, unsigned count ); int mpi_divisible_ui(MPI dividend, ulong divisor ); /*-- mpi-gcd.c --*/ int mpi_gcd( MPI g, MPI a, MPI b ); /*-- mpi-pow.c --*/ void mpi_pow( MPI w, MPI u, MPI v); void mpi_powm( MPI res, MPI base, MPI exp, MPI mod); /*-- mpi-mpow.c --*/ void mpi_mulpowm( MPI res, MPI *basearray, MPI *exparray, MPI mod); /*-- mpi-cmp.c --*/ int mpi_cmp_ui( MPI u, ulong v ); int mpi_cmp( MPI u, MPI v ); /*-- mpi-scan.c --*/ int mpi_getbyte( MPI a, unsigned idx ); void mpi_putbyte( MPI a, unsigned idx, int value ); unsigned mpi_trailing_zeros( MPI a ); /*-- mpi-bit.c --*/ void mpi_normalize( MPI a ); unsigned mpi_get_nbits( MPI a ); int mpi_test_bit( MPI a, unsigned n ); void mpi_set_bit( MPI a, unsigned n ); void mpi_set_highbit( MPI a, unsigned n ); void mpi_clear_highbit( MPI a, unsigned n ); void mpi_clear_bit( MPI a, unsigned n ); void mpi_rshift( MPI x, MPI a, unsigned n ); /*-- mpi-inv.c --*/ void mpi_invm( MPI x, MPI u, MPI v ); #endif /*G10_MPI_H*/ diff --git a/include/util.h b/include/util.h index b36e11bb2..6feab3211 100644 --- a/include/util.h +++ b/include/util.h @@ -1,217 +1,217 @@ /* util.h * Copyright (C) 1998 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_UTIL_H #define G10_UTIL_H #include "types.h" #include "errors.h" #include "types.h" #include "mpi.h" typedef struct { int *argc; /* pointer to argc (value subject to change) */ char ***argv; /* pointer to argv (value subject to change) */ unsigned flags; /* Global flags (DO NOT CHANGE) */ int err; /* print error about last option */ /* 1 = warning, 2 = abort */ int r_opt; /* return option */ int r_type; /* type of return value (0 = no argument found)*/ union { int ret_int; long ret_long; ulong ret_ulong; char *ret_str; } r; /* Return values */ struct { int idx; int inarg; int stopped; const char *last; void *aliases; const void *cur_alias; } internal; /* DO NOT CHANGE */ } ARGPARSE_ARGS; typedef struct { int short_opt; const char *long_opt; unsigned flags; const char *description; /* optional option description */ } ARGPARSE_OPTS; /*-- logger.c --*/ void log_set_logfile( const char *name, int fd ); FILE *log_stream(void); +void g10_log_print_prefix(const char *text); void log_set_name( const char *name ); const char *log_get_name(void); void log_set_pid( int pid ); int log_get_errorcount( int clear ); void g10_log_hexdump( const char *text, const char *buf, size_t len ); -void g10_log_mpidump( const char *text, MPI a ); #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ) void g10_log_bug( const char *fmt, ... ) __attribute__ ((noreturn, format (printf,1,2))); void g10_log_bug0( const char *, int, const char * ) __attribute__ ((noreturn)); void g10_log_fatal( const char *fmt, ... ) __attribute__ ((noreturn, format (printf,1,2))); void g10_log_error( const char *fmt, ... ) __attribute__ ((format (printf,1,2))); void g10_log_info( const char *fmt, ... ) __attribute__ ((format (printf,1,2))); void g10_log_debug( const char *fmt, ... ) __attribute__ ((format (printf,1,2))); void g10_log_fatal_f( const char *fname, const char *fmt, ... ) __attribute__ ((noreturn, format (printf,2,3))); void g10_log_error_f( const char *fname, const char *fmt, ... ) __attribute__ ((format (printf,2,3))); void g10_log_info_f( const char *fname, const char *fmt, ... ) __attribute__ ((format (printf,2,3))); void g10_log_debug_f( const char *fname, const char *fmt, ... ) __attribute__ ((format (printf,2,3))); #define BUG() g10_log_bug0( __FILE__ , __LINE__, __FUNCTION__ ) #else void g10_log_bug( const char *fmt, ... ); void g10_log_bug0( const char *, int ); void g10_log_fatal( const char *fmt, ... ); void g10_log_error( const char *fmt, ... ); void g10_log_info( const char *fmt, ... ); void g10_log_debug( const char *fmt, ... ); void g10_log_fatal_f( const char *fname, const char *fmt, ... ); void g10_log_error_f( const char *fname, const char *fmt, ... ); void g10_log_info_f( const char *fname, const char *fmt, ... ); void g10_log_debug_f( const char *fname, const char *fmt, ... ); #define BUG() g10_log_bug0( __FILE__ , __LINE__ ) #endif #define log_hexdump g10_log_hexdump -#define log_mpidump g10_log_mpidump #define log_bug g10_log_bug #define log_bug0 g10_log_bug0 #define log_fatal g10_log_fatal #define log_error g10_log_error #define log_info g10_log_info #define log_debug g10_log_debug #define log_fatal_f g10_log_fatal_f #define log_error_f g10_log_error_f #define log_info_f g10_log_info_f #define log_debug_f g10_log_debug_f /*-- errors.c --*/ const char * g10_errstr( int no ); /*-- argparse.c --*/ int arg_parse( ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts); int optfile_parse( FILE *fp, const char *filename, unsigned *lineno, ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts); void usage( int level ); const char *default_strusage( int level ); /*-- (main program) --*/ const char *strusage( int level ); /*-- dotlock.c --*/ struct dotlock_handle; typedef struct dotlock_handle *DOTLOCK; DOTLOCK create_dotlock( const char *file_to_lock ); int make_dotlock( DOTLOCK h, long timeout ); int release_dotlock( DOTLOCK h ); /*-- fileutil.c --*/ char * make_basename(const char *filepath); char * make_dirname(const char *filepath); char *make_filename( const char *first_part, ... ); int compare_filenames( const char *a, const char *b ); const char *print_fname_stdin( const char *s ); const char *print_fname_stdout( const char *s ); /*-- miscutil.c --*/ u32 make_timestamp(void); +u32 scan_isodatestr( const char *string ); u32 add_days_to_timestamp( u32 stamp, u16 days ); const char *strtimevalue( u32 stamp ); const char *strtimestamp( u32 stamp ); /* GMT */ const char *asctimestamp( u32 stamp ); /* localized */ void print_string( FILE *fp, const byte *p, size_t n, int delim ); char *make_printable_string( const byte *p, size_t n, int delim ); int answer_is_yes( const char *s ); int answer_is_yes_no_quit( const char *s ); /*-- strgutil.c --*/ void free_strlist( STRLIST sl ); #define FREE_STRLIST(a) do { free_strlist((a)); (a) = NULL ; } while(0) STRLIST add_to_strlist( STRLIST *list, const char *string ); STRLIST add_to_strlist2( STRLIST *list, const char *string, int is_utf8 ); STRLIST append_to_strlist( STRLIST *list, const char *string ); STRLIST append_to_strlist2( STRLIST *list, const char *string, int is_utf8 ); STRLIST strlist_prev( STRLIST head, STRLIST node ); STRLIST strlist_last( STRLIST node ); const char *memistr( const char *buf, size_t buflen, const char *sub ); char *mem2str( char *, const void *, size_t); char *trim_spaces( char *string ); unsigned trim_trailing_chars( byte *line, unsigned len, const char *trimchars); unsigned trim_trailing_ws( byte *line, unsigned len ); int string_count_chr( const char *string, int c ); int set_native_charset( const char *newset ); const char* get_native_charset(void); char *native_to_utf8( const char *string ); char *utf8_to_native( const char *string ); int check_utf8_string( const char *string ); #ifndef HAVE_MEMICMP int memicmp( const char *a, const char *b, size_t n ); #endif #ifndef HAVE_STPCPY char *stpcpy(char *a,const char *b); #endif #ifndef HAVE_STRLWR char *strlwr(char *a); #endif #ifndef HAVE_STRTOUL #define strtoul(a,b,c) ((unsigned long)strtol((a),(b),(c))) #endif #ifndef HAVE_MEMMOVE #define memmove(d, s, n) bcopy((s), (d), (n)) #endif #ifndef HAVE_STRICMP #define stricmp(a,b) strcasecmp( (a), (b) ) #endif /**** other missing stuff ****/ #ifndef HAVE_ATEXIT /* For SunOS */ #define atexit(a) (on_exit((a),0)) #endif #ifndef HAVE_RAISE #define raise(a) kill(getpid(), (a)) #endif /******** some macros ************/ #ifndef STR #define STR(v) #v #endif #define STR2(v) STR(v) #define DIM(v) (sizeof(v)/sizeof((v)[0])) #define DIMof(type,member) DIM(((type *)0)->member) #endif /*G10_UTIL_H*/ diff --git a/mpi/ChangeLog b/mpi/ChangeLog index 1951dd3a4..cce6ee56d 100644 --- a/mpi/ChangeLog +++ b/mpi/ChangeLog @@ -1,164 +1,171 @@ +Wed Jul 7 13:08:40 CEST 1999 Werner Koch + + + * mpicoder.c (g10_log_mpidump): New. + + * Makefile.am: Support for libtool. + Fri Jul 2 11:45:54 CEST 1999 Werner Koch * mpi-bit.c (mpi_lshift_limbs,mpi_rshift_limbs): New. * mpi-mpow.c (barrett_mulm): New but diabled. Tue Jun 1 16:01:46 CEST 1999 Werner Koch * config.links (i[56]86*-*-freebsdelf*): New. Sun May 23 14:20:22 CEST 1999 Werner Koch * config.links (sysdep.h): Not any more conditionally created. Tue May 4 15:47:53 CEST 1999 Werner Koch * mpiutil.c (mpi_alloc_like): New. Mon Apr 26 17:48:15 CEST 1999 Werner Koch * mpih-add.c, mpih-sub.c: Removed * mpi-inline.c: New. * mpi-inline.h: Make it usable by mpi-inline.c. Sun Apr 18 10:11:28 CEST 1999 Werner Koch * mpih-mul.c (mpihelp_mul_n): Fixed use of memory region. (mpihelp_mul): Ditto. Wed Apr 7 20:51:39 CEST 1999 Werner Koch * Makefile.am: Explicit rules to invoke cpp on *.S Mon Mar 8 20:47:17 CET 1999 Werner Koch * config.links: Take advantage of the with_symbol_underscore macro. Add support for freebsd 4. Wed Feb 24 11:07:27 CET 1999 Werner Koch * mips3/mpih-sub1.S: Removed left over junk in last line. (Should I blame me or my editor?). Sat Feb 13 12:04:43 CET 1999 Werner Koch * Makefile.am: Removed the +=. Add MPI_OPT_FLAGS. Sat Jan 9 16:02:23 CET 1999 Werner Koch * mpi-cmp.c (mpi_cmp_ui): Normalized the arg. Thu Jan 7 18:00:58 CET 1999 Werner Koch * mpi-bit.c (mpi_normalize): New. (mpi_get_nbits): Normalize the MPI. * mpi-bit.c (mpi_cmp): Normalize the MPI before the compare. Tue Dec 8 13:15:16 CET 1998 Werner Koch * config.links: Moved the case for powerpc*linux * powerpcp32/*.S: Removed some underscores. Thu Nov 26 07:27:52 1998 Werner Koch * config.links: Support for ppc with ELF * powerpc32/syntax.h: New. * powerpc32/*.S: Applied ELF patches (glibc patches) Tue Nov 10 19:31:37 1998 Werner Koch (wk@isil.d.shuttle.de) * power*/ : Started with stuff for PPC * config.links: Some stuff for PPC. * generic/udiv-w-sdiv.c: New but disabled. Tue Oct 27 12:37:46 1998 Werner Koch (wk@isil.d.shuttle.de) * config.links (freebsd): Fixes for FreeBSD 3.0 Wed Oct 14 09:59:30 1998 Werner Koch (wk@isil.d.shuttle.de) * config.links (freebsd): ELF patches from Jun Kuriyama. Thu Oct 8 13:28:17 1998 Werner Koch (wk@isil.d.shuttle.de) * mpi-mpow.c (mpi_mulpowm): Fixed mem leak (m_free/mpi_free). Thu Sep 17 18:08:50 1998 Werner Koch (wk@(none)) * hppa1.1/udiv-qrnnd.S: Fix from Steffen Zahn for HPUX 10.20 Thu Aug 6 16:39:28 1998 Werner Koch,mobil,,, (wk@tobold) * mpi-bit.c (mpi_set_bytes): Removed. Wed Aug 5 15:11:12 1998 Werner Koch (wk@(none)) * mpicoder.c (mpi_read_from_buffer): New. * mpiutil.c (mpi_set_opaque): New. (mpi_get_opaque): New. (mpi_copy): Changed to support opauqe flag (mpi_free): Ditto. Sat Jul 4 10:11:11 1998 Werner Koch (wk@isil.d.shuttle.de) * mpiutil.c (mpi_clear): Reset flags. (mpi_set): Ditto. (mpi_alloc_secure): Set flag to 1 and not ored the 1 in, tsss.. Fri Jun 26 11:19:06 1998 Werner Koch (wk@isil.d.shuttle.de) * mpiutil.c (mpi_alloc): set nbits to 0. (mpi_alloc_secure): Ditto. (mpi_clear): Ditto. Thu Jun 25 11:50:01 1998 Werner Koch (wk@isil.d.shuttle.de) * mips3/*.S: New Mon May 18 13:47:06 1998 Werner Koch (wk@isil.d.shuttle.de) * config.links: split mpih-shift into mpih-[lr]shift and changed all implementations. * mpi/alpha: add some new assembler stuff. Wed May 13 11:04:29 1998 Werner Koch (wk@isil.d.shuttle.de) * config.links: Add support for MIPS Thu Apr 9 11:31:36 1998 Werner Koch (wk@isil.d.shuttle.de) * mpicoder.c (mpi_get_secure_buffer): New. Wed Apr 8 09:44:33 1998 Werner Koch (wk@isil.d.shuttle.de) * config.links: Applied small fix from Ulf MЖller. Mon Apr 6 12:38:52 1998 Werner Koch (wk@isil.d.shuttle.de) * mpicoder.c (mpi_get_buffer): Removed returned leading zeroes and changed all callers. Tue Mar 10 13:40:34 1998 Werner Koch (wk@isil.d.shuttle.de) * mpi-bit.c (mpi_clear_highbit): New. Mon Mar 2 19:29:00 1998 Werner Koch (wk@isil.d.shuttle.de) * Makefile.am (DISTCLEANFILES): New Thu Feb 26 06:48:54 1998 Werner Koch (wk@isil.d.shuttle.de) * config.links (X86_BROKEN_ALIGN): Added for some systems. Mon Feb 23 12:21:40 1998 Werner Koch (wk@isil.d.shuttle.de) * mpi/m68k/mpih-shift.S (Lspecial): Changed duplicate symbol. Mon Feb 16 13:00:27 1998 Werner Koch (wk@isil.d.shuttle.de) * config.links : Add detection of m68k cpus diff --git a/mpi/Makefile.am b/mpi/Makefile.am index 42acb55fe..fc25bbb81 100644 --- a/mpi/Makefile.am +++ b/mpi/Makefile.am @@ -1,58 +1,67 @@ ## Process this file with automake to produce Makefile.in INCLUDES = -I$(top_srcdir)/include CFLAGS = @CFLAGS@ @MPI_OPT_FLAGS@ SFLAGS = @MPI_SFLAGS@ EXTRA_DIST = config.links DISTCLEANFILES = mpih-add1.S mpih-mul1.S mpih-mul2.S mpih-mul3.S \ mpih-lshift.S mpih-rshift.S mpih-sub1.S asm-syntax.h sysdep.h CLEANFILES = tmp-*.s -noinst_LIBRARIES = libmpi.a -# noinst_HEADERS = +noinst_LTLIBRARIES = libmpi.la -libmpi_a_SOURCES = longlong.h \ +libmpi_la_LDFLAGS = +libmpi_la_SOURCES = longlong.h \ mpi-add.c \ mpi-bit.c \ mpi-cmp.c \ mpi-div.c \ mpi-gcd.c \ mpi-internal.h \ mpi-inline.h \ mpi-inline.c \ mpi-inv.c \ mpi-mul.c \ mpi-pow.c \ mpi-mpow.c \ mpi-scan.c \ mpicoder.c \ mpih-cmp.c \ mpih-div.c \ mpih-mul.c \ mpiutil.c \ g10m.c # Note this objects are actually links, the sourcefiles are # distributed by special code in dist-hook -common_asm_objects = mpih-mul1.o \ - mpih-mul2.o \ - mpih-mul3.o \ - mpih-add1.o \ - mpih-sub1.o \ - mpih-lshift.o \ - mpih-rshift.o +common_asm_objects = mpih-mul1.lo \ + mpih-mul2.lo \ + mpih-mul3.lo \ + mpih-add1.lo \ + mpih-sub1.lo \ + mpih-lshift.lo \ + mpih-rshift.lo -libmpi_a_DEPENDENCIES = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@ -libmpi_a_LIBADD = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@ +libmpi_la_DEPENDENCIES = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@ +libmpi_la_LIBADD = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@ SUFFIXES = .S .S.o: $(CPP) $(INCLUDES) $(DEFS) $< | grep -v '^#' >tmp-$*.s $(CC) $(CFLAGS) $(SFLAGS) -c tmp-$*.s mv tmp-$*.o $@ rm -f tmp-$*.s +.S.lo: + $(CPP) $(INCLUDES) $(DEFS) $< | grep -v '^#' >tmp-$*.s + if test -f tmp-$*.lo; then rm tmp-$*.lo; fi + if test -f tmp-$*.o ; then rm tmp-$*.o ; fi + $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) $(SFLAGS) -c tmp-$*.s + if test -f tmp-$*.lo; then mv tmp-$*.lo $*.lo; fi + if test -f tmp-$*.o ; then mv tmp-$*.o $*.o ; fi + rm -f tmp-$*.s + diff --git a/mpi/mpicoder.c b/mpi/mpicoder.c index 2ef4c1419..dae6eb4e1 100644 --- a/mpi/mpicoder.c +++ b/mpi/mpicoder.c @@ -1,436 +1,446 @@ /* mpicoder.c - Coder for the external representation of MPIs * Copyright (C) 1998 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 #include #include #include #include #include "mpi.h" #include "mpi-internal.h" #include "iobuf.h" #include "memory.h" #include "util.h" #ifdef M_DEBUG #undef mpi_read #endif #define MAX_EXTERN_MPI_BITS 16384 /**************** * write an mpi to out. */ int mpi_write( IOBUF out, MPI a ) { int rc; unsigned nbits = mpi_get_nbits(a); byte *p, *buf; unsigned n; if( nbits > MAX_EXTERN_MPI_BITS ) log_bug("mpi_encode: mpi too large (%u bits)\n", nbits); iobuf_put(out, (nbits >>8) ); iobuf_put(out, (nbits) ); p = buf = mpi_get_buffer( a, &n, NULL ); rc = iobuf_write( out, p, n ); m_free(buf); return rc; } /**************** * Read an external representation of an mpi and return the MPI * The external format is a 16 bit unsigned value stored in network byte order, * giving the number of bits for the following integer. The integer is stored * with MSB first (left padded with zeroes to align on a byte boundary). */ MPI #ifdef M_DEBUG mpi_debug_read(IOBUF inp, unsigned *ret_nread, int secure, const char *info) #else mpi_read(IOBUF inp, unsigned *ret_nread, int secure) #endif { int c, i, j; unsigned nbits, nbytes, nlimbs, nread=0; mpi_limb_t a; MPI val = MPI_NULL; if( (c = iobuf_get(inp)) == -1 ) goto leave; nbits = c << 8; if( (c = iobuf_get(inp)) == -1 ) goto leave; nbits |= c; if( nbits > MAX_EXTERN_MPI_BITS ) { log_error("mpi too large (%u bits)\n", nbits); goto leave; } nread = 2; nbytes = (nbits+7) / 8; nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB; #ifdef M_DEBUG val = secure? mpi_debug_alloc_secure( nlimbs, info ) : mpi_debug_alloc( nlimbs, info ); #else val = secure? mpi_alloc_secure( nlimbs ) : mpi_alloc( nlimbs ); #endif i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB; i %= BYTES_PER_MPI_LIMB; val->nbits = nbits; j= val->nlimbs = nlimbs; val->sign = 0; for( ; j > 0; j-- ) { a = 0; for(; i < BYTES_PER_MPI_LIMB; i++ ) { a <<= 8; a |= iobuf_get(inp) & 0xff; nread++; } i = 0; val->d[j-1] = a; } leave: if( nread > *ret_nread ) log_bug("mpi crosses packet border"); else *ret_nread = nread; return val; } MPI mpi_read_from_buffer(byte *buffer, unsigned *ret_nread, int secure) { int i, j; unsigned nbits, nbytes, nlimbs, nread=0; mpi_limb_t a; MPI val = MPI_NULL; if( *ret_nread < 2 ) goto leave; nbits = buffer[0] << 8 | buffer[1]; if( nbits > MAX_EXTERN_MPI_BITS ) { log_error("mpi too large (%u bits)\n", nbits); goto leave; } buffer += 2; nread = 2; nbytes = (nbits+7) / 8; nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB; val = secure? mpi_alloc_secure( nlimbs ) : mpi_alloc( nlimbs ); i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB; i %= BYTES_PER_MPI_LIMB; val->nbits = nbits; j= val->nlimbs = nlimbs; val->sign = 0; for( ; j > 0; j-- ) { a = 0; for(; i < BYTES_PER_MPI_LIMB; i++ ) { if( ++nread > *ret_nread ) log_bug("mpi larger than buffer"); a <<= 8; a |= *buffer++; } i = 0; val->d[j-1] = a; } leave: *ret_nread = nread; return val; } /**************** * Make an mpi from a character string. */ int mpi_fromstr(MPI val, const char *str) { int hexmode=0, sign=0, prepend_zero=0, i, j, c, c1, c2; unsigned nbits, nbytes, nlimbs; mpi_limb_t a; if( *str == '-' ) { sign = 1; str++; } if( *str == '0' && str[1] == 'x' ) hexmode = 1; else return 1; /* other bases are not yet supported */ str += 2; nbits = strlen(str)*4; if( nbits % 8 ) prepend_zero = 1; nbytes = (nbits+7) / 8; nlimbs = (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB; if( val->alloced < nlimbs ) mpi_resize(val, nlimbs ); i = BYTES_PER_MPI_LIMB - nbytes % BYTES_PER_MPI_LIMB; i %= BYTES_PER_MPI_LIMB; j= val->nlimbs = nlimbs; val->sign = sign; for( ; j > 0; j-- ) { a = 0; for(; i < BYTES_PER_MPI_LIMB; i++ ) { if( prepend_zero ) { c1 = '0'; prepend_zero = 0; } else c1 = *str++; assert(c1); c2 = *str++; assert(c2); if( c1 >= '0' && c1 <= '9' ) c = c1 - '0'; else if( c1 >= 'a' && c1 <= 'f' ) c = c1 - 'a' + 10; else if( c1 >= 'A' && c1 <= 'F' ) c = c1 - 'A' + 10; else { mpi_clear(val); return 1; } c <<= 4; if( c2 >= '0' && c2 <= '9' ) c |= c2 - '0'; else if( c2 >= 'a' && c2 <= 'f' ) c |= c2 - 'a' + 10; else if( c2 >= 'A' && c2 <= 'F' ) c |= c2 - 'A' + 10; else { mpi_clear(val); return 1; } a <<= 8; a |= c; } i = 0; val->d[j-1] = a; } return 0; } /**************** * print an MPI to the given stream and return the number of characters * printed. */ int mpi_print( FILE *fp, MPI a, int mode ) { int i, n=0; if( a == MPI_NULL ) return fprintf(fp, "[MPI_NULL]"); if( !mode ) { unsigned n1, n2; n1 = mpi_get_nbits(a); n2 = mpi_get_nbit_info(a); if( n2 && n2 != n1 ) n += fprintf(fp, "[%u bits (%u)]", n1, n2 ); else n += fprintf(fp, "[%u bits]", n1); } else { if( a->sign ) putc('-', fp); #if BYTES_PER_MPI_LIMB == 2 #define X "4" #elif BYTES_PER_MPI_LIMB == 4 #define X "8" #elif BYTES_PER_MPI_LIMB == 8 #define X "16" #else #error please define the format here #endif for(i=a->nlimbs; i > 0 ; i-- ) { n += fprintf(fp, i!=a->nlimbs? "%0" X "lX":"%lX", (ulong)a->d[i-1]); #undef X } if( !a->nlimbs ) putc('0', fp ); } return n; } +void +g10_log_mpidump( const char *text, MPI a ) +{ + FILE *fp = log_stream(); + + g10_log_print_prefix(text); + mpi_print(fp, a, 1 ); + fputc('\n', fp); +} + /**************** * Special function to get the low 8 bytes from an mpi. * This can be used as a keyid; KEYID is an 2 element array. * Return the low 4 bytes. */ u32 mpi_get_keyid( MPI a, u32 *keyid ) { #if BYTES_PER_MPI_LIMB == 4 if( keyid ) { keyid[0] = a->nlimbs >= 2? a->d[1] : 0; keyid[1] = a->nlimbs >= 1? a->d[0] : 0; } return a->nlimbs >= 1? a->d[0] : 0; #elif BYTES_PER_MPI_LIMB == 8 if( keyid ) { keyid[0] = a->nlimbs? (u32)(a->d[0] >> 32) : 0; keyid[1] = a->nlimbs? (u32)(a->d[0] & 0xffffffff) : 0; } return a->nlimbs? (u32)(a->d[0] & 0xffffffff) : 0; #else #error Make this function work with other LIMB sizes #endif } /**************** * Return an m_alloced buffer with the MPI (msb first). * NBYTES receives the length of this buffer. Caller must free the * return string (This function does return a 0 byte buffer with NBYTES * set to zero if the value of A is zero. If sign is not NULL, it will * be set to the sign of the A. */ static byte * do_get_buffer( MPI a, unsigned *nbytes, int *sign, int force_secure ) { byte *p, *buffer; mpi_limb_t alimb; int i; if( sign ) *sign = a->sign; *nbytes = a->nlimbs * BYTES_PER_MPI_LIMB; p = buffer = force_secure || mpi_is_secure(a) ? m_alloc_secure( *nbytes) : m_alloc( *nbytes ); for(i=a->nlimbs-1; i >= 0; i-- ) { alimb = a->d[i]; #if BYTES_PER_MPI_LIMB == 4 *p++ = alimb >> 24; *p++ = alimb >> 16; *p++ = alimb >> 8; *p++ = alimb ; #elif BYTES_PER_MPI_LIMB == 8 *p++ = alimb >> 56; *p++ = alimb >> 48; *p++ = alimb >> 40; *p++ = alimb >> 32; *p++ = alimb >> 24; *p++ = alimb >> 16; *p++ = alimb >> 8; *p++ = alimb ; #else #error please implement for this limb size. #endif } /* this is sub-optimal but we need to do the shift oepration because * the caller has to free the returned buffer */ for(p=buffer; !*p && *nbytes; p++, --*nbytes ) ; if( p != buffer ) memmove(buffer,p, *nbytes); return buffer; } byte * mpi_get_buffer( MPI a, unsigned *nbytes, int *sign ) { return do_get_buffer( a, nbytes, sign, 0 ); } byte * mpi_get_secure_buffer( MPI a, unsigned *nbytes, int *sign ) { return do_get_buffer( a, nbytes, sign, 1 ); } /**************** * Use BUFFER to update MPI. */ void mpi_set_buffer( MPI a, const byte *buffer, unsigned nbytes, int sign ) { const byte *p; mpi_limb_t alimb; int nlimbs; int i; nlimbs = (nbytes + BYTES_PER_MPI_LIMB - 1) / BYTES_PER_MPI_LIMB; RESIZE_IF_NEEDED(a, nlimbs); a->sign = sign; for(i=0, p = buffer+nbytes-1; p >= buffer+BYTES_PER_MPI_LIMB; ) { #if BYTES_PER_MPI_LIMB == 4 alimb = *p-- ; alimb |= *p-- << 8 ; alimb |= *p-- << 16 ; alimb |= *p-- << 24 ; #elif BYTES_PER_MPI_LIMB == 8 alimb = (mpi_limb_t)*p-- ; alimb |= (mpi_limb_t)*p-- << 8 ; alimb |= (mpi_limb_t)*p-- << 16 ; alimb |= (mpi_limb_t)*p-- << 24 ; alimb |= (mpi_limb_t)*p-- << 32 ; alimb |= (mpi_limb_t)*p-- << 40 ; alimb |= (mpi_limb_t)*p-- << 48 ; alimb |= (mpi_limb_t)*p-- << 56 ; #else #error please implement for this limb size. #endif a->d[i++] = alimb; } if( p >= buffer ) { #if BYTES_PER_MPI_LIMB == 4 alimb = *p-- ; if( p >= buffer ) alimb |= *p-- << 8 ; if( p >= buffer ) alimb |= *p-- << 16 ; if( p >= buffer ) alimb |= *p-- << 24 ; #elif BYTES_PER_MPI_LIMB == 8 alimb = (mpi_limb_t)*p-- ; if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 8 ; if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 16 ; if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 24 ; if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 32 ; if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 40 ; if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 48 ; if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 56 ; #else #error please implement for this limb size. #endif a->d[i++] = alimb; } a->nlimbs = i; assert( i == nlimbs ); } diff --git a/po/de.po b/po/de.po index 4aae57073..2fa024501 100644 --- a/po/de.po +++ b/po/de.po @@ -1,3695 +1,3701 @@ # GnuPG german translation # Copyright (C) 1998 Free Software Foundation, Inc. # Walter Koch , 1998. msgid "" msgstr "" -"POT-Creation-Date: 1999-06-26 11:22+0200\n" +"POT-Creation-Date: 1999-07-06 17:34+0200\n" "PO-Revision-Date: 1999-05-30 21:56+0200\n" "Last-Translator: Walter Koch \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -#: util/secmem.c:76 +#: util/secmem.c:79 msgid "Warning: using insecure memory!\n" msgstr "Warnung: Sensible Daten kЖnnten auf Platte ausgelagert werden.\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:249 +#: util/secmem.c:275 msgid "operation is not possible without initialized secure memory\n" msgstr "Vorgang ist ohne sicheren Hauptspeicher nicht mЖglich\n" -#: util/secmem.c:250 +#: util/secmem.c:276 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:156 util/miscutil.c:173 +#: util/miscutil.c:254 util/miscutil.c:271 msgid "yes" msgstr "ja" -#: util/miscutil.c:157 util/miscutil.c:175 +#: util/miscutil.c:255 util/miscutil.c:273 msgid "yY" msgstr "jJyY" -#: g10/keyedit.c:559 util/miscutil.c:174 +#: g10/keyedit.c:561 util/miscutil.c:272 msgid "quit" msgstr "quit" -#: util/miscutil.c:176 +#: util/miscutil.c:274 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 "жffentliches SchlЭsselverfahren ist nicht implementiert." #: 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 Resourcenobergrenze 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/logger.c:218 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... dies ist ein Bug (Programmfehler) (%s:%d:%s)\n" #: util/logger.c:224 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "Sie haben eine Bug (Programmfehler) gefunden ... (%s:%d)\n" -#: cipher/random.c:412 +#: cipher/random.c:452 msgid "WARNING: using insecure random number generator!!\n" msgstr "WARNUNG: Der Zufallsgenerator erzeugt keine echten Zufallszahlen!\n" -#: cipher/random.c:413 +#: cipher/random.c:453 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:135 #, 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:174 +#: g10/g10.c:176 msgid "" "@Commands:\n" " " msgstr "" "@Befehle:\n" " " -#: g10/g10.c:176 +#: g10/g10.c:178 msgid "|[file]|make a signature" msgstr "|[Datei]|Eine Unterschrift erzeugen" -#: g10/g10.c:177 +#: g10/g10.c:179 msgid "|[file]|make a clear text signature" msgstr "|[Datei]|Eine Klartextunterschrift erzeugen" -#: g10/g10.c:178 +#: g10/g10.c:180 msgid "make a detached signature" msgstr "Eine abgetrennte Unterschrift erzeugen" -#: g10/g10.c:179 +#: g10/g10.c:181 msgid "encrypt data" msgstr "Daten verschlЭsseln" -#: g10/g10.c:180 +#: g10/g10.c:182 msgid "encryption only with symmetric cipher" msgstr "Daten symmetrisch verschlЭsseln" -#: g10/g10.c:181 +#: g10/g10.c:183 msgid "store only" msgstr "Nur speichern" -#: g10/g10.c:182 +#: g10/g10.c:184 msgid "decrypt data (default)" msgstr "Daten entschlЭsseln (Voreinstellung)" -#: g10/g10.c:183 +#: g10/g10.c:185 msgid "verify a signature" msgstr "Signatur prЭfen" -#: g10/g10.c:184 +#: g10/g10.c:186 msgid "list keys" msgstr "Liste der SchlЭssel" -#: g10/g10.c:186 +#: g10/g10.c:188 msgid "list keys and signatures" msgstr "Liste der SchlЭssel und ihrer Signaturen" -#: g10/g10.c:187 +#: g10/g10.c:189 msgid "check key signatures" msgstr "Signaturen der SchlЭssel prЭfen" -#: g10/g10.c:188 +#: g10/g10.c:190 msgid "list keys and fingerprints" msgstr "Liste der SchlЭssel und ihrer \"FingerabdrЭcke\"" -#: g10/g10.c:189 +#: g10/g10.c:191 msgid "list secret keys" msgstr "Liste der geheimen SchlЭssel" -#: g10/g10.c:190 +#: g10/g10.c:192 msgid "generate a new key pair" msgstr "Ein neues SchlЭsselpaar erzeugen" -#: g10/g10.c:191 +#: g10/g10.c:193 msgid "remove key from the public keyring" msgstr "SchlЭssel entfernen" -#: g10/g10.c:192 +#: g10/g10.c:194 msgid "sign or edit a key" msgstr "Unterschreiben oder Bearbeiten eines SchlЭssels" -#: g10/g10.c:193 +#: g10/g10.c:195 msgid "generate a revocation certificate" msgstr "Ein SchlЭsselwiderruf-Zertifikat erzeugen" -#: g10/g10.c:194 +#: g10/g10.c:196 msgid "export keys" msgstr "SchlЭssel exportieren" -#: g10/g10.c:195 +#: g10/g10.c:197 msgid "export keys to a key server" msgstr "SchlЭssel zu einem SchlЭsselserver exportieren" -#: g10/g10.c:196 +#: g10/g10.c:198 msgid "import keys from a key server" msgstr "SchlЭssel von einem SchlЭsselserver importieren" -#: g10/g10.c:199 +#: g10/g10.c:201 msgid "import/merge keys" msgstr "SchlЭssel importieren/kombinieren" -#: g10/g10.c:201 +#: g10/g10.c:203 msgid "list only the sequence of packets" msgstr "Lediglich die Struktur der Datenpakete anzeigen" -#: g10/g10.c:203 +#: g10/g10.c:205 msgid "export the ownertrust values" msgstr "Exportieren der \"Owner trust\" Werte" -#: g10/g10.c:205 +#: g10/g10.c:207 msgid "import ownertrust values" msgstr "Importieren der \"Owner trust\" Werte" -#: g10/g10.c:207 +#: g10/g10.c:209 msgid "|[NAMES]|update the trust database" msgstr "|[NAMEN]|дndern der \"Trust\"-Datenbank" -#: g10/g10.c:209 +#: g10/g10.c:211 msgid "|[NAMES]|check the trust database" msgstr "|[NAMEN]|эberprЭfen der \"Trust\"-Datenbank" -#: g10/g10.c:210 +#: g10/g10.c:212 msgid "fix a corrupted trust database" msgstr "Reparieren einer beschДdigten \"Trust\"-Datenbank" -#: g10/g10.c:211 +#: g10/g10.c:213 msgid "De-Armor a file or stdin" msgstr "Datei oder stdin von der ASCII-HЭlle befreien" -#: g10/g10.c:212 +#: g10/g10.c:214 msgid "En-Armor a file or stdin" msgstr "Datei oder stdin in eine ASCII-HЭlle einpacken" -#: g10/g10.c:213 +#: g10/g10.c:215 msgid "|algo [files]|print message digests" msgstr "|algo [Dateien]|Message-Digests fЭr die Dateien ausgeben" -#: g10/g10.c:214 +#: g10/g10.c:216 msgid "print all message digests" msgstr "Message-Digests fЭr die Eingabedaten ausgeben" -#: g10/g10.c:220 +#: g10/g10.c:222 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Optionen:\n" " " -#: g10/g10.c:222 +#: g10/g10.c:224 msgid "create ascii armored output" msgstr "Ausgabe mit ASCII-HЭlle versehen" -#: g10/g10.c:223 +#: g10/g10.c:225 msgid "|NAME|encrypt for NAME" msgstr "|NAME|VerschlЭsseln fЭr NAME" -#: g10/g10.c:227 +#: g10/g10.c:229 msgid "use this user-id to sign or decrypt" msgstr "Mit dieser User-ID signieren" -#: g10/g10.c:228 +#: g10/g10.c:230 msgid "|N|set compress level N (0 disables)" msgstr "Kompressionsstufe auf N setzen (0=keine Kompr.)" -#: g10/g10.c:230 +#: g10/g10.c:232 msgid "use canonical text mode" msgstr "Textmodus benutzen" -#: g10/g10.c:231 +#: g10/g10.c:233 msgid "use as output file" msgstr "Als Ausgabedatei benutzen" -#: g10/g10.c:232 +#: g10/g10.c:234 msgid "verbose" msgstr "Detaillierte Informationen" -#: g10/g10.c:233 +#: g10/g10.c:235 msgid "be somewhat more quiet" msgstr "Etwas weniger Infos" -#: g10/g10.c:234 +#: g10/g10.c:236 msgid "don't use the terminal at all" msgstr "" -#: g10/g10.c:235 +#: g10/g10.c:237 msgid "force v3 signatures" msgstr "v3 Signaturen erzwingen" -#: g10/g10.c:236 +#: g10/g10.c:238 msgid "always use a MDC for encryption" msgstr "Beim VerschlЭsseln ein Siegel (MDC) verwenden" -#: g10/g10.c:237 +#: g10/g10.c:239 msgid "do not make any changes" msgstr "Keine wirklichen дnderungen durchfЭhren" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/g10.c:239 +#: g10/g10.c:241 msgid "batch mode: never ask" msgstr "Stapelmodus: Keine Abfragen" -#: g10/g10.c:240 +#: g10/g10.c:242 msgid "assume yes on most questions" msgstr "\"Ja\" als Standardantwort annehmen" -#: g10/g10.c:241 +#: g10/g10.c:243 msgid "assume no on most questions" msgstr "\"Nein\" als Standardantwort annehmen" -#: g10/g10.c:242 +#: g10/g10.c:244 msgid "add this keyring to the list of keyrings" msgstr "Als Жffentlichen SchlЭsselbund mitbenutzen" -#: g10/g10.c:243 +#: g10/g10.c:245 msgid "add this secret keyring to the list" msgstr "Als geheimen SchlЭsselbund mitbenutzen" -#: g10/g10.c:244 +#: g10/g10.c:246 msgid "|NAME|use NAME as default secret key" msgstr "|NAME|NAME als voreingestellten SchlЭssel benutzen" -#: g10/g10.c:245 +#: g10/g10.c:247 msgid "|HOST|use this keyserver to lookup keys" msgstr "|HOST|SchlЭssel bei diesem Server nachschlagen" -#: g10/g10.c:246 +#: g10/g10.c:248 msgid "|NAME|set terminal charset to NAME" msgstr "|NAME|Terminalzeichensatz NAME benutzen" -#: g10/g10.c:247 +#: g10/g10.c:249 msgid "read options from file" msgstr "Optionen aus der Datei lesen" -#: g10/g10.c:249 +#: g10/g10.c:251 msgid "set debugging flags" msgstr "Debug-Flags einschalten" -#: g10/g10.c:250 +#: g10/g10.c:252 msgid "enable full debugging" msgstr "Alle Debug-Flags einschalten" -#: g10/g10.c:251 +#: g10/g10.c:253 msgid "|FD|write status info to this FD" msgstr "|FD|Statusinfo auf FD (Dateihandle) ausgeben" -#: g10/g10.c:252 +#: g10/g10.c:254 msgid "do not write comment packets" msgstr "Keine Kommentarpakete schreiben" -#: g10/g10.c:253 +#: g10/g10.c:255 msgid "(default is 1)" msgstr "BenЖtigte Vollvertrauen (Voreinstellung 1)" -#: g10/g10.c:254 +#: g10/g10.c:256 msgid "(default is 3)" msgstr "BenЖtigte Teilvertrauen (Voreinstellung 3)" -#: g10/g10.c:256 +#: g10/g10.c:258 msgid "|FILE|load extension module FILE" msgstr "|DATEI|Erweiterungsmodul DATEI laden" -#: g10/g10.c:257 +#: g10/g10.c:259 msgid "emulate the mode described in RFC1991" msgstr "Den in RFC1991 beschriebenen Modus nachahmen" -#: g10/g10.c:258 +#: g10/g10.c:260 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "" -#: g10/g10.c:259 +#: g10/g10.c:261 msgid "|N|use passphrase mode N" msgstr "|N|Verwenden des Mantra-Modus N" -#: g10/g10.c:261 +#: g10/g10.c:263 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|NAME|Das Hashverfahren NAME fЭr Mantras benutzen" -#: g10/g10.c:263 +#: g10/g10.c:265 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|NAME|Das VerschlЭ.verfahren NAME fЭr Mantras benutzen" -#: g10/g10.c:264 +#: g10/g10.c:266 msgid "|NAME|use cipher algorithm NAME" msgstr "|NAME|Das VerschlЭ.verfahren NAME benutzen" -#: g10/g10.c:265 +#: g10/g10.c:267 msgid "|NAME|use message digest algorithm NAME" msgstr "|NAME|Das Hashverfahren NAME benutzen" -#: g10/g10.c:266 +#: g10/g10.c:268 msgid "|N|use compress algorithm N" msgstr "|N|Die Komprimierverfahren N benutzen" -#: g10/g10.c:267 +#: g10/g10.c:269 msgid "throw keyid field of encrypted packets" msgstr "Entferne die Absender-ID verschlЭsselter Pakete" -#: g10/g10.c:268 +#: g10/g10.c:270 msgid "|NAME=VALUE|use this notation data" msgstr "|NAME=WERT|verwende diese \"notation\"-Daten" -#: g10/g10.c:270 +#: g10/g10.c:272 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:347 +#: g10/g10.c:351 msgid "Please report bugs to .\n" msgstr "Berichte Эber Bugs (Programmfehler) bitte an .\n" -#: g10/g10.c:351 +#: g10/g10.c:355 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Aufruf: gpg [Optionen] [Dateien] (-h fЭr Hilfe)" -#: g10/g10.c:354 +#: g10/g10.c:358 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:359 +#: g10/g10.c:363 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "UnterstЭtzte Verfahren:\n" -#: g10/g10.c:433 +#: g10/g10.c:437 msgid "usage: gpg [options] " msgstr "Aufruf: gpg [Optionen] " -#: g10/g10.c:473 +#: g10/g10.c:477 msgid "conflicting commands\n" msgstr "WidersprЭchliche Befehle\n" -#: g10/g10.c:605 +#: g10/g10.c:609 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "Hinweis: Keine voreingestellte Optionendatei '%s' vorhanden\n" -#: g10/g10.c:609 +#: g10/g10.c:613 #, c-format msgid "option file `%s': %s\n" msgstr "Optionendatei '%s': %s\n" -#: g10/g10.c:616 +#: g10/g10.c:620 #, c-format msgid "reading options from `%s'\n" msgstr "Optionen werden aus '%s' gelesen\n" -#: g10/g10.c:782 +#: g10/g10.c:786 #, c-format msgid "%s is not a valid character set\n" msgstr "%s ist kein gЭltiger Zeichensatz.\n" -#: g10/g10.c:827 g10/g10.c:839 +#: g10/g10.c:833 g10/g10.c:845 msgid "selected cipher algorithm is invalid\n" msgstr "Das ausgewДhlte VerschlЭsslungsverfahren ist ungЭltig\n" -#: g10/g10.c:833 g10/g10.c:845 +#: g10/g10.c:839 g10/g10.c:851 msgid "selected digest algorithm is invalid\n" msgstr "Das ausgewДhlte Hashverfahren ist ungЭltig\n" -#: g10/g10.c:849 +#: g10/g10.c:855 msgid "the given policy URL is invalid\n" msgstr "Die angegebene URL fЭr Richtlinien ist ungЭltig\n" -#: g10/g10.c:852 +#: g10/g10.c:858 #, 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:854 +#: g10/g10.c:860 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed mЭssen grЖъer als 0 sein\n" -#: g10/g10.c:856 +#: g10/g10.c:862 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed mЭssen grЖъer als 1 sein\n" -#: g10/g10.c:858 +#: g10/g10.c:864 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:861 +#: g10/g10.c:867 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "Hinweis: Vom \"simple S2K\"-Modus (0) ist strikt abzuraten\n" -#: g10/g10.c:865 +#: g10/g10.c:871 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:942 +#: g10/g10.c:948 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "Die Trust-DB kann nicht initialisiert werden: %s\n" -#: g10/g10.c:948 +#: g10/g10.c:954 msgid "--store [filename]" msgstr "--store [Dateiname]" -#: g10/g10.c:955 +#: g10/g10.c:961 msgid "--symmetric [filename]" msgstr "--symmetric [Dateiname]" -#: g10/g10.c:963 +#: g10/g10.c:969 msgid "--encrypt [filename]" msgstr "--encrypt [Dateiname]" -#: g10/g10.c:976 +#: g10/g10.c:982 msgid "--sign [filename]" msgstr "--sign [Dateiname]" -#: g10/g10.c:989 +#: g10/g10.c:995 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [Dateiname]" -#: g10/g10.c:1003 +#: g10/g10.c:1009 msgid "--clearsign [filename]" msgstr "--clearsign [Dateiname]" -#: g10/g10.c:1015 +#: g10/g10.c:1021 msgid "--decrypt [filename]" msgstr "--decrypt [Dateiname]" -#: g10/g10.c:1024 +#: g10/g10.c:1030 msgid "--edit-key username [commands]" msgstr "--edit-key Username [Befehle]" -#: g10/g10.c:1038 +#: g10/g10.c:1044 msgid "--delete-secret-key username" msgstr "--delete-secret-key Username" -#: g10/g10.c:1041 +#: g10/g10.c:1047 msgid "--delete-key username" msgstr "--delete-key Benutzername" -#: g10/encode.c:231 g10/g10.c:1064 g10/sign.c:366 +#: g10/encode.c:231 g10/g10.c:1071 g10/sign.c:366 #, c-format msgid "can't open %s: %s\n" msgstr "'%s' kann nicht geЖffnet werden: %s\n" -#: g10/g10.c:1075 +#: g10/g10.c:1082 msgid "-k[v][v][v][c] [userid] [keyring]" msgstr "-k[v][v][v][c] [Benutzername] [Keyring]" -#: g10/g10.c:1134 +#: g10/g10.c:1141 #, c-format msgid "dearmoring failed: %s\n" msgstr "Entfernen der ASCII-HЭlle ist fehlgeschlagen: %s\n" -#: g10/g10.c:1142 +#: g10/g10.c:1149 #, c-format msgid "enarmoring failed: %s\n" msgstr "Anbringen der ASCII-HЭlle ist fehlgeschlagen: %s\n" -#: g10/g10.c:1208 +#: g10/g10.c:1215 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "UngЭltiges Hashverfahren '%s'\n" -#: g10/g10.c:1283 +#: g10/g10.c:1290 msgid "[filename]" msgstr "[Dateiname]" -#: g10/g10.c:1287 +#: g10/g10.c:1294 msgid "Go ahead and type your message ...\n" msgstr "Auf geht's - Botschaft eintippen ...\n" -#: g10/decrypt.c:59 g10/g10.c:1290 g10/verify.c:66 +#: g10/decrypt.c:59 g10/g10.c:1297 g10/verify.c:66 #, c-format msgid "can't open `%s'\n" msgstr "'%s' kann nicht geЖffnet werden\n" -#: g10/g10.c:1457 +#: g10/g10.c:1466 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" -#: g10/g10.c:1463 +#: g10/g10.c:1472 msgid "" "a notation name must have only letters, digits, dots or underscores 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:1469 +#: g10/g10.c:1478 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" -#: g10/g10.c:1477 +#: g10/g10.c:1486 msgid "a notation value must not use any control characters\n" msgstr "Ein \"notation\"-Wert darf keine Kontrollzeichen verwenden\n" #: g10/armor.c:296 #, c-format msgid "armor: %s\n" msgstr "ASCII-HЭlle: %s\n" #: g10/armor.c:319 msgid "invalid armor header: " msgstr "UngЭltige ASCII-HЭlle" #: g10/armor.c:326 msgid "armor header: " msgstr "ASCII-HЭlle: " #: g10/armor.c:337 msgid "invalid clearsig header\n" msgstr "UngЭltige Klartextsignatur-Einleitung\n" #: g10/armor.c:389 msgid "nested clear text signatures\n" msgstr "verschachtelte Klartextunterschriften\n" #: g10/armor.c:500 msgid "invalid dash escaped line: " msgstr "UngЭltige mit Bindestrich \"escapte\" Zeile: " #: g10/armor.c:512 msgid "unexpected armor:" msgstr "Unerwartete ASCII-HЭlle:" #: g10/armor.c:629 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "UngЭltiges \"radix64\" Zeichen %02x ignoriert\n" #: g10/armor.c:672 msgid "premature eof (no CRC)\n" msgstr "vorzeitiges Dateiende (keine PrЭfsumme)\n" #: g10/armor.c:706 msgid "premature eof (in CRC)\n" msgstr "vorzeitiges Dateiende (innerhalb der PrЭfsumme)\n" #: g10/armor.c:710 msgid "malformed CRC\n" msgstr "Falsch aufgebaute PrЭfsumme\n" #: g10/armor.c:714 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "PrЭfsummenfehler; %06lx - %06lx\n" #: g10/armor.c:731 msgid "premature eof (in Trailer)\n" msgstr "vorzeitiges Dateiende (im Nachsatz)\n" #: g10/armor.c:735 msgid "error in trailer line\n" msgstr "Fehler in der Nachsatzzeile\n" #: g10/armor.c:1001 msgid "no valid OpenPGP data found.\n" msgstr "Keine gЭltigen OpenPGP-Daten gefunden.\n" #: g10/armor.c:1005 #, 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:1009 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:137 #, c-format msgid "" "No trust value assigned to %lu:\n" "%4u%c/%08lX %s \"" msgstr "" "Es ist kein \"Owner trust\" fЭr %lu definiert:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:147 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" " 1 = Don't know\n" " 2 = I do NOT trust\n" " 3 = I trust marginally\n" " 4 = I trust fully\n" " s = please show me more information\n" msgstr "" "Bitte entscheiden Sie, in wieweit Sie diesem User zutrauen,\n" "den SchlЭssel eines anderen Users korrekt zu prЭfen (Vergleich mit\n" "Lictbildausweisen, Vergleich der FingerabdrЭcke aus unterschiedlichen\n" "Quellen ...)?\n" "\n" " 1 = Weiъ nicht so recht\n" " 2 = Nee, dem traue ich das nicht zu\n" " 3 = Ich vertraue ihm normalerweise\n" " 4 = Ich vertraue ihm vollstДndig\n" " s = Bitte weitere Information anzeigen\n" #: g10/pkclist.c:156 msgid " m = back to the main menu\n" msgstr " m = ZurЭck zum MenЭ\n" #: g10/pkclist.c:158 msgid " q = quit\n" msgstr " q = verlassen\n" # valid user replies (not including 1..4) #. a string with valid answers #: g10/pkclist.c:163 msgid "sSmMqQ" msgstr "sSmMqQ" #: g10/pkclist.c:167 msgid "Your decision? " msgstr "Ihre Auswahl? " #: g10/pkclist.c:187 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Zertifikate fЭhren zu einem letztlich vertrauenswЭrdigen SchlЭssel:\n" -#: g10/pkclist.c:254 +#: g10/pkclist.c:256 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" -#: g10/pkclist.c:260 +#: g10/pkclist.c:262 msgid "" "No path leading to one of our keys found.\n" "\n" msgstr "" "Kein Pfad fЭhrt zu einen unserer SchlЭsseln.\n" "\n" -#: g10/pkclist.c:262 +#: g10/pkclist.c:264 msgid "" "No certificates with undefined trust found.\n" "\n" msgstr "" "Keine Zertifikate mit undefinierten Vertrauen gefunden.\n" "\n" -#: g10/pkclist.c:264 +#: g10/pkclist.c:266 msgid "" "No trust values changed.\n" "\n" msgstr "" "Keine \"trust\" Werte geДndert.\n" "\n" -#: g10/pkclist.c:281 +#: g10/pkclist.c:283 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "SchlЭssel %08lX: SchlЭssel wurde widerrufen\n" -#: g10/pkclist.c:287 g10/pkclist.c:297 g10/pkclist.c:403 +#: g10/pkclist.c:289 g10/pkclist.c:299 g10/pkclist.c:405 msgid "Use this key anyway? " msgstr "Diesen SchlЭssel trotzdem benutzen?" -#: g10/pkclist.c:291 +#: g10/pkclist.c:293 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "SchlЭssel %08lX: UnterschlЭssel wurde widerrufen\n" -#: g10/pkclist.c:321 +#: g10/pkclist.c:323 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: SchlЭssel ist verfallen!\n" -#: g10/pkclist.c:327 +#: g10/pkclist.c:329 #, c-format msgid "%08lX: no info to calculate a trust probability\n" msgstr "" "%08lX: Keine Infos zur Berechnung der Vertrauenswahrscheinlichkeit " "vorgefunden\n" -#: g10/pkclist.c:341 +#: g10/pkclist.c:343 #, 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:347 +#: g10/pkclist.c:349 #, 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:353 +#: g10/pkclist.c:355 msgid "This key probably belongs to the owner\n" msgstr "" "Dieser SchlЭssel gehЖrt hЖchstwahrscheinlich dem angegebenen Besitzer\n" -#: g10/pkclist.c:358 +#: g10/pkclist.c:360 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:398 +#: g10/pkclist.c:400 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" "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:411 g10/pkclist.c:433 +#: g10/pkclist.c:413 g10/pkclist.c:435 msgid "WARNING: Using untrusted key!\n" msgstr "WARNUNG: Ein SchlЭssel ohne gesichertes Vertrauen wird benutzt!\n" -#: g10/pkclist.c:454 +#: g10/pkclist.c:456 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:455 +#: g10/pkclist.c:457 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:459 +#: g10/pkclist.c:461 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:480 +#: g10/pkclist.c:482 msgid "Note: This key has expired!\n" msgstr "Hinweis: Dieser SchlЭssel ist verfallen!\n" -#: g10/pkclist.c:487 +#: g10/pkclist.c:489 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:489 +#: g10/pkclist.c:491 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:505 +#: g10/pkclist.c:507 msgid "WARNING: We do NOT trust this key!\n" msgstr "WARNUNG: Wir haben KEIN Vertrauen zu diesem SchlЭssel!\n" -#: g10/pkclist.c:506 +#: g10/pkclist.c:508 msgid " The signature is probably a FORGERY.\n" msgstr " Die Signatur ist wahrscheinlich eine FдLSCHUNG.\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:515 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:516 +#: g10/pkclist.c:518 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/pkclist.c:580 g10/pkclist.c:602 g10/pkclist.c:665 g10/pkclist.c:705 +#: g10/pkclist.c:582 g10/pkclist.c:604 g10/pkclist.c:670 g10/pkclist.c:715 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: Эbersprungen: %s\n" -#: g10/pkclist.c:588 g10/pkclist.c:687 +#: g10/pkclist.c:590 g10/pkclist.c:697 #, fuzzy, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: SchlЭsselblock Leseproblem: %s\n" -#: g10/pkclist.c:611 +#: g10/pkclist.c:613 msgid "" "You did not specify a user ID. (you may use \"-r\")\n" "\n" msgstr "" "Sie gaben keine User-ID angegeben (Benutzen Sie die Option \"-r\").\n" "\n" -#: g10/pkclist.c:616 +#: g10/pkclist.c:618 msgid "Enter the user ID: " msgstr "Geben Sie die User-ID ein: " -#: g10/pkclist.c:627 +#: g10/pkclist.c:629 msgid "No such user ID.\n" msgstr "Keine solche User-ID vorhanden.\n" -#: g10/pkclist.c:673 +#: g10/pkclist.c:639 +#, fuzzy +msgid "Public key is disabled.\n" +msgstr "жffentlicher SchlЭssel ist %08lX\n" + +#: g10/pkclist.c:678 #, c-format msgid "%s: error checking key: %s\n" msgstr "%s: Fehler beim PrЭfen des SchlЭssels: %s\n" -#: g10/pkclist.c:711 +#: g10/pkclist.c:683 +#, fuzzy, c-format +msgid "%s: skipped: public key is disabled\n" +msgstr "%s: SchlЭsselblock Leseproblem: %s\n" + +#: g10/pkclist.c:721 msgid "no valid addressees\n" msgstr "Keine gЭltigen Adressaten\n" #: g10/keygen.c:122 msgid "writing self signature\n" msgstr "Die Eigenbeglaubigung wird geschrieben\n" #: g10/keygen.c:160 msgid "writing key binding signature\n" msgstr "Schreiben der \"key-binding\" Signatur\n" #: g10/keygen.c:386 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:388 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA und ElGamal (voreingestellt)\n" #: g10/keygen.c:389 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (nur signieren/beglaubigen)\n" #: g10/keygen.c:391 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (nur verschlЭsseln)\n" #: g10/keygen.c:392 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (signieren/beglaubigen und verschlЭsseln)\n" #: g10/keygen.c:394 #, c-format msgid " (%d) ElGamal in a v3 packet\n" msgstr " (%d) ElGamal in einem v3-Paket\n" #: g10/keygen.c:399 msgid "Your selection? " msgstr "Ihre Auswahl? " #: g10/keygen.c:409 msgid "Do you really want to create a sign and encrypt key? " msgstr "" "MЖchten Sie wirklich einen Unterschriften-/VerschlЭsselungschlЭssel " "erzeugen? " #: g10/keygen.c:430 msgid "Invalid selection.\n" msgstr "UngЭltige Auswahl.\n" #: g10/keygen.c:442 #, 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:449 msgid "What keysize do you want? (1024) " msgstr "Welche SchlЭssellДnge wЭnschen Sie? (1024) " #: g10/keygen.c:454 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:456 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:466 #, 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:471 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:474 msgid "Are you sure that you want this keysize? " msgstr "Sind Sie sicher, daъ Sie diese SchlЭssellДnge wЭnschen? " #: g10/keygen.c:475 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:483 msgid "Do you really need such a large keysize? " msgstr "Brauchen Sie wirklich einen derartig langen SchlЭssel? " #: g10/keygen.c:489 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Die verlangte SchlЭssellДnge betrДgt %u Bit\n" #: g10/keygen.c:492 g10/keygen.c:496 #, c-format msgid "rounded up to %u bits\n" msgstr "aufgerundet auf %u Bit\n" #: g10/keygen.c:509 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" " = key expires in n days\n" " w = key expires in n weeks\n" " m = key expires in n months\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" " = SchlЭssel verfДllt nach n Tagen\n" " w = SchlЭssel verfДllt nach n Wochen\n" " m = SchlЭssel verfДllt nach n Monaten\n" " y = SchlЭssel verfДllt nach n Jahren\n" -#: g10/keygen.c:524 +#: g10/keygen.c:526 msgid "Key is valid for? (0) " msgstr "Der SchlЭssel bleibt wie lange gЭltig? (0) " -#: g10/keygen.c:535 +#: g10/keygen.c:547 msgid "invalid value\n" msgstr "UngЭltiger Wert.\n" -#: g10/keygen.c:540 +#: g10/keygen.c:552 msgid "Key does not expire at all\n" msgstr "Der SchlЭssel verfДllt nie.\n" #. print the date when the key expires -#: g10/keygen.c:546 +#: g10/keygen.c:558 #, c-format msgid "Key expires at %s\n" msgstr "Der SchlЭssel verfДllt am %s\n" -#: g10/keygen.c:552 +#: g10/keygen.c:564 msgid "Is this correct (y/n)? " msgstr "Ist dies richtig? (j/n) " -#: g10/keygen.c:595 +#: g10/keygen.c:607 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) \"\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) \"\n" "\n" -#: g10/keygen.c:606 +#: g10/keygen.c:618 msgid "Real name: " msgstr "Ihr Name (\"Vorname Nachname\"): " -#: g10/keygen.c:610 +#: g10/keygen.c:622 msgid "Invalid character in name\n" msgstr "UngЭltiges Zeichen im Namen\n" -#: g10/keygen.c:612 +#: g10/keygen.c:624 msgid "Name may not start with a digit\n" msgstr "Der Name darf nicht mit einer Ziffer beginnen.\n" -#: g10/keygen.c:614 +#: g10/keygen.c:626 msgid "Name must be at least 5 characters long\n" msgstr "Der Name muъ min. 5 Zeichen lang sein.\n" -#: g10/keygen.c:622 +#: g10/keygen.c:634 msgid "Email address: " msgstr "E-Mail-Adresse: " -#: g10/keygen.c:633 +#: g10/keygen.c:645 msgid "Not a valid email address\n" msgstr "Diese E-Mail-Adresse ist ungЭltig\n" -#: g10/keygen.c:641 +#: g10/keygen.c:653 msgid "Comment: " msgstr "Kommentar: " -#: g10/keygen.c:647 +#: g10/keygen.c:659 msgid "Invalid character in comment\n" msgstr "UngЭltiges Zeichen im Kommentar.\n" -#: g10/keygen.c:669 +#: g10/keygen.c:681 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Sie benutzen den Zeichensatz `%s'\n" -#: g10/keygen.c:675 +#: g10/keygen.c:687 #, 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:678 +#: g10/keygen.c:690 msgid "NnCcEeOoQq" msgstr "NnKkEeFfBb" -#: g10/keygen.c:688 +#: g10/keygen.c:700 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:740 +#: g10/keygen.c:752 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:455 g10/keygen.c:748 +#: g10/keyedit.c:456 g10/keygen.c:760 msgid "passphrase not correctly repeated; try again.\n" msgstr "Mantra wurde nicht richtig wiederholt; noch einmal versuchen.\n" -#: g10/keygen.c:754 +#: g10/keygen.c:766 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:775 +#: g10/keygen.c:787 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:845 +#: g10/keygen.c:857 msgid "Key generation can only be used in interactive mode\n" msgstr "" "Die SchlЭsselerzeugung kann nur im interaktiven Modus benutzt werden.\n" -#: g10/keygen.c:853 +#: g10/keygen.c:865 msgid "DSA keypair will have 1024 bits.\n" msgstr "Der DSA SchlЭssel wird 1024 Bits haben.\n" -#: g10/keygen.c:859 +#: g10/keygen.c:871 #, fuzzy msgid "Key generation canceled.\n" msgstr "SchlЭsselerzeugung abgebrochen.\n" -#: g10/keygen.c:869 +#: g10/keygen.c:881 #, c-format msgid "writing public certificate to `%s'\n" msgstr "schreiben des Жffentlichen Zertifikats nach '%s'\n" -#: g10/keygen.c:870 +#: g10/keygen.c:882 #, c-format msgid "writing secret certificate to `%s'\n" msgstr "schreiben des geheimen Zertifikats nach '%s'\n" -#: g10/keygen.c:947 +#: g10/keygen.c:959 msgid "public and secret key created and signed.\n" msgstr "жffentlichen und geheimen SchlЭssel erzeugt und signiert.\n" -#: g10/keygen.c:949 +#: g10/keygen.c:961 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:963 g10/keygen.c:1062 +#: g10/keygen.c:975 g10/keygen.c:1074 #, c-format msgid "Key generation failed: %s\n" msgstr "SchlЭsselerzeugung fehlgeschlagen: %s\n" -#: g10/keygen.c:1007 g10/sig-check.c:300 g10/sign.c:105 +#: g10/keygen.c:1019 g10/sig-check.c:312 g10/sign.c:105 #, 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:1009 g10/sig-check.c:302 g10/sign.c:107 +#: g10/keygen.c:1021 g10/sig-check.c:314 g10/sign.c:107 #, 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:1040 +#: g10/keygen.c:1052 msgid "Really create? " msgstr "Wirklich erzeugen? " -#: g10/encode.c:91 g10/openfile.c:118 g10/openfile.c:208 g10/tdbio.c:467 +#: g10/encode.c:91 g10/openfile.c:156 g10/openfile.c:246 g10/tdbio.c:467 #: g10/tdbio.c:528 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: kann nicht geЖffnet werden: %s\n" #: g10/encode.c:113 #, c-format msgid "error creating passphrase: %s\n" msgstr "Fehler beim Erzeugen des Mantras: %s\n" #: g10/encode.c:167 g10/encode.c:287 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: WARNUNG: Leere Datei\n" #: g10/encode.c:237 #, c-format msgid "reading from `%s'\n" msgstr "Lesen von '%s'\n" #: g10/encode.c:431 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s verschlЭsselt fЭr: %s\n" #: g10/export.c:147 #, c-format msgid "%s: user not found: %s\n" msgstr "%s: Benutzer nicht gefunden: %s\n" #: g10/export.c:156 #, c-format msgid "certificate read problem: %s\n" msgstr "Zertifikat Leseproblem: %s\n" #: g10/export.c:165 #, 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:203 msgid "WARNING: nothing exported\n" msgstr "WARNUNG: Nichts exportiert\n" #: g10/getkey.c:206 msgid "too many entries in pk cache - disabled\n" msgstr "zu viele EintrДge im pk-Lager - abgeschaltet\n" #: g10/getkey.c:345 msgid "too many entries in unk cache - disabled\n" msgstr "zu viele EintrДge im unk-Lager - abgeschaltet\n" #: g10/getkey.c:1535 g10/getkey.c:1591 #, 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/import.c:116 #, c-format msgid "can't open `%s': %s\n" msgstr "'%s' kann nicht geЖffnet werden: %s\n" #: g10/import.c:160 #, c-format msgid "skipping block of type %d\n" msgstr "Эberspringe den Block vom Typ %d\n" -#: g10/import.c:167 g10/trustdb.c:2560 g10/trustdb.c:2668 +#: g10/import.c:167 g10/trustdb.c:1656 g10/trustdb.c:1695 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu SchlЭssel bislang bearbeitet\n" #: g10/import.c:172 #, c-format msgid "error reading `%s': %s\n" msgstr "Fehler beim Lesen von `%s': %s\n" #: g10/import.c:175 #, c-format msgid "Total number processed: %lu\n" msgstr "Anzahl insgesamt bearbeiteter SchlЭssel: %lu\n" #: g10/import.c:177 #, c-format msgid " w/o user IDs: %lu\n" msgstr " ohne User-ID: %lu\n" #: g10/import.c:179 #, c-format msgid " imported: %lu" msgstr " importiert: %lu" #: g10/import.c:185 #, c-format msgid " unchanged: %lu\n" msgstr " unverДndert: %lu\n" #: g10/import.c:187 #, c-format msgid " new user IDs: %lu\n" msgstr " neue User-IDs: %lu\n" #: g10/import.c:189 #, c-format msgid " new subkeys: %lu\n" msgstr " neue UnterschlЭssel: %lu\n" #: g10/import.c:191 #, c-format msgid " new signatures: %lu\n" msgstr " neue Signaturen: %lu\n" #: g10/import.c:193 #, c-format msgid " new key revocations: %lu\n" msgstr "neue SchlЭsselwiderrufe: %lu\n" #: g10/import.c:195 #, c-format msgid " secret keys read: %lu\n" msgstr " gelesene geheime Schl.: %lu\n" #: g10/import.c:197 #, c-format msgid " secret keys imported: %lu\n" msgstr "geheime SchlЭssel importiert: %lu\n" #: g10/import.c:199 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " unverДnderte geh.Schl.: %lu\n" -#: g10/import.c:342 g10/import.c:529 +#: g10/import.c:342 g10/import.c:526 #, c-format msgid "key %08lX: no user id\n" msgstr "SchlЭssel %08lX: Keine User-ID\n" #: g10/import.c:353 #, c-format msgid "key %08lX: no valid user ids\n" msgstr "SchlЭssel %08lX: Keine gЭltigen User-IDs\n" #: g10/import.c:355 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:366 g10/import.c:596 +#: g10/import.c:366 g10/import.c:593 #, 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:372 msgid "no default public keyring\n" msgstr "Kein voreingestellter Жffentlicher SchlЭsselbund\n" -#: g10/import.c:376 g10/openfile.c:148 g10/sign.c:268 g10/sign.c:559 +#: g10/import.c:376 g10/openfile.c:186 g10/sign.c:268 g10/sign.c:559 #, c-format msgid "writing to `%s'\n" msgstr "Schreiben nach '%s'\n" -#: g10/import.c:379 g10/import.c:435 g10/import.c:544 g10/import.c:645 +#: g10/import.c:379 g10/import.c:432 g10/import.c:541 g10/import.c:642 #, c-format msgid "can't lock keyring `%s': %s\n" msgstr "kann SchlЭsselbund `%s' nicht sperren: %s\n" -#: g10/import.c:382 g10/import.c:438 g10/import.c:547 g10/import.c:648 +#: g10/import.c:382 g10/import.c:435 g10/import.c:544 g10/import.c:645 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "Fehler beim Schreiben des SchlЭsselbundes `%s': %s\n" #: g10/import.c:387 #, c-format msgid "key %08lX: public key imported\n" msgstr "SchlЭssel %08lX: жffentlicher SchlЭssel importiert\n" #: g10/import.c:399 #, 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:411 g10/import.c:604 +#: g10/import.c:408 g10/import.c:601 #, 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:417 g10/import.c:610 +#: g10/import.c:414 g10/import.c:607 #, 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:444 +#: g10/import.c:441 #, c-format msgid "key %08lX: 1 new user-id\n" msgstr "SchlЭssel %08lX: 1 neue User-ID\n" -#: g10/import.c:447 +#: g10/import.c:444 #, c-format msgid "key %08lX: %d new user-ids\n" msgstr "SchlЭssel %08lX: %d neue User-IDs\n" -#: g10/import.c:450 +#: g10/import.c:447 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "SchlЭssel %08lX: 1 neue Signatur\n" -#: g10/import.c:453 +#: g10/import.c:450 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "SchlЭssel %08lX: %d neue Signaturen\n" -#: g10/import.c:456 +#: g10/import.c:453 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "SchlЭssel %08lX: 1 neuer UnterschlЭssel\n" -#: g10/import.c:459 +#: g10/import.c:456 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "SchlЭssel %08lX: %d neue UnterschlЭssel\n" -#: g10/import.c:469 +#: g10/import.c:466 #, c-format msgid "key %08lX: not changed\n" msgstr "SchlЭssel %08lX: Nicht geДndert\n" -#: g10/import.c:552 +#: g10/import.c:549 #, 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:556 +#: g10/import.c:553 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "SchlЭssel %08lX: Ist bereits im geheimen SchlЭsselbund\n" -#: g10/import.c:561 +#: g10/import.c:558 #, 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:590 +#: g10/import.c:587 #, 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:621 +#: g10/import.c:618 #, 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:653 +#: g10/import.c:650 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "SchlЭssel %08lX: Widerrufzertifikat importiert\n" -#: g10/import.c:686 +#: g10/import.c:683 #, 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:693 g10/import.c:717 +#: g10/import.c:690 g10/import.c:714 #, c-format msgid "key %08lX: unsupported public key algorithm\n" msgstr "SchlЭssel %08lX: Nicht unterstЭtzetes Public-Key-Verfahren\n" -#: g10/import.c:694 +#: g10/import.c:691 #, c-format msgid "key %08lX: invalid self-signature\n" msgstr "SchlЭssel %08lX: UngЭltige Eigenbeglaubigung\n" -#: g10/import.c:709 +#: g10/import.c:706 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "SchlЭssel %08lX: Kein UnterschlЭssel fЭr die SchlЭsselanbindung\n" -#: g10/import.c:718 +#: g10/import.c:715 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "SchlЭssel %08lX: UngЭltige UnterschlЭssel-Anbindung\n" -#: g10/import.c:750 +#: g10/import.c:747 #, c-format msgid "key %08lX: skipped userid '" msgstr "SchlЭssel %08lX: Эbergehe User-ID '" -#: g10/import.c:773 +#: g10/import.c:770 #, 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:798 +#: g10/import.c:795 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "SchlЭssel %08lX: Nicht exportfДhige Unterschrift - Эbergangen\n" -#: g10/import.c:807 +#: g10/import.c:804 #, 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:815 +#: g10/import.c:812 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "SchlЭssel %08lX: UngЭltiges Widerrufzertifikat: %s - Эbergangen\n" -#: g10/import.c:915 +#: g10/import.c:912 #, 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:966 +#: g10/import.c:963 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "SchlЭssel %08lX: Widerrufzertifikat hinzugefЭgt\n" -#: g10/import.c:1079 g10/import.c:1134 +#: g10/import.c:1076 g10/import.c:1131 #, c-format msgid "key %08lX: our copy has no self-signature\n" msgstr "SchlЭssel %08lX: Unsere Kopie hat keine Eigenbeglaubigung\n" -#: g10/keyedit.c:92 +#: g10/keyedit.c:93 #, c-format msgid "%s: user not found\n" msgstr "%s: Benutzer nicht gefunden\n" -#: g10/keyedit.c:153 +#: g10/keyedit.c:154 msgid "[revocation]" msgstr "[Widerruf]" -#: g10/keyedit.c:154 +#: g10/keyedit.c:155 msgid "[self-signature]" msgstr "[Eigenbeglaubigung]" -#: g10/keyedit.c:218 +#: g10/keyedit.c:219 msgid "1 bad signature\n" msgstr "1 falsche Beglaubigung\n" -#: g10/keyedit.c:220 +#: g10/keyedit.c:221 #, c-format msgid "%d bad signatures\n" msgstr "%d falsche Beglaubigungen\n" -#: g10/keyedit.c:222 +#: g10/keyedit.c:223 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:224 +#: g10/keyedit.c:225 #, 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:226 +#: g10/keyedit.c:227 msgid "1 signature not checked due to an error\n" msgstr "1 Beglaubigung aufgrund von Fehler nicht geprЭft\n" -#: g10/keyedit.c:228 +#: g10/keyedit.c:229 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d Beglaubigungen aufgrund von Fehlern nicht geprЭft\n" -#: g10/keyedit.c:230 +#: g10/keyedit.c:231 msgid "1 user id without valid self-signature detected\n" msgstr "Eine User-ID ohne gЭltige Eigenbeglaubigung entdeckt\n" -#: g10/keyedit.c:232 +#: g10/keyedit.c:233 #, c-format msgid "%d user ids without valid self-signatures detected\n" msgstr "%d User-IDs ohne gЭltige Eigenbeglaubigung entdeckt\n" #. Fixme: see whether there is a revocation in which #. * case we should allow to sign it again. -#: g10/keyedit.c:312 +#: g10/keyedit.c:313 #, c-format msgid "Already signed by key %08lX\n" msgstr "Ist bereits durch SchlЭssel %08lX beglaubigt.\n" -#: g10/keyedit.c:320 +#: g10/keyedit.c:321 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Nichts zu beglaubigen fЭr SchlЭssel %08lX\n" -#: g10/keyedit.c:329 +#: g10/keyedit.c:330 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:338 +#: g10/keyedit.c:339 msgid "" "The signature will be marked as non-exportable.\n" "\n" msgstr "" "Die Unterschrift wird als nicht exportfДhig markiert werden.\n" "\n" -#: g10/keyedit.c:343 +#: g10/keyedit.c:344 msgid "Really sign? " msgstr "Wirklich unterschreiben? " -#: g10/keyedit.c:369 g10/keyedit.c:1790 g10/keyedit.c:1839 g10/sign.c:128 +#: g10/keyedit.c:370 g10/keyedit.c:1806 g10/keyedit.c:1855 g10/sign.c:128 #, c-format msgid "signing failed: %s\n" msgstr "Beglaubigung fehlgeschlagen: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:423 msgid "This key is not protected.\n" msgstr "Dieser SchlЭssel ist nicht geschЭtzt.\n" -#: g10/keyedit.c:425 +#: g10/keyedit.c:426 msgid "Key is protected.\n" msgstr "SchlЭssel ist geschЭtzt.\n" -#: g10/keyedit.c:442 +#: g10/keyedit.c:443 #, c-format msgid "Can't edit this key: %s\n" msgstr "Dieser SchlЭssel kann nicht editiert werden: %s\n" -#: g10/keyedit.c:447 +#: g10/keyedit.c:448 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:459 +#: g10/keyedit.c:460 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:462 +#: g10/keyedit.c:463 msgid "Do you really want to do this? " msgstr "MЖchten Sie dies wirklich tun? " -#: g10/keyedit.c:523 +#: g10/keyedit.c:524 msgid "moving a key signature to the correct place\n" msgstr "schiebe eine Beglaubigung an die richtige Stelle\n" -#: g10/keyedit.c:559 +#: g10/keyedit.c:561 msgid "quit this menu" msgstr "MenЭ verlassen" -#: g10/keyedit.c:560 +#: g10/keyedit.c:562 msgid "q" msgstr "q" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save" msgstr "save" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save and quit" msgstr "speichern und MenЭ verlassen" -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "help" msgstr "help" -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "show this help" msgstr "Diese Hilfe zeigen" -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 msgid "show fingerprint" msgstr "\"Fingerabdruck\" anzeigen" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 msgid "list" msgstr "Liste der SchlЭssel" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 msgid "list key and user ids" msgstr "SchlЭssel und User-ID auflisten" -#: g10/keyedit.c:566 +#: g10/keyedit.c:568 msgid "l" msgstr "l" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "uid" msgstr "uid" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "select user id N" msgstr "User-ID N auswДhlen" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "key" msgstr "key" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "select secondary key N" msgstr "ZweitschlЭssel N auswДhlen" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 msgid "check" msgstr "check" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 msgid "list signatures" msgstr "Liste der Signaturen" -#: g10/keyedit.c:570 +#: g10/keyedit.c:572 msgid "c" msgstr "c" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 msgid "sign" msgstr "sign" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 msgid "sign the key" msgstr "Den SchlЭssel signieren" -#: g10/keyedit.c:572 +#: g10/keyedit.c:574 msgid "s" msgstr "s" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 msgid "lsign" msgstr "lsign" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 msgid "sign the key locally" msgstr "Den SchlЭssel nur auf diesem Rechner signieren" -#: g10/keyedit.c:574 +#: g10/keyedit.c:576 msgid "debug" msgstr "debug" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "adduid" msgstr "adduid" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "add a user id" msgstr "Eine User-ID hinzufЭgen" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 msgid "deluid" msgstr "deluid" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 msgid "delete user id" msgstr "User-ID entfernen" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 msgid "addkey" msgstr "addkey" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 msgid "add a secondary key" msgstr "Einen ZweitschlЭssel hinzufЭgen" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delkey" msgstr "delkey" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delete a secondary key" msgstr "Einen ZweitschlЭssel entfernen" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 msgid "delsig" msgstr "delsig" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 msgid "delete signatures" msgstr "Signatur entfernen" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 msgid "expire" msgstr "expire" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 msgid "change the expire date" msgstr "дndern des Verfallsdatums" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle" msgstr "toggle" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle between secret and public key listing" msgstr "Umschalten zwischen Anzeige geheimer und Жffentlicher SchlЭssel" -#: g10/keyedit.c:583 +#: g10/keyedit.c:585 msgid "t" msgstr "t" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "pref" msgstr "pref" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "list preferences" msgstr "Liste der Voreinstellungen" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 msgid "passwd" msgstr "passwd" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 msgid "change the passphrase" msgstr "Das Mantra Дndern" -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "trust" msgstr "trust" -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "change the ownertrust" msgstr "Den \"Owner trust\" Дndern" -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 msgid "revsig" msgstr "revsig" -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 msgid "revoke signatures" msgstr "Signaturen widerrufen" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 msgid "revkey" msgstr "revkey" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 msgid "revoke a secondary key" msgstr "Einen ZweitschlЭssel widerrufen" -#: g10/keyedit.c:607 +#: g10/keyedit.c:591 +msgid "disable" +msgstr "" + +#: g10/keyedit.c:591 +#, fuzzy +msgid "disable a key" +msgstr "Falscher SchlЭssel" + +#: g10/keyedit.c:592 +msgid "enable" +msgstr "" + +#: g10/keyedit.c:592 +#, fuzzy +msgid "enable a key" +msgstr "Falscher SchlЭssel" + +#: g10/keyedit.c:611 msgid "can't do that in batchmode\n" msgstr "Dies kann im Batchmodus nicht durchgefЭhrt werden.\n" #. check that they match #. FIXME: check that they both match -#: g10/keyedit.c:636 +#: g10/keyedit.c:640 msgid "Secret key is available.\n" msgstr "Geheimer SchlЭssel ist vorhanden.\n" -#: g10/keyedit.c:665 +#: g10/keyedit.c:669 msgid "Command> " msgstr "Befehl> " -#: g10/keyedit.c:692 +#: g10/keyedit.c:696 msgid "Need the secret key to do this.\n" msgstr "Hierzu wird der geheime SchlЭssel benЖtigt.\n" -#: g10/keyedit.c:714 +#: g10/keyedit.c:718 msgid "Save changes? " msgstr "дnderungen speichern? " -#: g10/keyedit.c:717 +#: g10/keyedit.c:721 msgid "Quit without saving? " msgstr "Beenden ohne zu speichern? " -#: g10/keyedit.c:727 +#: g10/keyedit.c:731 #, c-format msgid "update failed: %s\n" msgstr "дnderung fehlgeschlagen: %s\n" -#: g10/keyedit.c:734 +#: g10/keyedit.c:738 #, c-format msgid "update secret failed: %s\n" msgstr "дnderung des Geheimnisses fehlgeschlagen: %s\n" -#: g10/keyedit.c:741 +#: g10/keyedit.c:745 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:744 g10/keyedit.c:803 +#: g10/keyedit.c:748 g10/keyedit.c:807 #, c-format msgid "update of trustdb failed: %s\n" msgstr "дnderung der \"Trust-DB\" fehlgeschlagen: %s\n" -#: g10/keyedit.c:777 +#: g10/keyedit.c:781 msgid "Really sign all user ids? " msgstr "Wirklich alle User-IDs beglaubigen? " -#: g10/keyedit.c:778 +#: g10/keyedit.c:782 msgid "Hint: Select the user ids to sign\n" msgstr "Tip: WДhlen Sie die User-ID, die beglaubigt werden soll\n" -#: g10/keyedit.c:814 g10/keyedit.c:835 +#: g10/keyedit.c:818 g10/keyedit.c:839 msgid "You must select at least one user id.\n" msgstr "Zumindestens eine User-ID muъ ausgewДhlt werden.\n" -#: g10/keyedit.c:816 +#: g10/keyedit.c:820 msgid "You can't delete the last user id!\n" msgstr "Die letzte User-ID kann nicht gelЖscht werden!\n" -#: g10/keyedit.c:819 +#: g10/keyedit.c:823 msgid "Really remove all selected user ids? " msgstr "MЖchten Sie alle ausgewДhlten User-IDs wirklich entfernen? " -#: g10/keyedit.c:820 +#: g10/keyedit.c:824 msgid "Really remove this user id? " msgstr "Diese User-ID wirklich entfernen? " -#: g10/keyedit.c:858 g10/keyedit.c:880 +#: g10/keyedit.c:860 g10/keyedit.c:882 msgid "You must select at least one key.\n" msgstr "Zumindestens ein SchlЭssel muъ ausgewДhlt werden.\n" -#: g10/keyedit.c:862 +#: g10/keyedit.c:864 msgid "Do you really want to delete the selected keys? " msgstr "MЖchten Sie die ausgewДhlten SchlЭssel wirklich entfernen? " -#: g10/keyedit.c:863 +#: g10/keyedit.c:865 msgid "Do you really want to delete this key? " msgstr "MЖchten Sie diesen SchlЭssel wirklich entfernen? " -#: g10/keyedit.c:884 +#: g10/keyedit.c:886 msgid "Do you really want to revoke the selected keys? " msgstr "MЖchten Sie die ausgewДhlten SchlЭssel wirklich widerrufen? " -#: g10/keyedit.c:885 +#: g10/keyedit.c:887 msgid "Do you really want to revoke this key? " msgstr "MЖchten Sie diesen SchlЭssel wirklich wiederrufen? " -#: g10/keyedit.c:939 +#: g10/keyedit.c:949 msgid "Invalid command (try \"help\")\n" msgstr "UngЭltiger Befehl (versuchen Sie's mal mit \"help\")\n" -#: g10/keyedit.c:1294 +#: g10/keyedit.c:1039 +#, fuzzy +msgid "This key has been disabled" +msgstr "Hinweis: Dieser SchlЭssel ist verfallen!\n" + +#: g10/keyedit.c:1310 msgid "Delete this good signature? (y/N/q)" msgstr "Diese korrekte Beglaubigung entfernen? (j/N/q)" -#: g10/keyedit.c:1298 +#: g10/keyedit.c:1314 msgid "Delete this invalid signature? (y/N/q)" msgstr "Diese ungЭltige Beglaubigung entfernen= (j/N/q)" -#: g10/keyedit.c:1302 +#: g10/keyedit.c:1318 #, fuzzy msgid "Delete this unknown signature? (y/N/q)" msgstr "Diese korrekte Beglaubigung entfernen? (j/N/q)" -#: g10/keyedit.c:1308 +#: g10/keyedit.c:1324 msgid "Really delete this self-signature? (y/N)" msgstr "Eigenbeglaubigung wirklich entfernen? (j/N)" -#: g10/keyedit.c:1322 +#: g10/keyedit.c:1338 #, c-format msgid "Deleted %d signature.\n" msgstr "%d Beglaubigungen entfernt.\n" -#: g10/keyedit.c:1323 +#: g10/keyedit.c:1339 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d Beglaubigungen entfernt.\n" -#: g10/keyedit.c:1326 +#: g10/keyedit.c:1342 msgid "Nothing deleted.\n" msgstr "Nichts entfernt.\n" -#: g10/keyedit.c:1395 +#: g10/keyedit.c:1411 msgid "Please remove selections from the secret keys.\n" msgstr "Bitte entfernen Sie die Auswahl von den geheimen SchlЭsseln.\n" -#: g10/keyedit.c:1401 +#: g10/keyedit.c:1417 msgid "Please select at most one secondary key.\n" msgstr "Bitte wДhlen Sie hЖchstens einen ZweitschlЭssel aus.\n" -#: g10/keyedit.c:1405 +#: g10/keyedit.c:1421 #, fuzzy msgid "Changing expiration time for a secondary key.\n" msgstr "дndern des Verfallsdatums des ZweitschlЭssels.\n" -#: g10/keyedit.c:1407 +#: g10/keyedit.c:1423 #, fuzzy msgid "Changing expiration time for the primary key.\n" msgstr "дndern des Verfallsdatums des HauptschlЭssels.\n" -#: g10/keyedit.c:1448 +#: g10/keyedit.c:1464 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:1464 +#: g10/keyedit.c:1480 msgid "No corresponding signature in secret ring\n" msgstr "Keine entsprechende Signatur im geheimen SchlЭsselbund\n" -#: g10/keyedit.c:1524 +#: g10/keyedit.c:1540 #, c-format msgid "No user id with index %d\n" msgstr "Keine User-ID mit Index %d\n" -#: g10/keyedit.c:1570 +#: g10/keyedit.c:1586 #, c-format msgid "No secondary key with index %d\n" msgstr "Kein ZweitschlЭssel mit Index %d\n" -#: g10/keyedit.c:1668 +#: g10/keyedit.c:1684 msgid "user ID: \"" msgstr "User-ID: \"" -#: g10/keyedit.c:1671 +#: g10/keyedit.c:1687 #, 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:1675 +#: g10/keyedit.c:1691 msgid "Create a revocation certificate for this signature? (y/N)" msgstr "Ein Widerrufszertifikat fЭr diese Unterschrift erzeugen (j/N)" -#: g10/keyedit.c:1755 +#: g10/keyedit.c:1771 msgid "Really create the revocation certificates? (y/N)" msgstr "Wirklich ein Unterschrift-Widerrufszertifikat erzeugen? (j/N) " -#: g10/keyedit.c:1778 +#: g10/keyedit.c:1794 msgid "no secret key\n" msgstr "Kein geheimer SchlЭssel\n" #: g10/mainproc.c:184 #, c-format msgid "public key is %08lX\n" msgstr "жffentlicher SchlЭssel ist %08lX\n" -#: g10/mainproc.c:212 +#: g10/mainproc.c:213 msgid "public key encrypted data: good DEK\n" msgstr "Mit Жffentlichem SchЭssel verschlЭsselte Daten: Korrekte DEK\n" #. fixme: defer this message until we have parsed all packets of #. * this type - do this by building a list of keys with their stati #. * and store it with the context. do_proc_packets can then use #. * this list to display some information -#: g10/mainproc.c:219 +#: g10/mainproc.c:220 #, c-format msgid "public key decryption failed: %s\n" msgstr "EntschlЭsselung mit Жffentlichem SchlЭssel fehlgeschlagen: %s\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:248 msgid "decryption okay\n" msgstr "EnschlЭsselung fehlgeschlagen: %s\n" -#: g10/mainproc.c:252 +#: g10/mainproc.c:253 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "Warnung: VerschlЭsselte Botschaft ist manipuliert worden!\n" -#: g10/mainproc.c:257 +#: g10/mainproc.c:258 #, c-format msgid "decryption failed: %s\n" msgstr "EnschlЭsselung fehlgeschlagen: %s\n" -#: g10/mainproc.c:275 +#: g10/mainproc.c:276 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "" "Hinweis: Der Absender verlangte Vertraulichkeit(\"for-your-eyes-only\")\n" -#: g10/mainproc.c:277 +#: g10/mainproc.c:278 #, c-format msgid "original file name='%.*s'\n" msgstr "UrsprЭnglicher Dateiname='%.*s'\n" -#: g10/mainproc.c:505 g10/mainproc.c:514 +#: g10/mainproc.c:506 g10/mainproc.c:515 msgid "WARNING: invalid notation data found\n" msgstr "WARNUNG: UngЭltige \"Notation\"-Daten gefunden\n" -#: g10/mainproc.c:517 +#: g10/mainproc.c:518 msgid "Notation: " msgstr "\"Notation\": " -#: g10/mainproc.c:524 +#: g10/mainproc.c:525 msgid "Policy: " msgstr "Richtlinie: " -#: g10/mainproc.c:929 +#: g10/mainproc.c:930 msgid "signature verification suppressed\n" msgstr "Unterschriften-эberprЭfung unterdrЭckt\n" # Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muъ "ID" rein :-( -#: g10/mainproc.c:935 +#: g10/mainproc.c:936 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Unterschrift vom %.*s, %s SchlЭssel ID %08lX\n" #. just in case that we have no userid -#: g10/mainproc.c:961 g10/mainproc.c:972 +#: g10/mainproc.c:962 g10/mainproc.c:973 msgid "BAD signature from \"" msgstr "FALSCHE Unterschrift von \"" -#: g10/mainproc.c:962 g10/mainproc.c:973 +#: g10/mainproc.c:963 g10/mainproc.c:974 msgid "Good signature from \"" msgstr "Korrekte Unterschrift von \"" -#: g10/mainproc.c:964 +#: g10/mainproc.c:965 msgid " aka \"" msgstr " alias \"" -#: g10/mainproc.c:1015 +#: g10/mainproc.c:1016 #, c-format msgid "Can't check signature: %s\n" msgstr "Unterschrift kann nicht geprЭft werden: %s\n" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1110 msgid "old style (PGP 2.x) signature\n" msgstr "Unterschrift nach alter (PGP 2.x) Art\n" -#: g10/mainproc.c:1114 +#: g10/mainproc.c:1115 msgid "invalid root packet detected in proc_tree()\n" msgstr "ungЭltiges root-Paket in proc_tree() entdeckt\n" #: g10/misc.c:93 #, c-format msgid "can't disable core dumps: %s\n" msgstr "core-dump-Dateierzeugung kann nicht abgeschaltet werden: %s\n" #: g10/misc.c:96 msgid "WARNING: program may create a core file!\n" msgstr "WARNUNG: Programm kЖnnte eine core-dump-Datei schreiben!\n" #: g10/misc.c:203 msgid "Experimental algorithms should not be used!\n" msgstr "Experimentiermethoden sollten nicht benutzt werden!\n" #: g10/misc.c:217 msgid "" "RSA keys are deprecated; please consider creating a new key and use this key " "in the future\n" msgstr "" "RSA SchlЭssel sind nicht erwЭnscht; bitte denken Sie darЭber nach, einen\n" "neuen SchlЭssel zu erzeugen und diesen in Zukunft zu benutzen\n" #: g10/misc.c:239 msgid "this cipher algorithm is depreciated; please use a more standard one!\n" msgstr "" "Diees VerschlЭsselungsmethode taugt nicht mehr viel; verwenden Sie eine " "stДrker standardisierte Methode!\n" #: g10/parse-packet.c:112 #, 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:931 #, 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:157 +#: g10/passphrase.c:159 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:166 +#: g10/passphrase.c:168 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "%u-Bit %s SchlЭssel, ID %08lX, erzeugt %s" -#: g10/passphrase.c:171 +#: g10/passphrase.c:173 #, c-format msgid " (main key ID %08lX)" msgstr " (HauptschlЭssel-ID %08lX)" -#: g10/passphrase.c:192 +#: g10/passphrase.c:194 msgid "Enter passphrase: " msgstr "Geben Sie das Mantra ein: " -#: g10/passphrase.c:196 +#: g10/passphrase.c:198 msgid "Repeat passphrase: " msgstr "Geben Sie das Mantra nochmal ein: " #: g10/plaintext.c:63 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:266 msgid "Please enter name of data file: " msgstr "Bitte geben Sie den Namen der Datendatei ein: " #: g10/plaintext.c:287 msgid "reading stdin ...\n" msgstr "lese stdin ...\n" #: g10/plaintext.c:360 #, c-format msgid "can't open signed data `%s'\n" msgstr "kann signierte Datei '%s' nicht Жffnen.\n" #: g10/pubkey-enc.c:79 #, c-format msgid "anonymous receiver; trying secret key %08lX ...\n" msgstr "Ungenannter EmpfДnger: Versuch mit geheimen SchlЭssel %08lX ...\n" #: g10/pubkey-enc.c:85 msgid "okay, we are the anonymous recipient.\n" msgstr "Alles klar, wir sind der ungenannte EmpfДnger.\n" #: g10/pubkey-enc.c:137 msgid "old encoding of the DEK is not supported\n" msgstr "alte Kodierung des DEK wird nicht unterstЭtzt\n" #: g10/pubkey-enc.c:191 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "Hinweis: Verfahren %d ist kein bevorzugtes VerschlЭsselungsverfahren\n" #: g10/seckey-cert.c:55 #, c-format msgid "protection algorithm %d is not supported\n" msgstr "Schutzverfahren %d wird nicht unterstЭtzt\n" #: g10/seckey-cert.c:171 msgid "Invalid passphrase; please try again ...\n" msgstr "UngЭltiges Mantra; versuchen Sie's doch noch einmal ...\n" #: g10/seckey-cert.c:227 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "WARNUNG: Unsicherer SchlЭssel entdeckt -\n" " bitte Mantra nochmals wechseln.\n" -#: g10/sig-check.c:187 +#: g10/sig-check.c:199 msgid "assuming bad MDC due to an unknown critical bit\n" msgstr "" "Vermutlich ist das Siegel (MDC) BESCHдDIGT (wegen unbekanntem \"critical " "bit\")\n" -#: g10/sig-check.c:283 +#: g10/sig-check.c:295 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "Dieser durch PGP erzeugte ElGamal-SchlЭssel ist fЭr Signaturen NICHT sicher " "genug!\n" -#: g10/sig-check.c:291 +#: g10/sig-check.c:303 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "" "жffentlicher SchlЭssel ist um %lu Sekunde jЭnger als die Unterschrift\n" -#: g10/sig-check.c:292 +#: g10/sig-check.c:304 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "" "жffentlicher SchlЭssel ist um %lu Sekunden jЭnger als die Unterschrift\n" -#: g10/sig-check.c:308 +#: g10/sig-check.c:320 #, c-format msgid "NOTE: signature key expired %s\n" msgstr "Hinweis: SchlЭssel der Signatur ist verfallen am %s.\n" -#: g10/sig-check.c:365 +#: g10/sig-check.c:377 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" "Vermutlich eine FALSCHE Unterschrift, wegen unbekanntem \"critical bit\"\n" #: g10/sign.c:132 #, c-format msgid "%s signature from: %s\n" msgstr "%s Unterschrift von: %s\n" #: g10/sign.c:263 g10/sign.c:554 #, c-format msgid "can't create %s: %s\n" msgstr "%s kann nicht erzeugt werden: %s\n" #: g10/sign.c:361 msgid "signing:" msgstr "unterschreibe:" #: g10/sign.c:401 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "WARNUNG: '%s' ist eine leere Datei.\n" #: g10/textfilter.c:128 #, 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:197 #, c-format msgid "input line longer than %d characters\n" msgstr "Eingabezeile ist lДnger als %d Zeichen\n" -#: g10/tdbio.c:116 g10/tdbio.c:1505 +#: g10/tdbio.c:116 g10/tdbio.c:1634 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb Satz %lu: lseek fehlgeschlagen: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1512 +#: g10/tdbio.c:122 g10/tdbio.c:1641 #, 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:232 msgid "trustdb transaction too large\n" msgstr "trustdb Transaktion zu groъ\n" #: g10/tdbio.c:424 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: kann nicht zugegriffen werden: %s\n" #: g10/ringedit.c:296 g10/tdbio.c:444 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: Verzeichnis kann nicht erzeugt werden: %s\n" #: g10/ringedit.c:302 g10/tdbio.c:447 #, c-format msgid "%s: directory created\n" msgstr "%s: Verzeichnis erzeugt\n" #: g10/tdbio.c:451 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: Verzeichnis existiert nicht!\n" -#: g10/openfile.c:144 g10/openfile.c:215 g10/ringedit.c:1344 g10/tdbio.c:457 +#: g10/openfile.c:182 g10/openfile.c:253 g10/ringedit.c:1344 g10/tdbio.c:457 #, c-format msgid "%s: can't create: %s\n" msgstr "%s: kann nicht erzeugt werden: %s\n" #: g10/tdbio.c:472 g10/tdbio.c:521 #, c-format msgid "%s: can't create lock\n" msgstr "%s: Sperre kann nicht erzeugt werden\n" #: g10/tdbio.c:486 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: Fehler beim Erzeugen des Versionsatzes: %s" #: g10/tdbio.c:490 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: ungЭltige trust-db erzeugt\n" #: g10/tdbio.c:493 #, c-format msgid "%s: trustdb created\n" msgstr "%s: trust-db erzeugt\n" #: g10/tdbio.c:530 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: ungЭltige 'Trust'-Datenbank\n" #: g10/tdbio.c:563 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: hashtable kann nicht erzeugt werden: %s\n" #: g10/tdbio.c:571 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: Fehler beim дndern des Versionsatzes: %s\n" #: g10/tdbio.c:587 g10/tdbio.c:626 g10/tdbio.c:648 g10/tdbio.c:678 -#: g10/tdbio.c:703 g10/tdbio.c:1438 g10/tdbio.c:1465 +#: g10/tdbio.c:703 g10/tdbio.c:1567 g10/tdbio.c:1594 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: Fehler beim Lesen des Versionsatzes: %s\n" #: g10/tdbio.c:600 g10/tdbio.c:659 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: Fehler beim Schreiben des Versionsatzes: %s\n" -#: g10/tdbio.c:1132 +#: g10/tdbio.c:1246 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek fehlgeschlagen: %s\n" -#: g10/tdbio.c:1140 +#: g10/tdbio.c:1254 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: read failed (n=%d): %s\n" -#: g10/tdbio.c:1161 +#: g10/tdbio.c:1275 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: keine trustdb Datei\n" -#: g10/tdbio.c:1177 +#: g10/tdbio.c:1291 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: version record with recnum %lu\n" -#: g10/tdbio.c:1182 +#: g10/tdbio.c:1296 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: invalid file version %d\n" -#: g10/tdbio.c:1471 +#: g10/tdbio.c:1600 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: Fehler beim Lesen eines freien Satzes: %s\n" -#: g10/tdbio.c:1479 +#: g10/tdbio.c:1608 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: Fehler beim Schreiben eines Verzeichnis-Satzes: %s\n" -#: g10/tdbio.c:1489 +#: g10/tdbio.c:1618 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: konnte einen Satz nicht Nullen: %s\n" -#: g10/tdbio.c:1519 +#: g10/tdbio.c:1648 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: konnte Satz nicht anhДngen: %s\n" -#: g10/tdbio.c:1630 +#: g10/tdbio.c:1759 #, fuzzy msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "" "Die \"Trust\"-Datenbank ist beschДdigt; verwenden Sie \"gpgm " "--fix-trustdb\".\n" -#: g10/trustdb.c:163 +#: g10/trustdb.c:160 #, 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:178 +#: g10/trustdb.c:175 #, 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:192 +#: g10/trustdb.c:189 #, c-format msgid "trust record %lu: delete failed: %s\n" msgstr "Vertrauenssatz %lu: lЖschen fehlgeschlagen: %s\n" -#: g10/trustdb.c:206 +#: g10/trustdb.c:203 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "\"Trust-DB\": sync fehlgeschlagen: %s\n" -#: g10/trustdb.c:386 +#: g10/trustdb.c:347 #, c-format msgid "error reading dir record for LID %lu: %s\n" msgstr "Fehler beim Lesen des Dir-Satzes fЭr LID %lu: %s\n" -#: g10/trustdb.c:393 +#: g10/trustdb.c:354 #, c-format msgid "lid %lu: expected dir record, got type %d\n" msgstr "lid %lu: Dir-Satz erwartet, aber es kam Typ %d\n" -#: g10/trustdb.c:398 +#: g10/trustdb.c:359 #, c-format msgid "no primary key for LID %lu\n" msgstr "Kein HauptschlЭssel fЭr LID %lu\n" -#: g10/trustdb.c:403 +#: g10/trustdb.c:364 #, c-format msgid "error reading primary key for LID %lu: %s\n" msgstr "Fehler beim Lesen den HauptschlЭssels der LID %lu: %s\n" -#: g10/trustdb.c:442 +#: g10/trustdb.c:403 #, c-format msgid "get_dir_record: search_record failed: %s\n" msgstr "get_dir_record: search_record fehlgeschlagen: %s\n" -#: g10/trustdb.c:510 +#: g10/trustdb.c:458 #, c-format msgid "NOTE: secret key %08lX is NOT protected.\n" msgstr "HINWEIS: Geheimer SchlЭssel %08lX ist NICHT geschЭtzt.\n" -#: g10/trustdb.c:518 +#: g10/trustdb.c:466 #, 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/trustdb.c:525 +#: g10/trustdb.c:473 #, c-format msgid "key %08lX: secret and public key don't match\n" msgstr "" "SchlЭssel %08lX: geheimer und Жffentlicher SchlЭssel passen nicht zusammen.\n" -#: g10/trustdb.c:535 +#: g10/trustdb.c:483 #, c-format msgid "key %08lX: can't put it into the trustdb\n" msgstr "SchlЭssel %08lX kann nicht in die \"trustdb\" eingefЭgt werden\n" -#: g10/trustdb.c:541 +#: g10/trustdb.c:489 #, c-format msgid "key %08lX: query record failed\n" msgstr "SchlЭssel %08lX: Satzabfrage fehlgeschlagen\n" -#: g10/trustdb.c:550 +#: g10/trustdb.c:498 #, c-format msgid "key %08lX: already in trusted key table\n" msgstr "SchlЭssel %08lX: Ist bereits in geheimer SchlЭsseltabelle\n" -#: g10/trustdb.c:553 +#: g10/trustdb.c:501 #, c-format msgid "key %08lX: accepted as trusted key.\n" msgstr "SchlЭssel %08lX: Akzeptiert als vertrauenswЭrdiger SchlЭssel.\n" -#: g10/trustdb.c:561 +#: g10/trustdb.c:509 #, c-format msgid "enumerate secret keys failed: %s\n" msgstr "enum_secret_keys fehlgeschlagen: %s\n" -#: g10/trustdb.c:851 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" -msgstr "Hinweis: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" - -#: g10/trustdb.c:855 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" -msgstr "Hinweis: sig rec %lu[%d] in hintlist of %lu but not marked\n" - -#. we need the dir record -#: g10/trustdb.c:862 -#, c-format -msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" -msgstr "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" - -#: g10/trustdb.c:868 -#, c-format -msgid "lid %lu: no primary key\n" -msgstr "lid %lu: kein HauptschlЭssel\n" - -#: g10/trustdb.c:901 -#, c-format -msgid "lid %lu: user id not found in keyblock\n" -msgstr "lid %lu: User-ID im SchlЭsselblock nicht gefunden\n" - -#: g10/trustdb.c:905 -#, c-format -msgid "lid %lu: user id without signature\n" -msgstr "lid %lu: User-ID ohne Signatur\n" - -#: g10/trustdb.c:912 -#, c-format -msgid "lid %lu: self-signature in hintlist\n" -msgstr "lid %lu: Eigenbeglaubigung in 'hintlist'\n" - -#: g10/trustdb.c:923 g10/trustdb.c:1675 g10/trustdb.c:1766 -msgid "Valid certificate revocation" -msgstr "GЭltiger Zerifikat-Widerruf" - -#: g10/trustdb.c:924 g10/trustdb.c:1676 g10/trustdb.c:1767 -msgid "Good certificate" -msgstr "Korrektes Zertifikat" - -#: g10/trustdb.c:933 -msgid "very strange: no public key\n" -msgstr "sehr seltsam: kein Жffentlicher SchlЭssel\n" - -#: g10/trustdb.c:982 -#, c-format -msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" -msgstr "hintlist %lu[%d] of %lu zeigt nicht auf einen 'dir record'\n" - -#: g10/trustdb.c:988 -#, c-format -msgid "lid %lu does not have a key\n" -msgstr "lid %lu hat keinen SchlЭssel\n" - -#: g10/trustdb.c:998 -#, c-format -msgid "lid %lu: can't get keyblock: %s\n" -msgstr "lid %lu: SchlЭsselblock nicht verfЭgbar: %s\n" - -#: g10/trustdb.c:1055 g10/trustdb.c:2030 -#, c-format -msgid "tdbio_search_dir failed: %s\n" +#: g10/trustdb.c:800 +#, fuzzy, c-format +msgid "tdbio_search_sdir failed: %s\n" msgstr "tdbio_search_dir fehlgeschlagen: %s\n" -#: g10/trustdb.c:1210 +#: g10/trustdb.c:875 #, c-format msgid "key %08lX.%lu: Good subkey binding\n" msgstr "SchlЭssel %08lX.%lu: Korrekte UnterschlЭssel-Anbindung\n" -#: g10/trustdb.c:1216 g10/trustdb.c:1259 +#: g10/trustdb.c:881 g10/trustdb.c:916 #, c-format msgid "key %08lX.%lu: Invalid subkey binding: %s\n" msgstr "SchlЭssel %08lX.%lu: UngЭltige UnterschlЭssel-Anbindung\n" -#: g10/trustdb.c:1232 +#: g10/trustdb.c:893 #, c-format msgid "key %08lX.%lu: Valid key revocation\n" msgstr "SchlЭssel %08lX.%lu: GЭltiger SchlЭsselwiderruf\n" -#: g10/trustdb.c:1238 +#: g10/trustdb.c:899 #, c-format msgid "key %08lX.%lu: Invalid key revocation: %s\n" msgstr "SchlЭssel %08lX.%lu: UngЭltiger SchlЭsselwiderruf: %s\n" -#: g10/trustdb.c:1253 +#: g10/trustdb.c:910 #, c-format msgid "key %08lX.%lu: Valid subkey revocation\n" msgstr "SchlЭssel %08lX.%lu: GЭltiger UnterschlЭsselwiderruf\n" -#: g10/trustdb.c:1360 +#: g10/trustdb.c:1021 msgid "Good self-signature" msgstr "Korrekte Eigenbeglaubigung" -#: g10/trustdb.c:1371 +#: g10/trustdb.c:1031 msgid "Invalid self-signature" msgstr "UngЭltige Eigenbeglaubigung" -#: g10/trustdb.c:1403 -msgid "Valid user ID revocation skipped due to a newer self signature\n" +#: g10/trustdb.c:1058 +#, fuzzy +msgid "Valid user ID revocation skipped due to a newer self signature" msgstr "" "GЭltiger User-ID-Widerruf ignoriert, da eine neuere Eigenbeglaubigung " "vorliegt\n" -#: g10/trustdb.c:1410 -msgid "Valid user ID revocation\n" +#: g10/trustdb.c:1064 +#, fuzzy +msgid "Valid user ID revocation" msgstr "GЭltiger User-ID-Widerruf\n" -#: g10/trustdb.c:1417 +#: g10/trustdb.c:1069 msgid "Invalid user ID revocation" msgstr "UngЭltiger User-ID-Widerruf" -#: g10/trustdb.c:1512 -msgid "Too many preferences" -msgstr "Zu viele Einstellungen" - -#: g10/trustdb.c:1526 -msgid "Too many preference items" -msgstr "Zu viele Angaben zur Bevorzugung" - -#: g10/trustdb.c:1549 g10/trustdb.c:3075 g10/trustdb.c:3105 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "WARNUNG: Lange 'Pref'-Records kЖnnen noch nicht benutzt werden\n" - -#: g10/trustdb.c:1654 -msgid "duplicated certificate - deleted" -msgstr "Doppelte Zertifikate - entfernt" +#: g10/trustdb.c:1110 +msgid "Valid certificate revocation" +msgstr "GЭltiger Zerifikat-Widerruf" -#: g10/trustdb.c:1692 -msgid "public key not anymore available" -msgstr "жffentlicher SchlЭssel ist nicht mehr vorhanden" +#: g10/trustdb.c:1111 +msgid "Good certificate" +msgstr "Korrektes Zertifikat" -#: g10/trustdb.c:1702 g10/trustdb.c:1791 +#: g10/trustdb.c:1132 msgid "Invalid certificate revocation" msgstr "UngЭltiger Zertifikatswiderruf" -#: g10/trustdb.c:1703 g10/trustdb.c:1792 +#: g10/trustdb.c:1133 msgid "Invalid certificate" msgstr "UngЭltiges Zertifikat" -#: g10/trustdb.c:1720 -#, c-format -msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" -msgstr "" -"uid %08lX.%lu/%02X%02X: hat \"shadow-dir\" %lu, aber ist noch nicht " -"markiert.\n" - -#: g10/trustdb.c:1734 +#: g10/trustdb.c:1150 g10/trustdb.c:1154 #, c-format msgid "sig record %lu[%d] points to wrong record.\n" msgstr "Signatursatz %lu[%d] zeigt auf falschen Satz.\n" -#. that should never happen -#: g10/trustdb.c:2007 -#, c-format -msgid "insert_trust_record: keyblock not found: %s\n" -msgstr "insert_trust_record: SchlЭsselblock nicht gefunden: %s\n" - -#: g10/trustdb.c:2408 -msgid "Ooops, no keys\n" -msgstr "Huch, keine SchlЭssel\n" +#: g10/trustdb.c:1206 +msgid "duplicated certificate - deleted" +msgstr "Doppelte Zertifikate - entfernt" -#: g10/trustdb.c:2412 -msgid "Ooops, no user ids\n" -msgstr "Huch, keine User-IDs\n" +#: g10/trustdb.c:1512 +#, c-format +msgid "tdbio_search_dir failed: %s\n" +msgstr "tdbio_search_dir fehlgeschlagen: %s\n" -#: g10/trustdb.c:2529 +#: g10/trustdb.c:1634 #, c-format msgid "lid ?: insert failed: %s\n" msgstr "lid ?: EinfЭgen fehlgeschlagen: %s\n" -#: g10/trustdb.c:2534 +#: g10/trustdb.c:1639 #, c-format msgid "lid %lu: insert failed: %s\n" msgstr "lid %lu: EinfЭgen fehlgeschlagen: %s\n" -#: g10/trustdb.c:2540 +#: g10/trustdb.c:1645 #, c-format msgid "lid %lu: inserted\n" msgstr "lid %lu: eingefЭgt\n" -#: g10/trustdb.c:2545 g10/trustdb.c:2654 -#, c-format -msgid "lid %lu: update failed: %s\n" -msgstr "lid %lu: дnderung fehlgeschlagen: %s\n" - -#: g10/trustdb.c:2551 g10/trustdb.c:2660 -#, c-format -msgid "lid %lu: updated\n" -msgstr "lid %lu: geДndert\n" - -#: g10/trustdb.c:2556 g10/trustdb.c:2664 -#, c-format -msgid "lid %lu: okay\n" -msgstr "lid %lu: In Ordnung\n" +#: g10/trustdb.c:1650 +#, fuzzy, c-format +msgid "error reading dir record: %s\n" +msgstr "Fehler beim Auffinden des Verz.Satzes: %s\n" -#: g10/trustdb.c:2562 g10/trustdb.c:2671 +#: g10/trustdb.c:1658 g10/trustdb.c:1712 #, c-format msgid "%lu keys processed\n" msgstr "%lu SchlЭssel bearbeitet\n" -#: g10/trustdb.c:2564 g10/trustdb.c:2675 +#: g10/trustdb.c:1660 g10/trustdb.c:1716 #, c-format msgid "\t%lu keys with errors\n" msgstr "\t%lu SchlЭssel mit Fehlern\n" -#: g10/trustdb.c:2566 g10/trustdb.c:2677 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu SchlЭssel geДndert\n" - -#: g10/trustdb.c:2568 +#: g10/trustdb.c:1662 #, c-format msgid "\t%lu keys inserted\n" msgstr "\t%lu SchlЭssel eingefЭgt\n" -#: g10/trustdb.c:2571 +#: g10/trustdb.c:1665 #, c-format msgid "enumerate keyblocks failed: %s\n" msgstr "enumerate SchlЭsselblock fehlgeschlagen: %s\n" -#: g10/trustdb.c:2598 -#, c-format -msgid "%s: keyblock read problem: %s\n" -msgstr "%s: SchlЭsselblock Leseproblem: %s\n" - -#: g10/trustdb.c:2612 -#, c-format -msgid "%s: update failed: %s\n" -msgstr "%s: дnderung fehlgeschlagen: %s\n" - -#: g10/trustdb.c:2615 -#, c-format -msgid "%s: updated\n" -msgstr "%s: geДndert\n" - -#: g10/trustdb.c:2617 -#, c-format -msgid "%s: okay\n" -msgstr "%s: In Ordnung\n" - -#: g10/trustdb.c:2632 +#: g10/trustdb.c:1703 #, c-format msgid "lid %lu: dir record w/o key - skipped\n" msgstr "lid %lu: Dir-Satz ohne SchlЭssel - Эbergangen\n" -#: g10/trustdb.c:2645 -#, c-format -msgid "lid %lu: keyblock not found: %s\n" -msgstr "lid %lu: SchlЭsselblock nicht gefunden: %s\n" - -#: g10/trustdb.c:2673 +#: g10/trustdb.c:1714 #, c-format msgid "\t%lu keys skipped\n" msgstr "\t%lu SchlЭssel Эbersprungen\n" -#: g10/trustdb.c:2743 +#: g10/trustdb.c:1718 +#, c-format +msgid "\t%lu keys updated\n" +msgstr "\t%lu SchlЭssel geДndert\n" + +#: g10/trustdb.c:2055 +msgid "Ooops, no keys\n" +msgstr "Huch, keine SchlЭssel\n" + +#: g10/trustdb.c:2059 +msgid "Ooops, no user ids\n" +msgstr "Huch, keine User-IDs\n" + +#: g10/trustdb.c:2216 #, c-format msgid "check_trust: search dir record failed: %s\n" msgstr "check_trust: Suche nach Dir-Satz fehlgeschlagen: %s\n" -#: g10/trustdb.c:2750 +#: g10/trustdb.c:2223 #, c-format msgid "key %08lX: insert trust record failed: %s\n" msgstr "SchlЭssel %08lX: 'trust record' einfЭgen fehlgeschlagen: %s\n" -#: g10/trustdb.c:2754 +#: g10/trustdb.c:2227 #, c-format msgid "key %08lX.%lu: inserted into trustdb\n" msgstr "SchlЭssel %08lX.%lu: in \"trustdb\" eingefЭgt\n" -#: g10/trustdb.c:2762 +#: g10/trustdb.c:2235 #, c-format 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" -#: g10/trustdb.c:2769 +#: g10/trustdb.c:2244 #, c-format msgid "key %08lX.%lu: expired at %s\n" msgstr "SchlЭssel %08lX.%lu: verfallen am %s\n" -#: g10/trustdb.c:2777 +#: g10/trustdb.c:2252 #, c-format msgid "key %08lX.%lu: trust check failed: %s\n" msgstr "SchlЭssel %08lX.%lu: VertrauensprЭfung fehlgeschlagen: %s\n" -#: g10/trustdb.c:2881 +#: g10/trustdb.c:2358 #, c-format msgid "user '%s' not found: %s\n" msgstr "Benutzer '%s' nicht gefunden: %s\n" -#: g10/trustdb.c:2883 +#: g10/trustdb.c:2360 #, c-format msgid "problem finding '%s' in trustdb: %s\n" msgstr "Problem, '%s' in der Trust-DB zu finden: %s\n" -#: g10/trustdb.c:2886 +#: g10/trustdb.c:2363 #, c-format msgid "user '%s' not in trustdb - inserting\n" msgstr "User '%s' ist nicht in der 'Trust'-Datenbank - wird eingefЭgt\n" -#: g10/trustdb.c:2889 +#: g10/trustdb.c:2366 #, c-format msgid "failed to put '%s' into trustdb: %s\n" msgstr "konnte '%s' nicht in die 'Trust'-Datenbank hineintun: %s\n" +#: g10/trustdb.c:2552 g10/trustdb.c:2582 +msgid "WARNING: can't yet handle long pref records\n" +msgstr "WARNUNG: Lange 'Pref'-Records kЖnnen noch nicht benutzt werden\n" + #: g10/ringedit.c:316 #, c-format msgid "%s: can't create keyring: %s\n" msgstr "%s: SchlЭsselbund kann nicht erzeugt werden: %s\n" #: g10/ringedit.c:333 g10/ringedit.c:1349 #, c-format msgid "%s: keyring created\n" msgstr "%s: SchlЭsselbund erstellt\n" #: g10/ringedit.c:1526 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "Warnung: Zwei Dateien mit vertraulichem Inhalt vorhanden.\n" #: g10/ringedit.c:1527 #, c-format msgid "%s is the unchanged one\n" msgstr "%s ist der UnverДnderte\n" #: g10/ringedit.c:1528 #, c-format msgid "%s is the new one\n" msgstr "%s ist der Neue\n" #: g10/ringedit.c:1529 msgid "Please fix this possible security flaw\n" msgstr "Bitte diesen potentiellen Sicherheitsmangel beseitigen\n" #: g10/skclist.c:88 g10/skclist.c:125 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:113 #, c-format msgid "skipped `%s': %s\n" msgstr "Эbersprungen '%s': %s\n" #: g10/skclist.c:119 #, 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:65 #, c-format msgid "File `%s' exists. " msgstr "Datei '%s' existiert bereits. " #: g10/openfile.c:67 msgid "Overwrite (y/N)? " msgstr "эberschreiben (j/N)? " #: g10/openfile.c:97 #, c-format msgid "%s: unknown suffix\n" msgstr "" -#: g10/openfile.c:122 +#: g10/openfile.c:119 +#, fuzzy +msgid "Enter new filename" +msgstr "--store [Dateiname]" + +#: g10/openfile.c:160 msgid "writing to stdout\n" msgstr "Schreiben auf die Standardausgabe\n" -#: g10/openfile.c:181 +#: g10/openfile.c:219 #, c-format msgid "assuming signed data in `%s'\n" msgstr "die unterzeichneten Daten sind wohl in '%s'\n" -#: g10/openfile.c:231 +#: g10/openfile.c:269 #, c-format msgid "%s: new options file created\n" msgstr "%s: neue Optionendatei erstellt\n" #: g10/encr-data.c:66 #, c-format msgid "%s encrypted data\n" msgstr "%s verschlЭsselte Daten\n" #: g10/encr-data.c:68 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "Mit unbekanntem Verfahren verschlЭsselt %d\n" #: g10/encr-data.c:85 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/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" # "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." #. begin of list #: g10/helptext.c:48 msgid "edit_ownertrust.value" msgstr "" "SIE mЭssen hier einen Wert eingeben. Dieser Wert wird niemals an eine " "Dritte\n" "weitergegeben (exportiert) werden. Wir brauchen ihn zum Aufbau des\n" "\"web-of-trust\", Er hat nichts mit dem (stillschweigend aufgebautem)\n" "\"web-of-certificates\" zu tun." # "If you want to use this revoked key anyway, answer \"yes\"." #: g10/helptext.c:54 msgid "revoked_key.override" msgstr "" "Wenn Sie diesen widerrufenen SchlЭssel trotzdem benutzen wollen,\n" "so antworten Sie mit \"ja\" oder schweigen fЭr immer." # "If you want to use this untrusted key anyway, answer \"yes\"." #: g10/helptext.c:58 msgid "untrusted_key.override" msgstr "" "Wenn Sie diesen nichtvertruenswЭrdigen SchlЭssel trotzdem benutzen wollen,\n" "so antworten Sie mit \"ja\" oder schweigen Sie fЭr immer." # "Enter the user id of the addresse to whom you want to send the message." #: g10/helptext.c:62 msgid "pklist.user_id.enter" msgstr "" "Geben Sie die User-ID dessen ein, an den Sie die Botschaft senden wollen." #: g10/helptext.c:66 msgid "keygen.algo" msgstr "" "WДhlen Sie die zu verwendende Methode aus.\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 nach OpenPGP-Spezifikation nicht verpflichtet die zweite " "Art\n" " (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.\n" "Auch sollte man \"ElGamal in einem v3-Paket\" nicht verwenden, denn solch " "ein\n" "SchlЭssel ist nicht mit anderen Programmen nach der OpenPGP-Spezifikation\n" "vertrДglich." # 0.9.0: 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." #: g10/helptext.c:82 msgid "keygen.algo.elg_se" 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 die эberprЭfung\n" "ist langsam." # "Enter the size of the key" #: g10/helptext.c:89 msgid "keygen.size" msgstr "" "WДhlen Sie die gewЭnschte SchlЭssellДnge.\n" "\n" "Ein langer SchlЭssel bietet mehr Sicherheit, kostet aber auch mehr " "Rechenzeit.\n" "Ein kurzer SchlЭssel ist nicht ganz so sicher, wird aber schneller " "bearbeitet.\n" "1024 Bit ist fЭr den Heimgebrauch ein brauchbarer Wert. Wenn Sie aber z.B. " "in\n" "Atlanta, Georgia, USA fЭr eine Limonandenfabrik arbeiten, und das Rezept\n" "speichern wollen (\"SCHLEMMER!\"), so wДren 2048 Bit kein schlechter Wert." # "Answer \"yes\" or \"no\"" #: g10/helptext.c:93 msgid "keygen.size.huge.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" #: g10/helptext.c:98 msgid "keygen.size.large.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" #: g10/helptext.c:103 msgid "keygen.valid" msgstr "Geben Sie den erforderlichen Wert ein" -#: g10/helptext.c:107 +#: g10/helptext.c:110 msgid "keygen.valid.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" # "Enter the name of the key holder" -#: g10/helptext.c:112 +#: g10/helptext.c:115 msgid "keygen.name" msgstr "Geben Sie den Namen des SchlЭsselinhabers ein" # "please enter an optional but highly suggested email address" -#: g10/helptext.c:117 +#: g10/helptext.c:120 msgid "keygen.email" msgstr "" "Geben Sie eine E-Mail-Adresse ein. Dies ist zwar nicht notwendig,\n" "aber empfehlenswert." # "Please enter an optional comment" -#: g10/helptext.c:121 +#: g10/helptext.c:124 msgid "keygen.comment" msgstr "Geben Sie (bei Bedarf) einen Kommentar ein" # "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." -#: g10/helptext.c:126 +#: g10/helptext.c:129 msgid "keygen.userid.cmd" 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." # "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." -#: g10/helptext.c:135 +#: g10/helptext.c:138 msgid "keygen.sub.okay" msgstr "" "Geben Sie \"Ja\" (oder nur \"j\") ein, um den UnterschlЭssel zu erzeugen." # "Answer \"yes\" or \"no\"" -#: g10/helptext.c:139 +#: g10/helptext.c:142 msgid "sign_uid.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" # "Answer \"yes\" or \"no\"" -#: g10/helptext.c:144 +#: g10/helptext.c:147 msgid "change_passwd.empty.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" -# "Please enter \"help\" to see the list of commands." -#: g10/helptext.c:149 -msgid "keyedit.cmd" -msgstr "Geben Sie \"help\" ein, um die Liste der Befehle einzusehen." - # "Answer \"yes\" or \"no\"" -#: g10/helptext.c:153 +#: g10/helptext.c:152 msgid "keyedit.save.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" -#: g10/helptext.c:158 +#: g10/helptext.c:157 msgid "keyedit.cancel.okay" msgstr "Geben Sie \"Ja\" oder \"Nein\" ein" # "Answer \"yes\" is you want to sign ALL the user IDs" -#: g10/helptext.c:162 +#: g10/helptext.c:161 msgid "keyedit.sign_all.okay" msgstr "Geben Sie \"Ja\" (oder nur \"j\") ein, um alle User-IDs zu beglaubigen" # "Answer \"yes\" if you really want to delete this user ID.\n" # "All ceritifcates are then also lost!" -#: g10/helptext.c:166 +#: g10/helptext.c:165 msgid "keyedit.remove.uid.okay" msgstr "" "Geben Sie \"Ja\" (oder nur \"j\") ein, um diese User-ID zu LжSCHEN.\n" "Alle Zertifikate werden dann auch weg sein!" # "Answer \"yes\" if it is okay to delete the subkey" -#: g10/helptext.c:171 +#: g10/helptext.c:170 msgid "keyedit.remove.subkey.okay" msgstr "" "Geben Sie \"Ja\" (oder nur \"j\") ein, um diesen UnterschlЭssel zu lЖschen" # ("keyedit.delsig.valid"), # "This is a valid signature on the key; you normally don't want\n" # "to delete this signature may be important to establish a trust\n" # "connection to the key or another key certified by this key." -#: g10/helptext.c:176 +#: g10/helptext.c:175 msgid "keyedit.delsig.valid" 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" # ("keyedit.delsig.invalid"), # "The signature is not valid. It does make sense to remove it from\n" # "your keyring if it is really invalid and not just unchecked due to\n" # "a missing public key (marked by \"sig?\")." -#: g10/helptext.c:181 +#: g10/helptext.c:180 #, fuzzy msgid "keyedit.delsig.unknown" msgstr "" "Diese Beglaubigung ist ungЭltig. Es ist sinnvoll sie aus Ihrem\n" "SchlЭsselbund zu entfernen, sofern sie wirklich ungЭltig ist und nicht nur\n" "wegen eines fehlenden Жff.SchlЭssel (\"sig?\") unkontrollierbar ist." # ("keyedit.delsig.invalid"), # "The signature is not valid. It does make sense to remove it from\n" # "your keyring if it is really invalid and not just unchecked due to\n" # "a missing public key (marked by \"sig?\")." -#: g10/helptext.c:187 +#: g10/helptext.c:186 msgid "keyedit.delsig.invalid" msgstr "" "Diese Beglaubigung ist ungЭltig. Es ist sinnvoll sie aus Ihrem\n" "SchlЭsselbund zu entfernen, sofern sie wirklich ungЭltig ist und nicht nur\n" "wegen eines fehlenden Жff.SchlЭssel (\"sig?\") unkontrollierbar ist." # ("keyedit.delsig.selfsig") # "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." -#: g10/helptext.c:191 +#: g10/helptext.c:190 msgid "keyedit.delsig.selfsig" 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 kann sein, daъ GnuPG solche 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." # ################################ # ####### Help msgids ############ # ################################ -#: g10/helptext.c:200 +#: g10/helptext.c:199 msgid "passphrase.enter" msgstr "" "Bitte geben Sie das Mantra ein. Dies ist ein geheimer Satz, der aus\n" "beliebigen Zeichen bestehen kann. Was Sie eingegeben wird nicht angezeigt.\n" "\n" "Zur ihrer eigenen Sicherbeit benutzen Sie bitte einen Satz, den sie sich\n" "gut merken kЖnne, der aber nicht leicht zu erraten ist; Zitate und andere\n" "bekannte Texte sind eine SCHLECHTE Wahl, da diese mit Sicherheit online\n" "verfЭgbar sind und durch entsprechende Programme zum Raten des Mantras\n" "benutzt werden. SДtze mit persЖnlicher Bedeutung, die auch noch durch\n" "falsche Groъ-/Kleinschreibung und eingestreute Sonderzeichen verДndert " "werden,\n" "sind i.d.R. eine gute Wahl" -#: g10/helptext.c:207 +#: g10/helptext.c:206 msgid "passphrase.repeat" 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." # "Give the name fo the file to which the signature applies" -#: g10/helptext.c:211 +#: g10/helptext.c:210 msgid "detached_signature.filename" msgstr "" "Geben Sie den Namen der Datei an, zu dem die abgetrennte Unterschrift gehЖrt" # "Answer \"yes\" if it is okay to overwrite the file" +#. openfile.c (overwrite_filep) #: g10/helptext.c:215 msgid "openfile.overwrite.okay" msgstr "Geben Sie \"ja\" ein, wenn Sie die Datei Эberschreiben mЖchten" -#: g10/helptext.c:229 +#. openfile.c (ask_outfile_name) +#: g10/helptext.c:220 +msgid "openfile.askoutname" +msgstr "" + +#: g10/helptext.c:235 msgid "No help available" msgstr "Keine Hilfe vorhanden." -#: g10/helptext.c:241 +#: g10/helptext.c:247 #, c-format msgid "No help available for `%s'" msgstr "Keine Hilfe fЭr '%s' vorhanden." +#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" +#~ msgstr "Hinweis: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" + +#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" +#~ msgstr "Hinweis: sig rec %lu[%d] in hintlist of %lu but not marked\n" + +#~ msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" +#~ msgstr "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" + +#~ msgid "lid %lu: no primary key\n" +#~ msgstr "lid %lu: kein HauptschlЭssel\n" + +#~ msgid "lid %lu: user id not found in keyblock\n" +#~ msgstr "lid %lu: User-ID im SchlЭsselblock nicht gefunden\n" + +#~ msgid "lid %lu: user id without signature\n" +#~ msgstr "lid %lu: User-ID ohne Signatur\n" + +#~ msgid "lid %lu: self-signature in hintlist\n" +#~ msgstr "lid %lu: Eigenbeglaubigung in 'hintlist'\n" + +#~ msgid "very strange: no public key\n" +#~ msgstr "sehr seltsam: kein Жffentlicher SchlЭssel\n" + +#~ msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" +#~ msgstr "hintlist %lu[%d] of %lu zeigt nicht auf einen 'dir record'\n" + +#~ msgid "lid %lu does not have a key\n" +#~ msgstr "lid %lu hat keinen SchlЭssel\n" + +#~ msgid "lid %lu: can't get keyblock: %s\n" +#~ msgstr "lid %lu: SchlЭsselblock nicht verfЭgbar: %s\n" + +#~ msgid "Too many preferences" +#~ msgstr "Zu viele Einstellungen" + +#~ msgid "Too many preference items" +#~ msgstr "Zu viele Angaben zur Bevorzugung" + +#~ msgid "public key not anymore available" +#~ msgstr "жffentlicher SchlЭssel ist nicht mehr vorhanden" + +#~ msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" +#~ msgstr "" +#~ "uid %08lX.%lu/%02X%02X: hat \"shadow-dir\" %lu, aber ist noch nicht " +#~ "markiert.\n" + +#~ msgid "insert_trust_record: keyblock not found: %s\n" +#~ msgstr "insert_trust_record: SchlЭsselblock nicht gefunden: %s\n" + +#~ msgid "lid %lu: update failed: %s\n" +#~ msgstr "lid %lu: дnderung fehlgeschlagen: %s\n" + +#~ msgid "lid %lu: updated\n" +#~ msgstr "lid %lu: geДndert\n" + +#~ msgid "lid %lu: okay\n" +#~ msgstr "lid %lu: In Ordnung\n" + +#~ msgid "%s: keyblock read problem: %s\n" +#~ msgstr "%s: SchlЭsselblock Leseproblem: %s\n" + +#~ msgid "%s: update failed: %s\n" +#~ msgstr "%s: дnderung fehlgeschlagen: %s\n" + +#~ msgid "%s: updated\n" +#~ msgstr "%s: geДndert\n" + +#~ msgid "%s: okay\n" +#~ msgstr "%s: In Ordnung\n" + +#~ msgid "lid %lu: keyblock not found: %s\n" +#~ msgstr "lid %lu: SchlЭsselblock nicht gefunden: %s\n" + +# "Please enter \"help\" to see the list of commands." +#~ msgid "keyedit.cmd" +#~ msgstr "Geben Sie \"help\" ein, um die Liste der Befehle einzusehen." + #~ msgid "can't open file: %s\n" #~ msgstr "Kann die Datei nicht Жffnen: %s\n" #~ msgid "read error: %s\n" #~ msgstr "Lesefehler: %s\n" #~ msgid "can't write to keyring: %s\n" #~ msgstr "kann SchlЭsselbund nicht schreiben: %s\n" #~ msgid "writing keyblock\n" #~ msgstr "Schreiben des SchlЭsselblocks\n" #~ msgid "can't write keyblock: %s\n" #~ msgstr "Der SchlЭsselblock kann nicht geschrieben werden: %s\n" #~ msgid "can't lock secret keyring: %s\n" #~ msgstr "kann geheimen SchlЭsselbund nicht sperren: %s\n" #~ msgid "can't write keyring: %s\n" #~ msgstr "kann SchlЭsselbund nicht schreiben: %s\n" #~ msgid "encrypted message is valid\n" #~ msgstr "verschlЭsselte Botschaft ist gЭltig\n" #~ msgid "Can't check MDC: %s\n" #~ msgstr "Siegel (MDC) kann nicht geprЭft werden: %s\n" #~ msgid "Usage: gpgm [options] [files] (-h for help)" #~ msgstr "Syntax: gpgm [Optionen] [Dateien] (-h fЭr Hilfe)" #~ msgid "" #~ "Syntax: gpgm [options] [files]\n" #~ "GnuPG maintenance utility\n" #~ msgstr "" #~ "Syntax: gpgm [options] [files]\n" #~ "GnuPG Wartungs-Hilfsprogramm\n" #~ msgid "usage: gpgm [options] " #~ msgstr "Aufruf: gpgm [Optionen] " #~ msgid "|KEYID|ulimately trust this key" #~ msgstr "|KEYID|Diesem SchlЭssel uneingeschrДnkt vertrauen" #~ msgid "chained sigrec %lu has a wrong owner\n" #~ msgstr "Verketteter Signatursatz %lu hat einen falschen Besitzer\n" #~ msgid "'%s' is not a valid long keyID\n" #~ msgstr "'%s' ist keine gЭltige lange SchlЭssel-ID\n" #~ msgid "key %08lX: no public key for trusted key - skipped\n" #~ msgstr "" #~ "SchlЭssel %08lX: kein Жffentlicher SchЭssel fЭr vertrauenswЭrdigen SchlЭssel " #~ "- Эbersprungen\n" #~ msgid "lid %lu: read dir record failed: %s\n" #~ msgstr "lid %lu: Lesen des Verz.Satzes fehlgeschlagen: %s\n" #~ msgid "lid %lu: read key record failed: %s\n" #~ msgstr "lid %lu: Lesen des Schl..Satzes fehlgeschlagen: %s\n" #~ msgid "lid %lu: read uid record failed: %s\n" #~ msgstr "lid %lu: Lesen des UserID-Satzes fehlgeschlagen: %s\n" #~ msgid "lid %lu: read pref record failed: %s\n" #~ msgstr "lid %lu: Lesen des Pref.Satzes fehlgeschlagen: %s\n" #~ msgid "lid %lu: read sig record failed: %s\n" #~ msgstr "lid %lu: Lesen des Sig.Satzes fehlgeschlagen: %s\n" #~ msgid "user '%s' read problem: %s\n" #~ msgstr "User '%s' Leseproblem: %s\n" #~ msgid "user '%s' list problem: %s\n" #~ msgstr "User '%s' Listenproblem: %s\n" #~ msgid "user '%s' not in trustdb\n" #~ msgstr "User '%s' ist nicht in der trustdb\n" #~ msgid "" #~ "# List of assigned trustvalues, created %s\n" #~ "# (Use \"gpgm --import-ownertrust\" to restore them)\n" #~ msgstr "" #~ "# Liste der zugewisenen \"trustvalues\", erzeugt am %s\n" #~ "# (Verwenden Sie \"gpgm --import-ownertrust\" um sie wieder einzuspielen)\n" #~ msgid "directory record w/o primary key\n" #~ msgstr "Verzeichnis-Satz ohne HauptschlЭssel\n" #~ msgid "line too long\n" #~ msgstr "Zeile zu lang\n" #~ msgid "error: missing colon\n" #~ msgstr "Fehler: Fehlender Doppelpunkt\n" #~ msgid "error: invalid fingerprint\n" #~ msgstr "Fehler: ungЭltiger Fingerabdruck\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "Fehler: Keine \"Owner trust\" Werte\n" #~ msgid "key not in trustdb, searching ring.\n" #~ msgstr "SchlЭssel ist nicht in der trustdb, Schl.bund wird durchsucht.\n" #~ msgid "key not in ring: %s\n" #~ msgstr "SchlЭssel ist nicht im SchlЭsselbund: %s\n" #~ msgid "Oops: key is now in trustdb???\n" #~ msgstr "Huch: SchlЭssel ist ja gar nicht in der Trust-DB?\n" #~ msgid "insert trust record failed: %s\n" #~ msgstr "'trust record' einfЭgen fehlgeschlagen: %s\n" -#~ msgid "error finding dir record: %s\n" -#~ msgstr "Fehler beim Auffinden des Verz.Satzes: %s\n" - #~ msgid "Hmmm, public key lost?" #~ msgstr "Hmmm, Жffentlicher SchЭssel verloren?" #~ msgid "did not use primary key for insert_trust_record()\n" #~ msgstr "FЭr insert_trust_record() wurde nicht der HauptschlЭssel benutzt\n" #~ msgid "second" #~ msgstr "Sekunde" #~ msgid "seconds" #~ msgstr "Sekunden" #~ msgid "invalid clear text header: " #~ msgstr "ungЭltige Klartexteinleitung" #~ msgid "LID %lu: changing trust from %u to %u\n" #~ msgstr "LID %lu: дndern des 'Trusts' von %u auf %u\n" #~ msgid "LID %lu: setting trust to %u\n" #~ msgstr "LID %lu: Setze 'Trust' auf %u\n" #~ msgid "This key belongs to us (we have the secret key)\n" #~ msgstr "" #~ "Dieser SchlЭssel gehЖrt uns (alldieweil wir den geheimen SchlЭssel dazu " #~ "haben)\n" #~ msgid "You will see a list of signators etc. here\n" #~ msgstr "Sie sollten hier eigentlich eine Liste der Signierer sehen.\n" #~ msgid "key %08lX.%lu, uid %02X%02X, sig %08lX: good signature (3)\n" #~ msgstr "SchlЭssel %08lX: UngЭltige Eigenbeglaubigung\n" #~ msgid "" #~ "key %08lX.%lu, uid %02X%02X, sig %08lX: very strange: no public key\n" #~ msgstr "SchlЭssel %08lX: Keine User-ID fЭr Signatur\n" #~ msgid "key %08lX.%lu, uid %02X%02X, sig %08lX: invalid signature: %s\n" #~ msgstr "SchlЭssel %08lX: UngЭltige Eigenbeglaubigung\n" #~ msgid "key %08lX.%lu, uid %02X%02X: good self-signature\n" #~ msgstr "SchlЭssel %08lX: UngЭltige Eigenbeglaubigung\n" #~ msgid "" #~ "key %08lX.%lu, uid %02X%02X, sig %08lX: duplicated signature - deleted\n" #~ msgstr "SchlЭssel %08lX: UngЭltige Eigensignatur\n" #~ msgid "key %08lX.%lu, uid %02X%02X, sig %08lX: good signature (1)\n" #~ msgstr "SchlЭssel %08lX: UngЭltige Eigensignatur\n" #~ msgid "key %08lX.%lu, uid %02X%02X, sig %08lX: weird: no public key\n" #~ msgstr "SchlЭssel %08lX: Keine User-ID fЭr Signatur\n" #~ msgid "key %08lX.%lu, uid %02X%02X, sig %08lX: good signature (2)\n" #~ msgstr "SchlЭssel %08lX: UngЭltige Eigensignatur\n" #~ msgid "key %08lX.%lu, uid %02X%02X, sig %08lX: no public key\n" #~ msgstr "SchlЭssel %08lX: Keine User-ID fЭr Signatur\n" #~ msgid "key %08lX: already in ultikey_table\n" #~ msgstr "SchlЭssel %08lX: bereits in der Tabelle der geheime SchlЭssel\n" #~ msgid "can't write keyring\n" #~ msgstr "kann SchlЭsselbund nicht schreiben\n" #~ msgid "make a signature on a key in the keyring" #~ msgstr "SchlЭssel signieren" #~ msgid "edit a key signature" #~ msgstr "Bearbeiten der Signaturen eines SchlЭssels" #~ 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.\n" #~ msgstr "" #~ "Sie mЭssen selbt entscheiden, welchen Wert Sie hier eintragen; dieser Wert\n" #~ "wird niemals an eine dritte Seite weitergegeben. Wir brauchen diesen Wert,\n" #~ "um das \"Netz des Vertrauens\" aufzubauen. Dieses hat nichts mit dem " #~ "(implizit\n" #~ "erzeugten) \"Netz der Zertifikate\" zu tun.\n" #~ msgid "public and secret subkey created.\n" #~ msgstr "жffentlicher und geheimer SchlЭssel erzeugt.\n" #~ msgid "No public key for %d signatures\n" #~ msgstr "Kein Жffentlicher SchlЭssel fЭr %d Signaturen\n" #~ msgid "[User name not available] " #~ msgstr "[Benuzername nicht verfЭgbar] " #~ msgid "This is a BAD signature!\n" #~ msgstr "Dies ist eine FALSCHE Signatur!\n" #~ msgid "The signature could not be checked!\n" #~ msgstr "Die Signatur konnte nicht geprЭft werden!\n" #~ msgid "Checking signatures of this public key certificate:\n" #~ msgstr "Die Signaturen dieses Zertifikats werden ЭberprЭft:\n" #~ msgid "Do you want to remove some of the invalid signatures? " #~ msgstr "MЖchten Sie einige der ungЭltigen Signaturen entfernen? " #~ msgid "there is a secret key for this public key!\n" #~ msgstr "" #~ "Es gibt einen privaten SchlЭssel zu diesem Жffentlichen SchlЭssel!\n" #~ msgid "use option \"--delete-secret-key\" to delete it first.\n" #~ msgstr "" #~ "Benutzen Sie das Kommando \"--delete-secret-key\", um ihn vorab zu " #~ "entfernen.\n" #~ msgid "can't do that in batchmode without \"--yes\"\n" #~ msgstr "Dies kann im Batchmodus ohne \"--yes\" nicht durchgefЭhrt werden.\n" #~ msgid "Delete this key from the keyring? " #~ msgstr "Diesen SchlЭssel aus dem SchlЭsselbund lЖschen? " #~ msgid "This is a secret key! - really delete? " #~ msgstr "Dies ist ein privater SchlЭssel! - Wirklich lЖschen? " diff --git a/po/es_ES.po b/po/es_ES.po index 4bea02b69..1b4d2b727 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -1,3443 +1,3443 @@ # Spanish messages for gnupg # Urko Lusa , 1998 # I've tried to mantain the terminology used by Armando Ramos # is his PGP 2.3.6i translation. # I also got inspiration from it.po by Marco d'Itri # # GPG version: 0.9.7 msgid "" msgstr "" -"POT-Creation-Date: 1999-06-26 11:22+0200\n" +"POT-Creation-Date: 1999-07-06 17:34+0200\n" "PO-Revision-Date: 1999-06-06 18:33+0200\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Date: 1998-11-13 10:49:25+0100\n" "From: Urko Lusa \n" "Updated: 1998-01-12\n" "By: Luca Olivetti \n" "Xgettext-Options: --default-domain=gnupg --directory=.. --add-comments " "--keyword=_ --keyword=N_ --files-from=./POTFILES.in\n" "Files: util/secmem.c util/argparse.c cipher/random.c cipher/rand-dummy.c " "cipher/rand-unix.c cipher/rand-w32.c g10/g10.c g10/pkclist.c g10/keygen.c " "g10/decrypt.c g10/encode.c g10/import.c g10/keyedit.c g10/keylist.c " "g10/mainproc.c g10/passphrase.c g10/plaintext.c g10/pref.c g10/seckey-cert.c " "g10/sig-check.c g10/sign.c g10/trustdb.c g10/verify.c\n" -#: util/secmem.c:76 +#: util/secmem.c:79 msgid "Warning: using insecure memory!\n" msgstr "ATENCIсN: ║se estА usando memoria insegura!\n" -#: util/secmem.c:249 +#: util/secmem.c:275 msgid "operation is not possible without initialized secure memory\n" msgstr "operaciСn imposible sin memoria segura inicializada\n" -#: util/secmem.c:250 +#: util/secmem.c:276 msgid "(you may have used the wrong program for this task)\n" msgstr "(es posible que haya usado el programa incorrecto para esta tarea)\n" -#: util/miscutil.c:156 util/miscutil.c:173 +#: util/miscutil.c:254 util/miscutil.c:271 msgid "yes" msgstr "sМ" -#: util/miscutil.c:157 util/miscutil.c:175 +#: util/miscutil.c:255 util/miscutil.c:273 msgid "yY" msgstr "sS" -#: g10/keyedit.c:559 util/miscutil.c:174 +#: g10/keyedit.c:561 util/miscutil.c:272 msgid "quit" msgstr "" -#: util/miscutil.c:176 +#: util/miscutil.c:274 msgid "qQ" msgstr "" #: util/errors.c:54 msgid "general error" msgstr "Error general" #: util/errors.c:55 msgid "unknown packet type" msgstr "Formato desconocido" #: util/errors.c:56 msgid "unknown version" msgstr "VersiСn desconocida" #: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "Algoritmo de clave pЗblica desconocido" #: util/errors.c:58 msgid "unknown digest algorithm" msgstr "Algoritmo desconocido de resumen de mensaje" #: util/errors.c:59 msgid "bad public key" msgstr "Clave pЗblica incorrecta" #: util/errors.c:60 msgid "bad secret key" msgstr "Clave secreta incorrecta" #: util/errors.c:61 msgid "bad signature" msgstr "Firma incorrecta" #: util/errors.c:62 msgid "checksum error" msgstr "Error en suma de comprobaciСn" #: util/errors.c:63 msgid "bad passphrase" msgstr "ContraseЯa incorrecta" #: util/errors.c:64 msgid "public key not found" msgstr "Clave pЗblica no encontrada" #: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "Algoritmo de cifrado desconocido" #: util/errors.c:66 msgid "can't open the keyring" msgstr "No se puede abrir el anillo" #: util/errors.c:67 msgid "invalid packet" msgstr "Valor no vАlido" #: util/errors.c:68 msgid "invalid armor" msgstr "Armadura no vАlida" #: util/errors.c:69 msgid "no such user id" msgstr "No existe el identificativo de usuario" #: util/errors.c:70 msgid "secret key not available" msgstr "Clave secreta no disponible" #: util/errors.c:71 msgid "wrong secret key used" msgstr "Clave secreta incorrecta" #: util/errors.c:72 msgid "not supported" msgstr "No soportado" #: util/errors.c:73 msgid "bad key" msgstr "Clave incorrecta" #: util/errors.c:74 msgid "file read error" msgstr "Error de lectura" #: util/errors.c:75 msgid "file write error" msgstr "error de escritura" #: util/errors.c:76 msgid "unknown compress algorithm" msgstr "Algoritmo de compresiСn desconocido" #: util/errors.c:77 msgid "file open error" msgstr "Error al abrir fichero" #: util/errors.c:78 msgid "file create error" msgstr "Error al crear fichero" #: util/errors.c:79 msgid "invalid passphrase" msgstr "ContraseЯa incorrecta" #: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "Algoritmo de clave pЗblica no implementado" #: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "Algoritmo de cifrado no implementado" #: util/errors.c:82 msgid "unknown signature class" msgstr "Clase de firma desconocida" #: util/errors.c:83 msgid "trust database error" msgstr "Error en la base de datos de confianza" #: util/errors.c:84 msgid "bad MPI" msgstr "MPI incorrecto" #: util/errors.c:85 msgid "resource limit" msgstr "LМmite de recurso" #: util/errors.c:86 msgid "invalid keyring" msgstr "Anillo no vАlido" #: util/errors.c:87 msgid "bad certificate" msgstr "Certificado incorrecto" #: util/errors.c:88 msgid "malformed user id" msgstr "Identificativo de usuario mal formado" #: util/errors.c:89 msgid "file close error" msgstr "Error al cerrar fichero" #: util/errors.c:90 msgid "file rename error" msgstr "Error al renombrar fichero" #: util/errors.c:91 msgid "file delete error" msgstr "Error al borrar fichero" #: util/errors.c:92 msgid "unexpected data" msgstr "Datos inesperados" #: util/errors.c:93 msgid "timestamp conflict" msgstr "Conflicto con sello de fecha" #: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "Algoritmo de clave pЗblica no utilizable" #: util/errors.c:95 msgid "file exists" msgstr "El fichero existe. " #: util/errors.c:96 msgid "weak key" msgstr "Clave dИbil" #: util/errors.c:97 msgid "invalid argument" msgstr "argumento no vАlido" #: util/errors.c:98 msgid "bad URI" msgstr "URI incorrecto" #: util/errors.c:99 msgid "unsupported URI" msgstr "URI no soportado" #: util/errors.c:100 msgid "network error" msgstr "error de red" #: util/errors.c:102 msgid "not encrypted" msgstr "no cifrado" #: util/logger.c:218 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... esto es un bug (%s:%d:%s)\n" #: util/logger.c:224 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "Ha encontrado Vd. un bug... (%s:%d)\n" -#: cipher/random.c:412 +#: cipher/random.c:452 msgid "WARNING: using insecure random number generator!!\n" msgstr "" "ATENCIсN: ║se estА usando un generador de nЗmeros aleatorios inseguro!\n" -#: cipher/random.c:413 +#: cipher/random.c:453 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 "" "EL generador de nЗmeros aleatorios es sСlo un apaЯo\n" "para poder compilar. ║No es en absoluto seguro!\n" "\n" "║NO USE NINGзN DATO GENERADO POR ESTE PROGRAMA!\n" "\n" #: cipher/rndlinux.c:135 #, 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" "No hay suficientes bytes aleatorios disponibles. Por favor, haga algЗn\n" "otro trabajo para que el sistema pueda recolectar mАs entropМa\n" "(se necesitan %d bytes mАs).\n" -#: g10/g10.c:174 +#: g10/g10.c:176 msgid "" "@Commands:\n" " " msgstr "" "@Comandos:\n" " " -#: g10/g10.c:176 +#: g10/g10.c:178 msgid "|[file]|make a signature" msgstr "|[file]|hace una firma" -#: g10/g10.c:177 +#: g10/g10.c:179 msgid "|[file]|make a clear text signature" msgstr "|[file]|hace una firma en texto claro" -#: g10/g10.c:178 +#: g10/g10.c:180 msgid "make a detached signature" msgstr "hace una firma separada" -#: g10/g10.c:179 +#: g10/g10.c:181 msgid "encrypt data" msgstr "cifra datos" -#: g10/g10.c:180 +#: g10/g10.c:182 msgid "encryption only with symmetric cipher" msgstr "cifra sСlo con un cifrado simИtrico" -#: g10/g10.c:181 +#: g10/g10.c:183 msgid "store only" msgstr "sСlo almacenar" -#: g10/g10.c:182 +#: g10/g10.c:184 msgid "decrypt data (default)" msgstr "descifra datos (predefinido)" -#: g10/g10.c:183 +#: g10/g10.c:185 msgid "verify a signature" msgstr "verifica una firma" -#: g10/g10.c:184 +#: g10/g10.c:186 msgid "list keys" msgstr "lista claves" -#: g10/g10.c:186 +#: g10/g10.c:188 msgid "list keys and signatures" msgstr "lista claves y firmas" -#: g10/g10.c:187 +#: g10/g10.c:189 msgid "check key signatures" msgstr "comprueba las firmas de las claves" -#: g10/g10.c:188 +#: g10/g10.c:190 msgid "list keys and fingerprints" msgstr "lista claves y huellas dactilares" -#: g10/g10.c:189 +#: g10/g10.c:191 msgid "list secret keys" msgstr "lista claves secretas" -#: g10/g10.c:190 +#: g10/g10.c:192 msgid "generate a new key pair" msgstr "genera un nuevo par de claves" -#: g10/g10.c:191 +#: g10/g10.c:193 msgid "remove key from the public keyring" msgstr "elimina la clave del anillo pЗblico" -#: g10/g10.c:192 +#: g10/g10.c:194 msgid "sign or edit a key" msgstr "firma o modifica una clave" -#: g10/g10.c:193 +#: g10/g10.c:195 msgid "generate a revocation certificate" msgstr "genera un certificado de revocaciСn" -#: g10/g10.c:194 +#: g10/g10.c:196 msgid "export keys" msgstr "exporta claves" -#: g10/g10.c:195 +#: g10/g10.c:197 msgid "export keys to a key server" msgstr "exporta claves a un servidor de claves" -#: g10/g10.c:196 +#: g10/g10.c:198 msgid "import keys from a key server" msgstr "importa claves desde un servidor de claves" -#: g10/g10.c:199 +#: g10/g10.c:201 msgid "import/merge keys" msgstr "importa/fusiona claves" -#: g10/g10.c:201 +#: g10/g10.c:203 msgid "list only the sequence of packets" msgstr "lista sСlo la secuencia de paquetes" -#: g10/g10.c:203 +#: g10/g10.c:205 msgid "export the ownertrust values" msgstr "exporta los valores de confianza" -#: g10/g10.c:205 +#: g10/g10.c:207 msgid "import ownertrust values" msgstr "importa los valores de confianza" -#: g10/g10.c:207 +#: g10/g10.c:209 msgid "|[NAMES]|update the trust database" msgstr "|[NOMBRES]|actualiza la base de datos de confianza" -#: g10/g10.c:209 +#: g10/g10.c:211 msgid "|[NAMES]|check the trust database" msgstr "|[NOMBRES]|comprueba la base de datos de confianza" -#: g10/g10.c:210 +#: g10/g10.c:212 msgid "fix a corrupted trust database" msgstr "arregla una base de datos de confianza daЯada" -#: g10/g10.c:211 +#: g10/g10.c:213 msgid "De-Armor a file or stdin" msgstr "quita la armadura de un fichero o stdin" -#: g10/g10.c:212 +#: g10/g10.c:214 msgid "En-Armor a file or stdin" msgstr "crea la armadura a un fichero o stdin" -#: g10/g10.c:213 +#: g10/g10.c:215 msgid "|algo [files]|print message digests" msgstr "|algo [ficheros]|imprime resЗmenes de mensaje" -#: g10/g10.c:214 +#: g10/g10.c:216 msgid "print all message digests" msgstr "imprime todos los resЗmenes de mensaje" -#: g10/g10.c:220 +#: g10/g10.c:222 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opciones:\n" " " -#: g10/g10.c:222 +#: g10/g10.c:224 msgid "create ascii armored output" msgstr "crea una salida ascii con armadura" -#: g10/g10.c:223 +#: g10/g10.c:225 msgid "|NAME|encrypt for NAME" msgstr "|NOMBRE|cifra para NOMBRE" -#: g10/g10.c:227 +#: g10/g10.c:229 msgid "use this user-id to sign or decrypt" msgstr "usa este usuario para firmar o descifrar" -#: g10/g10.c:228 +#: g10/g10.c:230 msgid "|N|set compress level N (0 disables)" msgstr "|N|establece nivel de compresiСn N (0 no comprime)" -#: g10/g10.c:230 +#: g10/g10.c:232 msgid "use canonical text mode" msgstr "usa modo de texto canСnico" -#: g10/g10.c:231 +#: g10/g10.c:233 msgid "use as output file" msgstr "usa como fichero de salida" -#: g10/g10.c:232 +#: g10/g10.c:234 msgid "verbose" msgstr "prolijo" -#: g10/g10.c:233 +#: g10/g10.c:235 msgid "be somewhat more quiet" msgstr "algo mАs discreto" -#: g10/g10.c:234 +#: g10/g10.c:236 msgid "don't use the terminal at all" msgstr "" -#: g10/g10.c:235 +#: g10/g10.c:237 msgid "force v3 signatures" msgstr "fuerza firmas v3" -#: g10/g10.c:236 +#: g10/g10.c:238 msgid "always use a MDC for encryption" msgstr "siempre usa un MCD para cifrar" -#: g10/g10.c:237 +#: g10/g10.c:239 msgid "do not make any changes" msgstr "no hace ningЗn cambio" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/g10.c:239 +#: g10/g10.c:241 msgid "batch mode: never ask" msgstr "proceso por lotes: nunca preguntar" -#: g10/g10.c:240 +#: g10/g10.c:242 msgid "assume yes on most questions" msgstr "asume \"sМ\" en casi todas las preguntas" -#: g10/g10.c:241 +#: g10/g10.c:243 msgid "assume no on most questions" msgstr "asume \"no\" en casi todas las preguntas" -#: g10/g10.c:242 +#: g10/g10.c:244 msgid "add this keyring to the list of keyrings" msgstr "aЯade este anillo a la lista de anillos" -#: g10/g10.c:243 +#: g10/g10.c:245 msgid "add this secret keyring to the list" msgstr "aЯade este anillo secreto a la lista" -#: g10/g10.c:244 +#: g10/g10.c:246 msgid "|NAME|use NAME as default secret key" msgstr "|NOMBRE|usa NOMBRE como clave secreta por defecto" -#: g10/g10.c:245 +#: g10/g10.c:247 msgid "|HOST|use this keyserver to lookup keys" msgstr "|SERVIDOR|usa este servidor de claves" -#: g10/g10.c:246 +#: g10/g10.c:248 msgid "|NAME|set terminal charset to NAME" msgstr "|NOMBRE|usa el juego de caracteres NOMBRE" -#: g10/g10.c:247 +#: g10/g10.c:249 msgid "read options from file" msgstr "lee opciones del fichero" -#: g10/g10.c:249 +#: g10/g10.c:251 msgid "set debugging flags" msgstr "establece los parАmetros de depuraciСn" -#: g10/g10.c:250 +#: g10/g10.c:252 msgid "enable full debugging" msgstr "habilita depuraciСn completa" -#: g10/g10.c:251 +#: g10/g10.c:253 msgid "|FD|write status info to this FD" msgstr "|DF|escribe informaciСn de estado en descriptor DF" -#: g10/g10.c:252 +#: g10/g10.c:254 msgid "do not write comment packets" msgstr "no escribe paquetes de comentario" -#: g10/g10.c:253 +#: g10/g10.c:255 msgid "(default is 1)" msgstr "(por defecto es 1)" -#: g10/g10.c:254 +#: g10/g10.c:256 msgid "(default is 3)" msgstr "(por defecto es 3)" -#: g10/g10.c:256 +#: g10/g10.c:258 msgid "|FILE|load extension module FILE" msgstr "|FICHERO|carga mСdulo de extensiones FICHERO" -#: g10/g10.c:257 +#: g10/g10.c:259 msgid "emulate the mode described in RFC1991" msgstr "emula el modo descrito en la RFC1991" -#: g10/g10.c:258 +#: g10/g10.c:260 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "" -#: g10/g10.c:259 +#: g10/g10.c:261 msgid "|N|use passphrase mode N" msgstr "|N|usa modo de contraseЯa N" -#: g10/g10.c:261 +#: g10/g10.c:263 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "" "|NOMBRE|usa algoritmo de resumen de mensaje NOMBRE\n" "para las contraseЯas" -#: g10/g10.c:263 +#: g10/g10.c:265 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "" "|NOMBRE|usa el algoritmo de cifrado NOMBRE para las\n" "contraseЯas" -#: g10/g10.c:264 +#: g10/g10.c:266 msgid "|NAME|use cipher algorithm NAME" msgstr "|NOMBRE|usa el algoritmo de cifrado NOMBRE" -#: g10/g10.c:265 +#: g10/g10.c:267 msgid "|NAME|use message digest algorithm NAME" msgstr "|NOMBRE|usa algoritmo de resumen de mensaje NOMBRE" -#: g10/g10.c:266 +#: g10/g10.c:268 msgid "|N|use compress algorithm N" msgstr "|N|usa el algoritmo de compresiСn N" -#: g10/g10.c:267 +#: g10/g10.c:269 msgid "throw keyid field of encrypted packets" msgstr "elimina el campo keyid de los paquetes cifrados" -#: g10/g10.c:268 +#: g10/g10.c:270 msgid "|NAME=VALUE|use this notation data" msgstr "" -#: g10/g10.c:270 +#: g10/g10.c:272 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" "Ejemplos:\n" "\n" " -se -r Bob [fichero] firma y cifra para el usuario Bob\n" " --clearsign [fichero] hace una firma manteniendo el texto sin cifrar\n" " --detach-sign [fichero] hace una firma separada\n" " --list-keys [nombres] muestra las claves\n" " --fingerprint [nombres] muestra las huellas dactilares\n" -#: g10/g10.c:347 +#: g10/g10.c:351 msgid "Please report bugs to .\n" msgstr "Por favor, informe de posibles \"bugs\" a .\n" -#: g10/g10.c:351 +#: g10/g10.c:355 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uso: gpg [opciones] [ficheros] (-h para ayuda)" -#: g10/g10.c:354 +#: g10/g10.c:358 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" "default operation depends on the input data\n" msgstr "" "Sintaxis: gpg [opciones] [ficheros]\n" "Firma, comprueba, cifra o descifra.\n" "La operaciСn por defecto depende del tipo de datos de entrada.\n" -#: g10/g10.c:359 +#: g10/g10.c:363 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algoritmos soportados:\n" -#: g10/g10.c:433 +#: g10/g10.c:437 msgid "usage: gpg [options] " msgstr "uso: gpg [opciones] " -#: g10/g10.c:473 +#: g10/g10.c:477 msgid "conflicting commands\n" msgstr "comandos incompatibles\n" -#: g10/g10.c:605 +#: g10/g10.c:609 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTA: no existe el fichero de opciones predefinido `%s'\n" -#: g10/g10.c:609 +#: g10/g10.c:613 #, c-format msgid "option file `%s': %s\n" msgstr "fichero de opciones `%s': %s\n" -#: g10/g10.c:616 +#: g10/g10.c:620 #, c-format msgid "reading options from `%s'\n" msgstr "leyendo opciones desde `%s'\n" -#: g10/g10.c:782 +#: g10/g10.c:786 #, c-format msgid "%s is not a valid character set\n" msgstr "%s no es un juego de caracteres vАlido\n" -#: g10/g10.c:827 g10/g10.c:839 +#: g10/g10.c:833 g10/g10.c:845 msgid "selected cipher algorithm is invalid\n" msgstr "el algoritmo de cifrado seleccionado no es vАlido\n" -#: g10/g10.c:833 g10/g10.c:845 +#: g10/g10.c:839 g10/g10.c:851 msgid "selected digest algorithm is invalid\n" msgstr "el algoritmo de resumen seleccionado no es vАlido\n" -#: g10/g10.c:849 +#: g10/g10.c:855 msgid "the given policy URL is invalid\n" msgstr "" -#: g10/g10.c:852 +#: g10/g10.c:858 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "el algoritmo de compresiСn debe estar en el rango %d-%d\n" -#: g10/g10.c:854 +#: g10/g10.c:860 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed debe ser mayor que 0\n" -#: g10/g10.c:856 +#: g10/g10.c:862 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed debe ser mayor que 1\n" -#: g10/g10.c:858 +#: g10/g10.c:864 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "max-cert-depth debe estar en el rango 1-255\n" -#: g10/g10.c:861 +#: g10/g10.c:867 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTA: el modo S2K simple (0) no es nada recomendable\n" -#: g10/g10.c:865 +#: g10/g10.c:871 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "modo S2K incorrecto; debe ser 0, 1 o 3\n" -#: g10/g10.c:942 +#: g10/g10.c:948 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "inicializaciСn de la base de datos de confianza fallida: %s\n" -#: g10/g10.c:948 +#: g10/g10.c:954 msgid "--store [filename]" msgstr "--store [nombre_fichero]" -#: g10/g10.c:955 +#: g10/g10.c:961 msgid "--symmetric [filename]" msgstr "--symmetric [nombre_fichero]" -#: g10/g10.c:963 +#: g10/g10.c:969 msgid "--encrypt [filename]" msgstr "--encrypt [nombre_fichero]" -#: g10/g10.c:976 +#: g10/g10.c:982 msgid "--sign [filename]" msgstr "--sign [nombre_fichero]" -#: g10/g10.c:989 +#: g10/g10.c:995 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nombre_fichero]" -#: g10/g10.c:1003 +#: g10/g10.c:1009 msgid "--clearsign [filename]" msgstr "--clearsign [nombre_fichero]" -#: g10/g10.c:1015 +#: g10/g10.c:1021 msgid "--decrypt [filename]" msgstr "--decrypt [nombre_fichero]" -#: g10/g10.c:1024 +#: g10/g10.c:1030 msgid "--edit-key username [commands]" msgstr "--edit-key nombre_usuario [comandos]" -#: g10/g10.c:1038 +#: g10/g10.c:1044 msgid "--delete-secret-key username" msgstr "--delete-secret-key nombre_usuario" -#: g10/g10.c:1041 +#: g10/g10.c:1047 msgid "--delete-key username" msgstr "--delete-key nombre_usuario" -#: g10/encode.c:231 g10/g10.c:1064 g10/sign.c:366 +#: g10/encode.c:231 g10/g10.c:1071 g10/sign.c:366 #, c-format msgid "can't open %s: %s\n" msgstr "no puede abrirse `%s': %s\n" -#: g10/g10.c:1075 +#: g10/g10.c:1082 msgid "-k[v][v][v][c] [userid] [keyring]" msgstr "-k[v][v][v][c] [id_usuario] [anillo]" -#: g10/g10.c:1134 +#: g10/g10.c:1141 #, c-format msgid "dearmoring failed: %s\n" msgstr "eliminaciСn de armadura fallida: %s\n" -#: g10/g10.c:1142 +#: g10/g10.c:1149 #, c-format msgid "enarmoring failed: %s\n" msgstr "creaciСn de armadura fallida: %s\n" -#: g10/g10.c:1208 +#: g10/g10.c:1215 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algoritmo de distribuciСn no vАlido `%s'\n" -#: g10/g10.c:1283 +#: g10/g10.c:1290 msgid "[filename]" msgstr "[nombre_fichero]" -#: g10/g10.c:1287 +#: g10/g10.c:1294 msgid "Go ahead and type your message ...\n" msgstr "Adelante, teclee su mensaje ...\n" -#: g10/decrypt.c:59 g10/g10.c:1290 g10/verify.c:66 +#: g10/decrypt.c:59 g10/g10.c:1297 g10/verify.c:66 #, c-format msgid "can't open `%s'\n" msgstr "no puede abrirse `%s'\n" -#: g10/g10.c:1457 +#: g10/g10.c:1466 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" -#: g10/g10.c:1463 +#: g10/g10.c:1472 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" msgstr "" -#: g10/g10.c:1469 +#: g10/g10.c:1478 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "" -#: g10/g10.c:1477 +#: g10/g10.c:1486 msgid "a notation value must not use any control characters\n" msgstr "" #: g10/armor.c:296 #, c-format msgid "armor: %s\n" msgstr "armadura: %s\n" #: g10/armor.c:319 msgid "invalid armor header: " msgstr "cabecera de armadura no vАlida: " #: g10/armor.c:326 msgid "armor header: " msgstr "cabecera de armadura: " #: g10/armor.c:337 msgid "invalid clearsig header\n" msgstr "cabecera de firma clara no vАlida\n" #: g10/armor.c:389 msgid "nested clear text signatures\n" msgstr "firmas en texto claro anidadas\n" #: g10/armor.c:500 msgid "invalid dash escaped line: " msgstr "LМnea con guiones no vАlida: " #: g10/armor.c:512 msgid "unexpected armor:" msgstr "armadura inesperada" #: g10/armor.c:629 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "caracteres no vАlidos radix64 %02x ignorados\n" #: g10/armor.c:672 msgid "premature eof (no CRC)\n" msgstr "Fin de fichero prematuro\n" #: g10/armor.c:706 msgid "premature eof (in CRC)\n" msgstr "Fin de suma de comprobaciСn prematuro\n" #: g10/armor.c:710 msgid "malformed CRC\n" msgstr "Suma de comprobaciСn mal creada\n" #: g10/armor.c:714 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "Error en suma de comprobaciСn: %06lx - %06lx\n" #: g10/armor.c:731 msgid "premature eof (in Trailer)\n" msgstr "fin de fichero prematuro (en el cierre)\n" #: g10/armor.c:735 msgid "error in trailer line\n" msgstr "error en la lМnea de cierre\n" #: g10/armor.c:1001 msgid "no valid OpenPGP data found.\n" msgstr "no se han encontrados datos OpenPGP vАlidos\n" #: g10/armor.c:1005 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armadura incorrecta: lМnea mАs larga de %d caracteres\n" #: g10/armor.c:1009 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "caracter \"quoted printable\" en la armadura - probablemente se usС\n" "un MTA defectuoso\n" #: g10/pkclist.c:137 #, c-format msgid "" "No trust value assigned to %lu:\n" "%4u%c/%08lX %s \"" msgstr "" "No hay confianza definida para el propietario %lu:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:147 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" " 1 = Don't know\n" " 2 = I do NOT trust\n" " 3 = I trust marginally\n" " 4 = I trust fully\n" " s = please show me more information\n" msgstr "" "Por favor, decida su nivel de confianza para este que usuario\n" "verifique las claves de otros usuarios (mirando pasaportes,\n" "comprobando huellas dactilares en diferentes fuentes...)\n" "\n" " 1 = No lo sИ\n" " 2 = NO me fМo\n" " 3 = Me fМo marginalmente\n" " 4 = Me fМo completamente\n" " i = Mostrar mАs informaciСn\n" #: g10/pkclist.c:156 msgid " m = back to the main menu\n" msgstr " m = volver al menЗ principal\n" #: g10/pkclist.c:158 msgid " q = quit\n" msgstr " q = salir\n" #. a string with valid answers #: g10/pkclist.c:163 msgid "sSmMqQ" msgstr "iImMqQ" #: g10/pkclist.c:167 msgid "Your decision? " msgstr "Su decisiСn: " #: g10/pkclist.c:187 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificados que llevan a una clave de confianza absoluta:\n" -#: g10/pkclist.c:254 +#: g10/pkclist.c:256 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 "" "No puede encontrarse una ruta de confianza vАlida para esta clave. Veamos\n" "si es posible asignar algunos valores de confianza perdidos.\n" "\n" -#: g10/pkclist.c:260 +#: g10/pkclist.c:262 msgid "" "No path leading to one of our keys found.\n" "\n" msgstr "" "No se ha encontrado ninguna ruta con una de nuestras claves.\n" "\n" -#: g10/pkclist.c:262 +#: g10/pkclist.c:264 msgid "" "No certificates with undefined trust found.\n" "\n" msgstr "" "No se ha encontrado ningЗn certificado sin valor de confianza.\n" "\n" -#: g10/pkclist.c:264 +#: g10/pkclist.c:266 msgid "" "No trust values changed.\n" "\n" msgstr "" "No se cambiС ningЗn valor de confianza.\n" "\n" -#: g10/pkclist.c:281 +#: g10/pkclist.c:283 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "clave %08lX: ║esta clave ha sido revocada!\n" -#: g10/pkclist.c:287 g10/pkclist.c:297 g10/pkclist.c:403 +#: g10/pkclist.c:289 g10/pkclist.c:299 g10/pkclist.c:405 msgid "Use this key anyway? " msgstr "©Usar esta clave de todas formas? " -#: g10/pkclist.c:291 +#: g10/pkclist.c:293 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "clave %08lX: ║esta subclave ha sido revocada!\n" -#: g10/pkclist.c:321 +#: g10/pkclist.c:323 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: clave caducada\n" -#: g10/pkclist.c:327 +#: g10/pkclist.c:329 #, c-format msgid "%08lX: no info to calculate a trust probability\n" msgstr "%08lX: no hay informaciСn para calcular la probabilidad de confianza\n" -#: g10/pkclist.c:341 +#: g10/pkclist.c:343 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: ║Esta clave NO es de confianza!\n" -#: g10/pkclist.c:347 +#: g10/pkclist.c:349 #, 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: No hay seguridad que esta clave pertenezca realmente a su " "proprietario\n" "pero se acepta igualmente\n" -#: g10/pkclist.c:353 +#: g10/pkclist.c:355 msgid "This key probably belongs to the owner\n" msgstr "Esta clave probablemente pertenece a su proprietario\n" -#: g10/pkclist.c:358 +#: g10/pkclist.c:360 msgid "This key belongs to us\n" msgstr "Esta clave nos pertenece\n" -#: g10/pkclist.c:398 +#: g10/pkclist.c:400 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" "the next question with yes\n" "\n" msgstr "" "No es seguro que la clave pertenezca a su propietario.\n" "Si *realmente* sabe lo que estА haciendo, puede contestar\n" "\"sМ\" a la siguiente pregunta.\n" "\n" -#: g10/pkclist.c:411 g10/pkclist.c:433 +#: g10/pkclist.c:413 g10/pkclist.c:435 msgid "WARNING: Using untrusted key!\n" msgstr "ATENCIсN: ║Usando una clave no fiable!\n" -#: g10/pkclist.c:454 +#: g10/pkclist.c:456 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ATENCIсN: ║Esta clave ha sido revocada por su propietario!\n" -#: g10/pkclist.c:455 +#: g10/pkclist.c:457 msgid " This could mean that the signature is forgery.\n" msgstr " Esto puede significar que la firma estА falsificada.\n" -#: g10/pkclist.c:459 +#: g10/pkclist.c:461 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "ATENCIсN: ║Esta clave ha sido revocada por su propietario!\n" -#: g10/pkclist.c:480 +#: g10/pkclist.c:482 msgid "Note: This key has expired!\n" msgstr "Nota: ║Esta clave estА caducada!\n" -#: g10/pkclist.c:487 +#: g10/pkclist.c:489 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "ATENCIсN: ║Esta clave no estА certificada por una firma de confianza!\n" -#: g10/pkclist.c:489 +#: g10/pkclist.c:491 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " No hay indicios de que la firma pertenezca al propietario.\n" -#: g10/pkclist.c:505 +#: g10/pkclist.c:507 msgid "WARNING: We do NOT trust this key!\n" msgstr "ATENCIсN: ║Esta clave NO es de confianza!\n" -#: g10/pkclist.c:506 +#: g10/pkclist.c:508 msgid " The signature is probably a FORGERY.\n" msgstr " La firma es probablemente una FALSIFICACIсN.\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:515 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "ATENCIсN: ║Esta clave no estА certificada con suficientes firmas de " "confianza!\n" -#: g10/pkclist.c:516 +#: g10/pkclist.c:518 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " No es seguro que la firma pertenezca al propietario.\n" -#: g10/pkclist.c:580 g10/pkclist.c:602 g10/pkclist.c:665 g10/pkclist.c:705 +#: g10/pkclist.c:582 g10/pkclist.c:604 g10/pkclist.c:670 g10/pkclist.c:715 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: ignorado: %s\n" -#: g10/pkclist.c:588 g10/pkclist.c:687 +#: g10/pkclist.c:590 g10/pkclist.c:697 #, fuzzy, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: problema lectura del bloque de clave: %s\n" -#: g10/pkclist.c:611 +#: g10/pkclist.c:613 msgid "" "You did not specify a user ID. (you may use \"-r\")\n" "\n" msgstr "" "No se ha especificado un ID de usuario (puede usar \"-r\")\n" "\n" -#: g10/pkclist.c:616 +#: g10/pkclist.c:618 msgid "Enter the user ID: " msgstr "Introduzca el ID de usuario: " -#: g10/pkclist.c:627 +#: g10/pkclist.c:629 msgid "No such user ID.\n" msgstr "ID de usuario inexistente.\n" -#: g10/pkclist.c:673 +#: g10/pkclist.c:639 +#, fuzzy +msgid "Public key is disabled.\n" +msgstr "la clave pЗblica es %08lX\n" + +#: g10/pkclist.c:678 #, c-format msgid "%s: error checking key: %s\n" msgstr "%s: error comprobando la clave: %s\n" -#: g10/pkclist.c:711 +#: g10/pkclist.c:683 +#, fuzzy, c-format +msgid "%s: skipped: public key is disabled\n" +msgstr "%s: problema lectura del bloque de clave: %s\n" + +#: g10/pkclist.c:721 msgid "no valid addressees\n" msgstr "no hay direcciones vАlidas\n" #: g10/keygen.c:122 msgid "writing self signature\n" msgstr "escribiendo autofirma\n" #: g10/keygen.c:160 msgid "writing key binding signature\n" msgstr "escribiendo la firma de comprobaciСn de clave\n" #: g10/keygen.c:386 msgid "Please select what kind of key you want:\n" msgstr "Por favor seleccione tipo de clave deseado:\n" #: g10/keygen.c:388 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA y ElGamal (por defecto)\n" #: g10/keygen.c:389 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (sСlo firma)\n" #: g10/keygen.c:391 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (sСlo cifrado)\n" #: g10/keygen.c:392 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (firma y cifrado)\n" #: g10/keygen.c:394 #, c-format msgid " (%d) ElGamal in a v3 packet\n" msgstr " (%d) ElGamal en un paquete v3\n" #: g10/keygen.c:399 msgid "Your selection? " msgstr "Su elecciСn: " #: g10/keygen.c:409 msgid "Do you really want to create a sign and encrypt key? " msgstr "©De verdad quiere crear una clave de firma y cifrado? " #: g10/keygen.c:430 msgid "Invalid selection.\n" msgstr "ElecciСn no vАlida.\n" #: g10/keygen.c:442 #, 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 "" "Listo para generar un nuevo par de claves %s.\n" " el tamaЯo mМnimo es 768 bits\n" " el tamaЯo por defecto es 1024 bits\n" " el tamaЯo mАximo recomendado es 2048 bits\n" #: g10/keygen.c:449 msgid "What keysize do you want? (1024) " msgstr "©De quИ tamaЯo quiere la clave (1024)? " #: g10/keygen.c:454 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA sСlo permite tamaЯos desde 512 a 1024\n" #: g10/keygen.c:456 msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "tamaЯo insuficiente; 768 es el valor mМnimo permitido\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:466 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "tamaЯo excesivo; %d es el mАximo valor permitido.\n" #: g10/keygen.c:471 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" msgstr "" "No se recomiendan claves de mАs de 2048 bits porque\n" "el tiempo de computaciСn es REALMENTE largo.\n" #: g10/keygen.c:474 msgid "Are you sure that you want this keysize? " msgstr "©Seguro que quiere una clave de este tamaЯo? " #: g10/keygen.c:475 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" msgstr "" "De acuerdo, ║pero tenga en cuenta que las radiaciones de su monitor y " "teclado\n" "tambiИn son vulnerables a un ataque!\n" #: g10/keygen.c:483 msgid "Do you really need such a large keysize? " msgstr "©De verdad necesita una clave tan grande? " #: g10/keygen.c:489 #, c-format msgid "Requested keysize is %u bits\n" msgstr "El tamaЯo requerido es de %u bits\n" #: g10/keygen.c:492 g10/keygen.c:496 #, c-format msgid "rounded up to %u bits\n" msgstr "redondeados a %u bits\n" #: g10/keygen.c:509 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" " = key expires in n days\n" " w = key expires in n weeks\n" " m = key expires in n months\n" " y = key expires in n years\n" msgstr "" "Por favor, especifique el perМodo de validez de la clave.\n" " 0 = la clave nunca caduca\n" " = la clave caduca en n dМas\n" " w = la clave caduca en n semanas\n" " m = la clave caduca en n meses\n" " y = la clave caduca en n aЯos\n" -#: g10/keygen.c:524 +#: g10/keygen.c:526 msgid "Key is valid for? (0) " msgstr "©Validez de la clave (0)? " -#: g10/keygen.c:535 +#: g10/keygen.c:547 msgid "invalid value\n" msgstr "valor no vАlido\n" -#: g10/keygen.c:540 +#: g10/keygen.c:552 msgid "Key does not expire at all\n" msgstr "La clave nunca caduca\n" #. print the date when the key expires -#: g10/keygen.c:546 +#: g10/keygen.c:558 #, c-format msgid "Key expires at %s\n" msgstr "La clave caduca el %s\n" -#: g10/keygen.c:552 +#: g10/keygen.c:564 msgid "Is this correct (y/n)? " msgstr "©Es correcto (s/n)? " -#: g10/keygen.c:595 +#: g10/keygen.c:607 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) \"\n" "\n" msgstr "" "\n" "Necesita un identificativo de usuario para identificar su clave. El " "programa\n" "construye el identificativo a partir del Nombre Real, Comentario y " "DirecciСn\n" "de Correo ElectrСnico de esta forma:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" -#: g10/keygen.c:606 +#: g10/keygen.c:618 msgid "Real name: " msgstr "Nombre y apellidos: " -#: g10/keygen.c:610 +#: g10/keygen.c:622 msgid "Invalid character in name\n" msgstr "Caracter no vАlido en el nombre\n" -#: g10/keygen.c:612 +#: g10/keygen.c:624 msgid "Name may not start with a digit\n" msgstr "El nombre no puede empezar con un nЗmero\n" -#: g10/keygen.c:614 +#: g10/keygen.c:626 msgid "Name must be at least 5 characters long\n" msgstr "El nombre debe tener al menos 5 caracteres\n" -#: g10/keygen.c:622 +#: g10/keygen.c:634 msgid "Email address: " msgstr "DirecciСn de correo electrСnico: " -#: g10/keygen.c:633 +#: g10/keygen.c:645 msgid "Not a valid email address\n" msgstr "DirecciСn no vАlida\n" -#: g10/keygen.c:641 +#: g10/keygen.c:653 msgid "Comment: " msgstr "Comentario: " -#: g10/keygen.c:647 +#: g10/keygen.c:659 msgid "Invalid character in comment\n" msgstr "Caracter no vАlido en el comentario\n" -#: g10/keygen.c:669 +#: g10/keygen.c:681 #, c-format msgid "You are using the `%s' character set.\n" msgstr "EstА usando el juego de caracteres `%s'.\n" -#: g10/keygen.c:675 +#: g10/keygen.c:687 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Ha seleccionado este identificativo de usuario:\n" " \"%s\"\n" "\n" -#: g10/keygen.c:678 +#: g10/keygen.c:690 msgid "NnCcEeOoQq" msgstr "NnCcDdVvSs" -#: g10/keygen.c:688 +#: g10/keygen.c:700 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "©Cambia (N)ombre, (C)omentario, (D)irecciСn o (V)ale/(S)alir? " -#: g10/keygen.c:740 +#: g10/keygen.c:752 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Necesita una contraseЯa para proteger su clave secreta.\n" "\n" -#: g10/keyedit.c:455 g10/keygen.c:748 +#: g10/keyedit.c:456 g10/keygen.c:760 msgid "passphrase not correctly repeated; try again.\n" msgstr "contraseЯa repetida incorrecta, intИntelo de nuevo.\n" -#: g10/keygen.c:754 +#: g10/keygen.c:766 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 "" "No ha especificado contraseЯa. Esto es probablemente una *mala* idea.\n" "Si mАs tarde quiere aЯadir una, puede hacerlo usando este programa con\n" "la opciСn \"--edit-key\".\n" "\n" -#: g10/keygen.c:775 +#: g10/keygen.c:787 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 "" "Es necesario generar muchos bytes aleatorios. Es una buena idea realizar\n" "alguna otra tarea (trabajar en otra ventana/consola, mover el ratСn, usar\n" "la red y los discos) durante la generaciСn de nЗmeros primos. Esto da al\n" "generador de nЗmeros aleatorios mayor oportunidad de recoger suficiente\n" "entropМa.\n" -#: g10/keygen.c:845 +#: g10/keygen.c:857 msgid "Key generation can only be used in interactive mode\n" msgstr "La creaciСn de claves sСlo es posible en modo interactivo\n" -#: g10/keygen.c:853 +#: g10/keygen.c:865 msgid "DSA keypair will have 1024 bits.\n" msgstr "El par de claves DSA tendrА 1024 bits.\n" -#: g10/keygen.c:859 +#: g10/keygen.c:871 #, fuzzy msgid "Key generation canceled.\n" msgstr "CreaciСn de claves cancelada.\n" -#: g10/keygen.c:869 +#: g10/keygen.c:881 #, c-format msgid "writing public certificate to `%s'\n" msgstr "escribiendo certificado pЗblico en `%s'\n" -#: g10/keygen.c:870 +#: g10/keygen.c:882 #, c-format msgid "writing secret certificate to `%s'\n" msgstr "escribiendo certificado privado en `%s'\n" -#: g10/keygen.c:947 +#: g10/keygen.c:959 msgid "public and secret key created and signed.\n" msgstr "Claves pЗblica y secreta creadas y firmadas.\n" -#: g10/keygen.c:949 +#: g10/keygen.c:961 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 "" "Tenga en cuenta que esta clave no puede ser usada para cifrado. Puede usar\n" "el comando \"--edit-key\" para crear una clave secundaria con este " "propСsito.\n" -#: g10/keygen.c:963 g10/keygen.c:1062 +#: g10/keygen.c:975 g10/keygen.c:1074 #, c-format msgid "Key generation failed: %s\n" msgstr "CreaciСn de la clave fallida: %s\n" -#: g10/keygen.c:1007 g10/sig-check.c:300 g10/sign.c:105 +#: g10/keygen.c:1019 g10/sig-check.c:312 g10/sign.c:105 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "clave pЗblica creada %lu segundos en el futuro (salto en el tiempo o\n" "problemas con el reloj)\n" -#: g10/keygen.c:1009 g10/sig-check.c:302 g10/sign.c:107 +#: g10/keygen.c:1021 g10/sig-check.c:314 g10/sign.c:107 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "clave pЗblica creada %lu segundos en el futuro (salto en el tiempo o\n" "problemas con el reloj)\n" -#: g10/keygen.c:1040 +#: g10/keygen.c:1052 msgid "Really create? " msgstr "©Crear de verdad? " -#: g10/encode.c:91 g10/openfile.c:118 g10/openfile.c:208 g10/tdbio.c:467 +#: g10/encode.c:91 g10/openfile.c:156 g10/openfile.c:246 g10/tdbio.c:467 #: g10/tdbio.c:528 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: no puede abrirse: %s\n" #: g10/encode.c:113 #, c-format msgid "error creating passphrase: %s\n" msgstr "error creando contraseЯa: %s\n" #: g10/encode.c:167 g10/encode.c:287 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: ATENCIсN: fichero vacМo\n" #: g10/encode.c:237 #, c-format msgid "reading from `%s'\n" msgstr "leyendo desde `%s'\n" #: g10/encode.c:431 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s cifrado para: %s\n" #: g10/export.c:147 #, c-format msgid "%s: user not found: %s\n" msgstr "%s: usuario no encontrado: %s\n" #: g10/export.c:156 #, c-format msgid "certificate read problem: %s\n" msgstr "problema en la lectura del certificado: %s\n" #: g10/export.c:165 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "clave %08lX: no es conforme a rfc2440 - ignorada\n" #: g10/export.c:203 msgid "WARNING: nothing exported\n" msgstr "ATENCIсN: no se ha exportado nada\n" #: g10/getkey.c:206 msgid "too many entries in pk cache - disabled\n" msgstr "demasiados registros en la cache pk - anulada\n" #: g10/getkey.c:345 msgid "too many entries in unk cache - disabled\n" msgstr "demasiados registros en la cache unk - anulada\n" #: g10/getkey.c:1535 g10/getkey.c:1591 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "usando clave secundaria %08lX en vez de clave primaria %08lX\n" #: g10/import.c:116 #, c-format msgid "can't open `%s': %s\n" msgstr "no puede abrirse `%s': %s\n" #: g10/import.c:160 #, c-format msgid "skipping block of type %d\n" msgstr "ignorando bloque de tipo %d\n" -#: g10/import.c:167 g10/trustdb.c:2560 g10/trustdb.c:2668 +#: g10/import.c:167 g10/trustdb.c:1656 g10/trustdb.c:1695 #, c-format msgid "%lu keys so far processed\n" msgstr "hasta ahora se han procesado %lu claves\n" #: g10/import.c:172 #, c-format msgid "error reading `%s': %s\n" msgstr "error leyendo `%s': %s\n" #: g10/import.c:175 #, c-format msgid "Total number processed: %lu\n" msgstr " Cantidad total procesada: %lu\n" #: g10/import.c:177 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sin identificativo: %lu\n" #: g10/import.c:179 #, c-format msgid " imported: %lu" msgstr " importadas: %lu" #: g10/import.c:185 #, c-format msgid " unchanged: %lu\n" msgstr " sin cambios: %lu\n" #: g10/import.c:187 #, c-format msgid " new user IDs: %lu\n" msgstr " nuevos identificativos: %lu\n" #: g10/import.c:189 #, c-format msgid " new subkeys: %lu\n" msgstr " nuevas subclaves: %lu\n" #: g10/import.c:191 #, c-format msgid " new signatures: %lu\n" msgstr " nuevas firmas: %lu\n" #: g10/import.c:193 #, c-format msgid " new key revocations: %lu\n" msgstr " nuevas revocaciones: %lu\n" #: g10/import.c:195 #, c-format msgid " secret keys read: %lu\n" msgstr " claves secretas leМdas: %lu\n" #: g10/import.c:197 #, c-format msgid " secret keys imported: %lu\n" msgstr " claves secretas importadas: %lu\n" #: g10/import.c:199 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "claves secretas sin cambios: %lu\n" -#: g10/import.c:342 g10/import.c:529 +#: g10/import.c:342 g10/import.c:526 #, c-format msgid "key %08lX: no user id\n" msgstr "clave %08lX: no hay identificativo de usuario\n" #: g10/import.c:353 #, c-format msgid "key %08lX: no valid user ids\n" msgstr "clave %08lX: no hay identificativos de usuario vАlidos\n" #: g10/import.c:355 msgid "this may be caused by a missing self-signature\n" msgstr "esto puede ser debido a la ausencia de autofirma\n" -#: g10/import.c:366 g10/import.c:596 +#: g10/import.c:366 g10/import.c:593 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "clave %08lX: clave pЗblica no encontrada: %s\n" #: g10/import.c:372 msgid "no default public keyring\n" msgstr "no hay anillo pЗblico por defecto\n" -#: g10/import.c:376 g10/openfile.c:148 g10/sign.c:268 g10/sign.c:559 +#: g10/import.c:376 g10/openfile.c:186 g10/sign.c:268 g10/sign.c:559 #, c-format msgid "writing to `%s'\n" msgstr "escribiendo en `%s'\n" -#: g10/import.c:379 g10/import.c:435 g10/import.c:544 g10/import.c:645 +#: g10/import.c:379 g10/import.c:432 g10/import.c:541 g10/import.c:642 #, c-format msgid "can't lock keyring `%s': %s\n" msgstr "no puede bloquearse el anillo `%s': %s\n" -#: g10/import.c:382 g10/import.c:438 g10/import.c:547 g10/import.c:648 +#: g10/import.c:382 g10/import.c:435 g10/import.c:544 g10/import.c:645 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "error escribiendo anillo `%s': %s\n" #: g10/import.c:387 #, c-format msgid "key %08lX: public key imported\n" msgstr "clave %08lX: clave pЗblica importada\n" #: g10/import.c:399 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "clave %08lX: no se corresponde con nuestra copia\n" -#: g10/import.c:411 g10/import.c:604 +#: g10/import.c:408 g10/import.c:601 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "clave %08lX: no puede localizarse el bloque de claves original: %s\n" -#: g10/import.c:417 g10/import.c:610 +#: g10/import.c:414 g10/import.c:607 #, c-format msgid "key %08lX: can't read original keyblock: %s\n" msgstr "clave %08lX: no puede leerse el bloque de claves original: %s\n" -#: g10/import.c:444 +#: g10/import.c:441 #, c-format msgid "key %08lX: 1 new user-id\n" msgstr "clave %08lX: 1 nuevo identificativo de usuario\n" -#: g10/import.c:447 +#: g10/import.c:444 #, c-format msgid "key %08lX: %d new user-ids\n" msgstr "clave %08lX: %d nuevos identificativos de usuario\n" -#: g10/import.c:450 +#: g10/import.c:447 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "clave %08lX: 1 nueva firma\n" -#: g10/import.c:453 +#: g10/import.c:450 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "clave %08lX: %d nuevas firmas\n" -#: g10/import.c:456 +#: g10/import.c:453 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "clave %08lX: 1 nueva subclave\n" -#: g10/import.c:459 +#: g10/import.c:456 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "clave %08lX: %d nuevas subclaves\n" -#: g10/import.c:469 +#: g10/import.c:466 #, c-format msgid "key %08lX: not changed\n" msgstr "clave %08lX: sin cambios\n" -#: g10/import.c:552 +#: g10/import.c:549 #, c-format msgid "key %08lX: secret key imported\n" msgstr "clave %08lX: clave secreta importada\n" #. we can't merge secret keys -#: g10/import.c:556 +#: g10/import.c:553 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "clave %08lX: ya estaba en el anillo secreto\n" -#: g10/import.c:561 +#: g10/import.c:558 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "clave %08lX: clave secreta no encontrada: %s\n" -#: g10/import.c:590 +#: g10/import.c:587 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "clave %08lX: falta la clave pЗblica - imposibile applicar el\n" "certificado de revocaciСn\n" -#: g10/import.c:621 +#: g10/import.c:618 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "clave %08lX: certificado de revocaciСn no vАlido: %s - rechazado\n" -#: g10/import.c:653 +#: g10/import.c:650 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "clave %08lX: certificado de revocaciСn importado\n" -#: g10/import.c:686 +#: g10/import.c:683 #, c-format msgid "key %08lX: no user-id for signature\n" msgstr "clave %08lX: no hay identificativo de usuario para la firma\n" -#: g10/import.c:693 g10/import.c:717 +#: g10/import.c:690 g10/import.c:714 #, c-format msgid "key %08lX: unsupported public key algorithm\n" msgstr "clave %08lX: algoritmo de clave pЗblica no soportado\n" -#: g10/import.c:694 +#: g10/import.c:691 #, c-format msgid "key %08lX: invalid self-signature\n" msgstr "clave %08lX: autofirma no vАlida\n" -#: g10/import.c:709 +#: g10/import.c:706 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "clave %08lX: no hay subclave para unir\n" -#: g10/import.c:718 +#: g10/import.c:715 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "clave %08lX.%lu: uniСn de subclave no vАlida\n" -#: g10/import.c:750 +#: g10/import.c:747 #, c-format msgid "key %08lX: skipped userid '" msgstr "clave %08lX: ignorado identificativo de usuario '" -#: g10/import.c:773 +#: g10/import.c:770 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "clave %08lX: subclave ignorada\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:798 +#: g10/import.c:795 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "clave %08lX: firma no exportable (clase %02x) - ignorada\n" -#: g10/import.c:807 +#: g10/import.c:804 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "" "clave %08lX: certificado de revocaciСn en lugar equivocado - ignorado\n" -#: g10/import.c:815 +#: g10/import.c:812 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "clave %08lX: certificado de revocaciСn no valido: %s - ignorado\n" -#: g10/import.c:915 +#: g10/import.c:912 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "clave %08lX: detectado usuario duplicado - fusionada\n" -#: g10/import.c:966 +#: g10/import.c:963 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "clave %08lX: certificado de revocaciСn aЯadido\n" -#: g10/import.c:1079 g10/import.c:1134 +#: g10/import.c:1076 g10/import.c:1131 #, c-format msgid "key %08lX: our copy has no self-signature\n" msgstr "clave %08lX: nuestra copia no tiene autofirma\n" -#: g10/keyedit.c:92 +#: g10/keyedit.c:93 #, c-format msgid "%s: user not found\n" msgstr "%s: usuario no encontrado\n" -#: g10/keyedit.c:153 +#: g10/keyedit.c:154 msgid "[revocation]" msgstr "[revocaciСn]" -#: g10/keyedit.c:154 +#: g10/keyedit.c:155 msgid "[self-signature]" msgstr "[autofirma]" -#: g10/keyedit.c:218 +#: g10/keyedit.c:219 msgid "1 bad signature\n" msgstr "1 firma incorrecta\n" -#: g10/keyedit.c:220 +#: g10/keyedit.c:221 #, c-format msgid "%d bad signatures\n" msgstr "%d firmas incorrectas\n" -#: g10/keyedit.c:222 +#: g10/keyedit.c:223 msgid "1 signature not checked due to a missing key\n" msgstr "1 firma no comprobada por falta de clave\n" -#: g10/keyedit.c:224 +#: g10/keyedit.c:225 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d firmas no comprobadas por falta de clave\n" -#: g10/keyedit.c:226 +#: g10/keyedit.c:227 msgid "1 signature not checked due to an error\n" msgstr "1 firma no comprobada por causa de un error\n" -#: g10/keyedit.c:228 +#: g10/keyedit.c:229 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d firmas no comprobadas por causa de un error\n" -#: g10/keyedit.c:230 +#: g10/keyedit.c:231 msgid "1 user id without valid self-signature detected\n" msgstr "Detectado 1 identificativo de usuario sin autofirma vАlida\n" -#: g10/keyedit.c:232 +#: g10/keyedit.c:233 #, c-format msgid "%d user ids without valid self-signatures detected\n" msgstr "Detectados %d identificativos de usuario sin autofirma vАlida\n" #. Fixme: see whether there is a revocation in which #. * case we should allow to sign it again. -#: g10/keyedit.c:312 +#: g10/keyedit.c:313 #, c-format msgid "Already signed by key %08lX\n" msgstr "Ya firmada por la clave %08lX\n" -#: g10/keyedit.c:320 +#: g10/keyedit.c:321 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Nada que firmar con la clave %08lX\n" -#: g10/keyedit.c:329 +#: g10/keyedit.c:330 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" msgstr "" "©EstА realmente seguro de querer firmar esta clave\n" "con su clave: \"" -#: g10/keyedit.c:338 +#: g10/keyedit.c:339 msgid "" "The signature will be marked as non-exportable.\n" "\n" msgstr "" "La firma se marcarА como no exportable.\n" "\n" -#: g10/keyedit.c:343 +#: g10/keyedit.c:344 msgid "Really sign? " msgstr "©Firmar de verdad? " -#: g10/keyedit.c:369 g10/keyedit.c:1790 g10/keyedit.c:1839 g10/sign.c:128 +#: g10/keyedit.c:370 g10/keyedit.c:1806 g10/keyedit.c:1855 g10/sign.c:128 #, c-format msgid "signing failed: %s\n" msgstr "firma fallida: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:423 msgid "This key is not protected.\n" msgstr "Esta clave no estА protegida.\n" -#: g10/keyedit.c:425 +#: g10/keyedit.c:426 msgid "Key is protected.\n" msgstr "La clave estА protegida.\n" -#: g10/keyedit.c:442 +#: g10/keyedit.c:443 #, c-format msgid "Can't edit this key: %s\n" msgstr "No puede editarse esta clave: %s\n" -#: g10/keyedit.c:447 +#: g10/keyedit.c:448 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Introduzca la nueva contraseЯa para esta clave secreta.\n" "\n" -#: g10/keyedit.c:459 +#: g10/keyedit.c:460 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "No ha especificado contraseЯa. Esto es probablemente una *mala* idea.\n" "\n" -#: g10/keyedit.c:462 +#: g10/keyedit.c:463 msgid "Do you really want to do this? " msgstr "©Realmente quiere hacer esto? " -#: g10/keyedit.c:523 +#: g10/keyedit.c:524 msgid "moving a key signature to the correct place\n" msgstr "moviendo la firma de la clave al lugar correcto\n" -#: g10/keyedit.c:559 +#: g10/keyedit.c:561 msgid "quit this menu" msgstr "sale de este menЗ" -#: g10/keyedit.c:560 +#: g10/keyedit.c:562 msgid "q" msgstr "" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save" msgstr "" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save and quit" msgstr "graba y sale" -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "help" msgstr "" -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "show this help" msgstr "muestra esta ayuda" -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 msgid "fpr" msgstr "" -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 msgid "show fingerprint" msgstr "muestra huella dactilar" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 msgid "list" msgstr "" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 msgid "list key and user ids" msgstr "lista clave e identificativos de usuario" -#: g10/keyedit.c:566 +#: g10/keyedit.c:568 msgid "l" msgstr "" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "uid" msgstr "" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "select user id N" msgstr "selecciona identificativo de usuario N" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "key" msgstr "" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "select secondary key N" msgstr "selecciona clave secundaria N" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 msgid "check" msgstr "" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 msgid "list signatures" msgstr "lista firmas" -#: g10/keyedit.c:570 +#: g10/keyedit.c:572 msgid "c" msgstr "" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 msgid "sign" msgstr "" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 msgid "sign the key" msgstr "firma la clave" -#: g10/keyedit.c:572 +#: g10/keyedit.c:574 msgid "s" msgstr "" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 #, fuzzy msgid "lsign" msgstr "firmando:" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 msgid "sign the key locally" msgstr "firma la clave localmente" -#: g10/keyedit.c:574 +#: g10/keyedit.c:576 msgid "debug" msgstr "" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "adduid" msgstr "" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "add a user id" msgstr "aЯade un identificativo de usuario" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 msgid "deluid" msgstr "" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 msgid "delete user id" msgstr "borra un identificativo de usuario" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 msgid "addkey" msgstr "" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 msgid "add a secondary key" msgstr "aЯade una clave secundaria" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delkey" msgstr "" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delete a secondary key" msgstr "borra una clave secundaria" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 #, fuzzy msgid "delsig" msgstr "firmando:" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 #, fuzzy msgid "delete signatures" msgstr "lista firmas" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 msgid "expire" msgstr "" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 msgid "change the expire date" msgstr "cambia fecha de caducidad" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle" msgstr "" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle between secret and public key listing" msgstr "cambia entre lista de claves secretas y pЗblicas" -#: g10/keyedit.c:583 +#: g10/keyedit.c:585 msgid "t" msgstr "" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "pref" msgstr "" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "list preferences" msgstr "muestra preferencias" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 msgid "passwd" msgstr "" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 msgid "change the passphrase" msgstr "cambia la contraseЯa" -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "trust" msgstr "" -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "change the ownertrust" msgstr "cambia valores de confianza" -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 msgid "revsig" msgstr "" -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 msgid "revoke signatures" msgstr "revoca firmas" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 msgid "revkey" msgstr "" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 msgid "revoke a secondary key" msgstr "revoca una clave secundaria" -#: g10/keyedit.c:607 +#: g10/keyedit.c:591 +msgid "disable" +msgstr "" + +#: g10/keyedit.c:591 +#, fuzzy +msgid "disable a key" +msgstr "Clave incorrecta" + +#: g10/keyedit.c:592 +msgid "enable" +msgstr "" + +#: g10/keyedit.c:592 +#, fuzzy +msgid "enable a key" +msgstr "Clave incorrecta" + +#: g10/keyedit.c:611 msgid "can't do that in batchmode\n" msgstr "imposible hacer esto en modo de proceso por lotes\n" #. check that they match #. FIXME: check that they both match -#: g10/keyedit.c:636 +#: g10/keyedit.c:640 msgid "Secret key is available.\n" msgstr "Clave secreta disponible.\n" -#: g10/keyedit.c:665 +#: g10/keyedit.c:669 msgid "Command> " msgstr "Comando> " -#: g10/keyedit.c:692 +#: g10/keyedit.c:696 msgid "Need the secret key to do this.\n" msgstr "Se necesita la clave secreta para hacer esto.\n" -#: g10/keyedit.c:714 +#: g10/keyedit.c:718 msgid "Save changes? " msgstr "©Grabar cambios? " -#: g10/keyedit.c:717 +#: g10/keyedit.c:721 msgid "Quit without saving? " msgstr "©Salir sin grabar? " -#: g10/keyedit.c:727 +#: g10/keyedit.c:731 #, c-format msgid "update failed: %s\n" msgstr "actualizaciСn fallida: %s\n" -#: g10/keyedit.c:734 +#: g10/keyedit.c:738 #, c-format msgid "update secret failed: %s\n" msgstr "actualizaciСn de la clave secreta fallida: %s\n" -#: g10/keyedit.c:741 +#: g10/keyedit.c:745 msgid "Key not changed so no update needed.\n" msgstr "Clave sin cambios, no se necesita actualizaciСn.\n" -#: g10/keyedit.c:744 g10/keyedit.c:803 +#: g10/keyedit.c:748 g10/keyedit.c:807 #, c-format msgid "update of trustdb failed: %s\n" msgstr "actualizaciСn de confianza fallida: %s\n" -#: g10/keyedit.c:777 +#: g10/keyedit.c:781 msgid "Really sign all user ids? " msgstr "©Firmar realmente todos los identificativos de usuario? " -#: g10/keyedit.c:778 +#: g10/keyedit.c:782 msgid "Hint: Select the user ids to sign\n" msgstr "Sugerencia: seleccione los identificativos de usuario a firmar\n" -#: g10/keyedit.c:814 g10/keyedit.c:835 +#: g10/keyedit.c:818 g10/keyedit.c:839 msgid "You must select at least one user id.\n" msgstr "Debe seleccionar por lo menos un identificativo de usuario.\n" -#: g10/keyedit.c:816 +#: g10/keyedit.c:820 msgid "You can't delete the last user id!\n" msgstr "║No puede borrar el Зltimo identificativo de usuario!\n" -#: g10/keyedit.c:819 +#: g10/keyedit.c:823 msgid "Really remove all selected user ids? " msgstr "©Borrar realmente todos los identificativos seleccionados? " -#: g10/keyedit.c:820 +#: g10/keyedit.c:824 msgid "Really remove this user id? " msgstr "©Borrar realmente este identificativo? " -#: g10/keyedit.c:858 g10/keyedit.c:880 +#: g10/keyedit.c:860 g10/keyedit.c:882 msgid "You must select at least one key.\n" msgstr "Debe seleccionar por lo menos una clave.\n" -#: g10/keyedit.c:862 +#: g10/keyedit.c:864 msgid "Do you really want to delete the selected keys? " msgstr "©Borrar realmente las claves seleccionadas? " -#: g10/keyedit.c:863 +#: g10/keyedit.c:865 msgid "Do you really want to delete this key? " msgstr "©Borrar realmente esta clave? " -#: g10/keyedit.c:884 +#: g10/keyedit.c:886 msgid "Do you really want to revoke the selected keys? " msgstr "©Revocar realmente las claves seleccionadas? " -#: g10/keyedit.c:885 +#: g10/keyedit.c:887 msgid "Do you really want to revoke this key? " msgstr "©Revocar realmente esta clave? " -#: g10/keyedit.c:939 +#: g10/keyedit.c:949 msgid "Invalid command (try \"help\")\n" msgstr "Comando no vАlido (pruebe \"help\")\n" -#: g10/keyedit.c:1294 +#: g10/keyedit.c:1039 +#, fuzzy +msgid "This key has been disabled" +msgstr "Nota: ║Esta clave estА caducada!\n" + +#: g10/keyedit.c:1310 msgid "Delete this good signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1298 +#: g10/keyedit.c:1314 msgid "Delete this invalid signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1302 +#: g10/keyedit.c:1318 msgid "Delete this unknown signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1308 +#: g10/keyedit.c:1324 #, fuzzy msgid "Really delete this self-signature? (y/N)" msgstr "©Crear los certificados de revocaciСn realmente? (s/N)" -#: g10/keyedit.c:1322 +#: g10/keyedit.c:1338 #, fuzzy, c-format msgid "Deleted %d signature.\n" msgstr "%d firmas incorrectas\n" -#: g10/keyedit.c:1323 +#: g10/keyedit.c:1339 #, fuzzy, c-format msgid "Deleted %d signatures.\n" msgstr "%d firmas incorrectas\n" -#: g10/keyedit.c:1326 +#: g10/keyedit.c:1342 #, fuzzy msgid "Nothing deleted.\n" msgstr "ATENCIсN: no se ha exportado nada\n" -#: g10/keyedit.c:1395 +#: g10/keyedit.c:1411 msgid "Please remove selections from the secret keys.\n" msgstr "Por favor, quite la selecciСn de las claves secretas.\n" -#: g10/keyedit.c:1401 +#: g10/keyedit.c:1417 msgid "Please select at most one secondary key.\n" msgstr "Por favor, seleccione como mАximo una clave secundaria.\n" -#: g10/keyedit.c:1405 +#: g10/keyedit.c:1421 #, fuzzy msgid "Changing expiration time for a secondary key.\n" msgstr "Cambiando caducidad de clave secundaria.\n" -#: g10/keyedit.c:1407 +#: g10/keyedit.c:1423 #, fuzzy msgid "Changing expiration time for the primary key.\n" msgstr "Cambiando caducidad de clave primaria.\n" -#: g10/keyedit.c:1448 +#: g10/keyedit.c:1464 msgid "You can't change the expiration date of a v3 key\n" msgstr "No puede cambiar la fecha de caducidad de una clave v3\n" -#: g10/keyedit.c:1464 +#: g10/keyedit.c:1480 msgid "No corresponding signature in secret ring\n" msgstr "No hay firma correspondiente en anillo secreto\n" -#: g10/keyedit.c:1524 +#: g10/keyedit.c:1540 #, c-format msgid "No user id with index %d\n" msgstr "No hay ningЗn identificativo de usuario con el Мndice %d\n" -#: g10/keyedit.c:1570 +#: g10/keyedit.c:1586 #, c-format msgid "No secondary key with index %d\n" msgstr "No hay ninguna clave secundaria con el Мndice %d\n" -#: g10/keyedit.c:1668 +#: g10/keyedit.c:1684 msgid "user ID: \"" msgstr "ID de usuario: \"" -#: g10/keyedit.c:1671 +#: g10/keyedit.c:1687 #, c-format msgid "" "\"\n" "signed with your key %08lX at %s\n" msgstr "" "\"\n" "firmada con su clave %08lX el %s\n" -#: g10/keyedit.c:1675 +#: g10/keyedit.c:1691 msgid "Create a revocation certificate for this signature? (y/N)" msgstr "©Crear un certificado de revocaciСn para esta clave (s/N)?" -#: g10/keyedit.c:1755 +#: g10/keyedit.c:1771 msgid "Really create the revocation certificates? (y/N)" msgstr "©Crear los certificados de revocaciСn realmente? (s/N)" -#: g10/keyedit.c:1778 +#: g10/keyedit.c:1794 msgid "no secret key\n" msgstr "no hay clave secreta\n" #: g10/mainproc.c:184 #, c-format msgid "public key is %08lX\n" msgstr "la clave pЗblica es %08lX\n" -#: g10/mainproc.c:212 +#: g10/mainproc.c:213 msgid "public key encrypted data: good DEK\n" msgstr "datos cifrados de la clave pЗblica: DEK bueno\n" #. fixme: defer this message until we have parsed all packets of #. * this type - do this by building a list of keys with their stati #. * and store it with the context. do_proc_packets can then use #. * this list to display some information -#: g10/mainproc.c:219 +#: g10/mainproc.c:220 #, c-format msgid "public key decryption failed: %s\n" msgstr "descifrado de la clave pЗblica fallido: %s\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:248 msgid "decryption okay\n" msgstr "descifrado correcto\n" -#: g10/mainproc.c:252 +#: g10/mainproc.c:253 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "ATENCIсN: ║el mensaje cifrado ha sido manipulado!\n" -#: g10/mainproc.c:257 +#: g10/mainproc.c:258 #, c-format msgid "decryption failed: %s\n" msgstr "descifrado fallido: %s\n" -#: g10/mainproc.c:275 +#: g10/mainproc.c:276 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTA: el remitente solicitС \"sСlo-para-tus-ojos\"\n" -#: g10/mainproc.c:277 +#: g10/mainproc.c:278 #, c-format msgid "original file name='%.*s'\n" msgstr "nombre fichero original='%.*s'\n" -#: g10/mainproc.c:505 g10/mainproc.c:514 +#: g10/mainproc.c:506 g10/mainproc.c:515 #, fuzzy msgid "WARNING: invalid notation data found\n" msgstr "no se han encontrados datos OpenPGP vАlidos\n" -#: g10/mainproc.c:517 +#: g10/mainproc.c:518 msgid "Notation: " msgstr "" -#: g10/mainproc.c:524 +#: g10/mainproc.c:525 msgid "Policy: " msgstr "" -#: g10/mainproc.c:929 +#: g10/mainproc.c:930 msgid "signature verification suppressed\n" msgstr "suprimida la verificaciСn de la firma\n" -#: g10/mainproc.c:935 +#: g10/mainproc.c:936 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Firma creada %.*s usando identificativo de clave %s %08lX\n" #. just in case that we have no userid -#: g10/mainproc.c:961 g10/mainproc.c:972 +#: g10/mainproc.c:962 g10/mainproc.c:973 msgid "BAD signature from \"" msgstr "Firma INCORRECTA de \"" -#: g10/mainproc.c:962 g10/mainproc.c:973 +#: g10/mainproc.c:963 g10/mainproc.c:974 msgid "Good signature from \"" msgstr "Firma correcta de \"" -#: g10/mainproc.c:964 +#: g10/mainproc.c:965 msgid " aka \"" msgstr "tambiИn conocido como \"" -#: g10/mainproc.c:1015 +#: g10/mainproc.c:1016 #, c-format msgid "Can't check signature: %s\n" msgstr "Imposible comprobar la firma: %s\n" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1110 msgid "old style (PGP 2.x) signature\n" msgstr "firma viejo estilo (PGP 2.x)\n" -#: g10/mainproc.c:1114 +#: g10/mainproc.c:1115 msgid "invalid root packet detected in proc_tree()\n" msgstr "paquete raМz no vАlido detectado en proc_tree()\n" #: g10/misc.c:93 #, c-format msgid "can't disable core dumps: %s\n" msgstr "no se pueden desactivar los core dumps: %s\n" #: g10/misc.c:96 msgid "WARNING: program may create a core file!\n" msgstr "ATENCIсN: ║el programa podrМa crear un fichero core dump!\n" #: g10/misc.c:203 msgid "Experimental algorithms should not be used!\n" msgstr "║No se deberМan usar algoritmos experimentales!\n" #: g10/misc.c:217 msgid "" "RSA keys are deprecated; please consider creating a new key and use this key " "in the future\n" msgstr "" "Las claves RSA estАn en desuso, considere la creaciСn de una nueva clave " "para futuros usos\n" #: g10/misc.c:239 msgid "this cipher algorithm is depreciated; please use a more standard one!\n" msgstr "" "este algoritmo de cifrado estА en desuso, considere el uso de uno mАs " "estАndar.\n" #: g10/parse-packet.c:112 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "no puedo manejar el algoritmo de clave pЗblica %d\n" #: g10/parse-packet.c:931 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "el subpaquete de tipo %d tiene el bit crМtico activado\n" -#: g10/passphrase.c:157 +#: g10/passphrase.c:159 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" "user: \"" msgstr "" "\n" "Necesita una contraseЯa para desbloquear la clave secreta\n" "del usuario: \"" -#: g10/passphrase.c:166 +#: g10/passphrase.c:168 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "clave %2$s de %1$u bits, ID %3$08lX, creada el %4$s" -#: g10/passphrase.c:171 +#: g10/passphrase.c:173 #, c-format msgid " (main key ID %08lX)" msgstr "(ID clave primaria %08lX)" -#: g10/passphrase.c:192 +#: g10/passphrase.c:194 msgid "Enter passphrase: " msgstr "Introduzca contraseЯa: " -#: g10/passphrase.c:196 +#: g10/passphrase.c:198 msgid "Repeat passphrase: " msgstr "Repita contraseЯa: " #: g10/plaintext.c:63 msgid "data not saved; use option \"--output\" to save it\n" msgstr "datos no grabados; use la opciСn \"--output\" para grabarlos\n" #: g10/plaintext.c:266 msgid "Please enter name of data file: " msgstr "Introduzca el nombre del fichero de datos: " #: g10/plaintext.c:287 msgid "reading stdin ...\n" msgstr "leyendo stdin...\n" #: g10/plaintext.c:360 #, c-format msgid "can't open signed data `%s'\n" msgstr "imposible abrir datos firmados `%s'\n" #: g10/pubkey-enc.c:79 #, c-format msgid "anonymous receiver; trying secret key %08lX ...\n" msgstr "destinatario anСnimo, probando clave secreta %08lX ...\n" #: g10/pubkey-enc.c:85 msgid "okay, we are the anonymous recipient.\n" msgstr "de acuerdo, somos el destinatario anСnimo.\n" #: g10/pubkey-enc.c:137 msgid "old encoding of the DEK is not supported\n" msgstr "la codificaciСn vieja de DEK no estА soportada\n" #: g10/pubkey-enc.c:191 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "NOTA: algoritmo de cifrado %d no encontrado en las preferencias\n" #: g10/seckey-cert.c:55 #, c-format msgid "protection algorithm %d is not supported\n" msgstr "el algoritmo de protecciСn %d no estА soportado\n" #: g10/seckey-cert.c:171 msgid "Invalid passphrase; please try again ...\n" msgstr "ContraseЯa incorrecta, intИntelo de nuevo...\n" #: g10/seckey-cert.c:227 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "ATENCIсN: detectada clave dИbil - por favor cambie la contraseЯa.\n" -#: g10/sig-check.c:187 +#: g10/sig-check.c:199 msgid "assuming bad MDC due to an unknown critical bit\n" msgstr "asumiendo firma mala debido a un bit crМtico desconocido\n" -#: g10/sig-check.c:283 +#: g10/sig-check.c:295 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "║esto es una clave ElGamal generada por PGP que NO es segura para las " "firmas!\n" -#: g10/sig-check.c:291 +#: g10/sig-check.c:303 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "la clave pЗblica es %lu segundos mАs nueva que la firma\n" -#: g10/sig-check.c:292 +#: g10/sig-check.c:304 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "la clave pЗblica es %lu segundos mАs nueva que la firma\n" -#: g10/sig-check.c:308 +#: g10/sig-check.c:320 #, c-format msgid "NOTE: signature key expired %s\n" msgstr "NOTA: clave de la firma caducada el %s\n" -#: g10/sig-check.c:365 +#: g10/sig-check.c:377 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "asumiendo firma mala debido a un bit crМtico desconocido\n" #: g10/sign.c:132 #, c-format msgid "%s signature from: %s\n" msgstr "firma %s de %s\n" #: g10/sign.c:263 g10/sign.c:554 #, c-format msgid "can't create %s: %s\n" msgstr "no puede crearse %s: %s\n" #: g10/sign.c:361 msgid "signing:" msgstr "firmando:" #: g10/sign.c:401 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "ATENCIсN `%s' es un fichero vacМo\n" #: g10/textfilter.c:128 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "no se pueden manejar lМneas de texto de mАs de %d caracteres\n" #: g10/textfilter.c:197 #, c-format msgid "input line longer than %d characters\n" msgstr "lМnea de longitud superior a %d caracteres\n" -#: g10/tdbio.c:116 g10/tdbio.c:1505 +#: g10/tdbio.c:116 g10/tdbio.c:1634 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "registro base de datos de confianza %lu: lseek fallido: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1512 +#: g10/tdbio.c:122 g10/tdbio.c:1641 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" "resgisto base de datos de confianza %lu: escritura fallida (n=%d): %s\n" #: g10/tdbio.c:232 msgid "trustdb transaction too large\n" msgstr "transacciСn en la base de datos de confianza demasiado grande\n" #: g10/tdbio.c:424 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: no puede abrirse: %s\n" #: g10/ringedit.c:296 g10/tdbio.c:444 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: no puede crearse el directorio: %s\n" #: g10/ringedit.c:302 g10/tdbio.c:447 #, c-format msgid "%s: directory created\n" msgstr "%s: directorio creado\n" #: g10/tdbio.c:451 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: ║el directorio no existe!\n" -#: g10/openfile.c:144 g10/openfile.c:215 g10/ringedit.c:1344 g10/tdbio.c:457 +#: g10/openfile.c:182 g10/openfile.c:253 g10/ringedit.c:1344 g10/tdbio.c:457 #, c-format msgid "%s: can't create: %s\n" msgstr "%s: no puede crearse: %s\n" #: g10/tdbio.c:472 g10/tdbio.c:521 #, c-format msgid "%s: can't create lock\n" msgstr "%s: no puede crearse bloqueo\n" #: g10/tdbio.c:486 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: fallo en la creaciСn del registro de versiСn: %s" #: g10/tdbio.c:490 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: se ha creado base de datos de confianza no vАlida\n" #: g10/tdbio.c:493 #, c-format msgid "%s: trustdb created\n" msgstr "%s: se ha creado base de datos de confianza\n" #: g10/tdbio.c:530 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: base de datos de confianza no vАlida\n" #: g10/tdbio.c:563 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: fallo en la creaciСn de la tabla hash: %s\n" #: g10/tdbio.c:571 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: error actualizando el registro de versiСn: %s\n" #: g10/tdbio.c:587 g10/tdbio.c:626 g10/tdbio.c:648 g10/tdbio.c:678 -#: g10/tdbio.c:703 g10/tdbio.c:1438 g10/tdbio.c:1465 +#: g10/tdbio.c:703 g10/tdbio.c:1567 g10/tdbio.c:1594 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: error leyendo registro de versiСn: %s\n" #: g10/tdbio.c:600 g10/tdbio.c:659 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: error escribiendo registro de versiСn: %s\n" -#: g10/tdbio.c:1132 +#: g10/tdbio.c:1246 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "base de datos de confianza: fallo lseek: %s\n" -#: g10/tdbio.c:1140 +#: g10/tdbio.c:1254 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "base de datos de confianza: error lectura (n=%d): %s\n" -#: g10/tdbio.c:1161 +#: g10/tdbio.c:1275 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: no es una base de datos de confianza\n" -#: g10/tdbio.c:1177 +#: g10/tdbio.c:1291 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: registro de versiСn con nЗmero de registro %lu\n" -#: g10/tdbio.c:1182 +#: g10/tdbio.c:1296 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: versiСn del fichero %d no vАlida\n" -#: g10/tdbio.c:1471 +#: g10/tdbio.c:1600 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: error leyendo registro libre: %s\n" -#: g10/tdbio.c:1479 +#: g10/tdbio.c:1608 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: error escribiendo registro de directorio: %s\n" -#: g10/tdbio.c:1489 +#: g10/tdbio.c:1618 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: fallo en poner a cero un registro: %s\n" -#: g10/tdbio.c:1519 +#: g10/tdbio.c:1648 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: fallo al aЯadir un registro: %s\n" -#: g10/tdbio.c:1630 +#: g10/tdbio.c:1759 #, fuzzy msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "" "La base de datos de confianza estА daЯada. Por favor, ejecute\n" "\"gpgm --fix-trust-db\".\n" -#: g10/trustdb.c:163 +#: g10/trustdb.c:160 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "registro de confianza %lu, peticiСn tipo %d: fallo lectura: %s\n" -#: g10/trustdb.c:178 +#: g10/trustdb.c:175 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "registro de confianza %lu, tipo %d: fallo escritura: %s\n" -#: g10/trustdb.c:192 +#: g10/trustdb.c:189 #, c-format msgid "trust record %lu: delete failed: %s\n" msgstr "registro de confianza %lu: fallo al borrar: %s\n" -#: g10/trustdb.c:206 +#: g10/trustdb.c:203 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "base de datos de confianza: fallo sincronizaciСn: %s\n" -#: g10/trustdb.c:386 +#: g10/trustdb.c:347 #, c-format msgid "error reading dir record for LID %lu: %s\n" msgstr "error leyendo registro de directorio del LID %lu: %s\n" -#: g10/trustdb.c:393 +#: g10/trustdb.c:354 #, c-format msgid "lid %lu: expected dir record, got type %d\n" msgstr "lid %lu: esperaba registro directorio, encontrado tipo %d\n" -#: g10/trustdb.c:398 +#: g10/trustdb.c:359 #, c-format msgid "no primary key for LID %lu\n" msgstr "no hay clave primaria para el LID %lu\n" -#: g10/trustdb.c:403 +#: g10/trustdb.c:364 #, c-format msgid "error reading primary key for LID %lu: %s\n" msgstr "error leyendo clave primaria para el LID %lu: %s\n" -#: g10/trustdb.c:442 +#: g10/trustdb.c:403 #, c-format msgid "get_dir_record: search_record failed: %s\n" msgstr "get_dir_record: search_record fallida: %s\n" -#: g10/trustdb.c:510 +#: g10/trustdb.c:458 #, c-format msgid "NOTE: secret key %08lX is NOT protected.\n" msgstr "NOTA: la clave secreta %08lX NO estА protegida.\n" -#: g10/trustdb.c:518 +#: g10/trustdb.c:466 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "clave %08lX: clave secreta sin clave pЗblica - ignorada\n" -#: g10/trustdb.c:525 +#: g10/trustdb.c:473 #, c-format msgid "key %08lX: secret and public key don't match\n" msgstr "clave %08lX: las claves pЗblica y secreta no se corresponden\n" -#: g10/trustdb.c:535 +#: g10/trustdb.c:483 #, c-format msgid "key %08lX: can't put it into the trustdb\n" msgstr "clave %08lX: imposible incluirla en la base de datos de confianza\n" -#: g10/trustdb.c:541 +#: g10/trustdb.c:489 #, c-format msgid "key %08lX: query record failed\n" msgstr "clave %08lX: peticiСn de registro fallida\n" -#: g10/trustdb.c:550 +#: g10/trustdb.c:498 #, c-format msgid "key %08lX: already in trusted key table\n" msgstr "clave %08lX: ya estА en la tabla de confianza\n" -#: g10/trustdb.c:553 +#: g10/trustdb.c:501 #, c-format msgid "key %08lX: accepted as trusted key.\n" msgstr "clave %08lX: aceptada como clave de confianza.\n" -#: g10/trustdb.c:561 +#: g10/trustdb.c:509 #, c-format msgid "enumerate secret keys failed: %s\n" msgstr "enum_secret_keys fallido: %s\n" -#: g10/trustdb.c:851 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" -msgstr "" -"NOTA: el registro de firma %lu[%d] estА en la lista\n" -"de bЗsqueda de %lu pero estА marcado como comprobado\n" - -#: g10/trustdb.c:855 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" -msgstr "" -"NOTA: el registro de firma %lu[%d] estА en la lista\n" -"de bЗsqueda de %lu pero no estА marcado\n" - -#. we need the dir record -#: g10/trustdb.c:862 -#, c-format -msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" -msgstr "" -"El registro de firma %lu[%d] en la lista de bЗsqueda de %lu\n" -"no apunta a un registro de directorio\n" - -#: g10/trustdb.c:868 -#, c-format -msgid "lid %lu: no primary key\n" -msgstr "lid %lu: ninguna clave primaria\n" - -#: g10/trustdb.c:901 -#, c-format -msgid "lid %lu: user id not found in keyblock\n" -msgstr "" -"lid %lu: no se ha encontrado identificativo de usuario\n" -"en el bloque de clave\n" - -#: g10/trustdb.c:905 -#, c-format -msgid "lid %lu: user id without signature\n" -msgstr "lid %lu: identificativo de usuario sin firma\n" - -#: g10/trustdb.c:912 -#, c-format -msgid "lid %lu: self-signature in hintlist\n" -msgstr "lid %lu: autofirma en lista de bЗsqueda\n" - -#: g10/trustdb.c:923 g10/trustdb.c:1675 g10/trustdb.c:1766 -msgid "Valid certificate revocation" -msgstr "RevocaciСn de certificado vАlida" - -#: g10/trustdb.c:924 g10/trustdb.c:1676 g10/trustdb.c:1767 -msgid "Good certificate" -msgstr "Certificado bueno" - -#: g10/trustdb.c:933 -msgid "very strange: no public key\n" -msgstr "muy raro: no hay clave pЗblica\n" - -#: g10/trustdb.c:982 -#, c-format -msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" -msgstr "" -"la lista de bЗsqueda %lu[%d] de %lu no apunta a\n" -"un registro de directorio\n" - -#: g10/trustdb.c:988 -#, c-format -msgid "lid %lu does not have a key\n" -msgstr "lid %lu no dispone de clave\n" - -#: g10/trustdb.c:998 -#, c-format -msgid "lid %lu: can't get keyblock: %s\n" -msgstr "lid %lu: no puedo obtener el bloque de clave: %s\n" - -#: g10/trustdb.c:1055 g10/trustdb.c:2030 -#, c-format -msgid "tdbio_search_dir failed: %s\n" +#: g10/trustdb.c:800 +#, fuzzy, c-format +msgid "tdbio_search_sdir failed: %s\n" msgstr "tdbio_search_dir fallida: %s\n" -#: g10/trustdb.c:1210 +#: g10/trustdb.c:875 #, c-format msgid "key %08lX.%lu: Good subkey binding\n" msgstr "clave %08lX.%lu: buena uniСn de subclave\n" -#: g10/trustdb.c:1216 g10/trustdb.c:1259 +#: g10/trustdb.c:881 g10/trustdb.c:916 #, c-format msgid "key %08lX.%lu: Invalid subkey binding: %s\n" msgstr "clave %08lX.%lu: uniСn de subclave no vАlida\n" -#: g10/trustdb.c:1232 +#: g10/trustdb.c:893 #, c-format msgid "key %08lX.%lu: Valid key revocation\n" msgstr "clave %08lX.%lu: revocaciСn de clave vАlida\n" -#: g10/trustdb.c:1238 +#: g10/trustdb.c:899 #, c-format msgid "key %08lX.%lu: Invalid key revocation: %s\n" msgstr "clave %08lX.%lu: revocaciСn de clave no vАlida: %s\n" -#: g10/trustdb.c:1253 +#: g10/trustdb.c:910 #, c-format msgid "key %08lX.%lu: Valid subkey revocation\n" msgstr "clave %08lX.%lu: revocaciСn de subclave vАlida\n" -#: g10/trustdb.c:1360 +#: g10/trustdb.c:1021 msgid "Good self-signature" msgstr "Autofirma buena" -#: g10/trustdb.c:1371 +#: g10/trustdb.c:1031 msgid "Invalid self-signature" msgstr "Autofirma no vАlida" -#: g10/trustdb.c:1403 -msgid "Valid user ID revocation skipped due to a newer self signature\n" +#: g10/trustdb.c:1058 +#, fuzzy +msgid "Valid user ID revocation skipped due to a newer self signature" msgstr "" "RevocaciСn vАlida de identificativo de usuario ignorada debido a una " "autofirma mАs reciente\n" -#: g10/trustdb.c:1410 -msgid "Valid user ID revocation\n" +#: g10/trustdb.c:1064 +#, fuzzy +msgid "Valid user ID revocation" msgstr "RevocaciСn identificativo de usuario vАlida.\n" -#: g10/trustdb.c:1417 +#: g10/trustdb.c:1069 msgid "Invalid user ID revocation" msgstr "RevocaciСn identificativo de usuario no vАlida." -#: g10/trustdb.c:1512 -msgid "Too many preferences" -msgstr "Demasiadas preferencias" - -#: g10/trustdb.c:1526 -msgid "Too many preference items" -msgstr "Demasiados Мtems de preferencias" - -#: g10/trustdb.c:1549 g10/trustdb.c:3075 g10/trustdb.c:3105 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "ATENCмON: todavМa no puedo tratar registros de preferencias largos\n" - -#: g10/trustdb.c:1654 -msgid "duplicated certificate - deleted" -msgstr "certificado duplicado - eliminado" +#: g10/trustdb.c:1110 +msgid "Valid certificate revocation" +msgstr "RevocaciСn de certificado vАlida" -#: g10/trustdb.c:1692 -msgid "public key not anymore available" -msgstr "clave pЗblica no disponible" +#: g10/trustdb.c:1111 +msgid "Good certificate" +msgstr "Certificado bueno" -#: g10/trustdb.c:1702 g10/trustdb.c:1791 +#: g10/trustdb.c:1132 msgid "Invalid certificate revocation" msgstr "Certificado de revocaciСn incorrecto" -#: g10/trustdb.c:1703 g10/trustdb.c:1792 +#: g10/trustdb.c:1133 msgid "Invalid certificate" msgstr "Certificado incorrecto" -#: g10/trustdb.c:1720 -#, c-format -msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" -msgstr "" - -#: g10/trustdb.c:1734 +#: g10/trustdb.c:1150 g10/trustdb.c:1154 #, c-format msgid "sig record %lu[%d] points to wrong record.\n" msgstr "registro de firma %lu[%d] apunta al registro equivocado.\n" -#. that should never happen -#: g10/trustdb.c:2007 -#, c-format -msgid "insert_trust_record: keyblock not found: %s\n" -msgstr "insert_trust_record: bloque de clave no encontrado: %s\n" - -#: g10/trustdb.c:2408 -msgid "Ooops, no keys\n" -msgstr "Oh oh, no hay claves\n" +#: g10/trustdb.c:1206 +msgid "duplicated certificate - deleted" +msgstr "certificado duplicado - eliminado" -#: g10/trustdb.c:2412 -msgid "Ooops, no user ids\n" -msgstr "Oh oh, no hay identificativos de usuario\n" +#: g10/trustdb.c:1512 +#, c-format +msgid "tdbio_search_dir failed: %s\n" +msgstr "tdbio_search_dir fallida: %s\n" -#: g10/trustdb.c:2529 +#: g10/trustdb.c:1634 #, c-format msgid "lid ?: insert failed: %s\n" msgstr "lid ?: inserciСn fallida: %s\n" -#: g10/trustdb.c:2534 +#: g10/trustdb.c:1639 #, c-format msgid "lid %lu: insert failed: %s\n" msgstr "lid %lu: inserciСn fallida: %s\n" -#: g10/trustdb.c:2540 +#: g10/trustdb.c:1645 #, c-format msgid "lid %lu: inserted\n" msgstr "lid %lu: insertada\n" -#: g10/trustdb.c:2545 g10/trustdb.c:2654 -#, c-format -msgid "lid %lu: update failed: %s\n" -msgstr "lid %lu: actualizaciСn fallida: %s\n" - -#: g10/trustdb.c:2551 g10/trustdb.c:2660 -#, c-format -msgid "lid %lu: updated\n" -msgstr "lid %lu: actualizado\n" - -#: g10/trustdb.c:2556 g10/trustdb.c:2664 -#, c-format -msgid "lid %lu: okay\n" -msgstr "lid %lu: bien\n" +#: g10/trustdb.c:1650 +#, fuzzy, c-format +msgid "error reading dir record: %s\n" +msgstr "error buscando registro de directorio: %s\n" -#: g10/trustdb.c:2562 g10/trustdb.c:2671 +#: g10/trustdb.c:1658 g10/trustdb.c:1712 #, c-format msgid "%lu keys processed\n" msgstr "se han procesado %lu claves\n" -#: g10/trustdb.c:2564 g10/trustdb.c:2675 +#: g10/trustdb.c:1660 g10/trustdb.c:1716 #, c-format msgid "\t%lu keys with errors\n" msgstr "\t%lu claves con errores\n" -#: g10/trustdb.c:2566 g10/trustdb.c:2677 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu claves actualizadas\n" - -#: g10/trustdb.c:2568 +#: g10/trustdb.c:1662 #, c-format msgid "\t%lu keys inserted\n" msgstr "\t%lu claves insertadas\n" -#: g10/trustdb.c:2571 +#: g10/trustdb.c:1665 #, c-format msgid "enumerate keyblocks failed: %s\n" msgstr "enumeraciСn bloques de clave fallido: %s\n" -#: g10/trustdb.c:2598 -#, c-format -msgid "%s: keyblock read problem: %s\n" -msgstr "%s: problema lectura del bloque de clave: %s\n" - -#: g10/trustdb.c:2612 -#, c-format -msgid "%s: update failed: %s\n" -msgstr "%s: actualizaciСn fallida: %s\n" - -#: g10/trustdb.c:2615 -#, c-format -msgid "%s: updated\n" -msgstr "%s: actualizada\n" - -#: g10/trustdb.c:2617 -#, c-format -msgid "%s: okay\n" -msgstr "%s: bien\n" - -#: g10/trustdb.c:2632 +#: g10/trustdb.c:1703 #, c-format msgid "lid %lu: dir record w/o key - skipped\n" msgstr "lid %lu: registro de directiorio sin clave - ignorado\n" -#: g10/trustdb.c:2645 -#, c-format -msgid "lid %lu: keyblock not found: %s\n" -msgstr "lid %lu: bloque de clave no encontrado: %s\n" - -#: g10/trustdb.c:2673 +#: g10/trustdb.c:1714 #, c-format msgid "\t%lu keys skipped\n" msgstr "\t%lu claves ignoradas\n" -#: g10/trustdb.c:2743 +#: g10/trustdb.c:1718 +#, c-format +msgid "\t%lu keys updated\n" +msgstr "\t%lu claves actualizadas\n" + +#: g10/trustdb.c:2055 +msgid "Ooops, no keys\n" +msgstr "Oh oh, no hay claves\n" + +#: g10/trustdb.c:2059 +msgid "Ooops, no user ids\n" +msgstr "Oh oh, no hay identificativos de usuario\n" + +#: g10/trustdb.c:2216 #, c-format msgid "check_trust: search dir record failed: %s\n" msgstr "check_trust: bЗsqueda registro directorio fallida: %s\n" -#: g10/trustdb.c:2750 +#: g10/trustdb.c:2223 #, c-format msgid "key %08lX: insert trust record failed: %s\n" msgstr "clave %08lX: inserciСn del registro de confianza fallida: %s\n" -#: g10/trustdb.c:2754 +#: g10/trustdb.c:2227 #, c-format msgid "key %08lX.%lu: inserted into trustdb\n" msgstr "clave %08lX.%lu: incluida en la base de datos de confianza\n" -#: g10/trustdb.c:2762 +#: g10/trustdb.c:2235 #, c-format msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" msgstr "" "clave %08lX.%lu: creada en el futuro (salto en el tiempo o\n" "problemas con el reloj)\n" -#: g10/trustdb.c:2769 +#: g10/trustdb.c:2244 #, c-format msgid "key %08lX.%lu: expired at %s\n" msgstr "clave %08lX.%lu: caducada el %s\n" -#: g10/trustdb.c:2777 +#: g10/trustdb.c:2252 #, c-format msgid "key %08lX.%lu: trust check failed: %s\n" msgstr "clave %08lX.%lu: comprobaciСn de confianza fallida: %s\n" -#: g10/trustdb.c:2881 +#: g10/trustdb.c:2358 #, c-format msgid "user '%s' not found: %s\n" msgstr "usuario '%s' no encontrado: %s\n" -#: g10/trustdb.c:2883 +#: g10/trustdb.c:2360 #, c-format msgid "problem finding '%s' in trustdb: %s\n" msgstr "problema buscando '%s' en la tabla de confianza: %s\n" -#: g10/trustdb.c:2886 +#: g10/trustdb.c:2363 #, c-format msgid "user '%s' not in trustdb - inserting\n" msgstr "usuario '%s' no estА en la tabla de confianza - insertando\n" -#: g10/trustdb.c:2889 +#: g10/trustdb.c:2366 #, c-format msgid "failed to put '%s' into trustdb: %s\n" msgstr "fallo al poner '%s' en la tabla de confianza: %s\n" +#: g10/trustdb.c:2552 g10/trustdb.c:2582 +msgid "WARNING: can't yet handle long pref records\n" +msgstr "ATENCмON: todavМa no puedo tratar registros de preferencias largos\n" + #: g10/ringedit.c:316 #, c-format msgid "%s: can't create keyring: %s\n" msgstr "%s: no se puede crear el anillo: %s\n" #: g10/ringedit.c:333 g10/ringedit.c:1349 #, c-format msgid "%s: keyring created\n" msgstr "%s: anillo creado\n" #: g10/ringedit.c:1526 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "ATENCIсN: existen 2 ficheros con informaciСn confidencial.\n" #: g10/ringedit.c:1527 #, c-format msgid "%s is the unchanged one\n" msgstr "%s es el que no se ha modificado\n" #: g10/ringedit.c:1528 #, c-format msgid "%s is the new one\n" msgstr "%s es el nuevo\n" #: g10/ringedit.c:1529 msgid "Please fix this possible security flaw\n" msgstr "Por favor arregle este posible fallo de seguridad\n" #: g10/skclist.c:88 g10/skclist.c:125 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" #: g10/skclist.c:113 #, c-format msgid "skipped `%s': %s\n" msgstr "`%s' ignorado: %s\n" #: g10/skclist.c:119 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " "signatures!\n" msgstr "" "`%s' ignorada: esta es una clave ElGamal generada por PGP que NO es segura " "para las firmas\n" #. do not overwrite #: g10/openfile.c:65 #, c-format msgid "File `%s' exists. " msgstr "El fichero `%s' ya existe. " #: g10/openfile.c:67 msgid "Overwrite (y/N)? " msgstr "©Sobreescribir (s/N)? " #: g10/openfile.c:97 #, c-format msgid "%s: unknown suffix\n" msgstr "" -#: g10/openfile.c:122 +#: g10/openfile.c:119 +#, fuzzy +msgid "Enter new filename" +msgstr "--store [nombre_fichero]" + +#: g10/openfile.c:160 msgid "writing to stdout\n" msgstr "escribiendo en stdout\n" -#: g10/openfile.c:181 +#: g10/openfile.c:219 #, c-format msgid "assuming signed data in `%s'\n" msgstr "asumiendo que hay datos firmados en `%s'\n" -#: g10/openfile.c:231 +#: g10/openfile.c:269 #, c-format msgid "%s: new options file created\n" msgstr "%s: se ha creado un nuevo fichero de opciones\n" #: g10/encr-data.c:66 #, c-format msgid "%s encrypted data\n" msgstr "datos cifrados %s\n" #: g10/encr-data.c:68 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "cifrado con algoritmo desconocido %d\n" #: g10/encr-data.c:85 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "ATENCIсN: mensaje cifrado con una clave dИbil en el cifrado simИtrico.\n" #: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "creada clave dИbil - reintentando\n" #: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "║imposible evitar clave dИbil para cifrado simИtrico despuИs de %d " "intentos!\n" #. begin of list #: g10/helptext.c:48 msgid "edit_ownertrust.value" msgstr "" #: g10/helptext.c:54 msgid "revoked_key.override" msgstr "" #: g10/helptext.c:58 msgid "untrusted_key.override" msgstr "" #: g10/helptext.c:62 msgid "pklist.user_id.enter" msgstr "" #: g10/helptext.c:66 msgid "keygen.algo" msgstr "" #: g10/helptext.c:82 msgid "keygen.algo.elg_se" msgstr "" #: g10/helptext.c:89 msgid "keygen.size" msgstr "" #: g10/helptext.c:93 msgid "keygen.size.huge.okay" msgstr "" #: g10/helptext.c:98 msgid "keygen.size.large.okay" msgstr "" #: g10/helptext.c:103 msgid "keygen.valid" msgstr "" -#: g10/helptext.c:107 +#: g10/helptext.c:110 msgid "keygen.valid.okay" msgstr "" -#: g10/helptext.c:112 +#: g10/helptext.c:115 msgid "keygen.name" msgstr "" -#: g10/helptext.c:117 +#: g10/helptext.c:120 msgid "keygen.email" msgstr "" -#: g10/helptext.c:121 +#: g10/helptext.c:124 msgid "keygen.comment" msgstr "" -#: g10/helptext.c:126 +#: g10/helptext.c:129 msgid "keygen.userid.cmd" msgstr "" -#: g10/helptext.c:135 +#: g10/helptext.c:138 msgid "keygen.sub.okay" msgstr "" -#: g10/helptext.c:139 +#: g10/helptext.c:142 msgid "sign_uid.okay" msgstr "" -#: g10/helptext.c:144 +#: g10/helptext.c:147 msgid "change_passwd.empty.okay" msgstr "" -#: g10/helptext.c:149 -msgid "keyedit.cmd" -msgstr "" - -#: g10/helptext.c:153 +#: g10/helptext.c:152 msgid "keyedit.save.okay" msgstr "" -#: g10/helptext.c:158 +#: g10/helptext.c:157 msgid "keyedit.cancel.okay" msgstr "" -#: g10/helptext.c:162 +#: g10/helptext.c:161 msgid "keyedit.sign_all.okay" msgstr "" -#: g10/helptext.c:166 +#: g10/helptext.c:165 msgid "keyedit.remove.uid.okay" msgstr "" -#: g10/helptext.c:171 +#: g10/helptext.c:170 msgid "keyedit.remove.subkey.okay" msgstr "" -#: g10/helptext.c:176 +#: g10/helptext.c:175 msgid "keyedit.delsig.valid" msgstr "" -#: g10/helptext.c:181 +#: g10/helptext.c:180 msgid "keyedit.delsig.unknown" msgstr "" -#: g10/helptext.c:187 +#: g10/helptext.c:186 msgid "keyedit.delsig.invalid" msgstr "" -#: g10/helptext.c:191 +#: g10/helptext.c:190 msgid "keyedit.delsig.selfsig" msgstr "" -#: g10/helptext.c:200 +#: g10/helptext.c:199 msgid "passphrase.enter" msgstr "" -#: g10/helptext.c:207 +#: g10/helptext.c:206 msgid "passphrase.repeat" msgstr "" -#: g10/helptext.c:211 +#: g10/helptext.c:210 msgid "detached_signature.filename" msgstr "" +#. openfile.c (overwrite_filep) #: g10/helptext.c:215 msgid "openfile.overwrite.okay" msgstr "" -#: g10/helptext.c:229 +#. openfile.c (ask_outfile_name) +#: g10/helptext.c:220 +msgid "openfile.askoutname" +msgstr "" + +#: g10/helptext.c:235 msgid "No help available" msgstr "Ayuda no disponible" -#: g10/helptext.c:241 +#: g10/helptext.c:247 #, c-format msgid "No help available for `%s'" msgstr "Ayuda no disponible para `%s'" +#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" +#~ msgstr "" +#~ "NOTA: el registro de firma %lu[%d] estА en la lista\n" +#~ "de bЗsqueda de %lu pero estА marcado como comprobado\n" + +#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" +#~ msgstr "" +#~ "NOTA: el registro de firma %lu[%d] estА en la lista\n" +#~ "de bЗsqueda de %lu pero no estА marcado\n" + +#~ msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" +#~ msgstr "" +#~ "El registro de firma %lu[%d] en la lista de bЗsqueda de %lu\n" +#~ "no apunta a un registro de directorio\n" + +#~ msgid "lid %lu: no primary key\n" +#~ msgstr "lid %lu: ninguna clave primaria\n" + +#~ msgid "lid %lu: user id not found in keyblock\n" +#~ msgstr "" +#~ "lid %lu: no se ha encontrado identificativo de usuario\n" +#~ "en el bloque de clave\n" + +#~ msgid "lid %lu: user id without signature\n" +#~ msgstr "lid %lu: identificativo de usuario sin firma\n" + +#~ msgid "lid %lu: self-signature in hintlist\n" +#~ msgstr "lid %lu: autofirma en lista de bЗsqueda\n" + +#~ msgid "very strange: no public key\n" +#~ msgstr "muy raro: no hay clave pЗblica\n" + +#~ msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" +#~ msgstr "" +#~ "la lista de bЗsqueda %lu[%d] de %lu no apunta a\n" +#~ "un registro de directorio\n" + +#~ msgid "lid %lu does not have a key\n" +#~ msgstr "lid %lu no dispone de clave\n" + +#~ msgid "lid %lu: can't get keyblock: %s\n" +#~ msgstr "lid %lu: no puedo obtener el bloque de clave: %s\n" + +#~ msgid "Too many preferences" +#~ msgstr "Demasiadas preferencias" + +#~ msgid "Too many preference items" +#~ msgstr "Demasiados Мtems de preferencias" + +#~ msgid "public key not anymore available" +#~ msgstr "clave pЗblica no disponible" + +#~ msgid "insert_trust_record: keyblock not found: %s\n" +#~ msgstr "insert_trust_record: bloque de clave no encontrado: %s\n" + +#~ msgid "lid %lu: update failed: %s\n" +#~ msgstr "lid %lu: actualizaciСn fallida: %s\n" + +#~ msgid "lid %lu: updated\n" +#~ msgstr "lid %lu: actualizado\n" + +#~ msgid "lid %lu: okay\n" +#~ msgstr "lid %lu: bien\n" + +#~ msgid "%s: keyblock read problem: %s\n" +#~ msgstr "%s: problema lectura del bloque de clave: %s\n" + +#~ msgid "%s: update failed: %s\n" +#~ msgstr "%s: actualizaciСn fallida: %s\n" + +#~ msgid "%s: updated\n" +#~ msgstr "%s: actualizada\n" + +#~ msgid "%s: okay\n" +#~ msgstr "%s: bien\n" + +#~ msgid "lid %lu: keyblock not found: %s\n" +#~ msgstr "lid %lu: bloque de clave no encontrado: %s\n" + #~ msgid "can't lock keyring `%': %s\n" #~ msgstr "no puede bloquearse el anillo pЗblico `%s': %s\n" #~ msgid "error writing keyring `%': %s\n" #~ msgstr "error escribiendo anillo `%s': %s\n" #~ msgid "can't open file: %s\n" #~ msgstr "no puede abrirse el fichero: %s\n" #~ msgid "read error: %s\n" #~ msgstr "error de lectura: %s\n" #~ msgid "can't write to keyring: %s\n" #~ msgstr "no puede escribirse en el anillo: %s\n" #~ msgid "writing keyblock\n" #~ msgstr "escribiendo bloque de claves\n" #~ msgid "can't write keyblock: %s\n" #~ msgstr "no puede escribirse el bloque de claves: %s\n" #~ msgid "can't lock secret keyring: %s\n" #~ msgstr "no puede bloquearse el anillo secreto: %s\n" #~ msgid "can't write keyring: %s\n" #~ msgstr "no puede escribirse el anillo: %s\n" #, fuzzy #~ msgid "encrypted message is valid\n" #~ msgstr "el algoritmo de resumen seleccionado no es vАlido\n" #, fuzzy #~ msgid "Can't check MDC: %s\n" #~ msgstr "Imposible comprobar la firma: %s\n" #~ msgid "Usage: gpgm [options] [files] (-h for help)" #~ msgstr "Uso: gpgm [opciones] [ficheros] (-h para ayuda)" #~ msgid "" #~ "Syntax: gpgm [options] [files]\n" #~ "GnuPG maintenance utility\n" #~ msgstr "" #~ "Sintaxis: gpgm [opciones] [ficheros]\n" #~ "Utilidad de mantenimiento de GnuPG\n" #~ msgid "usage: gpgm [options] " #~ msgstr "uso: gpgm [opciones] " #~ msgid "|KEYID|ulimately trust this key" #~ msgstr "|ID-CLAVE|confМa plenamente en esta clave" #~ msgid "chained sigrec %lu has a wrong owner\n" #~ msgstr "registro de firma encadenado %lu tiene el propietario equivocado\n" #~ msgid "'%s' is not a valid long keyID\n" #~ msgstr "'%s' no es un identificativo largo de clave vАlido\n" #~ msgid "key %08lX: no public key for trusted key - skipped\n" #~ msgstr "clave %08lX: clave de confianza sin clave pЗblica - ignorada\n" #~ msgid "lid %lu: read dir record failed: %s\n" #~ msgstr "lid %lu: lectura registro de directorio fallida: %s\n" #~ msgid "lid %lu: read key record failed: %s\n" #~ msgstr "lid %lu: lectura registro de clave fallida: %s\n" #~ msgid "lid %lu: read uid record failed: %s\n" #~ msgstr "lid %lu: lectura registro identificativo fallida: %s\n" #~ msgid "lid %lu: read pref record failed: %s\n" #~ msgstr "lid %lu: lectura registro preferencias fallida: %s\n" #~ msgid "lid %lu: read sig record failed: %s\n" #~ msgstr "lid %lu: lectura registro firma fallida: %s\n" #~ msgid "user '%s' read problem: %s\n" #~ msgstr "problema de lectura usuario '%s': %s\n" #~ msgid "user '%s' list problem: %s\n" #~ msgstr "problema lista usuario '%s': %s\n" #~ msgid "user '%s' not in trustdb\n" #~ msgstr "usuario '%s' no estА en la tabla de confianza\n" #~ msgid "" #~ "# List of assigned trustvalues, created %s\n" #~ "# (Use \"gpgm --import-ownertrust\" to restore them)\n" #~ msgstr "" #~ "# Lista de valores de confianza, creada el %s\n" #~ "# (Puede usar \"gpgm --import-ownertrust\" para restablecerlos)\n" #~ msgid "directory record w/o primary key\n" #~ msgstr "registro de directorio sin clave primaria\n" #~ msgid "line too long\n" #~ msgstr "linea demasiado larga\n" #~ msgid "error: missing colon\n" #~ msgstr "error: falta ':'\n" #~ msgid "error: invalid fingerprint\n" #~ msgstr "error: huella dactilar no vАlida\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "error: no hay valor de confianza del propietario\n" #~ msgid "key not in trustdb, searching ring.\n" #~ msgstr "la clave no estА en tabla de confianza, buscando en el anillo.\n" #~ msgid "key not in ring: %s\n" #~ msgstr "la clave no estА en el anillo: %s\n" #~ msgid "Oops: key is now in trustdb???\n" #~ msgstr "Oh oh: la clave ahora estА en la tabla de confianza???\n" #~ msgid "insert trust record failed: %s\n" #~ msgstr "inserciСn del registro de confianza fallida: %s\n" -#~ msgid "error finding dir record: %s\n" -#~ msgstr "error buscando registro de directorio: %s\n" - #~ msgid "Hmmm, public key lost?" #~ msgstr "Oh oh, ©se ha perdido la clave pЗblica?" #~ msgid "did not use primary key for insert_trust_record()\n" #~ msgstr "no se usС clave primaria para insert_trust_record()\n" #~ msgid "second" #~ msgstr "segundo" #~ msgid "seconds" #~ msgstr "segundos" diff --git a/po/fr.po b/po/fr.po index bad3630cd..f626738de 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1,3372 +1,3381 @@ # GnuPG French translation # Copyright (C) 1998, 1999 Free Software Foundation, Inc. # GaКl QuИri , 1998. # msgid "" msgstr "" "Project-Id-Version: gnupg 0.9.7\n" -"POT-Creation-Date: 1999-06-26 11:22+0200\n" +"POT-Creation-Date: 1999-07-06 17:34+0200\n" "PO-Revision-Date: 1999-05-24 21:48+02:00\n" "Last-Translator: GaКl QuИri \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8-bit\n" -#: util/secmem.c:76 +#: util/secmem.c:79 msgid "Warning: using insecure memory!\n" msgstr "Attention : utilisation de la mИmoire non sШre !\n" -#: util/secmem.c:249 +#: util/secmem.c:275 msgid "operation is not possible without initialized secure memory\n" msgstr "" "l'opИration n'est pas possible tant que la mИmoire sШre n'est pas\n" "initialisИe\n" -#: util/secmem.c:250 +#: util/secmem.c:276 msgid "(you may have used the wrong program for this task)\n" msgstr "(vous avez peut-Йtre utilisИ le mauvais programme pour cette tache)\n" -#: util/miscutil.c:156 util/miscutil.c:173 +#: util/miscutil.c:254 util/miscutil.c:271 msgid "yes" msgstr "oui" -#: util/miscutil.c:157 util/miscutil.c:175 +#: util/miscutil.c:255 util/miscutil.c:273 msgid "yY" msgstr "oO" -#: g10/keyedit.c:559 util/miscutil.c:174 +#: g10/keyedit.c:561 util/miscutil.c:272 msgid "quit" msgstr "quitter" -#: util/miscutil.c:176 +#: util/miscutil.c:274 #, fuzzy msgid "qQ" msgstr "q" #: util/errors.c:54 msgid "general error" msgstr "erreur gИnИrale" #: util/errors.c:55 msgid "unknown packet type" msgstr "type de paquet inconnu" #: util/errors.c:56 msgid "unknown version" msgstr "version inconnue" #: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "algorithme Ю clИ publique inconnu" #: util/errors.c:58 msgid "unknown digest algorithm" msgstr "algorithme de hachage inconnu" #: util/errors.c:59 msgid "bad public key" msgstr "mauvaise clИ publique" #: util/errors.c:60 msgid "bad secret key" msgstr "mauvaise clИ secrХte" #: util/errors.c:61 msgid "bad signature" msgstr "mauvaise signature" #: util/errors.c:62 msgid "checksum error" msgstr "erreur de checksum" #: util/errors.c:63 msgid "bad passphrase" msgstr "mauvais mot de passe" #: util/errors.c:64 msgid "public key not found" msgstr "clИ publique non trouvИe" #: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "algorithme de chiffrement inconnu" #: util/errors.c:66 msgid "can't open the keyring" msgstr "ne peut ouvrir le porte-clИs" #: util/errors.c:67 msgid "invalid packet" msgstr "paquet invalide" #: util/errors.c:68 msgid "invalid armor" msgstr "armure invalide" #: util/errors.c:69 msgid "no such user id" msgstr "pas de tel utilisateur" #: util/errors.c:70 msgid "secret key not available" msgstr "la clИ secrХte n'est pas disponible" #: util/errors.c:71 msgid "wrong secret key used" msgstr "mauvaise clИ secrХte utilisИe" #: util/errors.c:72 msgid "not supported" msgstr "non supportИ" #: util/errors.c:73 msgid "bad key" msgstr "mauvaise clИ" #: util/errors.c:74 msgid "file read error" msgstr "erreur de lecture" #: util/errors.c:75 msgid "file write error" msgstr "erreur d'Иcriture" #: util/errors.c:76 msgid "unknown compress algorithm" msgstr "algorithme de compression inconnu" #: util/errors.c:77 msgid "file open error" msgstr "erreur d'ouverture de fichier" #: util/errors.c:78 msgid "file create error" msgstr "erreur de crИation de fichier" #: util/errors.c:79 msgid "invalid passphrase" msgstr "mot de passe invalide" #: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "algorithme Ю clИ publique non implИmentИ" #: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "algorithme de chiffrement non implИmentИ" #: util/errors.c:82 msgid "unknown signature class" msgstr "classe de signature inconnue" #: util/errors.c:83 msgid "trust database error" msgstr "erreur dans la base de confiance" #: util/errors.c:84 msgid "bad MPI" msgstr "mauvais entier en prИcision multiple (MPI)" #: util/errors.c:85 msgid "resource limit" msgstr "limite de ressources atteinte" #: util/errors.c:86 msgid "invalid keyring" msgstr "porte-clИs invalide" #: util/errors.c:87 msgid "bad certificate" msgstr "mauvais certificat" #: util/errors.c:88 msgid "malformed user id" msgstr "nom d'utilisateur malformИ" #: util/errors.c:89 msgid "file close error" msgstr "erreur de fermeture de fichier" #: util/errors.c:90 msgid "file rename error" msgstr "erreur pendant le changement de nom du fichier" #: util/errors.c:91 msgid "file delete error" msgstr "erreur pendant la suppression du fichier" #: util/errors.c:92 msgid "unexpected data" msgstr "donnИes inattendues" #: util/errors.c:93 msgid "timestamp conflict" msgstr "conflit de dates" #: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "algorithme de clИs publiques inutilisable" #: util/errors.c:95 msgid "file exists" msgstr "le fichier existe" #: util/errors.c:96 msgid "weak key" msgstr "clИ faible" #: util/errors.c:97 msgid "invalid argument" msgstr "argument invalide" #: util/errors.c:98 msgid "bad URI" msgstr "mauvaise adresse (URI)" #: util/errors.c:99 msgid "unsupported URI" msgstr "URI non supportИe" #: util/errors.c:100 msgid "network error" msgstr "erreur de rИseau" #: util/errors.c:102 msgid "not encrypted" msgstr "non chiffrИ" #: util/logger.c:218 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... c'est un bug (%s:%d:%s)\n" #: util/logger.c:224 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "vous avez trouvИ un bug ... (%s:%d)\n" -#: cipher/random.c:412 +#: cipher/random.c:452 msgid "WARNING: using insecure random number generator!!\n" msgstr "" "ATTENTION : utilisation d'un gИnИrateur de nombres alИatoires peu sШr !!\n" -#: cipher/random.c:413 +#: cipher/random.c:453 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 "" "Le gИnИrateur de nombres alИatoires n'est qu'un artifice visant Ю exИcuter\n" "GnuPG - ce n'est en aucune maniХre un gИnИrateur (RNG) fort!\n" "\n" "N'UTILISEZ PAS LES DONNиES GиNиRиES PAR CE PROGRAMME !!\n" "\n" #: cipher/rndlinux.c:135 #, 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" "Il n'y a pas assez d'octets alИatoires disponibles. Faites autre chose\n" "pour que l'OS puisse amasser plus d'entropie ! (il faut %d octets de plus)\n" -#: g10/g10.c:174 +#: g10/g10.c:176 msgid "" "@Commands:\n" " " msgstr "" "@Commandes:\n" " " -#: g10/g10.c:176 +#: g10/g10.c:178 msgid "|[file]|make a signature" msgstr "|[fichier]|faire une signature" -#: g10/g10.c:177 +#: g10/g10.c:179 msgid "|[file]|make a clear text signature" msgstr "|[fichier]|faire une signature en texte clair" -#: g10/g10.c:178 +#: g10/g10.c:180 msgid "make a detached signature" msgstr "faire une signature dИtachИe" -#: g10/g10.c:179 +#: g10/g10.c:181 msgid "encrypt data" msgstr "chiffrer les donnИes" -#: g10/g10.c:180 +#: g10/g10.c:182 msgid "encryption only with symmetric cipher" msgstr "chiffrement symИtrique seulement" -#: g10/g10.c:181 +#: g10/g10.c:183 msgid "store only" msgstr "pas d'action" -#: g10/g10.c:182 +#: g10/g10.c:184 msgid "decrypt data (default)" msgstr "dИchiffrer les donnИes (dИfaut)" -#: g10/g10.c:183 +#: g10/g10.c:185 msgid "verify a signature" msgstr "vИrifier une signature" -#: g10/g10.c:184 +#: g10/g10.c:186 msgid "list keys" msgstr "lister les clИs" -#: g10/g10.c:186 +#: g10/g10.c:188 msgid "list keys and signatures" msgstr "lister les clИs et les signatures" -#: g10/g10.c:187 +#: g10/g10.c:189 msgid "check key signatures" msgstr "vИrifier les signatures des clИs" -#: g10/g10.c:188 +#: g10/g10.c:190 msgid "list keys and fingerprints" msgstr "lister les clИs et les empreintes" -#: g10/g10.c:189 +#: g10/g10.c:191 msgid "list secret keys" msgstr "lister les clИs secrХtes" -#: g10/g10.c:190 +#: g10/g10.c:192 msgid "generate a new key pair" msgstr "gИnИrer une nouvelle paire de clИs" -#: g10/g10.c:191 +#: g10/g10.c:193 msgid "remove key from the public keyring" msgstr "enlever la clИ du porte-clИs public" -#: g10/g10.c:192 +#: g10/g10.c:194 msgid "sign or edit a key" msgstr "signer ou Иditer une clИ" -#: g10/g10.c:193 +#: g10/g10.c:195 msgid "generate a revocation certificate" msgstr "gИnИrer un certificat de rИvocation" -#: g10/g10.c:194 +#: g10/g10.c:196 msgid "export keys" msgstr "exporter les clИs" -#: g10/g10.c:195 +#: g10/g10.c:197 msgid "export keys to a key server" msgstr "exporter les clИs vers un serveur de clИs" -#: g10/g10.c:196 +#: g10/g10.c:198 msgid "import keys from a key server" msgstr "importer les clИs d'un serveur de clИs" -#: g10/g10.c:199 +#: g10/g10.c:201 msgid "import/merge keys" msgstr "importer/fusionner les clИs" -#: g10/g10.c:201 +#: g10/g10.c:203 msgid "list only the sequence of packets" msgstr "ne lister que les paquets" -#: g10/g10.c:203 +#: g10/g10.c:205 msgid "export the ownertrust values" msgstr "exporter les indices de confiance" -#: g10/g10.c:205 +#: g10/g10.c:207 msgid "import ownertrust values" msgstr "importer les indices de confiance" # -#: g10/g10.c:207 +#: g10/g10.c:209 msgid "|[NAMES]|update the trust database" msgstr "|[NOMS]|mettre la base de confiance Ю jour" -#: g10/g10.c:209 +#: g10/g10.c:211 msgid "|[NAMES]|check the trust database" msgstr "|[NOMS]|vИrifier la base de confiance" -#: g10/g10.c:210 +#: g10/g10.c:212 msgid "fix a corrupted trust database" msgstr "rИparer une base de confiance corrompue" -#: g10/g10.c:211 +#: g10/g10.c:213 msgid "De-Armor a file or stdin" msgstr "Enlever l'armure d'un fichier ou de stdin" -#: g10/g10.c:212 +#: g10/g10.c:214 msgid "En-Armor a file or stdin" msgstr "Mettre une armure Ю un fichier ou Ю stdin" -#: g10/g10.c:213 +#: g10/g10.c:215 msgid "|algo [files]|print message digests" msgstr "|alg. [fich.]|indiquer les fonctions de hachage" -#: g10/g10.c:214 +#: g10/g10.c:216 msgid "print all message digests" msgstr "Иcrire toutes les fonctions de hachage" -#: g10/g10.c:220 +#: g10/g10.c:222 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Options:\n" " " -#: g10/g10.c:222 +#: g10/g10.c:224 msgid "create ascii armored output" msgstr "crИer une sortie ascii avec armure" -#: g10/g10.c:223 +#: g10/g10.c:225 msgid "|NAME|encrypt for NAME" msgstr "|NOM|chiffrer pour NOM" -#: g10/g10.c:227 +#: g10/g10.c:229 msgid "use this user-id to sign or decrypt" msgstr "utiliser ce nom pour signer ou dИchiffrer" -#: g10/g10.c:228 +#: g10/g10.c:230 msgid "|N|set compress level N (0 disables)" msgstr "|N|niveau de compression N (0 dИsactive)" -#: g10/g10.c:230 +#: g10/g10.c:232 msgid "use canonical text mode" msgstr "utiliser le mode texte canonique" -#: g10/g10.c:231 +#: g10/g10.c:233 msgid "use as output file" msgstr "utiliser comme fichier de sortie" -#: g10/g10.c:232 +#: g10/g10.c:234 msgid "verbose" msgstr "bavard" -#: g10/g10.c:233 +#: g10/g10.c:235 msgid "be somewhat more quiet" msgstr "devenir beaucoup plus silencieux" -#: g10/g10.c:234 +#: g10/g10.c:236 msgid "don't use the terminal at all" msgstr "" # -#: g10/g10.c:235 +#: g10/g10.c:237 msgid "force v3 signatures" msgstr "forcer les signatures en v3" -#: g10/g10.c:236 +#: g10/g10.c:238 msgid "always use a MDC for encryption" msgstr "toujours utiliser un sceau pour le chiffrement" -#: g10/g10.c:237 +#: g10/g10.c:239 msgid "do not make any changes" msgstr "ne rien changer" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/g10.c:239 +#: g10/g10.c:241 msgid "batch mode: never ask" msgstr "mode automatique : ne jamais rien demander" -#: g10/g10.c:240 +#: g10/g10.c:242 msgid "assume yes on most questions" msgstr "rИpondre oui Ю la plupart des questions" -#: g10/g10.c:241 +#: g10/g10.c:243 msgid "assume no on most questions" msgstr "rИpondre non Ю la plupart des questions" -#: g10/g10.c:242 +#: g10/g10.c:244 msgid "add this keyring to the list of keyrings" msgstr "ajouter ce porte-clИs Ю la liste des porte-clИs" -#: g10/g10.c:243 +#: g10/g10.c:245 msgid "add this secret keyring to the list" msgstr "ajouter ce porte-clИs secret Ю la liste" -#: g10/g10.c:244 +#: g10/g10.c:246 msgid "|NAME|use NAME as default secret key" msgstr "|NOM|utiliser NOM comme clИ secrХte par dИfaut" -#: g10/g10.c:245 +#: g10/g10.c:247 msgid "|HOST|use this keyserver to lookup keys" msgstr "|HтTE|utiliser ce serveur pour chercher des clИs" -#: g10/g10.c:246 +#: g10/g10.c:248 msgid "|NAME|set terminal charset to NAME" msgstr "|NOM|le terminal utilise la table de caractХres NOM" -#: g10/g10.c:247 +#: g10/g10.c:249 msgid "read options from file" msgstr "lire les options du fichier" -#: g10/g10.c:249 +#: g10/g10.c:251 msgid "set debugging flags" msgstr "choisir les attributs de dИboguage" -#: g10/g10.c:250 +#: g10/g10.c:252 msgid "enable full debugging" msgstr "permettre un dИboguage complet" -#: g10/g10.c:251 +#: g10/g10.c:253 msgid "|FD|write status info to this FD" msgstr "|FD|Иcrire l'Иtat sur ce descripteur" -#: g10/g10.c:252 +#: g10/g10.c:254 msgid "do not write comment packets" msgstr "ne pas Иcrire de paquets de commentaire" -#: g10/g10.c:253 +#: g10/g10.c:255 msgid "(default is 1)" msgstr "nombre de signatures complХtes requises (1)" -#: g10/g10.c:254 +#: g10/g10.c:256 msgid "(default is 3)" msgstr "nombre de signatures marginales requises (3)" -#: g10/g10.c:256 +#: g10/g10.c:258 msgid "|FILE|load extension module FILE" msgstr "|FICH|charger le module d'extension FICH" -#: g10/g10.c:257 +#: g10/g10.c:259 msgid "emulate the mode described in RFC1991" msgstr "imiter le mode dИcrit dans la RFC1991" -#: g10/g10.c:258 +#: g10/g10.c:260 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "" # FIXMOI : faudra trouver mieux ... -#: g10/g10.c:259 +#: g10/g10.c:261 msgid "|N|use passphrase mode N" msgstr "|N|utiliser le mode de codage des mots de passe N" -#: g10/g10.c:261 +#: g10/g10.c:263 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|NOM|utiliser le hachage NOM pour les mots de passe" -#: g10/g10.c:263 +#: g10/g10.c:265 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|NOM|utiliser le chiffre NOM pour les mots de passe" -#: g10/g10.c:264 +#: g10/g10.c:266 msgid "|NAME|use cipher algorithm NAME" msgstr "|NOM|utiliser l'algorithme de chiffrement NOM" -#: g10/g10.c:265 +#: g10/g10.c:267 msgid "|NAME|use message digest algorithm NAME" msgstr "|NOM|utiliser la fonction de hachage NOM" -#: g10/g10.c:266 +#: g10/g10.c:268 msgid "|N|use compress algorithm N" msgstr "|N|utiliser l'algorithme de compression N" -#: g10/g10.c:267 +#: g10/g10.c:269 msgid "throw keyid field of encrypted packets" msgstr "supprimer l'identification des paquets chiffrИs" -#: g10/g10.c:268 +#: g10/g10.c:270 msgid "|NAME=VALUE|use this notation data" msgstr "" -#: g10/g10.c:270 +#: g10/g10.c:272 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" "Exemples:\n" "\n" " -se -r Alice [fichier] signer et chiffrer pour l'utilisateur Alice\n" " --clearsign [fichier] faire une signature en texte clair\n" " --detach-sign [fichier] faire une signature dИtachИe\n" " --list-keys [utilisateur] montrer les clИs\n" " --fingerprint [utilisateur] montrer les empreintes\n" -#: g10/g10.c:347 +#: g10/g10.c:351 msgid "Please report bugs to .\n" msgstr "Rapporter toutes anomalies Ю .\n" -#: g10/g10.c:351 +#: g10/g10.c:355 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Utilisation: gpg [options] [fichiers] (-h pour l'aide)" -#: g10/g10.c:354 +#: g10/g10.c:358 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" "default operation depends on the input data\n" msgstr "" "Syntaxe: gpg [options] [fichiers]\n" "signer, vИrifier, chiffer ou dИchiffrer\n" "l'opИration par dИfaut dИpend des donnИes entrИes\n" -#: g10/g10.c:359 +#: g10/g10.c:363 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algorithmes supportИs:\n" -#: g10/g10.c:433 +#: g10/g10.c:437 msgid "usage: gpg [options] " msgstr "utilisation: gpg [options] " -#: g10/g10.c:473 +#: g10/g10.c:477 msgid "conflicting commands\n" msgstr "commandes en conflit\n" -#: g10/g10.c:605 +#: g10/g10.c:609 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTE : pas de fichier d'options par dИfaut `%s'\n" -#: g10/g10.c:609 +#: g10/g10.c:613 #, c-format msgid "option file `%s': %s\n" msgstr "fichier d'options `%s' : %s\n" -#: g10/g10.c:616 +#: g10/g10.c:620 #, c-format msgid "reading options from `%s'\n" msgstr "lire les options de `%s'\n" -#: g10/g10.c:782 +#: g10/g10.c:786 #, c-format msgid "%s is not a valid character set\n" msgstr "%s n'est pas une table de caractХres valide\n" -#: g10/g10.c:827 g10/g10.c:839 +#: g10/g10.c:833 g10/g10.c:845 msgid "selected cipher algorithm is invalid\n" msgstr "l'algorithme de chiffrement sИlectionnИ est invalide\n" -#: g10/g10.c:833 g10/g10.c:845 +#: g10/g10.c:839 g10/g10.c:851 msgid "selected digest algorithm is invalid\n" msgstr "la fonction de hachage sИlectionnИe est invalide\n" -#: g10/g10.c:849 +#: g10/g10.c:855 msgid "the given policy URL is invalid\n" msgstr "" -#: g10/g10.c:852 +#: g10/g10.c:858 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "l'algorithme de compression doit faire partie de l'Иchelle %d..%d\n" -#: g10/g10.c:854 +#: g10/g10.c:860 msgid "completes-needed must be greater than 0\n" msgstr "╚ completes-needed ╩ doit Йtre supИrieur Ю 0\n" -#: g10/g10.c:856 +#: g10/g10.c:862 msgid "marginals-needed must be greater than 1\n" msgstr "╚ marginals-needed ╩ doit Йtre supИrieur Ю 1\n" -#: g10/g10.c:858 +#: g10/g10.c:864 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "╚ max-cert-depth ╩ doit Йtre compris entre 1 et 255\n" -#: g10/g10.c:861 +#: g10/g10.c:867 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTE : le mode S2K simple (0) est fortement dИconseillИ\n" -#: g10/g10.c:865 +#: g10/g10.c:871 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "mode S2K invalide ; doit Йtre 0, 1 ou 3\n" -#: g10/g10.c:942 +#: g10/g10.c:948 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "n'a pas pu initialiser la base de confiance : %s\n" -#: g10/g10.c:948 +#: g10/g10.c:954 msgid "--store [filename]" msgstr "--store [nom du fichier]" -#: g10/g10.c:955 +#: g10/g10.c:961 msgid "--symmetric [filename]" msgstr "--symmetric [nom du fichier]" -#: g10/g10.c:963 +#: g10/g10.c:969 msgid "--encrypt [filename]" msgstr "--encrypt [nom du fichier]" -#: g10/g10.c:976 +#: g10/g10.c:982 msgid "--sign [filename]" msgstr "--sign [nom du fichier]" -#: g10/g10.c:989 +#: g10/g10.c:995 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nom du fichier]" -#: g10/g10.c:1003 +#: g10/g10.c:1009 msgid "--clearsign [filename]" msgstr "--clearsign [nom du fichier]" -#: g10/g10.c:1015 +#: g10/g10.c:1021 msgid "--decrypt [filename]" msgstr "--decrypt [nom du fichier]" -#: g10/g10.c:1024 +#: g10/g10.c:1030 msgid "--edit-key username [commands]" msgstr "--edit-key utilisateur [commandes]" -#: g10/g10.c:1038 +#: g10/g10.c:1044 msgid "--delete-secret-key username" msgstr "--delete-secret-key utilisateur" -#: g10/g10.c:1041 +#: g10/g10.c:1047 msgid "--delete-key username" msgstr "--delete-key utilisateur" -#: g10/encode.c:231 g10/g10.c:1064 g10/sign.c:366 +#: g10/encode.c:231 g10/g10.c:1071 g10/sign.c:366 #, c-format msgid "can't open %s: %s\n" msgstr "ne peut ouvrir %s: %s\n" -#: g10/g10.c:1075 +#: g10/g10.c:1082 msgid "-k[v][v][v][c] [userid] [keyring]" msgstr "-k[v][v][v][c] [utilisateur] [porte-clИs]" -#: g10/g10.c:1134 +#: g10/g10.c:1141 #, c-format msgid "dearmoring failed: %s\n" msgstr "suppression d'armure non rИussie : %s\n" -#: g10/g10.c:1142 +#: g10/g10.c:1149 #, c-format msgid "enarmoring failed: %s\n" msgstr "construction d'armure non rИussie : %s \n" -#: g10/g10.c:1208 +#: g10/g10.c:1215 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algorithme de hachage `%s' invalide\n" -#: g10/g10.c:1283 +#: g10/g10.c:1290 msgid "[filename]" msgstr "[nom du fichier]" -#: g10/g10.c:1287 +#: g10/g10.c:1294 msgid "Go ahead and type your message ...\n" msgstr "Continuez et tapez votre message...\n" -#: g10/decrypt.c:59 g10/g10.c:1290 g10/verify.c:66 +#: g10/decrypt.c:59 g10/g10.c:1297 g10/verify.c:66 #, c-format msgid "can't open `%s'\n" msgstr "ne peut ouvrir `%s'\n" -#: g10/g10.c:1457 +#: g10/g10.c:1466 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" -#: g10/g10.c:1463 +#: g10/g10.c:1472 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" msgstr "" -#: g10/g10.c:1469 +#: g10/g10.c:1478 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "" -#: g10/g10.c:1477 +#: g10/g10.c:1486 msgid "a notation value must not use any control characters\n" msgstr "" #: g10/armor.c:296 #, c-format msgid "armor: %s\n" msgstr "armure : %s\n" #: g10/armor.c:319 msgid "invalid armor header: " msgstr "en-tЙte d'armure invalide : " #: g10/armor.c:326 msgid "armor header: " msgstr "en-tЙte d'armure : " #: g10/armor.c:337 msgid "invalid clearsig header\n" msgstr "en-tЙte de signature claire invalide\n" #: g10/armor.c:389 msgid "nested clear text signatures\n" msgstr "signatures en texte clair imbriquИes\n" #: g10/armor.c:500 msgid "invalid dash escaped line: " msgstr "ligne de traits d'Иchappement invalide : " #: g10/armor.c:512 msgid "unexpected armor:" msgstr "armure inattendue :" #: g10/armor.c:629 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "caractХre %02x invalide en base 64 ignorИ\n" #: g10/armor.c:672 msgid "premature eof (no CRC)\n" msgstr "fin de fichier prИmaturИe (pas de CRC)\n" #: g10/armor.c:706 msgid "premature eof (in CRC)\n" msgstr "fin de fichier prИmaturИe (dans le CRC)\n" #: g10/armor.c:710 msgid "malformed CRC\n" msgstr "CRC malformИ\n" #: g10/armor.c:714 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "Erreur de CRC ; %06lx - %06lx\n" #: g10/armor.c:731 msgid "premature eof (in Trailer)\n" msgstr "fin de fichier prИmaturИe (dans la remorque)\n" #: g10/armor.c:735 msgid "error in trailer line\n" msgstr "erreur dans la ligne de remorque\n" #: g10/armor.c:1001 msgid "no valid OpenPGP data found.\n" msgstr "aucune donnИe OpenPGP valide n'a ИtИ trouvИe.\n" #: g10/armor.c:1005 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armure invalide : ligne plus longue que %d caractХres\n" #: g10/armor.c:1009 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "caractХre citИ-imprimable (quoted-printable) dans l'armure provenant\n" "certainement d'un agent de transfert de messages boguИ\n" #: g10/pkclist.c:137 #, c-format msgid "" "No trust value assigned to %lu:\n" "%4u%c/%08lX %s \"" msgstr "" "Pas de confiance dИfinie pour %lu :\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:147 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" " 1 = Don't know\n" " 2 = I do NOT trust\n" " 3 = I trust marginally\n" " 4 = I trust fully\n" " s = please show me more information\n" msgstr "" "ю quel point avez-vous confiance en cet utilisateur pour vИrifier " "correctement\n" "les clИs des autres utilisateurs (vous pouvez vИrifier son passeport, " "vИrifier\n" "les empreintes de diverses sources...) ?\n" "\n" " 1 = je ne sais pas\n" " 2 = je ne lui fais pas confiance\n" " 3 = je le crois marginalement\n" " 4 = je le crois totalement\n" " s = montrez-moi plus d'informations\n" #: g10/pkclist.c:156 msgid " m = back to the main menu\n" msgstr " m = retour au menu principal\n" #: g10/pkclist.c:158 msgid " q = quit\n" msgstr " q = quitter\n" #. a string with valid answers #: g10/pkclist.c:163 msgid "sSmMqQ" msgstr "sSmMqQ" #: g10/pkclist.c:167 msgid "Your decision? " msgstr "Votre dИcision ? " #: g10/pkclist.c:187 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificats conduisant vers une clИ Ю confiance ultime :\n" -#: g10/pkclist.c:254 +#: g10/pkclist.c:256 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 "" "N'a pas pu trouver un chemin de confiance valide jusqu'Ю la clИ. Voyons si\n" "nous ne pouvons pas assigner quelques indices de confiance manquants.\n" -#: g10/pkclist.c:260 +#: g10/pkclist.c:262 msgid "" "No path leading to one of our keys found.\n" "\n" msgstr "" "Aucun chemin menant vers une de nos clИs n'a ИtИ trouvИ.\n" "\n" -#: g10/pkclist.c:262 +#: g10/pkclist.c:264 msgid "" "No certificates with undefined trust found.\n" "\n" msgstr "" "Aucun certificat Ю confiance indИfinie n'a ИtИ trouvИ.\n" "\n" -#: g10/pkclist.c:264 +#: g10/pkclist.c:266 msgid "" "No trust values changed.\n" "\n" msgstr "" "Pas d'indice de confiance changИ.\n" "\n" -#: g10/pkclist.c:281 +#: g10/pkclist.c:283 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "clИ %08lX : la clИ a ИtИ rИvoquИe !\n" -#: g10/pkclist.c:287 g10/pkclist.c:297 g10/pkclist.c:403 +#: g10/pkclist.c:289 g10/pkclist.c:299 g10/pkclist.c:405 msgid "Use this key anyway? " msgstr "Utiliser cette clИ quand-mЙme ? " -#: g10/pkclist.c:291 +#: g10/pkclist.c:293 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "clИ %08lX : la sous-clИ a ИtИ rИvoquИe !\n" -#: g10/pkclist.c:321 +#: g10/pkclist.c:323 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX : la clИ a expirИ\n" -#: g10/pkclist.c:327 +#: g10/pkclist.c:329 #, c-format msgid "%08lX: no info to calculate a trust probability\n" msgstr "%08lX : pas d'information pour calculer une probabilitИ de confiance\n" -#: g10/pkclist.c:341 +#: g10/pkclist.c:343 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX : Nous ne faisons PAS confiance Ю cette clИ\n" -#: g10/pkclist.c:347 +#: g10/pkclist.c:349 #, 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 : Il n'est pas sШr que cette clИ appartient vraiment Ю son " "propriИtaire\n" "mais elle est quand mЙme acceptИe\n" -#: g10/pkclist.c:353 +#: g10/pkclist.c:355 msgid "This key probably belongs to the owner\n" msgstr "Cette clИ appartient probablement Ю son propriИtaire\n" -#: g10/pkclist.c:358 +#: g10/pkclist.c:360 msgid "This key belongs to us\n" msgstr "Cette clИ nous appartient\n" -#: g10/pkclist.c:398 +#: g10/pkclist.c:400 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" "the next question with yes\n" "\n" msgstr "" "Il n'est pas certain que la clИ appartient Ю sos propriИtaire.\n" "Si vous savez *vraiment* ce que vous faites, vous pouvez rИpondre\n" "oui Ю la prochaine question\n" "\n" -#: g10/pkclist.c:411 g10/pkclist.c:433 +#: g10/pkclist.c:413 g10/pkclist.c:435 msgid "WARNING: Using untrusted key!\n" msgstr "ATTENTION : Utilisation d'une clИ sans confiance !\n" -#: g10/pkclist.c:454 +#: g10/pkclist.c:456 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ATTENTION : Cette clИ Ю ИtИ rИvoquИe par son propriИtaire !\n" -#: g10/pkclist.c:455 +#: g10/pkclist.c:457 msgid " This could mean that the signature is forgery.\n" msgstr " Cela pourrait signifier que la signature est fausse.\n" -#: g10/pkclist.c:459 +#: g10/pkclist.c:461 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "ATTENTION : Cette sous-clИ Ю ИtИ rИvoquИe par son propriИtaire !\n" -#: g10/pkclist.c:480 +#: g10/pkclist.c:482 msgid "Note: This key has expired!\n" msgstr "Note : Cette clИ a expirИ !\n" -#: g10/pkclist.c:487 +#: g10/pkclist.c:489 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "ATTENTION : Cette clИ n'est pas certifiИe avec une signature de confiance !\n" -#: g10/pkclist.c:489 +#: g10/pkclist.c:491 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " Rien ne dit que la signature appartient Ю son propriИtaire.\n" -#: g10/pkclist.c:505 +#: g10/pkclist.c:507 msgid "WARNING: We do NOT trust this key!\n" msgstr "ATTENTION : Nous ne faisons PAS confiance Ю cette clИ !\n" -#: g10/pkclist.c:506 +#: g10/pkclist.c:508 msgid " The signature is probably a FORGERY.\n" msgstr " La signature est certainement FAUSSE.\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:515 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "ATTENTION : Les signatures de cette clИ n'ont pas une confiance suffisante " "!\n" -#: g10/pkclist.c:516 +#: g10/pkclist.c:518 msgid " It is not certain that the signature belongs to the owner.\n" msgstr "" " Il n'est pas sШr que la signature appartient Ю son propriИtaire.\n" -#: g10/pkclist.c:580 g10/pkclist.c:602 g10/pkclist.c:665 g10/pkclist.c:705 +#: g10/pkclist.c:582 g10/pkclist.c:604 g10/pkclist.c:670 g10/pkclist.c:715 #, c-format msgid "%s: skipped: %s\n" msgstr "%s : ignorИ : %s\n" -#: g10/pkclist.c:588 g10/pkclist.c:687 +#: g10/pkclist.c:590 g10/pkclist.c:697 #, fuzzy, c-format msgid "%s: skipped: public key already present\n" msgstr "%s : problХme de lecture du bloc de clИs : %s\n" -#: g10/pkclist.c:611 +#: g10/pkclist.c:613 msgid "" "You did not specify a user ID. (you may use \"-r\")\n" "\n" msgstr "" "Vous n'avez pas spИcifiИ de nom d'utilisateur. (vous pouvez utiliser " "\"-r\")\n" "\n" -#: g10/pkclist.c:616 +#: g10/pkclist.c:618 msgid "Enter the user ID: " msgstr "Entrez le nom d'utilisateur : " -#: g10/pkclist.c:627 +#: g10/pkclist.c:629 msgid "No such user ID.\n" msgstr "Pas de tel utilisateur.\n" -#: g10/pkclist.c:673 +#: g10/pkclist.c:639 +#, fuzzy +msgid "Public key is disabled.\n" +msgstr "la clИ publique est %08lX\n" + +#: g10/pkclist.c:678 #, c-format msgid "%s: error checking key: %s\n" msgstr "%s : erreur pendant la vИrification de la clИ : %s\n" -#: g10/pkclist.c:711 +#: g10/pkclist.c:683 +#, fuzzy, c-format +msgid "%s: skipped: public key is disabled\n" +msgstr "%s : problХme de lecture du bloc de clИs : %s\n" + +#: g10/pkclist.c:721 msgid "no valid addressees\n" msgstr "pas de destinataire valide\n" # g10/keygen.c:123 ??? #: g10/keygen.c:122 msgid "writing self signature\n" msgstr "Иcriture de l'auto-signature\n" # g10/keygen.c:161 ??? #: g10/keygen.c:160 msgid "writing key binding signature\n" msgstr "Иcriture de la signature de liaison\n" #: g10/keygen.c:386 msgid "Please select what kind of key you want:\n" msgstr "SИlectionnez le type de clИ dИsirИ :\n" #: g10/keygen.c:388 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA et ElGamal (dИfaut)\n" #: g10/keygen.c:389 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (signature seule)\n" #: g10/keygen.c:391 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (chiffrement seul)\n" #: g10/keygen.c:392 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (signature et chiffrement)\n" #: g10/keygen.c:394 #, c-format msgid " (%d) ElGamal in a v3 packet\n" msgstr " (%d) ElGamal dans un paquet v3\n" #: g10/keygen.c:399 msgid "Your selection? " msgstr "Votre choix ? " #: g10/keygen.c:409 msgid "Do you really want to create a sign and encrypt key? " msgstr "Voulez-vous vraiment crИer une clИ de signature et de chiffrement ? " #: g10/keygen.c:430 msgid "Invalid selection.\n" msgstr "Choix invalide.\n" #: g10/keygen.c:442 #, 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 "" "PrИparation Ю la gИnИration d'une nouvelle paire de clИs %s.\n" " la taille minimale est 768 bits\n" " la taille par dИfaut est 1024 bits\n" " la taille maximale conseillИe est 2048 bits\n" #: g10/keygen.c:449 msgid "What keysize do you want? (1024) " msgstr "Quelle taille de clИ dИsirez-vous ? (1024) " #: g10/keygen.c:454 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA permet seulement des tailles comprises entre 512 et 1024\n" #: g10/keygen.c:456 msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "taille trop petite ; 768 est la plus petite valeur permise.\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:466 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "taille trop importante ; %d est la plus grande valeur permise.\n" #: g10/keygen.c:471 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" msgstr "" "Les tailles supИrieures Ю 2048 ne sont pas conseillИes car\n" "les calculs prennent VRAIMENT beaucoup de temps !\n" #: g10/keygen.c:474 msgid "Are you sure that you want this keysize? " msgstr "Etes-vous sШr de vouloir cette taille ? " #: g10/keygen.c:475 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" msgstr "" "D'accord, mais n'oubliez pas que les radiations de votre Иcran et de votre\n" "clavier sont aussi trХs vulnИrables aux attaques !\n" #: g10/keygen.c:483 msgid "Do you really need such a large keysize? " msgstr "Avez-vous rИellement besoin d'une taille aussi grande ? " #: g10/keygen.c:489 #, c-format msgid "Requested keysize is %u bits\n" msgstr "La taille demandИe est %u bits\n" #: g10/keygen.c:492 g10/keygen.c:496 #, c-format msgid "rounded up to %u bits\n" msgstr "arrondie Ю %u bits\n" #: g10/keygen.c:509 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" " = key expires in n days\n" " w = key expires in n weeks\n" " m = key expires in n months\n" " y = key expires in n years\n" msgstr "" "SpИcifiez combien de temps cette clИ devrait Йtre valide.\n" " 0 = la clИ n'expire pas\n" " = la clИ expire dans n jours\n" " w = la clИ expire dans n semaines\n" " m = la clИ expire dans n mois\n" " y = la clИ expire dans n ans\n" -#: g10/keygen.c:524 +#: g10/keygen.c:526 msgid "Key is valid for? (0) " msgstr "La clИ est valide pour ? (0) " -#: g10/keygen.c:535 +#: g10/keygen.c:547 msgid "invalid value\n" msgstr "valeur invalide\n" -#: g10/keygen.c:540 +#: g10/keygen.c:552 msgid "Key does not expire at all\n" msgstr "La clИ n'expire pas du tout\n" #. print the date when the key expires -#: g10/keygen.c:546 +#: g10/keygen.c:558 #, c-format msgid "Key expires at %s\n" msgstr "La clИ expire le %s\n" -#: g10/keygen.c:552 +#: g10/keygen.c:564 msgid "Is this correct (y/n)? " msgstr "Est-ce correct (o/n) ? " -#: g10/keygen.c:595 +#: g10/keygen.c:607 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) \"\n" "\n" msgstr "" "\n" "Vous avez besoin d'un nom d'utilisateur pour identifier votre clИ ; le\n" "programme le construit Ю partir du nom rИel, d'un commentaire et d'une\n" "adresse e-mail de cette maniХre:\n" " ╚ Heinrich Heine (Der Dichter) ╩\n" "\n" -#: g10/keygen.c:606 +#: g10/keygen.c:618 msgid "Real name: " msgstr "Nom rИel : " -#: g10/keygen.c:610 +#: g10/keygen.c:622 msgid "Invalid character in name\n" msgstr "CaractХre invalide dans le nom\n" -#: g10/keygen.c:612 +#: g10/keygen.c:624 msgid "Name may not start with a digit\n" msgstr "Le nom ne doit pas commencer par un chiffre\n" -#: g10/keygen.c:614 +#: g10/keygen.c:626 msgid "Name must be at least 5 characters long\n" msgstr "Le nom doit faire au moins 5 caractХres de long\n" -#: g10/keygen.c:622 +#: g10/keygen.c:634 msgid "Email address: " msgstr "Adresse e-mail : " -#: g10/keygen.c:633 +#: g10/keygen.c:645 msgid "Not a valid email address\n" msgstr "Ce n'est pas une adresse e-mail valide\n" -#: g10/keygen.c:641 +#: g10/keygen.c:653 msgid "Comment: " msgstr "Commentaire : " -#: g10/keygen.c:647 +#: g10/keygen.c:659 msgid "Invalid character in comment\n" msgstr "CaractХre invalide dans le commentaire\n" -#: g10/keygen.c:669 +#: g10/keygen.c:681 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Vous utilisez le jeu de caractХres '%s'.\n" -#: g10/keygen.c:675 +#: g10/keygen.c:687 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Vous avez sИlectionnИ ce nom d'utilisateur :\n" " \"%s\"\n" "\n" -#: g10/keygen.c:678 +#: g10/keygen.c:690 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" -#: g10/keygen.c:688 +#: g10/keygen.c:700 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Changer le (N)om, le (C)ommentaire, l'(E)-mail ou (O)K/(Q)uitter? " -#: g10/keygen.c:740 +#: g10/keygen.c:752 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Vous avez besoin d'un mot de passe pour protИger votre clИ secrХte.\n" "\n" -#: g10/keyedit.c:455 g10/keygen.c:748 +#: g10/keyedit.c:456 g10/keygen.c:760 msgid "passphrase not correctly repeated; try again.\n" msgstr "le mot de passe n'a pas ИtИ rИpИtИ Ю l'identique ; recommencez.\n" -#: g10/keygen.c:754 +#: g10/keygen.c:766 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 "" "Vous ne voulez pas de mot de passe - c'est sШrement une *mauvaise* idИe !\n" "Je l'accepte quand-mЙme. Vous pouvez changer votre mot de passe quand vous\n" "le dИsirez, en utilisant ce programme avec l'option ╚ --edit-key ╩.\n" "\n" -#: g10/keygen.c:775 +#: g10/keygen.c:787 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 "" "Un grand nombre d'octets alИatoires doit Йtre gИnИrИ. Vous devriez faire\n" "autre-chose (taper au clavier, dИplacer la souris, utiliser les disques)\n" "pendant la gИnИration de nombres premiers ; cela donne au gИnИrateur de\n" "nombres alИatoires une meilleure chance d'avoir assez d'entropie.\n" -#: g10/keygen.c:845 +#: g10/keygen.c:857 msgid "Key generation can only be used in interactive mode\n" msgstr "La gИnИration de clИ ne peut Йtre faite qu'en mode interactif\n" -#: g10/keygen.c:853 +#: g10/keygen.c:865 msgid "DSA keypair will have 1024 bits.\n" msgstr "La paire de clИs DSA fera 1024 bits.\n" -#: g10/keygen.c:859 +#: g10/keygen.c:871 #, fuzzy msgid "Key generation canceled.\n" msgstr "La gИnИration a ИtИ annulИe.\n" -#: g10/keygen.c:869 +#: g10/keygen.c:881 #, c-format msgid "writing public certificate to `%s'\n" msgstr "Иcriture d'un certificat public Ю `%s'\n" -#: g10/keygen.c:870 +#: g10/keygen.c:882 #, c-format msgid "writing secret certificate to `%s'\n" msgstr "Иcriture d'un certificat secret Ю `%s'\n" -#: g10/keygen.c:947 +#: g10/keygen.c:959 msgid "public and secret key created and signed.\n" msgstr "les clИs publique et secrХte ont ИtИ crИИes et signИes.\n" -#: g10/keygen.c:949 +#: g10/keygen.c:961 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 "" "Notez que cette clИ ne peut Йtre utilisИe pour chiffrer. Vous pouvez\n" "utiliser la commande ╚ --edit-key ╩ pour gИnИrer une clИ secondaire Ю\n" "cette fin.\n" -#: g10/keygen.c:963 g10/keygen.c:1062 +#: g10/keygen.c:975 g10/keygen.c:1074 #, c-format msgid "Key generation failed: %s\n" msgstr "La gИnИration de clИ a ИchouИ : %s\n" # on s'amuse comme on peut... -#: g10/keygen.c:1007 g10/sig-check.c:300 g10/sign.c:105 +#: g10/keygen.c:1019 g10/sig-check.c:312 g10/sign.c:105 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "la clИ a ИtИ crИИe %lu seconde dans le futur (discontinuitИ temporelle ou\n" "problХme d'horloge)\n" -#: g10/keygen.c:1009 g10/sig-check.c:302 g10/sign.c:107 +#: g10/keygen.c:1021 g10/sig-check.c:314 g10/sign.c:107 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "la clИ a ИtИ crИИe %lu secondes dans le futur (discontinuitИ temporelle ou\n" "problХme d'horloge\n" -#: g10/keygen.c:1040 +#: g10/keygen.c:1052 msgid "Really create? " msgstr "CrИer vraiment ? " -#: g10/encode.c:91 g10/openfile.c:118 g10/openfile.c:208 g10/tdbio.c:467 +#: g10/encode.c:91 g10/openfile.c:156 g10/openfile.c:246 g10/tdbio.c:467 #: g10/tdbio.c:528 #, c-format msgid "%s: can't open: %s\n" msgstr "%s : ne peut ouvrir : %s\n" #: g10/encode.c:113 #, c-format msgid "error creating passphrase: %s\n" msgstr "erreur pendant la crИation du mot de passe : %s\n" #: g10/encode.c:167 g10/encode.c:287 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s : ATTENTION : fichier vide\n" #: g10/encode.c:237 #, c-format msgid "reading from `%s'\n" msgstr "lecture de `%s'\n" #: g10/encode.c:431 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s chiffrИ pour : %s\n" #: g10/export.c:147 #, c-format msgid "%s: user not found: %s\n" msgstr "%s : utilisateur non trouvИ : %s\n" #: g10/export.c:156 #, c-format msgid "certificate read problem: %s\n" msgstr "problХme lors de lecture du certificat : %s\n" #: g10/export.c:165 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "clИ %08lX : ce n'est pas une clИ rfc2440 - ignorИe\n" #: g10/export.c:203 msgid "WARNING: nothing exported\n" msgstr "ATTENTION : rien n'a ИtИ exportИ\n" #: g10/getkey.c:206 msgid "too many entries in pk cache - disabled\n" msgstr "trop d'entrИes dans le cache pk - dИsactivИ\n" #: g10/getkey.c:345 msgid "too many entries in unk cache - disabled\n" msgstr "trop d'entrИes dans le cache unk - dИsactivИ\n" #: g10/getkey.c:1535 g10/getkey.c:1591 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "" "utilisation de la clИ secondaire %08lX Ю la place de la clИ\n" "principale %08lX\n" #: g10/import.c:116 #, c-format msgid "can't open `%s': %s\n" msgstr "impossible d'ouvrir `%s': %s\n" #: g10/import.c:160 #, c-format msgid "skipping block of type %d\n" msgstr "ne prend pas en compte le bloc de type %d\n" -#: g10/import.c:167 g10/trustdb.c:2560 g10/trustdb.c:2668 +#: g10/import.c:167 g10/trustdb.c:1656 g10/trustdb.c:1695 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu clИs traitИes jusqu'ici\n" #: g10/import.c:172 #, c-format msgid "error reading `%s': %s\n" msgstr "erreur pendant la lecture de `%s' : %s\n" #: g10/import.c:175 #, c-format msgid "Total number processed: %lu\n" msgstr " QuantitИ totale traitИe : %lu\n" #: g10/import.c:177 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sans nom d'utilisateur : %lu\n" #: g10/import.c:179 #, c-format msgid " imported: %lu" msgstr " importИe : %lu" #: g10/import.c:185 #, c-format msgid " unchanged: %lu\n" msgstr " inchangИe : %lu\n" #: g10/import.c:187 #, c-format msgid " new user IDs: %lu\n" msgstr " nouveaux noms d'utilisateurs : %lu\n" #: g10/import.c:189 #, c-format msgid " new subkeys: %lu\n" msgstr " nouvelles sous-clИs : %lu\n" #: g10/import.c:191 #, c-format msgid " new signatures: %lu\n" msgstr " nouvelles signatures : %lu\n" #: g10/import.c:193 #, c-format msgid " new key revocations: %lu\n" msgstr " nouvelles rИvocations de clИs : %lu\n" #: g10/import.c:195 #, c-format msgid " secret keys read: %lu\n" msgstr " clИs secrХtes lues : %lu\n" #: g10/import.c:197 #, c-format msgid " secret keys imported: %lu\n" msgstr " clИs secrХtes importИes : %lu\n" #: g10/import.c:199 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " clИs secrХtes inchangИes : %lu\n" -#: g10/import.c:342 g10/import.c:529 +#: g10/import.c:342 g10/import.c:526 #, c-format msgid "key %08lX: no user id\n" msgstr "clИ %08lX : pas de nom d'utilisateur\n" #: g10/import.c:353 #, c-format msgid "key %08lX: no valid user ids\n" msgstr "clИ %08lX : pas de nom d'utilisateur valide\n" #: g10/import.c:355 msgid "this may be caused by a missing self-signature\n" msgstr "cela peut provenir d'une auto-signature manquante\n" -#: g10/import.c:366 g10/import.c:596 +#: g10/import.c:366 g10/import.c:593 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "clИ %08lX : clИ publique pas trouvИe: %s\n" #: g10/import.c:372 msgid "no default public keyring\n" msgstr "pas de porte-clИs public par dИfaut\n" -#: g10/import.c:376 g10/openfile.c:148 g10/sign.c:268 g10/sign.c:559 +#: g10/import.c:376 g10/openfile.c:186 g10/sign.c:268 g10/sign.c:559 #, c-format msgid "writing to `%s'\n" msgstr "Иcriture de `%s'\n" -#: g10/import.c:379 g10/import.c:435 g10/import.c:544 g10/import.c:645 +#: g10/import.c:379 g10/import.c:432 g10/import.c:541 g10/import.c:642 #, c-format msgid "can't lock keyring `%s': %s\n" msgstr "ne peut verrouiller le porte-clИs `%s' : %s\n" -#: g10/import.c:382 g10/import.c:438 g10/import.c:547 g10/import.c:648 +#: g10/import.c:382 g10/import.c:435 g10/import.c:544 g10/import.c:645 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "erreur durant l'Иcriture du porte-clИs `%s' : %s\n" #: g10/import.c:387 #, c-format msgid "key %08lX: public key imported\n" msgstr "clИ %08lX : clИ publique importИe\n" #: g10/import.c:399 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "clИ %08lX : ne ressemble pas Ю notre copie\n" -#: g10/import.c:411 g10/import.c:604 +#: g10/import.c:408 g10/import.c:601 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "clИ %08lX : ne peut trouver le bloc de clИs original : %s\n" -#: g10/import.c:417 g10/import.c:610 +#: g10/import.c:414 g10/import.c:607 #, c-format msgid "key %08lX: can't read original keyblock: %s\n" msgstr "clИ %08lX : ne peut lire le bloc de clИs original : %s\n" -#: g10/import.c:444 +#: g10/import.c:441 #, c-format msgid "key %08lX: 1 new user-id\n" msgstr "clИ %08lX : un nouvel utilisateur\n" -#: g10/import.c:447 +#: g10/import.c:444 #, c-format msgid "key %08lX: %d new user-ids\n" msgstr "clИ %08lX : %d nouveaux utilisateurs\n" -#: g10/import.c:450 +#: g10/import.c:447 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "clИ %08lX : une nouvelle signature\n" -#: g10/import.c:453 +#: g10/import.c:450 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "clИ %08lX : %d nouvelles signatures\n" -#: g10/import.c:456 +#: g10/import.c:453 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "clИ %08lX : une nouvelle sous-clИ\n" -#: g10/import.c:459 +#: g10/import.c:456 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "clИ %08lX : %d nouvelles sous-clИs\n" -#: g10/import.c:469 +#: g10/import.c:466 #, c-format msgid "key %08lX: not changed\n" msgstr "clИ %08lX : n'a pas changИ\n" -#: g10/import.c:552 +#: g10/import.c:549 #, c-format msgid "key %08lX: secret key imported\n" msgstr "clИ %08lX : clИ secrХte importИe\n" #. we can't merge secret keys -#: g10/import.c:556 +#: g10/import.c:553 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "clИ %08lX : dИjЮ dans le porte-clИs secret\n" -#: g10/import.c:561 +#: g10/import.c:558 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "clИ %08lX : clИ secrХte pas trouvИe: %s\n" -#: g10/import.c:590 +#: g10/import.c:587 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "clИ %08lX : pas de clИ publique - ne peut appliquer le certificat de\n" "rИvocation\n" -#: g10/import.c:621 +#: g10/import.c:618 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "clИ %08lX : certificat de rИvocation invalide : %s - rejetИ\n" -#: g10/import.c:653 +#: g10/import.c:650 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "clИ %08lX : certificat de rИvocation importИ\n" -#: g10/import.c:686 +#: g10/import.c:683 #, c-format msgid "key %08lX: no user-id for signature\n" msgstr "clИ %08lX : pas d'utilisateur pour la signature\n" -#: g10/import.c:693 g10/import.c:717 +#: g10/import.c:690 g10/import.c:714 #, c-format msgid "key %08lX: unsupported public key algorithm\n" msgstr "clИ %08lX : algorithme de clИ publique non supportИ\n" -#: g10/import.c:694 +#: g10/import.c:691 #, c-format msgid "key %08lX: invalid self-signature\n" msgstr "clИ %08lX : auto-signature invalide\n" -#: g10/import.c:709 +#: g10/import.c:706 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "clИ %08lX : pas de sous-clИ pour relier la clИ\n" -#: g10/import.c:718 +#: g10/import.c:715 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "clИ %08lX : liaison avec la sous-clИ invalide\n" -#: g10/import.c:750 +#: g10/import.c:747 #, c-format msgid "key %08lX: skipped userid '" msgstr "clИ %08lX : utilisateur non pris en compte '" -#: g10/import.c:773 +#: g10/import.c:770 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "clИ %08lX : sous-clИ non prise en compte\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:798 +#: g10/import.c:795 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "clИ %08lX : signature non exportable (classe %02x) - ignorИe\n" -#: g10/import.c:807 +#: g10/import.c:804 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "clИ %08lX : certificat de rИvocation au mauvais endroit - ignorИe\n" -#: g10/import.c:815 +#: g10/import.c:812 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "clИ %08lX : certificat de rИvocation invalide : %s - ignorИe\n" -#: g10/import.c:915 +#: g10/import.c:912 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "clИ %08lX: nom d'utilisateur doublon fusionnИ\n" -#: g10/import.c:966 +#: g10/import.c:963 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "clИ %08lX : certificat de rИvocation ajoutИ\n" -#: g10/import.c:1079 g10/import.c:1134 +#: g10/import.c:1076 g10/import.c:1131 #, c-format msgid "key %08lX: our copy has no self-signature\n" msgstr "clИ %08lX : notre copie n'a pas d'auto-signature\n" -#: g10/keyedit.c:92 +#: g10/keyedit.c:93 #, c-format msgid "%s: user not found\n" msgstr "%s : utilisateur non trouvИ\n" -#: g10/keyedit.c:153 +#: g10/keyedit.c:154 msgid "[revocation]" msgstr "[rИvocation]" -#: g10/keyedit.c:154 +#: g10/keyedit.c:155 msgid "[self-signature]" msgstr "[auto-signature]" -#: g10/keyedit.c:218 +#: g10/keyedit.c:219 msgid "1 bad signature\n" msgstr "une mauvaise signature\n" -#: g10/keyedit.c:220 +#: g10/keyedit.c:221 #, c-format msgid "%d bad signatures\n" msgstr "%d mauvaises signatures\n" -#: g10/keyedit.c:222 +#: g10/keyedit.c:223 msgid "1 signature not checked due to a missing key\n" msgstr "une signature non vИrifiИe Ю cause d'une clИ manquante\n" -#: g10/keyedit.c:224 +#: g10/keyedit.c:225 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d signatures non vИrifiИes Ю cause de clИs manquantes\n" -#: g10/keyedit.c:226 +#: g10/keyedit.c:227 msgid "1 signature not checked due to an error\n" msgstr "une signature non vИrifiИe Ю cause d'une erreur\n" -#: g10/keyedit.c:228 +#: g10/keyedit.c:229 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d signatures non vИrifiИes Ю cause d'erreurs\n" -#: g10/keyedit.c:230 +#: g10/keyedit.c:231 msgid "1 user id without valid self-signature detected\n" msgstr "un nom d'utilisateur sans auto-signature valide dИtectИ\n" -#: g10/keyedit.c:232 +#: g10/keyedit.c:233 #, c-format msgid "%d user ids without valid self-signatures detected\n" msgstr "%d nom d'utilisateurs sans auto-signature valide dИtectИ\n" #. Fixme: see whether there is a revocation in which #. * case we should allow to sign it again. -#: g10/keyedit.c:312 +#: g10/keyedit.c:313 #, c-format msgid "Already signed by key %08lX\n" msgstr "DИjЮ signИ par la clИ %08lX\n" -#: g10/keyedit.c:320 +#: g10/keyedit.c:321 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Rien Ю signer avec la clИ %08lX\n" -#: g10/keyedit.c:329 +#: g10/keyedit.c:330 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" msgstr "" "Etes-vous vraiment sШr(e) que vous voulez signer cette clИ\n" "avec la vТtre : \"" -#: g10/keyedit.c:338 +#: g10/keyedit.c:339 msgid "" "The signature will be marked as non-exportable.\n" "\n" msgstr "" "La signature sera marquИe comme non-exportable.\n" "\n" -#: g10/keyedit.c:343 +#: g10/keyedit.c:344 msgid "Really sign? " msgstr "Signer rИellement ? " -#: g10/keyedit.c:369 g10/keyedit.c:1790 g10/keyedit.c:1839 g10/sign.c:128 +#: g10/keyedit.c:370 g10/keyedit.c:1806 g10/keyedit.c:1855 g10/sign.c:128 #, c-format msgid "signing failed: %s\n" msgstr "la signature a ИchouИ : %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:423 msgid "This key is not protected.\n" msgstr "Cette clИ n'est pas protИgИe.\n" -#: g10/keyedit.c:425 +#: g10/keyedit.c:426 msgid "Key is protected.\n" msgstr "La clИ est protИgИe.\n" -#: g10/keyedit.c:442 +#: g10/keyedit.c:443 #, c-format msgid "Can't edit this key: %s\n" msgstr "Ne peut Иditer cette clИ : %s\n" -#: g10/keyedit.c:447 +#: g10/keyedit.c:448 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "Entrez le nouveau mot de passe pour cette clИ secrХte.\n" -#: g10/keyedit.c:459 +#: g10/keyedit.c:460 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Vous ne voulez pas de mot de passe - cela est certainement une\n" "*mauvaise* idИe\n" "\n" -#: g10/keyedit.c:462 +#: g10/keyedit.c:463 msgid "Do you really want to do this? " msgstr "Voulez-vous vraiment faire cela? " -#: g10/keyedit.c:523 +#: g10/keyedit.c:524 msgid "moving a key signature to the correct place\n" msgstr "replacer la signature d'une clИ Ю l'endroit correct\n" -#: g10/keyedit.c:559 +#: g10/keyedit.c:561 msgid "quit this menu" msgstr "quitter ce menu" -#: g10/keyedit.c:560 +#: g10/keyedit.c:562 msgid "q" msgstr "q" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save" msgstr "enregistrer" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save and quit" msgstr "enregistrer et quitter" # FIXMOI : si je mets aide Гa va demander de taper "aide"... -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "help" msgstr "help" -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "show this help" msgstr "afficher cette aide" # g10/keyedit.c:556 ??? -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 msgid "show fingerprint" msgstr "afficher l'empreinte" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 msgid "list" msgstr "lister" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 msgid "list key and user ids" msgstr "lister la clИ et les noms d'utilisateurs" -#: g10/keyedit.c:566 +#: g10/keyedit.c:568 msgid "l" msgstr "l" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "uid" msgstr "uid" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "select user id N" msgstr "sИlectionner le nom d'utilisateur N" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "key" msgstr "clИ" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "select secondary key N" msgstr "sИlectionner la clИ secondaire N" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 msgid "check" msgstr "vИrifier" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 msgid "list signatures" msgstr "lister les signatures" -#: g10/keyedit.c:570 +#: g10/keyedit.c:572 msgid "c" msgstr "c" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 msgid "sign" msgstr "signer" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 msgid "sign the key" msgstr "signer la clИ" -#: g10/keyedit.c:572 +#: g10/keyedit.c:574 msgid "s" msgstr "s" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 msgid "lsign" msgstr "lsigner" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 msgid "sign the key locally" msgstr "signer la clИ localement" -#: g10/keyedit.c:574 +#: g10/keyedit.c:576 msgid "debug" msgstr "dИboguer" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "adduid" msgstr "aj.ut" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "add a user id" msgstr "ajouter un utilisateur" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 msgid "deluid" msgstr "suppr.ut" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 msgid "delete user id" msgstr "enlever un utilisateur" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 msgid "addkey" msgstr "aj.clИ" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 msgid "add a secondary key" msgstr "ajouter une clИ secondaire" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delkey" msgstr "suppr.clИ" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delete a secondary key" msgstr "enlever une clИ secondaire" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 #, fuzzy msgid "delsig" msgstr "lsigner" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 #, fuzzy msgid "delete signatures" msgstr "lister les signatures" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 msgid "expire" msgstr "expire" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 msgid "change the expire date" msgstr "changer la date d'expiration" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle" msgstr "changer" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle between secret and public key listing" msgstr "passer de la liste des clИs secrХtes aux clИs privИes et inversement" -#: g10/keyedit.c:583 +#: g10/keyedit.c:585 msgid "t" msgstr "t" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "pref" msgstr "prИf" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "list preferences" msgstr "lister les prИfИrences" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 msgid "passwd" msgstr "mot.pas" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 msgid "change the passphrase" msgstr "changer le mot de passe" -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "trust" msgstr "confi." -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "change the ownertrust" msgstr "changer la confiance" -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 msgid "revsig" msgstr "revsig" # -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 msgid "revoke signatures" msgstr "rИvoquer les signatures" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 msgid "revkey" msgstr "revclИ" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 msgid "revoke a secondary key" msgstr "rИvoquer une clИ secondaire" -#: g10/keyedit.c:607 +#: g10/keyedit.c:591 +msgid "disable" +msgstr "" + +#: g10/keyedit.c:591 +#, fuzzy +msgid "disable a key" +msgstr "mauvaise clИ" + +#: g10/keyedit.c:592 +msgid "enable" +msgstr "" + +#: g10/keyedit.c:592 +#, fuzzy +msgid "enable a key" +msgstr "mauvaise clИ" + +#: g10/keyedit.c:611 msgid "can't do that in batchmode\n" msgstr "impossible de faire cela en mode automatique\n" #. check that they match #. FIXME: check that they both match -#: g10/keyedit.c:636 +#: g10/keyedit.c:640 msgid "Secret key is available.\n" msgstr "La clИ secrХte est disponible.\n" -#: g10/keyedit.c:665 +#: g10/keyedit.c:669 msgid "Command> " msgstr "Commande> " -#: g10/keyedit.c:692 +#: g10/keyedit.c:696 msgid "Need the secret key to do this.\n" msgstr "Il faut la clИ secrХte pour faire cela.\n" -#: g10/keyedit.c:714 +#: g10/keyedit.c:718 msgid "Save changes? " msgstr "Enregistrer les changements? " -#: g10/keyedit.c:717 +#: g10/keyedit.c:721 msgid "Quit without saving? " msgstr "Quitter sans enregistrer? " -#: g10/keyedit.c:727 +#: g10/keyedit.c:731 #, c-format msgid "update failed: %s\n" msgstr "la mise Ю jour a ИchouИ : %s\n" -#: g10/keyedit.c:734 +#: g10/keyedit.c:738 #, c-format msgid "update secret failed: %s\n" msgstr "la mise Ю jour de la clИ secrХte a ИchouИ : %s\n" -#: g10/keyedit.c:741 +#: g10/keyedit.c:745 msgid "Key not changed so no update needed.\n" msgstr "La clИ n'a pas changИ donc la mise Ю jour est inutile.\n" -#: g10/keyedit.c:744 g10/keyedit.c:803 +#: g10/keyedit.c:748 g10/keyedit.c:807 #, c-format msgid "update of trustdb failed: %s\n" msgstr "la mise Ю jour de la base de confiance a ИchouИ : %s\n" -#: g10/keyedit.c:777 +#: g10/keyedit.c:781 msgid "Really sign all user ids? " msgstr "Signer vraiment tous les utilisateurs ? " -#: g10/keyedit.c:778 +#: g10/keyedit.c:782 msgid "Hint: Select the user ids to sign\n" msgstr "Aide : SИlectionner les utilisateurs Ю signer\n" -#: g10/keyedit.c:814 g10/keyedit.c:835 +#: g10/keyedit.c:818 g10/keyedit.c:839 msgid "You must select at least one user id.\n" msgstr "Vous devez sИlectionner au moins un utilisateur.\n" -#: g10/keyedit.c:816 +#: g10/keyedit.c:820 msgid "You can't delete the last user id!\n" msgstr "Vous ne pouvez pas supprimer le dernier utilisateur !\n" -#: g10/keyedit.c:819 +#: g10/keyedit.c:823 msgid "Really remove all selected user ids? " msgstr "Enlever rИellement tous les utilisateurs sИlectionnИs ? " -#: g10/keyedit.c:820 +#: g10/keyedit.c:824 msgid "Really remove this user id? " msgstr "Enlever rИellement cet utilisateur ? " -#: g10/keyedit.c:858 g10/keyedit.c:880 +#: g10/keyedit.c:860 g10/keyedit.c:882 msgid "You must select at least one key.\n" msgstr "Vous devez sИlectionner au moins une clИ.\n" -#: g10/keyedit.c:862 +#: g10/keyedit.c:864 msgid "Do you really want to delete the selected keys? " msgstr "Voulez-vous vraiment supprimer les clИs sИlectionnИes ? " -#: g10/keyedit.c:863 +#: g10/keyedit.c:865 msgid "Do you really want to delete this key? " msgstr "Voulez-vous vraiment supprimer cette clИ ? " -#: g10/keyedit.c:884 +#: g10/keyedit.c:886 msgid "Do you really want to revoke the selected keys? " msgstr "Voulez-vous vraiment rИvoquer les clИs sИlectionnИes ? " -#: g10/keyedit.c:885 +#: g10/keyedit.c:887 msgid "Do you really want to revoke this key? " msgstr "Voulez-vous vraiment rИvoquer cette clИ ? " -#: g10/keyedit.c:939 +#: g10/keyedit.c:949 msgid "Invalid command (try \"help\")\n" msgstr "Commande invalide (essayez ╚ help ╩)\n" -#: g10/keyedit.c:1294 +#: g10/keyedit.c:1039 +#, fuzzy +msgid "This key has been disabled" +msgstr "Note : Cette clИ a expirИ !\n" + +#: g10/keyedit.c:1310 msgid "Delete this good signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1298 +#: g10/keyedit.c:1314 msgid "Delete this invalid signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1302 +#: g10/keyedit.c:1318 #, fuzzy msgid "Delete this unknown signature? (y/N/q)" msgstr "Faut-il vraiment gИnИrer les certificats de rИvocation ? (o/N)" -#: g10/keyedit.c:1308 +#: g10/keyedit.c:1324 #, fuzzy msgid "Really delete this self-signature? (y/N)" msgstr "Faut-il vraiment gИnИrer les certificats de rИvocation ? (o/N)" -#: g10/keyedit.c:1322 +#: g10/keyedit.c:1338 #, fuzzy, c-format msgid "Deleted %d signature.\n" msgstr "%d mauvaises signatures\n" -#: g10/keyedit.c:1323 +#: g10/keyedit.c:1339 #, fuzzy, c-format msgid "Deleted %d signatures.\n" msgstr "%d mauvaises signatures\n" -#: g10/keyedit.c:1326 +#: g10/keyedit.c:1342 #, fuzzy msgid "Nothing deleted.\n" msgstr "ATTENTION : rien n'a ИtИ exportИ\n" -#: g10/keyedit.c:1395 +#: g10/keyedit.c:1411 msgid "Please remove selections from the secret keys.\n" msgstr "Enlevez les sИlections des clИs secrХtes.\n" -#: g10/keyedit.c:1401 +#: g10/keyedit.c:1417 msgid "Please select at most one secondary key.\n" msgstr "Vous devez sИlectionner au plus une clИ secondaire.\n" -#: g10/keyedit.c:1405 +#: g10/keyedit.c:1421 #, fuzzy msgid "Changing expiration time for a secondary key.\n" msgstr "Changer la date d'expiration d'une clИ secondaire.\n" -#: g10/keyedit.c:1407 +#: g10/keyedit.c:1423 #, fuzzy msgid "Changing expiration time for the primary key.\n" msgstr "Changer la date d'expiration de la clИ principale.\n" -#: g10/keyedit.c:1448 +#: g10/keyedit.c:1464 msgid "You can't change the expiration date of a v3 key\n" msgstr "Vous ne pouvez pas changer la date d'expiration d'une clИ v3\n" -#: g10/keyedit.c:1464 +#: g10/keyedit.c:1480 msgid "No corresponding signature in secret ring\n" msgstr "Pas de signature correspondante dans le porte-clИs secret\n" -#: g10/keyedit.c:1524 +#: g10/keyedit.c:1540 #, c-format msgid "No user id with index %d\n" msgstr "Pas d'utilisateur avec l'index %d\n" -#: g10/keyedit.c:1570 +#: g10/keyedit.c:1586 #, c-format msgid "No secondary key with index %d\n" msgstr "Pas de clИ secondaire avec l'index %d\n" -#: g10/keyedit.c:1668 +#: g10/keyedit.c:1684 msgid "user ID: \"" msgstr "nom d'utilisateur : ╚ " -#: g10/keyedit.c:1671 +#: g10/keyedit.c:1687 #, c-format msgid "" "\"\n" "signed with your key %08lX at %s\n" msgstr "" " ╩\n" "signИ avec votre clИ %08lX Ю %s\n" -#: g10/keyedit.c:1675 +#: g10/keyedit.c:1691 msgid "Create a revocation certificate for this signature? (y/N)" msgstr "GИnИrer un certificat de rИvocation pour cette signature ? (o/N)" -#: g10/keyedit.c:1755 +#: g10/keyedit.c:1771 msgid "Really create the revocation certificates? (y/N)" msgstr "Faut-il vraiment gИnИrer les certificats de rИvocation ? (o/N)" -#: g10/keyedit.c:1778 +#: g10/keyedit.c:1794 msgid "no secret key\n" msgstr "pas de clИ secrХte\n" #: g10/mainproc.c:184 #, c-format msgid "public key is %08lX\n" msgstr "la clИ publique est %08lX\n" -#: g10/mainproc.c:212 +#: g10/mainproc.c:213 msgid "public key encrypted data: good DEK\n" msgstr "donnИes chiffrИes avec la clИ publique : bonne clИ de chiffrement\n" #. fixme: defer this message until we have parsed all packets of #. * this type - do this by building a list of keys with their stati #. * and store it with the context. do_proc_packets can then use #. * this list to display some information -#: g10/mainproc.c:219 +#: g10/mainproc.c:220 #, c-format msgid "public key decryption failed: %s\n" msgstr "le dИchiffrement de la clИ publique a ИchouИ : %s\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:248 msgid "decryption okay\n" msgstr "le dИchiffrement a rИussi\n" -#: g10/mainproc.c:252 +#: g10/mainproc.c:253 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "ATTENTION: le message chiffrИ a ИtИ manipulИ !\n" -#: g10/mainproc.c:257 +#: g10/mainproc.c:258 #, c-format msgid "decryption failed: %s\n" msgstr "le dИchiffrement a ИchouИ : %s\n" -#: g10/mainproc.c:275 +#: g10/mainproc.c:276 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTE : l'expИditeur a demandИ ╚ pour vos yeux seulement ╩\n" -#: g10/mainproc.c:277 +#: g10/mainproc.c:278 #, c-format msgid "original file name='%.*s'\n" msgstr "nom de fichier original : '%.*s'\n" -#: g10/mainproc.c:505 g10/mainproc.c:514 +#: g10/mainproc.c:506 g10/mainproc.c:515 #, fuzzy msgid "WARNING: invalid notation data found\n" msgstr "aucune donnИe OpenPGP valide n'a ИtИ trouvИe.\n" -#: g10/mainproc.c:517 +#: g10/mainproc.c:518 msgid "Notation: " msgstr "" -#: g10/mainproc.c:524 +#: g10/mainproc.c:525 msgid "Policy: " msgstr "" -#: g10/mainproc.c:929 +#: g10/mainproc.c:930 msgid "signature verification suppressed\n" msgstr "vИrification de signature supprimИe\n" -#: g10/mainproc.c:935 +#: g10/mainproc.c:936 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Signature faite %.*s avec une clИ %s ID %08lX\n" #. just in case that we have no userid -#: g10/mainproc.c:961 g10/mainproc.c:972 +#: g10/mainproc.c:962 g10/mainproc.c:973 msgid "BAD signature from \"" msgstr "MAUVAISE signature de \"" -#: g10/mainproc.c:962 g10/mainproc.c:973 +#: g10/mainproc.c:963 g10/mainproc.c:974 msgid "Good signature from \"" msgstr "Bonne signature de \"" -#: g10/mainproc.c:964 +#: g10/mainproc.c:965 msgid " aka \"" msgstr " alias \"" -#: g10/mainproc.c:1015 +#: g10/mainproc.c:1016 #, c-format msgid "Can't check signature: %s\n" msgstr "Ne peut vИrifier la signature : %s\n" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1110 msgid "old style (PGP 2.x) signature\n" msgstr "signature d'un ancien style (PGP 2.x)\n" -#: g10/mainproc.c:1114 +#: g10/mainproc.c:1115 msgid "invalid root packet detected in proc_tree()\n" msgstr "paquet racine invalide dИtectИ dans proc_tree()\n" #: g10/misc.c:93 #, c-format msgid "can't disable core dumps: %s\n" msgstr "ne peut empЙcher la gИnИration de fichiers core : %s\n" #: g10/misc.c:96 msgid "WARNING: program may create a core file!\n" msgstr "ATTENTION : Le programme peut crИer un fichier ╚ core ╩ !\n" #: g10/misc.c:203 msgid "Experimental algorithms should not be used!\n" msgstr "Les algorithmes expИrimentaux ne devraient pas Йtre utilisИs !\n" #: g10/misc.c:217 msgid "" "RSA keys are deprecated; please consider creating a new key and use this key " "in the future\n" msgstr "" "Les clИs RSA sont dИconseillИes : considИrez crИer une nouvelle clИ\n" "et l'utiliser dans l'avenir\n" #: g10/misc.c:239 msgid "this cipher algorithm is depreciated; please use a more standard one!\n" msgstr "" "Cet algorithme de chiffrement est dИconseillИ ; utilisez-en un\n" "plus standard !\n" #: g10/parse-packet.c:112 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "ne peut gИrer l'algorithme Ю clИ publique %d\n" #: g10/parse-packet.c:931 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "un sous-paquet de type %d possХde un bit critique\n" -#: g10/passphrase.c:157 +#: g10/passphrase.c:159 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" "user: \"" msgstr "" "\n" "Vous avez besoin d'un mot de passe pour dИverrouiller la clИ secrХte pour\n" "l'utilisateur: \"" -#: g10/passphrase.c:166 +#: g10/passphrase.c:168 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "clИ de %u bits %s, ID %08lX, crИИe le %s" -#: g10/passphrase.c:171 +#: g10/passphrase.c:173 #, c-format msgid " (main key ID %08lX)" msgstr " (ID clИ principale %08lX)" -#: g10/passphrase.c:192 +#: g10/passphrase.c:194 msgid "Enter passphrase: " msgstr "Entrez le mot de passe : " -#: g10/passphrase.c:196 +#: g10/passphrase.c:198 msgid "Repeat passphrase: " msgstr "RИpИtez le mot de passe : " #: g10/plaintext.c:63 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "donnИes non enregistrИes ; utilisez l'option \"--output\" pour\n" "les enregistrer\n" #: g10/plaintext.c:266 msgid "Please enter name of data file: " msgstr "Entrez le nom d'un fichier de donnИes : " #: g10/plaintext.c:287 msgid "reading stdin ...\n" msgstr "lecture de l'entrИe standard...\n" #: g10/plaintext.c:360 #, c-format msgid "can't open signed data `%s'\n" msgstr "ne peut ouvir les donnИes signИes `%s'\n" #: g10/pubkey-enc.c:79 #, c-format msgid "anonymous receiver; trying secret key %08lX ...\n" msgstr "destinataire anonyme ; essai de la clИ secrХte %08lX ...\n" #: g10/pubkey-enc.c:85 msgid "okay, we are the anonymous recipient.\n" msgstr "d'accord, nous sommes le rИcipient anonyme.\n" #: g10/pubkey-enc.c:137 msgid "old encoding of the DEK is not supported\n" msgstr "l'ancien codage de la clИ de chiffrement (DEK) n'est pas supportИ\n" #: g10/pubkey-enc.c:191 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "" "NOTE : l'algorithme de chiffrement %d n'a pas ИtИ trouvИ dans les " "prИfИrences\n" #: g10/seckey-cert.c:55 #, c-format msgid "protection algorithm %d is not supported\n" msgstr "l'algorithme de protection %d n'est pas supportИ\n" #: g10/seckey-cert.c:171 msgid "Invalid passphrase; please try again ...\n" msgstr "Mot de passe invalide ; rИessayez...\n" #: g10/seckey-cert.c:227 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "ATTENTION : ClИ faible dИtectИe - changez encore le mot de passe.\n" -#: g10/sig-check.c:187 +#: g10/sig-check.c:199 msgid "assuming bad MDC due to an unknown critical bit\n" msgstr "le sceau (MDC) est supposИ Йtre faux car un bit critique est inconnu\n" -#: g10/sig-check.c:283 +#: g10/sig-check.c:295 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "Ceci est une clИ ElGamal gИnИrИe par PGP qui n'est PAS sШre pour les\n" "signatures !\n" -#: g10/sig-check.c:291 +#: g10/sig-check.c:303 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "la clИ publique est plus rИcente de %lu seconde que la signature\n" -#: g10/sig-check.c:292 +#: g10/sig-check.c:304 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "la clИ publique est plus rИcente de %lu secondes que la signature\n" -#: g10/sig-check.c:308 +#: g10/sig-check.c:320 #, c-format msgid "NOTE: signature key expired %s\n" msgstr "NOTE : la clИ de signature a expirИ le %s\n" -#: g10/sig-check.c:365 +#: g10/sig-check.c:377 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" "la signature est supposИe Йtre fausse car un bit critique est\n" "inconnu\n" #: g10/sign.c:132 #, c-format msgid "%s signature from: %s\n" msgstr "Signature %s de : %s\n" #: g10/sign.c:263 g10/sign.c:554 #, c-format msgid "can't create %s: %s\n" msgstr "ne peut crИer %s : %s\n" #: g10/sign.c:361 msgid "signing:" msgstr "signature :" #: g10/sign.c:401 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "ATTENTION : `%s' est un fichier vide\n" #: g10/textfilter.c:128 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "ne peut pas traiter les ligne plus longues que %d caractХres\n" #: g10/textfilter.c:197 #, c-format msgid "input line longer than %d characters\n" msgstr "la ligne d'entrИe est plus longue que %d caractХres\n" -#: g10/tdbio.c:116 g10/tdbio.c:1505 +#: g10/tdbio.c:116 g10/tdbio.c:1634 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "enregistrement de base de confiance %lu : lseek a ИchouИ : %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1512 +#: g10/tdbio.c:122 g10/tdbio.c:1641 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" "enregistrement de la base de confiance %lu : l'Иcriture a ИchouИ (n=%d) : " "%s\n" #: g10/tdbio.c:232 msgid "trustdb transaction too large\n" msgstr "transaction de base de confiance trop volumineuse\n" #: g10/tdbio.c:424 #, c-format msgid "%s: can't access: %s\n" msgstr "%s : ne peut accИder : %s\n" #: g10/ringedit.c:296 g10/tdbio.c:444 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s : ne peut crИer le rИpertoire : %s\n" #: g10/ringedit.c:302 g10/tdbio.c:447 #, c-format msgid "%s: directory created\n" msgstr "%s : rИpertoire crИИ\n" #: g10/tdbio.c:451 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s : le rИpertoire n'existe pas !\n" -#: g10/openfile.c:144 g10/openfile.c:215 g10/ringedit.c:1344 g10/tdbio.c:457 +#: g10/openfile.c:182 g10/openfile.c:253 g10/ringedit.c:1344 g10/tdbio.c:457 #, c-format msgid "%s: can't create: %s\n" msgstr "%s : ne peut crИer : %s\n" #: g10/tdbio.c:472 g10/tdbio.c:521 #, c-format msgid "%s: can't create lock\n" msgstr "%s : ne peut crИer de verrouillage\n" #: g10/tdbio.c:486 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s : n'a pas pu crИer un enregistrement de version : %s" #: g10/tdbio.c:490 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s : base de confiance invalide crИИe\n" #: g10/tdbio.c:493 #, c-format msgid "%s: trustdb created\n" msgstr "%s : base de confiance crИИe\n" #: g10/tdbio.c:530 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s : base de confiance invalide\n" #: g10/tdbio.c:563 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s : la crИation de la table de hachage a ИchouИ : %s\n" #: g10/tdbio.c:571 #, c-format msgid "%s: error updating version record: %s\n" msgstr "" "%s : erreur pendant la mise Ю jour de l'enregistrement de version : %s\n" #: g10/tdbio.c:587 g10/tdbio.c:626 g10/tdbio.c:648 g10/tdbio.c:678 -#: g10/tdbio.c:703 g10/tdbio.c:1438 g10/tdbio.c:1465 +#: g10/tdbio.c:703 g10/tdbio.c:1567 g10/tdbio.c:1594 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s : erreur pendant la lecture de l'enregistrement de version : %s\n" #: g10/tdbio.c:600 g10/tdbio.c:659 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s : erreur pendant l'Иcriture de l'enregistrement de version : %s\n" -#: g10/tdbio.c:1132 +#: g10/tdbio.c:1246 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "base de confiance : ╚ lseek() ╩ a ИchouИ : %s\n" -#: g10/tdbio.c:1140 +#: g10/tdbio.c:1254 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "base de confiance : la lecture a ИchouИ (n=%d) : %s\n" -#: g10/tdbio.c:1161 +#: g10/tdbio.c:1275 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s : ce n'est pas un fichier de base de confiance\n" -#: g10/tdbio.c:1177 +#: g10/tdbio.c:1291 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s : enregistrement de version avec un numИro %lu\n" -#: g10/tdbio.c:1182 +#: g10/tdbio.c:1296 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s : version %d du fichier invalide\n" -#: g10/tdbio.c:1471 +#: g10/tdbio.c:1600 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s : erreur pendant la lecture de l'enregistrement libre : %s\n" -#: g10/tdbio.c:1479 +#: g10/tdbio.c:1608 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "" "%s : erreur pendant l'Иcriture de l'enregistrement de\n" "rИpertoire : %s\n" -#: g10/tdbio.c:1489 +#: g10/tdbio.c:1618 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s : n'a pu mettre un enregistrement Ю zИro : %s\n" -#: g10/tdbio.c:1519 +#: g10/tdbio.c:1648 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s : n'a pas pu ajouter un enregistrement : %s\n" -#: g10/tdbio.c:1630 +#: g10/tdbio.c:1759 #, fuzzy msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "" "La base de confiance est corrompue ; exИcutez ╚ gpgm --fix-trustdb ╩.\n" -#: g10/trustdb.c:163 +#: g10/trustdb.c:160 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "" "enregistrement de confiance %lu, type de requЙte %d : la lecture a ИchouИ : " "%s\n" -#: g10/trustdb.c:178 +#: g10/trustdb.c:175 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "enregistrement de confiance %lu, type %d : l'Иcriture a ИchouИ : %s\n" -#: g10/trustdb.c:192 +#: g10/trustdb.c:189 #, c-format msgid "trust record %lu: delete failed: %s\n" msgstr "enregistrement de confiance %lu : la suppression a ИchouИ : %s\n" -#: g10/trustdb.c:206 +#: g10/trustdb.c:203 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "base de confiance : la synchronisation a ИchouИ : %s\n" -#: g10/trustdb.c:386 +#: g10/trustdb.c:347 #, c-format msgid "error reading dir record for LID %lu: %s\n" msgstr "" "erreur pendant la lecture de l'enregistrement de rИpertoire pour\n" "le LID %lu : %s\n" -#: g10/trustdb.c:393 +#: g10/trustdb.c:354 #, c-format msgid "lid %lu: expected dir record, got type %d\n" msgstr "lid %lu : enregistrement de rИpertoire attendu, a reГu le type %d\n" -#: g10/trustdb.c:398 +#: g10/trustdb.c:359 #, c-format msgid "no primary key for LID %lu\n" msgstr "pas de clИ principale pour le LID %lu\n" -#: g10/trustdb.c:403 +#: g10/trustdb.c:364 #, c-format msgid "error reading primary key for LID %lu: %s\n" msgstr "erreur pendant la lecture de la clИ principale pour le LID %lu : %s\n" -#: g10/trustdb.c:442 +#: g10/trustdb.c:403 #, c-format msgid "get_dir_record: search_record failed: %s\n" msgstr "get_dir_record : search_record a ИchouИ : %s\n" -#: g10/trustdb.c:510 +#: g10/trustdb.c:458 #, c-format msgid "NOTE: secret key %08lX is NOT protected.\n" msgstr "NOTE : la clИ secrХte %08lX n'est PAS protИgИe.\n" -#: g10/trustdb.c:518 +#: g10/trustdb.c:466 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "clИ %08lX : clИ secrХte sans clИ publique - non prise en compte\n" -#: g10/trustdb.c:525 +#: g10/trustdb.c:473 #, c-format msgid "key %08lX: secret and public key don't match\n" msgstr "clИ %08lX : les clИs secrХte et publique ne correspondent pas\n" -#: g10/trustdb.c:535 +#: g10/trustdb.c:483 #, c-format msgid "key %08lX: can't put it into the trustdb\n" msgstr "clИ %08lX : ne peut Йtre mise dans la base de confiance\n" -#: g10/trustdb.c:541 +#: g10/trustdb.c:489 #, c-format msgid "key %08lX: query record failed\n" msgstr "clИ %08lX : l'enregistrement de requЙte a ИchouИ\n" -#: g10/trustdb.c:550 +#: g10/trustdb.c:498 #, c-format msgid "key %08lX: already in trusted key table\n" msgstr "clИ %08lX : dИjЮ dans la table des clИs certifiИes\n" -#: g10/trustdb.c:553 +#: g10/trustdb.c:501 #, c-format msgid "key %08lX: accepted as trusted key.\n" msgstr "clИ %08lX : acceptИe comme clИ certifiИe.\n" -#: g10/trustdb.c:561 +#: g10/trustdb.c:509 #, c-format msgid "enumerate secret keys failed: %s\n" msgstr "l'ИnumИration des clИs secrХtes a ИchouИ : %s\n" -#: g10/trustdb.c:851 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" -msgstr "" -"NOTE : l'enregistrement de signature %lu[%d] est dans la liste d'aide\n" -"de %lu mais marquИ comme vИrifiИ\n" - -#: g10/trustdb.c:855 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" -msgstr "" -"NOTE : l'enregistrement de signature %lu[%d] est dans la liste d'aide\n" -"de %lu mais n'est pas marquИ\n" - -#. we need the dir record -#: g10/trustdb.c:862 -#, c-format -msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" -msgstr "" -"l'enregistrement de signature %lu[%d] dans la liste d'aide de %lu\n" -"ne pointe pas vers un enregistrement de rИpertoire\n" - -#: g10/trustdb.c:868 -#, c-format -msgid "lid %lu: no primary key\n" -msgstr "lid %lu : pas de clИ primaire\n" - -#: g10/trustdb.c:901 -#, c-format -msgid "lid %lu: user id not found in keyblock\n" -msgstr "lid %lu : utilisateur non trouvИ dans le bloc de clИs\n" - -#: g10/trustdb.c:905 -#, c-format -msgid "lid %lu: user id without signature\n" -msgstr "lid %lu : utilisateur sans signature\n" - -#: g10/trustdb.c:912 -#, c-format -msgid "lid %lu: self-signature in hintlist\n" -msgstr "lid %lu : auto-signature dans la liste d'aide\n" - -#: g10/trustdb.c:923 g10/trustdb.c:1675 g10/trustdb.c:1766 -msgid "Valid certificate revocation" -msgstr "Certificat de rИvocation valide" - -#: g10/trustdb.c:924 g10/trustdb.c:1676 g10/trustdb.c:1767 -msgid "Good certificate" -msgstr "Bon certificat" - -#: g10/trustdb.c:933 -msgid "very strange: no public key\n" -msgstr "trХs Иtrange : pas de clИ publique\n" - -#: g10/trustdb.c:982 -#, c-format -msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" -msgstr "" -"la liste d'aide de %lu[%d] de %lu ne pointe pas vers un enregistrement\n" -"de rИpertoire\n" - -#: g10/trustdb.c:988 -#, c-format -msgid "lid %lu does not have a key\n" -msgstr "la lid %lu n'a pas de clИ\n" - -#: g10/trustdb.c:998 -#, c-format -msgid "lid %lu: can't get keyblock: %s\n" -msgstr "lid %lu: ne peut obtenir le bloc de clИs: %s\n" - -#: g10/trustdb.c:1055 g10/trustdb.c:2030 -#, c-format -msgid "tdbio_search_dir failed: %s\n" +#: g10/trustdb.c:800 +#, fuzzy, c-format +msgid "tdbio_search_sdir failed: %s\n" msgstr "tdbio_search_dir a ИchouИ : %s\n" -#: g10/trustdb.c:1210 +#: g10/trustdb.c:875 #, c-format msgid "key %08lX.%lu: Good subkey binding\n" msgstr "clИ %08lX.%lu : bonne liaison avec la sous-clИ\n" -#: g10/trustdb.c:1216 g10/trustdb.c:1259 +#: g10/trustdb.c:881 g10/trustdb.c:916 #, c-format msgid "key %08lX.%lu: Invalid subkey binding: %s\n" msgstr "clИ %08lX.%lu : liaison avec la sous-clИ invalide : %s\n" -#: g10/trustdb.c:1232 +#: g10/trustdb.c:893 #, c-format msgid "key %08lX.%lu: Valid key revocation\n" msgstr "clИ %08lX.%lu : rИvocation de clИ valide\n" -#: g10/trustdb.c:1238 +#: g10/trustdb.c:899 #, c-format msgid "key %08lX.%lu: Invalid key revocation: %s\n" msgstr "clИ %08lX.%lu : rИvocation de sous-clИ invalide : %s\n" -#: g10/trustdb.c:1253 +#: g10/trustdb.c:910 #, c-format msgid "key %08lX.%lu: Valid subkey revocation\n" msgstr "clИ %08lX.%lu : rИvocation de sous-clИ valide\n" -#: g10/trustdb.c:1360 +#: g10/trustdb.c:1021 msgid "Good self-signature" msgstr "Bonne auto-signature" -#: g10/trustdb.c:1371 +#: g10/trustdb.c:1031 msgid "Invalid self-signature" msgstr "Auto-signature invalide" -#: g10/trustdb.c:1403 -msgid "Valid user ID revocation skipped due to a newer self signature\n" +#: g10/trustdb.c:1058 +#, fuzzy +msgid "Valid user ID revocation skipped due to a newer self signature" msgstr "" "La rИvocation valide de nom d'utilisateur a ИtИ ignorИe car l'auto-\n" "signature est plus rИcente\n" -#: g10/trustdb.c:1410 -msgid "Valid user ID revocation\n" +#: g10/trustdb.c:1064 +#, fuzzy +msgid "Valid user ID revocation" msgstr "RИvocation de nom d'utilisateur valide\n" -#: g10/trustdb.c:1417 +#: g10/trustdb.c:1069 msgid "Invalid user ID revocation" msgstr "RИvocation de nom d'utilisateur invalide" -#: g10/trustdb.c:1512 -msgid "Too many preferences" -msgstr "Trop de prИfИrences" - -#: g10/trustdb.c:1526 -msgid "Too many preference items" -msgstr "Trop d'items de prИfИrence" - -#: g10/trustdb.c:1549 g10/trustdb.c:3075 g10/trustdb.c:3105 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "" -"ATTENTION : les enregistrements de prИfИrences longs ne sont pas encore\n" -"supportИs\n" - -#: g10/trustdb.c:1654 -msgid "duplicated certificate - deleted" -msgstr "certificat dupliquИ - supprimИ" +#: g10/trustdb.c:1110 +msgid "Valid certificate revocation" +msgstr "Certificat de rИvocation valide" -#: g10/trustdb.c:1692 -msgid "public key not anymore available" -msgstr "la clИ secrХte n'est plus disponible" +#: g10/trustdb.c:1111 +msgid "Good certificate" +msgstr "Bon certificat" -#: g10/trustdb.c:1702 g10/trustdb.c:1791 +#: g10/trustdb.c:1132 msgid "Invalid certificate revocation" msgstr "RИvocation de certificat invalide" -#: g10/trustdb.c:1703 g10/trustdb.c:1792 +#: g10/trustdb.c:1133 msgid "Invalid certificate" msgstr "Certificat invalide" -#: g10/trustdb.c:1720 -#, c-format -msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" -msgstr "" -"uid %08lX.%lu/%02X%02X : possХde une ombre %lu mais n'est pas encore\n" -"marquИ.\n" - -#: g10/trustdb.c:1734 +#: g10/trustdb.c:1150 g10/trustdb.c:1154 #, c-format msgid "sig record %lu[%d] points to wrong record.\n" msgstr "" "l'enregistrement de signature %lu[%d] pointe vers le mauvais\n" "enregistrement de rИpertoire\n" -#. that should never happen -#: g10/trustdb.c:2007 -#, c-format -msgid "insert_trust_record: keyblock not found: %s\n" -msgstr "insert_trust_record : bloc de clИs non trouvИ : %s\n" - -#: g10/trustdb.c:2408 -msgid "Ooops, no keys\n" -msgstr "Ooops, pas de clИ\n" +#: g10/trustdb.c:1206 +msgid "duplicated certificate - deleted" +msgstr "certificat dupliquИ - supprimИ" -#: g10/trustdb.c:2412 -msgid "Ooops, no user ids\n" -msgstr "Ooops, pas de nom d'utilisateur\n" +#: g10/trustdb.c:1512 +#, c-format +msgid "tdbio_search_dir failed: %s\n" +msgstr "tdbio_search_dir a ИchouИ : %s\n" -#: g10/trustdb.c:2529 +#: g10/trustdb.c:1634 #, c-format msgid "lid ?: insert failed: %s\n" msgstr "lid ? : l'insertion a ИchouИ : %s\n" -#: g10/trustdb.c:2534 +#: g10/trustdb.c:1639 #, c-format msgid "lid %lu: insert failed: %s\n" msgstr "lid %lu : l'insertion a ИchouИ : %s\n" -#: g10/trustdb.c:2540 +#: g10/trustdb.c:1645 #, c-format msgid "lid %lu: inserted\n" msgstr "lid %lu : insИrИ\n" -#: g10/trustdb.c:2545 g10/trustdb.c:2654 -#, c-format -msgid "lid %lu: update failed: %s\n" -msgstr "lid %lu : la mise Ю jour a ИchouИ: %s\n" - -#: g10/trustdb.c:2551 g10/trustdb.c:2660 -#, c-format -msgid "lid %lu: updated\n" -msgstr "lid %lu : mis Ю jour\n" - -#: g10/trustdb.c:2556 g10/trustdb.c:2664 -#, c-format -msgid "lid %lu: okay\n" -msgstr "lid %lu : OK\n" +#: g10/trustdb.c:1650 +#, fuzzy, c-format +msgid "error reading dir record: %s\n" +msgstr "%s : erreur pendant la lecture de l'enregistrement libre : %s\n" -#: g10/trustdb.c:2562 g10/trustdb.c:2671 +#: g10/trustdb.c:1658 g10/trustdb.c:1712 #, c-format msgid "%lu keys processed\n" msgstr "%lu clИs traitИes\n" -#: g10/trustdb.c:2564 g10/trustdb.c:2675 +#: g10/trustdb.c:1660 g10/trustdb.c:1716 #, c-format msgid "\t%lu keys with errors\n" msgstr "\t%lu clИs avec erreurs\n" -#: g10/trustdb.c:2566 g10/trustdb.c:2677 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu clИs mises Ю jour\n" - -#: g10/trustdb.c:2568 +#: g10/trustdb.c:1662 #, c-format msgid "\t%lu keys inserted\n" msgstr "\t%lu clИs insИrИes\n" -#: g10/trustdb.c:2571 +#: g10/trustdb.c:1665 #, c-format msgid "enumerate keyblocks failed: %s\n" msgstr "l'ИnumИration des blocs de clИs a ИchouИ : %s\n" -#: g10/trustdb.c:2598 -#, c-format -msgid "%s: keyblock read problem: %s\n" -msgstr "%s : problХme de lecture du bloc de clИs : %s\n" - -#: g10/trustdb.c:2612 -#, c-format -msgid "%s: update failed: %s\n" -msgstr "%s : la mise Ю jour a ИchouИ : %s\n" - -#: g10/trustdb.c:2615 -#, c-format -msgid "%s: updated\n" -msgstr "%s : mis Ю jour\n" - -#: g10/trustdb.c:2617 -#, c-format -msgid "%s: okay\n" -msgstr "%s : OK\n" - -#: g10/trustdb.c:2632 +#: g10/trustdb.c:1703 #, c-format msgid "lid %lu: dir record w/o key - skipped\n" msgstr "lid %lu : enregistrement de rИpertoire sans clИ - ignorИ\n" -#: g10/trustdb.c:2645 -#, c-format -msgid "lid %lu: keyblock not found: %s\n" -msgstr "lid %lu : le bloc de clИs n'a pas ИtИ trouvИ : %s\n" - -#: g10/trustdb.c:2673 +#: g10/trustdb.c:1714 #, c-format msgid "\t%lu keys skipped\n" msgstr "\t%lu clИs ignorИes\n" -#: g10/trustdb.c:2743 +#: g10/trustdb.c:1718 +#, c-format +msgid "\t%lu keys updated\n" +msgstr "\t%lu clИs mises Ю jour\n" + +#: g10/trustdb.c:2055 +msgid "Ooops, no keys\n" +msgstr "Ooops, pas de clИ\n" + +#: g10/trustdb.c:2059 +msgid "Ooops, no user ids\n" +msgstr "Ooops, pas de nom d'utilisateur\n" + +#: g10/trustdb.c:2216 #, c-format msgid "check_trust: search dir record failed: %s\n" msgstr "" "check_trust : la recherche d'enregistrement de rИpertoire a ИchouИ : %s\n" -#: g10/trustdb.c:2750 +#: g10/trustdb.c:2223 #, c-format msgid "key %08lX: insert trust record failed: %s\n" msgstr "clИ %08lX : l'insertion d'enregistrement de confiance a ИchouИ : %s\n" -#: g10/trustdb.c:2754 +#: g10/trustdb.c:2227 #, c-format msgid "key %08lX.%lu: inserted into trustdb\n" msgstr "clИ %08lX.%lu : insИrИe dans la base de confiance\n" -#: g10/trustdb.c:2762 +#: g10/trustdb.c:2235 #, c-format msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" msgstr "" "clИ %08lX.%lu : crИИe dans le futur (voyage temporel ou\n" "problХme d'horloge)\n" -#: g10/trustdb.c:2769 +#: g10/trustdb.c:2244 #, c-format msgid "key %08lX.%lu: expired at %s\n" msgstr "clИ %08lX.%lu : a expirИ le %s\n" -#: g10/trustdb.c:2777 +#: g10/trustdb.c:2252 #, c-format msgid "key %08lX.%lu: trust check failed: %s\n" msgstr "clИ %08lX.%lu : la vИrification de confiance a ИchouИ: %s\n" -#: g10/trustdb.c:2881 +#: g10/trustdb.c:2358 #, c-format msgid "user '%s' not found: %s\n" msgstr "l'utilisateur '%s' n'a pas ИtИ trouvИ : %s\n" -#: g10/trustdb.c:2883 +#: g10/trustdb.c:2360 #, c-format msgid "problem finding '%s' in trustdb: %s\n" msgstr "problХme de recherche de '%s' dans la base de confiance : %s\n" -#: g10/trustdb.c:2886 +#: g10/trustdb.c:2363 #, c-format msgid "user '%s' not in trustdb - inserting\n" msgstr "l'utilisateur '%s' n'est pas dans la base de confiance - insertion\n" -#: g10/trustdb.c:2889 +#: g10/trustdb.c:2366 #, c-format msgid "failed to put '%s' into trustdb: %s\n" msgstr "n'a pas pu insИrer '%s' dans la base de confiance : %s\n" +#: g10/trustdb.c:2552 g10/trustdb.c:2582 +msgid "WARNING: can't yet handle long pref records\n" +msgstr "" +"ATTENTION : les enregistrements de prИfИrences longs ne sont pas encore\n" +"supportИs\n" + #: g10/ringedit.c:316 #, c-format msgid "%s: can't create keyring: %s\n" msgstr "%s : ne peut crИer le porte-clИs : %s\n" #: g10/ringedit.c:333 g10/ringedit.c:1349 #, c-format msgid "%s: keyring created\n" msgstr "%s : porte-clИs crИИ\n" #: g10/ringedit.c:1526 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "" "ATTENTION : 2 fichiers avec des informations confidentielles existent.\n" #: g10/ringedit.c:1527 #, c-format msgid "%s is the unchanged one\n" msgstr "%s est le fichier original\n" #: g10/ringedit.c:1528 #, c-format msgid "%s is the new one\n" msgstr "%s est le nouveau\n" #: g10/ringedit.c:1529 msgid "Please fix this possible security flaw\n" msgstr "RИparez ce problХme de sИcuritИ possible\n" #: g10/skclist.c:88 g10/skclist.c:125 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "la clИ n'est pas marquИe comme non-sШre ; on ne peut pas l'utiliser avec le\n" "pseudo-gИnИrateur de nombres alИatiores !\n" #: g10/skclist.c:113 #, c-format msgid "skipped `%s': %s\n" msgstr "`%s' a ИtИ ignorИ : %s\n" #: g10/skclist.c:119 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " "signatures!\n" msgstr "" "`%s' a ИtИ ignorИe : c'est une clИ ElGamal gИnИrИe par PGP qui n'est pas\n" "sШre pour les signatures !\n" #. do not overwrite #: g10/openfile.c:65 #, c-format msgid "File `%s' exists. " msgstr "Le fichier `%s' existe. " #: g10/openfile.c:67 msgid "Overwrite (y/N)? " msgstr "RИИcrire (o/N)? " #: g10/openfile.c:97 #, c-format msgid "%s: unknown suffix\n" msgstr "" -#: g10/openfile.c:122 +#: g10/openfile.c:119 +#, fuzzy +msgid "Enter new filename" +msgstr "--store [nom du fichier]" + +#: g10/openfile.c:160 msgid "writing to stdout\n" msgstr "Иcriture vers la sortie standard\n" -#: g10/openfile.c:181 +#: g10/openfile.c:219 #, c-format msgid "assuming signed data in `%s'\n" msgstr "les donnИes signИes sont supposИes Йtre dans `%s'\n" -#: g10/openfile.c:231 +#: g10/openfile.c:269 #, c-format msgid "%s: new options file created\n" msgstr "%s : nouveau fichier d'options crИИ\n" #: g10/encr-data.c:66 #, c-format msgid "%s encrypted data\n" msgstr "donnИes chiffrИes avec %s\n" #: g10/encr-data.c:68 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "chiffrИ avec l'algorithme inconnu %d\n" #: g10/encr-data.c:85 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "ATTENTION : Le message a ИtИ chiffrИ avec une clИ faible pendant le\n" "chiffrement symИtrique.\n" #: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "clИ faible gИnИrИe - nouvel essai\n" #: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "ne peut Иviter une clИ faible pour le chiffrement symИtrique :\n" "%d essais ont eu lieu !\n" #. begin of list #: g10/helptext.c:48 msgid "edit_ownertrust.value" msgstr "" "C'est Ю vous d'assigner une valeur ici ; cette valeur ne sera jamais\n" "envoyИe Ю une tierce personne. Nous en avons besoin pour crИer le rИseau de\n" "confiance (web-of-trust) ; cela n'a rien Ю voir avec le rИseau des\n" "certificats (crИИ implicitement)" #: g10/helptext.c:54 msgid "revoked_key.override" msgstr "" "Si vous voulez utiliser cette clИ rИvoquИe quand-mЙme, rИpondez ╚ oui ╩." #: g10/helptext.c:58 msgid "untrusted_key.override" msgstr "" "Si vous voulez utiliser cette clИ peu sШre quand-mЙme, rИpondez ╚ oui ╩." #: g10/helptext.c:62 msgid "pklist.user_id.enter" msgstr "Entrez l'adresse de la personne Ю qui vous voulez envoyer le message." #: g10/helptext.c:66 msgid "keygen.algo" msgstr "" "SИlectionnez l'algorithme Ю utiliser.\n" "DSA (alias DSS) est l'algorithme de signatures Иlectroniques qui ne peut\n" "Йtre utilisИ que pour les signatures. C'est l'algorithme recommandИ car\n" "la vИrification des signatures DSA est beaucoup plus rapide que celle des\n" "signatures ElGamal.\n" "ElGamal est un algorithme pouvant Ю la fois Йtre utilisИ pour les\n" "signatures et le chiffrement. OpenPGP en distingue deux sortes :\n" "l'une destinИe uniquement au chiffrement et l'autre pouvant aussi bien\n" "servir aux signatures ; elles sont en fait identiques mais certains\n" "paramХtres doivent Йtre spИcialement choisis pour que la clИ gИnХre des\n" "signatures sures : ce programme est capable de le faire mais les autres\n" "implИmentaions de OpenPGP ne sont pas obligИes d'accepter cette forme de\n" "clИ.\n" "La premiХre clИ (clИ principale) doit toujours Йtre capable de signer ;\n" "c'est pourquoi la clИ ElGamal de chiffrement seul est alors dИsactivИe." #: g10/helptext.c:82 msgid "keygen.algo.elg_se" msgstr "" "Bien que ces clИs soient dИfinies dans la RFC2440 elles ne sont pas\n" "conseillИes car tous les programmes ne les supportent pas et les signatures\n" "crИИes avec elles sont plutТt longues et trХs lentes Ю vИrifier." #: g10/helptext.c:89 msgid "keygen.size" msgstr "Entrez la taille de la clИ" #: g10/helptext.c:93 msgid "keygen.size.huge.okay" msgstr "RИpondez ╚ oui ╩ ou ╚ non ╩" #: g10/helptext.c:98 msgid "keygen.size.large.okay" msgstr "RИpondez ╚ oui ╩ ou ╚ non ╩" #: g10/helptext.c:103 msgid "keygen.valid" msgstr "Entrez la valeur demandИe" -#: g10/helptext.c:107 +#: g10/helptext.c:110 msgid "keygen.valid.okay" msgstr "RИpondez ╚ oui ╩ ou ╚ non ╩" -#: g10/helptext.c:112 +#: g10/helptext.c:115 msgid "keygen.name" msgstr "Entrez le nom du propriИtaire de la clИ" -#: g10/helptext.c:117 +#: g10/helptext.c:120 msgid "keygen.email" msgstr "Entrez une adresse e-mail optionnelle mais hautement recommandИe" -#: g10/helptext.c:121 +#: g10/helptext.c:124 msgid "keygen.comment" msgstr "Entrez un commentaire optionnel" -#: g10/helptext.c:126 +#: g10/helptext.c:129 msgid "keygen.userid.cmd" msgstr "" "N pour changer le nom.\n" "C pour changer le commentaire.\n" "E pour changer l'adresse e-mail.\n" "O pour continuer Ю gИnИrer la clИ.\n" "Q pour arrЙter de gИnИrer de clИ." -#: g10/helptext.c:135 +#: g10/helptext.c:138 msgid "keygen.sub.okay" msgstr "RИpondez ╚ oui ╩ (ou simplement ╚ o ╩) pour gИnИrer la sous-clИ" -#: g10/helptext.c:139 +#: g10/helptext.c:142 msgid "sign_uid.okay" msgstr "RИpondez ╚ oui ╩ ou ╚ non ╩" -#: g10/helptext.c:144 +#: g10/helptext.c:147 msgid "change_passwd.empty.okay" msgstr "RИpondez ╚ oui ╩ ou ╚ non ╩" -#: g10/helptext.c:149 -msgid "keyedit.cmd" -msgstr "Entrez ╚ help ╩ pour voir la liste des commandes." - -#: g10/helptext.c:153 +#: g10/helptext.c:152 msgid "keyedit.save.okay" msgstr "RИpondez ╚ oui ╩ ou ╚ non ╩" -#: g10/helptext.c:158 +#: g10/helptext.c:157 msgid "keyedit.cancel.okay" msgstr "RИpondez ╚ oui ╩ ou ╚ non ╩" -#: g10/helptext.c:162 +#: g10/helptext.c:161 msgid "keyedit.sign_all.okay" msgstr "RИpondez ╚ oui ╩ si vous voulez signer TOUS les noms d'utilisateurs" -#: g10/helptext.c:166 +#: g10/helptext.c:165 msgid "keyedit.remove.uid.okay" msgstr "" "RИpondez ╚ oui ╩ si vous voulez vraiment supprimer ce nom\n" "d'utilisateur. Tous les certificats seront alors perdus en mЙme temps !" -#: g10/helptext.c:171 +#: g10/helptext.c:170 msgid "keyedit.remove.subkey.okay" msgstr "Entrez ╚ oui ╩ s'il faut vraiment supprimer la sous-clИ" -#: g10/helptext.c:176 +#: g10/helptext.c:175 #, fuzzy msgid "keyedit.delsig.valid" msgstr "RИpondez ╚ oui ╩ si vous voulez signer TOUS les noms d'utilisateurs" -#: g10/helptext.c:181 +#: g10/helptext.c:180 #, fuzzy msgid "keyedit.delsig.unknown" msgstr "RИpondez ╚ oui ╩ si vous voulez signer TOUS les noms d'utilisateurs" -#: g10/helptext.c:187 +#: g10/helptext.c:186 #, fuzzy msgid "keyedit.delsig.invalid" msgstr "RИpondez ╚ oui ╩ si vous voulez signer TOUS les noms d'utilisateurs" -#: g10/helptext.c:191 +#: g10/helptext.c:190 msgid "keyedit.delsig.selfsig" msgstr "" -#: g10/helptext.c:200 +#: g10/helptext.c:199 msgid "passphrase.enter" msgstr "" "Entrez le mot de passe ; c'est une phrase secrХte \n" " Blurb, blurb,.... " -#: g10/helptext.c:207 +#: g10/helptext.c:206 msgid "passphrase.repeat" msgstr "" "RИpИtez le dernier mot de passe, pour Йtre sШr de ce que vous avez tapИ." -#: g10/helptext.c:211 +#: g10/helptext.c:210 msgid "detached_signature.filename" msgstr "Donnez le nom du fichier auquel la signature se rapporte" +#. openfile.c (overwrite_filep) #: g10/helptext.c:215 msgid "openfile.overwrite.okay" msgstr "Entrez ╚ oui ╩ s'il faut vraiment rИИcrire le fichier" -#: g10/helptext.c:229 +#. openfile.c (ask_outfile_name) +#: g10/helptext.c:220 +msgid "openfile.askoutname" +msgstr "" + +#: g10/helptext.c:235 msgid "No help available" msgstr "Pas d'aide disponible" -#: g10/helptext.c:241 +#: g10/helptext.c:247 #, c-format msgid "No help available for `%s'" msgstr "Pas d'aide disponible pour `%s'" +#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" +#~ msgstr "" +#~ "NOTE : l'enregistrement de signature %lu[%d] est dans la liste d'aide\n" +#~ "de %lu mais marquИ comme vИrifiИ\n" + +#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" +#~ msgstr "" +#~ "NOTE : l'enregistrement de signature %lu[%d] est dans la liste d'aide\n" +#~ "de %lu mais n'est pas marquИ\n" + +#~ msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" +#~ msgstr "" +#~ "l'enregistrement de signature %lu[%d] dans la liste d'aide de %lu\n" +#~ "ne pointe pas vers un enregistrement de rИpertoire\n" + +#~ msgid "lid %lu: no primary key\n" +#~ msgstr "lid %lu : pas de clИ primaire\n" + +#~ msgid "lid %lu: user id not found in keyblock\n" +#~ msgstr "lid %lu : utilisateur non trouvИ dans le bloc de clИs\n" + +#~ msgid "lid %lu: user id without signature\n" +#~ msgstr "lid %lu : utilisateur sans signature\n" + +#~ msgid "lid %lu: self-signature in hintlist\n" +#~ msgstr "lid %lu : auto-signature dans la liste d'aide\n" + +#~ msgid "very strange: no public key\n" +#~ msgstr "trХs Иtrange : pas de clИ publique\n" + +#~ msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" +#~ msgstr "" +#~ "la liste d'aide de %lu[%d] de %lu ne pointe pas vers un enregistrement\n" +#~ "de rИpertoire\n" + +#~ msgid "lid %lu does not have a key\n" +#~ msgstr "la lid %lu n'a pas de clИ\n" + +#~ msgid "lid %lu: can't get keyblock: %s\n" +#~ msgstr "lid %lu: ne peut obtenir le bloc de clИs: %s\n" + +#~ msgid "Too many preferences" +#~ msgstr "Trop de prИfИrences" + +#~ msgid "Too many preference items" +#~ msgstr "Trop d'items de prИfИrence" + +#~ msgid "public key not anymore available" +#~ msgstr "la clИ secrХte n'est plus disponible" + +#~ msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" +#~ msgstr "" +#~ "uid %08lX.%lu/%02X%02X : possХde une ombre %lu mais n'est pas encore\n" +#~ "marquИ.\n" + +#~ msgid "insert_trust_record: keyblock not found: %s\n" +#~ msgstr "insert_trust_record : bloc de clИs non trouvИ : %s\n" + +#~ msgid "lid %lu: update failed: %s\n" +#~ msgstr "lid %lu : la mise Ю jour a ИchouИ: %s\n" + +#~ msgid "lid %lu: updated\n" +#~ msgstr "lid %lu : mis Ю jour\n" + +#~ msgid "lid %lu: okay\n" +#~ msgstr "lid %lu : OK\n" + +#~ msgid "%s: keyblock read problem: %s\n" +#~ msgstr "%s : problХme de lecture du bloc de clИs : %s\n" + +#~ msgid "%s: update failed: %s\n" +#~ msgstr "%s : la mise Ю jour a ИchouИ : %s\n" + +#~ msgid "%s: updated\n" +#~ msgstr "%s : mis Ю jour\n" + +#~ msgid "%s: okay\n" +#~ msgstr "%s : OK\n" + +#~ msgid "lid %lu: keyblock not found: %s\n" +#~ msgstr "lid %lu : le bloc de clИs n'a pas ИtИ trouvИ : %s\n" + +#~ msgid "keyedit.cmd" +#~ msgstr "Entrez ╚ help ╩ pour voir la liste des commandes." + #~ msgid "can't lock keyring `%': %s\n" #~ msgstr "ne peut verrouiller le porte-clИs `%' : %s\n" #~ msgid "error writing keyring `%': %s\n" #~ msgstr "erreur durant la lecture du porte-clИs `%' : %s\n" diff --git a/po/it.po b/po/it.po index 965a84fbe..a6f05203f 100644 --- a/po/it.po +++ b/po/it.po @@ -1,3276 +1,3286 @@ # GnuPG italian translation # Copyright (C) 1998, 1999 Free Software Foundation, Inc. # Marco d'Itri , 1998, 1999. # msgid "" msgstr "" "Project-Id-Version: gnupg-0.9.7\n" -"POT-Creation-Date: 1999-06-26 11:22+0200\n" +"POT-Creation-Date: 1999-07-06 17:34+0200\n" "PO-Revision-Date: 1999-06-28 19:49+02:00\n" "Last-Translator: Marco d'Itri \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -#: util/secmem.c:76 +#: util/secmem.c:79 msgid "Warning: using insecure memory!\n" msgstr "Attenzione: si sta usando memoria insicura!\n" -#: util/secmem.c:249 +#: util/secmem.c:275 msgid "operation is not possible without initialized secure memory\n" msgstr "l'operazione non Х possibile senza memoria sicura inizializzata\n" -#: util/secmem.c:250 +#: util/secmem.c:276 msgid "(you may have used the wrong program for this task)\n" msgstr "(potresti avere usato il programma sbagliato per questa funzione)\n" -#: util/miscutil.c:156 util/miscutil.c:173 +#: util/miscutil.c:254 util/miscutil.c:271 msgid "yes" msgstr "sЛ" -#: util/miscutil.c:157 util/miscutil.c:175 +#: util/miscutil.c:255 util/miscutil.c:273 msgid "yY" msgstr "sS" -#: g10/keyedit.c:559 util/miscutil.c:174 +#: g10/keyedit.c:561 util/miscutil.c:272 msgid "quit" msgstr "quit" -#: util/miscutil.c:176 +#: util/miscutil.c:274 msgid "qQ" msgstr "qQ" #: util/errors.c:54 msgid "general error" msgstr "errore generale" #: util/errors.c:55 msgid "unknown packet type" msgstr "pacchetto di tipo sconosciuto" #: util/errors.c:56 msgid "unknown version" msgstr "versione sconosciuta" #: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "algoritmo della chiave pubblica sconosciuto" #: util/errors.c:58 msgid "unknown digest algorithm" msgstr "algoritmo del digest sconosciuto" #: util/errors.c:59 msgid "bad public key" msgstr "chiave pubblica errata" #: util/errors.c:60 msgid "bad secret key" msgstr "chiave segreta errata" #: util/errors.c:61 msgid "bad signature" msgstr "firma errata" #: util/errors.c:62 msgid "checksum error" msgstr "codice di controllo errato" #: util/errors.c:63 msgid "bad passphrase" msgstr "passphrase errata" #: util/errors.c:64 msgid "public key not found" msgstr "chiave pubblica non trovata" #: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "algoritmo di cifratura sconosciuto" #: util/errors.c:66 msgid "can't open the keyring" msgstr "impossibile aprire il portachiavi" #: util/errors.c:67 msgid "invalid packet" msgstr "pacchetto non valido" #: util/errors.c:68 msgid "invalid armor" msgstr "armatura non valida" #: util/errors.c:69 msgid "no such user id" msgstr "l'user ID non esiste" #: util/errors.c:70 msgid "secret key not available" msgstr "la chiave segreta non Х disponibile" #: util/errors.c:71 msgid "wrong secret key used" msgstr "Х stata usata la chiave segreta sbagliata" #: util/errors.c:72 msgid "not supported" msgstr "non gestito" #: util/errors.c:73 msgid "bad key" msgstr "chiave sbagliata" #: util/errors.c:74 msgid "file read error" msgstr "errore durante la lettura del file" #: util/errors.c:75 msgid "file write error" msgstr "errore durante la scrittura del file" #: util/errors.c:76 msgid "unknown compress algorithm" msgstr "algoritmo di compressione sconosciuto" #: util/errors.c:77 msgid "file open error" msgstr "errore durante l'apertura del file" #: util/errors.c:78 msgid "file create error" msgstr "errore durante la creazione del file" #: util/errors.c:79 msgid "invalid passphrase" msgstr "passphrase non valida" #: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "algoritmo della chiave pubblica non implementato" #: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "algoritmo di cifratura non implementato" #: util/errors.c:82 msgid "unknown signature class" msgstr "classe della firma sconosciuta." #: util/errors.c:83 msgid "trust database error" msgstr "errore nel database della fiducia" #: util/errors.c:84 msgid "bad MPI" msgstr "MPI danneggiato" #: util/errors.c:85 msgid "resource limit" msgstr "limite della risorsa" #: util/errors.c:86 msgid "invalid keyring" msgstr "portachiavi non valido" #: util/errors.c:87 msgid "bad certificate" msgstr "certificato danneggiato" #: util/errors.c:88 msgid "malformed user id" msgstr "user id malformato" #: util/errors.c:89 msgid "file close error" msgstr "errore durante la chiusura del file" #: util/errors.c:90 msgid "file rename error" msgstr "errore durante la rinominazione del file" #: util/errors.c:91 msgid "file delete error" msgstr "errore durante la cancellazione del file" #: util/errors.c:92 msgid "unexpected data" msgstr "dati inattesi" #: util/errors.c:93 msgid "timestamp conflict" msgstr "date in conflitto" #: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "algoritmo della chiave pubblica non utilizzabile" #: util/errors.c:95 msgid "file exists" msgstr "il file esiste" #: util/errors.c:96 msgid "weak key" msgstr "chiave debole" #: util/errors.c:97 msgid "invalid argument" msgstr "armatura non valida" #: util/errors.c:98 msgid "bad URI" msgstr "URI non valida" #: util/errors.c:99 msgid "unsupported URI" msgstr "URI non gestito" #: util/errors.c:100 msgid "network error" msgstr "errore di rete" #: util/errors.c:102 msgid "not encrypted" msgstr "non cifrato" #: util/logger.c:218 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... questo Х un bug (%s:%d:%s)\n" #: util/logger.c:224 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "Hai trovato un bug... (%s:%d)\n" -#: cipher/random.c:412 +#: cipher/random.c:452 msgid "WARNING: using insecure random number generator!!\n" msgstr "" "ATTENZIONE: si sta usando un generatore di numeri casuali non sicuro!!\n" -#: cipher/random.c:413 +#: cipher/random.c:453 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 "" "Il generatore di numeri casuali Х solo un ripiego per fare\n" "compilare il programma - non Х assolutamente un RNG forte!\n" #: cipher/rndlinux.c:135 #, 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" "Non ci sono abbastanza byte casuali disponibili. Per favore fai qualche\n" "altra cosa per dare all'OS la possibilitЮ di raccogliere altra entropia!\n" "(Servono ancora %d altri byte)\n" -#: g10/g10.c:174 +#: g10/g10.c:176 msgid "" "@Commands:\n" " " msgstr "" "@Comandi:\n" " " -#: g10/g10.c:176 +#: g10/g10.c:178 msgid "|[file]|make a signature" msgstr "|[file]|fai una firma" -#: g10/g10.c:177 +#: g10/g10.c:179 msgid "|[file]|make a clear text signature" msgstr "|[file]|fai una firma mantenendo il testo in chiaro" -#: g10/g10.c:178 +#: g10/g10.c:180 msgid "make a detached signature" msgstr "fai una firma separata" -#: g10/g10.c:179 +#: g10/g10.c:181 msgid "encrypt data" msgstr "cifra dati" -#: g10/g10.c:180 +#: g10/g10.c:182 msgid "encryption only with symmetric cipher" msgstr "cifra solo con un cifrario simmetrico" -#: g10/g10.c:181 +#: g10/g10.c:183 msgid "store only" msgstr "immagazzina soltanto" -#: g10/g10.c:182 +#: g10/g10.c:184 msgid "decrypt data (default)" msgstr "decifra dati (predefinito)" -#: g10/g10.c:183 +#: g10/g10.c:185 msgid "verify a signature" msgstr "verifica una firma" -#: g10/g10.c:184 +#: g10/g10.c:186 msgid "list keys" msgstr "elenca le chiavi" -#: g10/g10.c:186 +#: g10/g10.c:188 msgid "list keys and signatures" msgstr "elenca le chiavi e le firme" -#: g10/g10.c:187 +#: g10/g10.c:189 msgid "check key signatures" msgstr "controlla le firme delle chiavi" -#: g10/g10.c:188 +#: g10/g10.c:190 msgid "list keys and fingerprints" msgstr "elenca le chiavi e le impronte digitali" -#: g10/g10.c:189 +#: g10/g10.c:191 msgid "list secret keys" msgstr "elenca le chiavi segrete" -#: g10/g10.c:190 +#: g10/g10.c:192 msgid "generate a new key pair" msgstr "genera una nuova coppia di chiavi" -#: g10/g10.c:191 +#: g10/g10.c:193 msgid "remove key from the public keyring" msgstr "rimuove una chiave dal portachiavi pubblico" -#: g10/g10.c:192 +#: g10/g10.c:194 msgid "sign or edit a key" msgstr "firma o modifica una chiave" -#: g10/g10.c:193 +#: g10/g10.c:195 msgid "generate a revocation certificate" msgstr "genera un certificato di revoca" -#: g10/g10.c:194 +#: g10/g10.c:196 msgid "export keys" msgstr "esporta delle chiavi" -#: g10/g10.c:195 +#: g10/g10.c:197 msgid "export keys to a key server" msgstr "esporta le chiavi a un key server" -#: g10/g10.c:196 +#: g10/g10.c:198 msgid "import keys from a key server" msgstr "importa le chiavi da un key server" -#: g10/g10.c:199 +#: g10/g10.c:201 msgid "import/merge keys" msgstr "importa/aggiungi delle chiavi" -#: g10/g10.c:201 +#: g10/g10.c:203 msgid "list only the sequence of packets" msgstr "elenca solo la sequenza dei pacchetti" -#: g10/g10.c:203 +#: g10/g10.c:205 msgid "export the ownertrust values" msgstr "esporta i valori di fiducia" -#: g10/g10.c:205 +#: g10/g10.c:207 msgid "import ownertrust values" msgstr "importa i valori di fiducia" -#: g10/g10.c:207 +#: g10/g10.c:209 msgid "|[NAMES]|update the trust database" msgstr "|[NOMI]|controlla il database della fiducia" -#: g10/g10.c:209 +#: g10/g10.c:211 msgid "|[NAMES]|check the trust database" msgstr "|[NOMI]|controlla il database della fiducia" -#: g10/g10.c:210 +#: g10/g10.c:212 msgid "fix a corrupted trust database" msgstr "ripara un database della fiducia rovinato" -#: g10/g10.c:211 +#: g10/g10.c:213 msgid "De-Armor a file or stdin" msgstr "rimuovi l'armatura a un file o a stdin" -#: g10/g10.c:212 +#: g10/g10.c:214 msgid "En-Armor a file or stdin" msgstr "crea l'armatura a un file o a stdin" -#: g10/g10.c:213 +#: g10/g10.c:215 msgid "|algo [files]|print message digests" msgstr "|algo [files]|stampa tutti i message digests" -#: g10/g10.c:214 +#: g10/g10.c:216 msgid "print all message digests" msgstr "stampa tutti i message digests" -#: g10/g10.c:220 +#: g10/g10.c:222 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opzioni:\n" " " -#: g10/g10.c:222 +#: g10/g10.c:224 msgid "create ascii armored output" msgstr "crea un output ascii con armatura" -#: g10/g10.c:223 +#: g10/g10.c:225 msgid "|NAME|encrypt for NAME" msgstr "|NOME|cifra per NOME" -#: g10/g10.c:227 +#: g10/g10.c:229 msgid "use this user-id to sign or decrypt" msgstr "usa questo user-id per firmare o decifrare" -#: g10/g10.c:228 +#: g10/g10.c:230 msgid "|N|set compress level N (0 disables)" msgstr "|N|imposta il livello di compressione (0 disabilita)" -#: g10/g10.c:230 +#: g10/g10.c:232 msgid "use canonical text mode" msgstr "usa il modo testo canonico" -#: g10/g10.c:231 +#: g10/g10.c:233 msgid "use as output file" msgstr "usa come file di output" -#: g10/g10.c:232 +#: g10/g10.c:234 msgid "verbose" msgstr "prolisso" -#: g10/g10.c:233 +#: g10/g10.c:235 msgid "be somewhat more quiet" msgstr "meno prolisso" -#: g10/g10.c:234 +#: g10/g10.c:236 msgid "don't use the terminal at all" msgstr "non usa per niente il terminale" -#: g10/g10.c:235 +#: g10/g10.c:237 msgid "force v3 signatures" msgstr "forza l'uso di firme v3" -#: g10/g10.c:236 +#: g10/g10.c:238 msgid "always use a MDC for encryption" msgstr "usa sempre un MDC per cifrare" -#: g10/g10.c:237 +#: g10/g10.c:239 msgid "do not make any changes" msgstr "non fa cambiamenti" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/g10.c:239 +#: g10/g10.c:241 msgid "batch mode: never ask" msgstr "modo batch: non fare domande" -#: g10/g10.c:240 +#: g10/g10.c:242 msgid "assume yes on most questions" msgstr "assumi \"sЛ\" a quasi tutte le domande" -#: g10/g10.c:241 +#: g10/g10.c:243 msgid "assume no on most questions" msgstr "assumi \"no\" a quasi tutte le domande" -#: g10/g10.c:242 +#: g10/g10.c:244 msgid "add this keyring to the list of keyrings" msgstr "aggiungi questo portachiavi alla lista" -#: g10/g10.c:243 +#: g10/g10.c:245 msgid "add this secret keyring to the list" msgstr "aggiungi questo portachiavi segreto alla lista" -#: g10/g10.c:244 +#: g10/g10.c:246 msgid "|NAME|use NAME as default secret key" msgstr "|NAME|usa NAME come chiave segreta predefinita" -#: g10/g10.c:245 +#: g10/g10.c:247 msgid "|HOST|use this keyserver to lookup keys" msgstr "|HOST|cerca le chiavi in questo keyserver" -#: g10/g10.c:246 +#: g10/g10.c:248 msgid "|NAME|set terminal charset to NAME" msgstr "|NAME|imposta il set di caratteri del terminale NOME" -#: g10/g10.c:247 +#: g10/g10.c:249 msgid "read options from file" msgstr "leggi le opzioni dal file" -#: g10/g10.c:249 +#: g10/g10.c:251 msgid "set debugging flags" msgstr "imposta i flag di debugging" -#: g10/g10.c:250 +#: g10/g10.c:252 msgid "enable full debugging" msgstr "abilita il debugging completo" -#: g10/g10.c:251 +#: g10/g10.c:253 msgid "|FD|write status info to this FD" msgstr "|FD|scrivi le informazioni di stato su questo fd" -#: g10/g10.c:252 +#: g10/g10.c:254 msgid "do not write comment packets" msgstr "non scrivere pacchetti di commento" -#: g10/g10.c:253 +#: g10/g10.c:255 msgid "(default is 1)" msgstr "(predefinito Х 1)" -#: g10/g10.c:254 +#: g10/g10.c:256 msgid "(default is 3)" msgstr "(predefinito Х 3)" -#: g10/g10.c:256 +#: g10/g10.c:258 msgid "|FILE|load extension module FILE" msgstr "|FILE|carica il modulo di estensione FILE" -#: g10/g10.c:257 +#: g10/g10.c:259 msgid "emulate the mode described in RFC1991" msgstr "emula il modo descritto in RFC 1991" -#: g10/g10.c:258 +#: g10/g10.c:260 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "imposta per OpenPGP le opzioni di pacchetto, cifrario e digest" -#: g10/g10.c:259 +#: g10/g10.c:261 msgid "|N|use passphrase mode N" msgstr "|N|usa il modo N per la passphrase" -#: g10/g10.c:261 +#: g10/g10.c:263 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|NAME|usa l'algoritmo di message digest NOME" -#: g10/g10.c:263 +#: g10/g10.c:265 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|NAME|usa l'alg. di cifratura NOME per le passphrase" -#: g10/g10.c:264 +#: g10/g10.c:266 msgid "|NAME|use cipher algorithm NAME" msgstr "|NAME|usa l'algoritmo di cifratura NOME" -#: g10/g10.c:265 +#: g10/g10.c:267 msgid "|NAME|use message digest algorithm NAME" msgstr "|NAME|usa l'algoritmo di message digest NOME" -#: g10/g10.c:266 +#: g10/g10.c:268 msgid "|N|use compress algorithm N" msgstr "|N|usa l'algoritmo di compressione N" -#: g10/g10.c:267 +#: g10/g10.c:269 msgid "throw keyid field of encrypted packets" msgstr "elimina il campo keyid dei pacchetti cifrati" -#: g10/g10.c:268 +#: g10/g10.c:270 msgid "|NAME=VALUE|use this notation data" msgstr "|NOME=VALORE|usa questi dati per una nota" -#: g10/g10.c:270 +#: g10/g10.c:272 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" "Esempi:\n" "\n" " -se -r Bob [file] firma e cifra per l'utente Bob\n" " --clearsign [file] fai una firma mantenendo il testo in chiaro\n" " --detach-sign [file] fai una firma separata\n" " --list-keys [nomi] mostra le chiavi\n" " --fingerprint [nomi] mostra le impronte digitali\n" -#: g10/g10.c:347 +#: g10/g10.c:351 msgid "Please report bugs to .\n" msgstr "Per favore segnala i bug a .\n" -#: g10/g10.c:351 +#: g10/g10.c:355 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uso: gpg [opzioni] [file] (-h per l'aiuto)" -#: g10/g10.c:354 +#: g10/g10.c:358 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" "default operation depends on the input data\n" msgstr "" "Sintassi: gpg [opzioni] [file]\n" "firma, controlla, cifra o decifra\n" "l'operazione predefinita dipende dai dati di input\n" -#: g10/g10.c:359 +#: g10/g10.c:363 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algoritmi gestiti:\n" -#: g10/g10.c:433 +#: g10/g10.c:437 msgid "usage: gpg [options] " msgstr "uso: gpg [options] " -#: g10/g10.c:473 +#: g10/g10.c:477 msgid "conflicting commands\n" msgstr "comandi in conflitto\n" -#: g10/g10.c:605 +#: g10/g10.c:609 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTA: manca il file con le opzioni predefinite `%s'\n" -#: g10/g10.c:609 +#: g10/g10.c:613 #, c-format msgid "option file `%s': %s\n" msgstr "file con le opzioni `%s': %s\n" -#: g10/g10.c:616 +#: g10/g10.c:620 #, c-format msgid "reading options from `%s'\n" msgstr "lettura delle opzioni da `%s'\n" -#: g10/g10.c:782 +#: g10/g10.c:786 #, c-format msgid "%s is not a valid character set\n" msgstr "%s non Х un set di caratteri valido\n" -#: g10/g10.c:827 g10/g10.c:839 +#: g10/g10.c:833 g10/g10.c:845 msgid "selected cipher algorithm is invalid\n" msgstr "l'algoritmo di cifratura selezionato non Х valido\n" -#: g10/g10.c:833 g10/g10.c:845 +#: g10/g10.c:839 g10/g10.c:851 msgid "selected digest algorithm is invalid\n" msgstr "l'algoritmo di digest selezionato non Х valido\n" -#: g10/g10.c:849 +#: g10/g10.c:855 msgid "the given policy URL is invalid\n" msgstr "L'URL della policy indicato non Х valido\n" -#: g10/g10.c:852 +#: g10/g10.c:858 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "l'algoritmo di compressione deve essere tra %d e %d\n" -#: g10/g10.c:854 +#: g10/g10.c:860 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed deve essere maggiore di 0\n" -#: g10/g10.c:856 +#: g10/g10.c:862 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed deve essere maggiore di 1\n" -#: g10/g10.c:858 +#: g10/g10.c:864 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "max-cert-depth deve essere tra 1 e 255\n" -#: g10/g10.c:861 +#: g10/g10.c:867 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTA: l'uso del modo S2K semplice (0) Х fortemente scoraggiato\n" -#: g10/g10.c:865 +#: g10/g10.c:871 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "modo S2K non valido; deve essere 0, 1 o 3\n" -#: g10/g10.c:942 +#: g10/g10.c:948 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "inizializzazione del trustdb fallita: %s\n" -#: g10/g10.c:948 +#: g10/g10.c:954 msgid "--store [filename]" msgstr "--store [nomefile]" -#: g10/g10.c:955 +#: g10/g10.c:961 msgid "--symmetric [filename]" msgstr "--symmetric [nomefile]" -#: g10/g10.c:963 +#: g10/g10.c:969 msgid "--encrypt [filename]" msgstr "--encrypt [nomefile]" -#: g10/g10.c:976 +#: g10/g10.c:982 msgid "--sign [filename]" msgstr "--sign [nomefile]" -#: g10/g10.c:989 +#: g10/g10.c:995 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nomefile]" -#: g10/g10.c:1003 +#: g10/g10.c:1009 msgid "--clearsign [filename]" msgstr "--clearsign [nomefile]" -#: g10/g10.c:1015 +#: g10/g10.c:1021 msgid "--decrypt [filename]" msgstr "--decrypt [nomefile]" -#: g10/g10.c:1024 +#: g10/g10.c:1030 msgid "--edit-key username [commands]" msgstr "--edit-key nomeutente [comandi]" -#: g10/g10.c:1038 +#: g10/g10.c:1044 msgid "--delete-secret-key username" msgstr "--delete-secret-key nomeutente" -#: g10/g10.c:1041 +#: g10/g10.c:1047 msgid "--delete-key username" msgstr "--delete-key nomeutente" -#: g10/encode.c:231 g10/g10.c:1064 g10/sign.c:366 +#: g10/encode.c:231 g10/g10.c:1071 g10/sign.c:366 #, c-format msgid "can't open %s: %s\n" msgstr "impossibile aprire `%s': %s\n" -#: g10/g10.c:1075 +#: g10/g10.c:1082 msgid "-k[v][v][v][c] [userid] [keyring]" msgstr "-k[v][v][v][c] [userid] [portachiavi]" -#: g10/g10.c:1134 +#: g10/g10.c:1141 #, c-format msgid "dearmoring failed: %s\n" msgstr "rimozione dell'armatura fallita: %s\n" -#: g10/g10.c:1142 +#: g10/g10.c:1149 #, c-format msgid "enarmoring failed: %s\n" msgstr "creazione dell'armatura fallita: %s\n" -#: g10/g10.c:1208 +#: g10/g10.c:1215 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algoritmo di hash non valido `%s'\n" -#: g10/g10.c:1283 +#: g10/g10.c:1290 msgid "[filename]" msgstr "[nomefile]" -#: g10/g10.c:1287 +#: g10/g10.c:1294 msgid "Go ahead and type your message ...\n" msgstr "Vai avanti e scrivi il messaggio...\n" -#: g10/decrypt.c:59 g10/g10.c:1290 g10/verify.c:66 +#: g10/decrypt.c:59 g10/g10.c:1297 g10/verify.c:66 #, c-format msgid "can't open `%s'\n" msgstr "impossibile aprire `%s'\n" -#: g10/g10.c:1457 +#: g10/g10.c:1466 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" "il primo carattere del nome di una nota deve essere una lettera o un\n" "underscore\n" -#: g10/g10.c:1463 +#: g10/g10.c:1472 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" msgstr "" "il nome di una nota deve essere formato solo da lettere, numeri, punti o\n" "underscore e deve finire con `='\n" -#: g10/g10.c:1469 +#: g10/g10.c:1478 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "nel nome di una nota i punti devono avere altri caratteri intorno\n" -#: g10/g10.c:1477 +#: g10/g10.c:1486 msgid "a notation value must not use any control characters\n" msgstr "il valore di una nota non deve usare caratteri di controllo\n" #: g10/armor.c:296 #, c-format msgid "armor: %s\n" msgstr "armatura: %s\n" #: g10/armor.c:319 msgid "invalid armor header: " msgstr "header dell'armatura non valido: " #: g10/armor.c:326 msgid "armor header: " msgstr "header dell'armatura: " #: g10/armor.c:337 msgid "invalid clearsig header\n" msgstr "header della firma in chiaro non valido\n" #: g10/armor.c:389 msgid "nested clear text signatures\n" msgstr "firme in chiaro innestate\n" #: g10/armor.c:500 msgid "invalid dash escaped line: " msgstr "riga protetta con il trattino non valida: " #: g10/armor.c:512 msgid "unexpected armor:" msgstr "armatura inaspettata:" #: g10/armor.c:629 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "Carattere radix64 non valido %02x saltato\n" #: g10/armor.c:672 msgid "premature eof (no CRC)\n" msgstr "eof prematura (nessun CRC)\n" #: g10/armor.c:706 msgid "premature eof (in CRC)\n" msgstr "eof prematura (nel CRC)\n" #: g10/armor.c:710 msgid "malformed CRC\n" msgstr "CRC malformato\n" #: g10/armor.c:714 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "errore nel CRC; %06lx - %06lx\n" #: g10/armor.c:731 msgid "premature eof (in Trailer)\n" msgstr "eof prematura (nella coda)\n" #: g10/armor.c:735 msgid "error in trailer line\n" msgstr "errore nella riga della coda\n" #: g10/armor.c:1001 msgid "no valid OpenPGP data found.\n" msgstr "Non sono stati trovati dati OpenPGP validi.\n" #: g10/armor.c:1005 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armatura non valida: linea piu` lunga di %d caratteri\n" #: g10/armor.c:1009 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "carattere quoted printable nell'armatura - probabilmente Х stato usato\n" "un MTA buggato\n" #: g10/pkclist.c:137 #, c-format msgid "" "No trust value assigned to %lu:\n" "%4u%c/%08lX %s \"" msgstr "" "Nessun valore di fiducia assegnato a %lu:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:147 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" " 1 = Don't know\n" " 2 = I do NOT trust\n" " 3 = I trust marginally\n" " 4 = I trust fully\n" " s = please show me more information\n" msgstr "" "Per favore decidi quanto hai fiducia di questo utente perchХ firmi\n" "correttamente le chiavi di altri utenti (guardando il loro passaporto,\n" "controllando le impronte digitali da diverse fonti ...)?\n" "\n" " 1 = Non lo so\n" " 2 = NON mi fido\n" " 3 = Mi fido marginalmente\n" " 4 = Mi fido completamente\n" " s = mostrami ulteriori informazioni\n" #: g10/pkclist.c:156 msgid " m = back to the main menu\n" msgstr " m = torna al menЫ principale\n" #: g10/pkclist.c:158 msgid " q = quit\n" msgstr " q = abbandona\n" # valid user replies (not including 1..4) # [Marco, you can change 'm' and 's' to whatever letters you like] #. a string with valid answers #: g10/pkclist.c:163 msgid "sSmMqQ" msgstr "sSmMqQ" #: g10/pkclist.c:167 msgid "Your decision? " msgstr "Cosa hai deciso? " #: g10/pkclist.c:187 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificati che portano a chiavi definitivamente affidabili:\n" -#: g10/pkclist.c:254 +#: g10/pkclist.c:256 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 "" "Impossibile trovare un percorso di fiducia valido fino alla chiave. Vediamo\n" "se possiamo assegnare qualche valore di fiducia del proprietario mancante.\n" "\n" -#: g10/pkclist.c:260 +#: g10/pkclist.c:262 msgid "" "No path leading to one of our keys found.\n" "\n" msgstr "" "Non Х stato trovato alcun percorso che porti a una delle nostre chiavi.\n" -#: g10/pkclist.c:262 +#: g10/pkclist.c:264 msgid "" "No certificates with undefined trust found.\n" "\n" msgstr "Non Х stato trovato alcun certificato con fiducia non definita.\n" -#: g10/pkclist.c:264 +#: g10/pkclist.c:266 msgid "" "No trust values changed.\n" "\n" msgstr "" "Nessun valore di fiducia modificato.\n" "\n" -#: g10/pkclist.c:281 +#: g10/pkclist.c:283 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "chiave %08lX: la chiave Х stata revocata!\n" -#: g10/pkclist.c:287 g10/pkclist.c:297 g10/pkclist.c:403 +#: g10/pkclist.c:289 g10/pkclist.c:299 g10/pkclist.c:405 msgid "Use this key anyway? " msgstr "Uso lo stesso questa chiave? " -#: g10/pkclist.c:291 +#: g10/pkclist.c:293 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "chiave %08lX: la subchiave Х stata revocata!\n" -#: g10/pkclist.c:321 +#: g10/pkclist.c:323 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: la chiave Х scaduta\n" -#: g10/pkclist.c:327 +#: g10/pkclist.c:329 #, c-format msgid "%08lX: no info to calculate a trust probability\n" msgstr "" "%08lX: mancano informazioni su come calcolare una probabilitЮ di fiducia\n" -#: g10/pkclist.c:341 +#: g10/pkclist.c:343 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: NON ci fidiamo di questa chiave!\n" -#: g10/pkclist.c:347 +#: g10/pkclist.c:349 #, 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: Non Х sicuro che questa chiave appartenga veramente al proprietario\n" "ma Х accettata comunque\n" -#: g10/pkclist.c:353 +#: g10/pkclist.c:355 msgid "This key probably belongs to the owner\n" msgstr "Questa chiave probabilmente appartiene al proprietario\n" -#: g10/pkclist.c:358 +#: g10/pkclist.c:360 msgid "This key belongs to us\n" msgstr "Questa chiave ci appartiene\n" -#: g10/pkclist.c:398 +#: g10/pkclist.c:400 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" "the next question with yes\n" "\n" msgstr "" "NON Х sicuro che la chiave appartenga al suo proprietario.\n" "Se *veramente* sai cosa stai facendo, puoi rispondere sЛ alla\n" "prossima domanda.\n" "\n" -#: g10/pkclist.c:411 g10/pkclist.c:433 +#: g10/pkclist.c:413 g10/pkclist.c:435 msgid "WARNING: Using untrusted key!\n" msgstr "ATTENZIONE: uso di una chiave non fidata!\n" -#: g10/pkclist.c:454 +#: g10/pkclist.c:456 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ATTENZIONE: questa chiave Х stata revocata dal suo proprietario!\n" -#: g10/pkclist.c:455 +#: g10/pkclist.c:457 msgid " This could mean that the signature is forgery.\n" msgstr " Questo puР significare che la firma Х stata falsificata.\n" -#: g10/pkclist.c:459 +#: g10/pkclist.c:461 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "ATTENZIONE: questa subchiave Х stata revocata dal proprietario!\n" -#: g10/pkclist.c:480 +#: g10/pkclist.c:482 msgid "Note: This key has expired!\n" msgstr "Nota: questa chiave Х scaduta!\n" -#: g10/pkclist.c:487 +#: g10/pkclist.c:489 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "ATTENZIONE: questa chiave non Х certificata con una firma fidata!\n" -#: g10/pkclist.c:489 +#: g10/pkclist.c:491 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Non ci sono indicazioni che la firma appartenga al proprietario.\n" -#: g10/pkclist.c:505 +#: g10/pkclist.c:507 msgid "WARNING: We do NOT trust this key!\n" msgstr "ATTENZIONE: NON ci fidiamo di questa chiave!\n" -#: g10/pkclist.c:506 +#: g10/pkclist.c:508 msgid " The signature is probably a FORGERY.\n" msgstr " La firma Х probabilmente un FALSO.\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:515 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "ATTENZIONE: questa chiave non Х certificata con firme abbastanza fidate!\n" -#: g10/pkclist.c:516 +#: g10/pkclist.c:518 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Non Х sicuro che la firma appartenga al proprietario.\n" -#: g10/pkclist.c:580 g10/pkclist.c:602 g10/pkclist.c:665 g10/pkclist.c:705 +#: g10/pkclist.c:582 g10/pkclist.c:604 g10/pkclist.c:670 g10/pkclist.c:715 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: saltata: %s\n" -#: g10/pkclist.c:588 g10/pkclist.c:687 +#: g10/pkclist.c:590 g10/pkclist.c:697 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: saltato: chiave pubblica giЮ presente\n" -#: g10/pkclist.c:611 +#: g10/pkclist.c:613 msgid "" "You did not specify a user ID. (you may use \"-r\")\n" "\n" msgstr "" "Non hai specificato un user ID. (puoi usare \"-r\")\n" "\n" -#: g10/pkclist.c:616 +#: g10/pkclist.c:618 msgid "Enter the user ID: " msgstr "Inserisci l'user ID: " -#: g10/pkclist.c:627 +#: g10/pkclist.c:629 msgid "No such user ID.\n" msgstr "User ID inesistente.\n" -#: g10/pkclist.c:673 +#: g10/pkclist.c:639 +#, fuzzy +msgid "Public key is disabled.\n" +msgstr "la chiave pubblica Х %08lX\n" + +#: g10/pkclist.c:678 #, c-format msgid "%s: error checking key: %s\n" msgstr "%s: errore nel controllare la chiave: %s\n" -#: g10/pkclist.c:711 +#: g10/pkclist.c:683 +#, fuzzy, c-format +msgid "%s: skipped: public key is disabled\n" +msgstr "%s: saltato: chiave pubblica giЮ presente\n" + +#: g10/pkclist.c:721 msgid "no valid addressees\n" msgstr "nessun indirizzo valido\n" #: g10/keygen.c:122 msgid "writing self signature\n" msgstr "scrittura della autofirma\n" #: g10/keygen.c:160 msgid "writing key binding signature\n" msgstr "scrittura della autofirma\n" #: g10/keygen.c:386 msgid "Please select what kind of key you want:\n" msgstr "Per favore scegli che tipo di chiave vuoi:\n" #: g10/keygen.c:388 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA e ElGamal (default)\n" #: g10/keygen.c:389 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (firma solo)\n" #: g10/keygen.c:391 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (cifra solo)\n" #: g10/keygen.c:392 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (firma e cifra)\n" #: g10/keygen.c:394 #, c-format msgid " (%d) ElGamal in a v3 packet\n" msgstr " (%d) ElGamal in un pacchetto v3\n" #: g10/keygen.c:399 msgid "Your selection? " msgstr "Cosa scegli? " #: g10/keygen.c:409 msgid "Do you really want to create a sign and encrypt key? " msgstr "Vuoi davvero creare una chiave di firma e cifratura? " #: g10/keygen.c:430 msgid "Invalid selection.\n" msgstr "Scelta non valida.\n" #: g10/keygen.c:442 #, 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 "" "Sto per generare una nuova coppia di chiavi %s.\n" " la dimensione minima Х 768 bit\n" " la dimensione predefinita Х 1024 bit\n" " la dimensione massima consigliata Х 2048 bit\n" #: g10/keygen.c:449 msgid "What keysize do you want? (1024) " msgstr "Di che dimensioni vuoi la chiave? (1024) " #: g10/keygen.c:454 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA permette solo chiavi di dimensioni da 512 a 1024\n" #: g10/keygen.c:456 msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "la chiave Х troppo corta; 768 Х il minimo valore permesso.\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:466 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "la chiave Х troppo lunga; %d Х il massimo valore permesso.\n" #: g10/keygen.c:471 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" msgstr "" "Chiavi piЫ lunghe di 2048 non sono consigliate perchХ i calcoli sono\n" "VERAMENTE lunghi!\n" #: g10/keygen.c:474 msgid "Are you sure that you want this keysize? " msgstr "Sei sicuro di volere una chiave di queste dimensioni? " #: g10/keygen.c:475 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" msgstr "" "Va bene, ma ricordati che anche le radiazioni emesse dal tuo monitor e dalla " "tua tastiera sono molto vulnerabili ad attacchi!\n" #: g10/keygen.c:483 msgid "Do you really need such a large keysize? " msgstr "Ti serve davvero una chiave cosЛ lunga? " #: g10/keygen.c:489 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Le dimensioni della chiave richieste sono %u bit\n" #: g10/keygen.c:492 g10/keygen.c:496 #, c-format msgid "rounded up to %u bits\n" msgstr "arrotondate a %u bit\n" #: g10/keygen.c:509 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" " = key expires in n days\n" " w = key expires in n weeks\n" " m = key expires in n months\n" " y = key expires in n years\n" msgstr "" "Per favore specifica per quanto la chiave sarЮ valida.\n" " 0 = la chiave non scadrЮ\n" " w = la chiave scadrЮ dopo n giorni\n" " m = la chiave scadrЮ dopo n mesi\n" " y = la chiave scadrЮ dopo n anni\n" -#: g10/keygen.c:524 +#: g10/keygen.c:526 msgid "Key is valid for? (0) " msgstr "Chiave valida per? (0) " -#: g10/keygen.c:535 +#: g10/keygen.c:547 msgid "invalid value\n" msgstr "valore non valido\n" -#: g10/keygen.c:540 +#: g10/keygen.c:552 msgid "Key does not expire at all\n" msgstr "La chiave non scade\n" #. print the date when the key expires -#: g10/keygen.c:546 +#: g10/keygen.c:558 #, c-format msgid "Key expires at %s\n" msgstr "La chiave scadrЮ il %s\n" -#: g10/keygen.c:552 +#: g10/keygen.c:564 msgid "Is this correct (y/n)? " msgstr "х giusto (s/n)? " -#: g10/keygen.c:595 +#: g10/keygen.c:607 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) \"\n" "\n" msgstr "" "\n" "Ti serve un User ID per identificare la tua chiave; il software costruisce " "l'user id a partire da Nome e Cognome, Commento e Indirizzo di Email " "indicati in questa forma:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" -#: g10/keygen.c:606 +#: g10/keygen.c:618 msgid "Real name: " msgstr "Nome e Cognome: " -#: g10/keygen.c:610 +#: g10/keygen.c:622 msgid "Invalid character in name\n" msgstr "Carattere non valido nel nome\n" -#: g10/keygen.c:612 +#: g10/keygen.c:624 msgid "Name may not start with a digit\n" msgstr "Il nome non puР iniziare con una cifra\n" -#: g10/keygen.c:614 +#: g10/keygen.c:626 msgid "Name must be at least 5 characters long\n" msgstr "Il nome deve essere lungo almeno 5 caratteri\n" -#: g10/keygen.c:622 +#: g10/keygen.c:634 msgid "Email address: " msgstr "Indirizzo di Email: " -#: g10/keygen.c:633 +#: g10/keygen.c:645 msgid "Not a valid email address\n" msgstr "L'indirizzo di email non Х valido\n" -#: g10/keygen.c:641 +#: g10/keygen.c:653 msgid "Comment: " msgstr "Commento: " -#: g10/keygen.c:647 +#: g10/keygen.c:659 msgid "Invalid character in comment\n" msgstr "Carattere non valido nel commento\n" -#: g10/keygen.c:669 +#: g10/keygen.c:681 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Stai usando il set di caratteri `%s'.\n" -#: g10/keygen.c:675 +#: g10/keygen.c:687 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Hai selezionato questo User Id:\n" " \"%s\"\n" "\n" -#: g10/keygen.c:678 +#: g10/keygen.c:690 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" -#: g10/keygen.c:688 +#: g10/keygen.c:700 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Modifica (N)ome, (C)ommento, (E)mail oppure (O)kay/(Q)uit? " -#: g10/keygen.c:740 +#: g10/keygen.c:752 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Ti serve una passphrase per proteggere la tua chiave segreta.\n" "\n" -#: g10/keyedit.c:455 g10/keygen.c:748 +#: g10/keyedit.c:456 g10/keygen.c:760 msgid "passphrase not correctly repeated; try again.\n" msgstr "passphrase non ripetuta correttamente; riprova.\n" -#: g10/keygen.c:754 +#: g10/keygen.c:766 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 "" "Non hai specificato una passphrase - questa Х probabilmente una *cattiva*\n" "idea! Lo farР io comunque. Puoi cambiarla in ogni momento, usando questo\n" "programma con l'opzione \"--edit-key\".\n" "\n" -#: g10/keygen.c:775 +#: g10/keygen.c:787 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 "" "Dobbiamo generare un mucchio di byte casuali. х una buona idea eseguire\n" "qualche altra azione (scrivere sulla tastiera, muovere il mouse, usare i\n" "dischi) durante la generazione dei numeri primi; questo da al generatore di\n" "numeri casuali migliori possibilitЮ di raccogliere abbastanza entropia.\n" -#: g10/keygen.c:845 +#: g10/keygen.c:857 msgid "Key generation can only be used in interactive mode\n" msgstr "Una chiave puР essere generata solo in modo interattivo\n" -#: g10/keygen.c:853 +#: g10/keygen.c:865 msgid "DSA keypair will have 1024 bits.\n" msgstr "La coppia DSA avrЮ 1024 bit.\n" -#: g10/keygen.c:859 +#: g10/keygen.c:871 msgid "Key generation canceled.\n" msgstr "Generazione della chiave annullata.\n" -#: g10/keygen.c:869 +#: g10/keygen.c:881 #, c-format msgid "writing public certificate to `%s'\n" msgstr "scrittura del certificato pubblico in `%s'\n" -#: g10/keygen.c:870 +#: g10/keygen.c:882 #, c-format msgid "writing secret certificate to `%s'\n" msgstr "scrittura del certificato privato in `%s'\n" -#: g10/keygen.c:947 +#: g10/keygen.c:959 msgid "public and secret key created and signed.\n" msgstr "chiavi pubbliche e segrete create e firmate.\n" -#: g10/keygen.c:949 +#: g10/keygen.c:961 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 "" "Nota che questa chiave non puР essere usata per cifrare. Forse vorrai usare\n" "il comando \"--edit-key\" per generare una chiave secondaria per questo " "scopo.\n" -#: g10/keygen.c:963 g10/keygen.c:1062 +#: g10/keygen.c:975 g10/keygen.c:1074 #, c-format msgid "Key generation failed: %s\n" msgstr "Generazione della chiave fallita: %s\n" -#: g10/keygen.c:1007 g10/sig-check.c:300 g10/sign.c:105 +#: g10/keygen.c:1019 g10/sig-check.c:312 g10/sign.c:105 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "la chiave Х stata creata %lu secondo nel futuro (salto nel tempo o problema\n" "con l'orologio)\n" -#: g10/keygen.c:1009 g10/sig-check.c:302 g10/sign.c:107 +#: g10/keygen.c:1021 g10/sig-check.c:314 g10/sign.c:107 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "la chiave Х stata creata %lu secondi nel futuro (salto nel tempo o problema\n" "con l'orologio)\n" -#: g10/keygen.c:1040 +#: g10/keygen.c:1052 msgid "Really create? " msgstr "Crea davvero? " -#: g10/encode.c:91 g10/openfile.c:118 g10/openfile.c:208 g10/tdbio.c:467 +#: g10/encode.c:91 g10/openfile.c:156 g10/openfile.c:246 g10/tdbio.c:467 #: g10/tdbio.c:528 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: impossibile aprire: %s\n" #: g10/encode.c:113 #, c-format msgid "error creating passphrase: %s\n" msgstr "errore nella creazione della passhprase: %s\n" #: g10/encode.c:167 g10/encode.c:287 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: ATTENZIONE: file vuoto\n" #: g10/encode.c:237 #, c-format msgid "reading from `%s'\n" msgstr "lettura da `%s'\n" #: g10/encode.c:431 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s cifrato per: %s\n" #: g10/export.c:147 #, c-format msgid "%s: user not found: %s\n" msgstr "%s: utente non trovato: %s\n" #: g10/export.c:156 #, c-format msgid "certificate read problem: %s\n" msgstr "problema di lettura del certificato: %s\n" #: g10/export.c:165 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "chiave %08lX: chiave non rfc2440 - saltata\n" #: g10/export.c:203 msgid "WARNING: nothing exported\n" msgstr "ATTENZIONE: non Х stato esportato nulla\n" #: g10/getkey.c:206 msgid "too many entries in pk cache - disabled\n" msgstr "troppe voci nella pk cache - disabilitata\n" #: g10/getkey.c:345 msgid "too many entries in unk cache - disabled\n" msgstr "troppe voci nella unk cache - disabilitata\n" #: g10/getkey.c:1535 g10/getkey.c:1591 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "uso la chiave secondaria %08lX invece della chiave primaria %08lX\n" #: g10/import.c:116 #, c-format msgid "can't open `%s': %s\n" msgstr "impossibile aprire `%s': %s\n" #: g10/import.c:160 #, c-format msgid "skipping block of type %d\n" msgstr "salto un blocco di tipo %d\n" -#: g10/import.c:167 g10/trustdb.c:2560 g10/trustdb.c:2668 +#: g10/import.c:167 g10/trustdb.c:1656 g10/trustdb.c:1695 #, c-format msgid "%lu keys so far processed\n" msgstr "Per ora sono state esaminate %lu chiavi\n" #: g10/import.c:172 #, c-format msgid "error reading `%s': %s\n" msgstr "errore leggendo `%s': %s\n" #: g10/import.c:175 #, c-format msgid "Total number processed: %lu\n" msgstr "Numero totale esaminato: %lu\n" #: g10/import.c:177 #, c-format msgid " w/o user IDs: %lu\n" msgstr "senza user ID: %lu\n" #: g10/import.c:179 #, c-format msgid " imported: %lu" msgstr "importate: %lu" #: g10/import.c:185 #, c-format msgid " unchanged: %lu\n" msgstr "non modificate: %lu\n" #: g10/import.c:187 #, c-format msgid " new user IDs: %lu\n" msgstr "nuovi user ID: %lu\n" #: g10/import.c:189 #, c-format msgid " new subkeys: %lu\n" msgstr "nuove subchiavi: %lu\n" #: g10/import.c:191 #, c-format msgid " new signatures: %lu\n" msgstr "nuove firme: %lu\n" #: g10/import.c:193 #, c-format msgid " new key revocations: %lu\n" msgstr "nuove revoche di chiavi: %lu\n" #: g10/import.c:195 #, c-format msgid " secret keys read: %lu\n" msgstr "chiavi segrete lette: %lu\n" #: g10/import.c:197 #, c-format msgid " secret keys imported: %lu\n" msgstr "chiavi segrete importate %lu\n" #: g10/import.c:199 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "chiavi segrete non cambiate %lu\n" -#: g10/import.c:342 g10/import.c:529 +#: g10/import.c:342 g10/import.c:526 #, c-format msgid "key %08lX: no user id\n" msgstr "chiave %08lX: nessun user id\n" #: g10/import.c:353 #, c-format msgid "key %08lX: no valid user ids\n" msgstr "chiave %08lX: nessun user id valido\n" #: g10/import.c:355 msgid "this may be caused by a missing self-signature\n" msgstr "questo puР essere causato da una autofirma mancante\n" -#: g10/import.c:366 g10/import.c:596 +#: g10/import.c:366 g10/import.c:593 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "chiave %08lX: chiave pubblica non trovata: %s\n" #: g10/import.c:372 msgid "no default public keyring\n" msgstr "nessun portachiavi pubblico predefinito\n" -#: g10/import.c:376 g10/openfile.c:148 g10/sign.c:268 g10/sign.c:559 +#: g10/import.c:376 g10/openfile.c:186 g10/sign.c:268 g10/sign.c:559 #, c-format msgid "writing to `%s'\n" msgstr "scrittura in `%s'\n" -#: g10/import.c:379 g10/import.c:435 g10/import.c:544 g10/import.c:645 +#: g10/import.c:379 g10/import.c:432 g10/import.c:541 g10/import.c:642 #, c-format msgid "can't lock keyring `%s': %s\n" msgstr "impossibile fare il lock del portachiavi `%s': %s\n" -#: g10/import.c:382 g10/import.c:438 g10/import.c:547 g10/import.c:648 +#: g10/import.c:382 g10/import.c:435 g10/import.c:544 g10/import.c:645 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "errore scrivendo il portachiavi `%s': %s\n" #: g10/import.c:387 #, c-format msgid "key %08lX: public key imported\n" msgstr "chiave %08lX: chiave pubblica importata\n" #: g10/import.c:399 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "chiave %08lX: non corrisponde alla nostra copia\n" -#: g10/import.c:411 g10/import.c:604 +#: g10/import.c:408 g10/import.c:601 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "chiave %08lX: impossibile individuare il keyblock originale: %s\n" -#: g10/import.c:417 g10/import.c:610 +#: g10/import.c:414 g10/import.c:607 #, c-format msgid "key %08lX: can't read original keyblock: %s\n" msgstr "chiave %08lX: impossibile leggere il keyblock originale: %s\n" -#: g10/import.c:444 +#: g10/import.c:441 #, c-format msgid "key %08lX: 1 new user-id\n" msgstr "chiave %08lX: un nuovo user id\n" -#: g10/import.c:447 +#: g10/import.c:444 #, c-format msgid "key %08lX: %d new user-ids\n" msgstr "chiave %08lX: %d nuovi user id\n" -#: g10/import.c:450 +#: g10/import.c:447 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "chiave %08lX: una nuova firma\n" -#: g10/import.c:453 +#: g10/import.c:450 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "chiave %08lX: %d nuove firme\n" -#: g10/import.c:456 +#: g10/import.c:453 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "chiave %08lX: una nuova subchiave\n" -#: g10/import.c:459 +#: g10/import.c:456 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "chiave %08lX: %d nuove subchiavi\n" -#: g10/import.c:469 +#: g10/import.c:466 #, c-format msgid "key %08lX: not changed\n" msgstr "chiave %08lX: non cambiata\n" -#: g10/import.c:552 +#: g10/import.c:549 #, c-format msgid "key %08lX: secret key imported\n" msgstr "chiave %08lX: chiave segreta importata\n" #. we can't merge secret keys -#: g10/import.c:556 +#: g10/import.c:553 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "chiave %08lX: giЮ nel portachiavi segreto\n" -#: g10/import.c:561 +#: g10/import.c:558 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "chiave %08lX: chiave segreta non trovata: %s\n" -#: g10/import.c:590 +#: g10/import.c:587 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "chiave %08lX: manca la chiave pubblica - impossibile applicare il\n" "certificato di revoca\n" -#: g10/import.c:621 +#: g10/import.c:618 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "chiave %08lX: certificato di revoca non valido: %s - rifiutato\n" -#: g10/import.c:653 +#: g10/import.c:650 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "chiave %08lX: certificato di revoca importato\n" -#: g10/import.c:686 +#: g10/import.c:683 #, c-format msgid "key %08lX: no user-id for signature\n" msgstr "chiave %08lX: nessun user id per la firma\n" -#: g10/import.c:693 g10/import.c:717 +#: g10/import.c:690 g10/import.c:714 #, c-format msgid "key %08lX: unsupported public key algorithm\n" msgstr "chiave %08lX: algoritmo a chiave pubblica non gestito\n" -#: g10/import.c:694 +#: g10/import.c:691 #, c-format msgid "key %08lX: invalid self-signature\n" msgstr "chiave %08lX: autofirma non valida\n" -#: g10/import.c:709 +#: g10/import.c:706 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "chiave %08lX: non ci sono subchiavi per il legame con la chiave\n" -#: g10/import.c:718 +#: g10/import.c:715 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "chiave %08lX: legame con la subchiave non valido:\n" -#: g10/import.c:750 +#: g10/import.c:747 #, c-format msgid "key %08lX: skipped userid '" msgstr "chiave %08lX: saltato l'user id '" -#: g10/import.c:773 +#: g10/import.c:770 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "chiave %08lX: saltata la subchiave\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:798 +#: g10/import.c:795 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "chiave %08lX: firma non esportabile (chiave %02x) - saltata\n" -#: g10/import.c:807 +#: g10/import.c:804 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "chiave %08lX: certificato di revoca nel posto sbagliato - saltato\n" -#: g10/import.c:815 +#: g10/import.c:812 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "chiave %08lX: certificato di revoca non valido: %s - saltato\n" -#: g10/import.c:915 +#: g10/import.c:912 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "chiave %08lX: trovato un user ID duplicato - unito\n" -#: g10/import.c:966 +#: g10/import.c:963 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "chiave %08lX: certificato di revoca aggiunto\n" -#: g10/import.c:1079 g10/import.c:1134 +#: g10/import.c:1076 g10/import.c:1131 #, c-format msgid "key %08lX: our copy has no self-signature\n" msgstr "chiave %08lX: la nostra copia non ha autofirma\n" -#: g10/keyedit.c:92 +#: g10/keyedit.c:93 #, c-format msgid "%s: user not found\n" msgstr "%s: utente non trovato\n" -#: g10/keyedit.c:153 +#: g10/keyedit.c:154 msgid "[revocation]" msgstr "[revoca]" -#: g10/keyedit.c:154 +#: g10/keyedit.c:155 msgid "[self-signature]" msgstr "[autofirma]" -#: g10/keyedit.c:218 +#: g10/keyedit.c:219 msgid "1 bad signature\n" msgstr "una firma non corretta\n" -#: g10/keyedit.c:220 +#: g10/keyedit.c:221 #, c-format msgid "%d bad signatures\n" msgstr "%d firme non corrette\n" -#: g10/keyedit.c:222 +#: g10/keyedit.c:223 msgid "1 signature not checked due to a missing key\n" msgstr "1 firma non controllata per mancanza della chiave\n" -#: g10/keyedit.c:224 +#: g10/keyedit.c:225 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d firme non controllate per mancanza delle chiavi\n" -#: g10/keyedit.c:226 +#: g10/keyedit.c:227 msgid "1 signature not checked due to an error\n" msgstr "1 firma non controllata a causa di un errore\n" -#: g10/keyedit.c:228 +#: g10/keyedit.c:229 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d firme non controllate a causa di errori\n" -#: g10/keyedit.c:230 +#: g10/keyedit.c:231 msgid "1 user id without valid self-signature detected\n" msgstr "Trovato 1 user id senza autofirma valida\n" -#: g10/keyedit.c:232 +#: g10/keyedit.c:233 #, c-format msgid "%d user ids without valid self-signatures detected\n" msgstr "Trovati %d user id senza autofirme valide\n" #. Fixme: see whether there is a revocation in which #. * case we should allow to sign it again. -#: g10/keyedit.c:312 +#: g10/keyedit.c:313 #, c-format msgid "Already signed by key %08lX\n" msgstr "GiЮ firmato dalla chiave %08lX\n" -#: g10/keyedit.c:320 +#: g10/keyedit.c:321 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Niente da firmare con la chiave %08lX\n" -#: g10/keyedit.c:329 +#: g10/keyedit.c:330 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" msgstr "" "Sei davvero sicuro di volere firmare questa chiave\n" "con la tua chiave: \"" -#: g10/keyedit.c:338 +#: g10/keyedit.c:339 msgid "" "The signature will be marked as non-exportable.\n" "\n" msgstr "" "La firma sarЮ segnata come non esportabile.\n" "\n" -#: g10/keyedit.c:343 +#: g10/keyedit.c:344 msgid "Really sign? " msgstr "Firmo davvero? " -#: g10/keyedit.c:369 g10/keyedit.c:1790 g10/keyedit.c:1839 g10/sign.c:128 +#: g10/keyedit.c:370 g10/keyedit.c:1806 g10/keyedit.c:1855 g10/sign.c:128 #, c-format msgid "signing failed: %s\n" msgstr "firma fallita: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:423 msgid "This key is not protected.\n" msgstr "Questa chiave non Х protetta.\n" -#: g10/keyedit.c:425 +#: g10/keyedit.c:426 msgid "Key is protected.\n" msgstr "La chiave Х protetta.\n" -#: g10/keyedit.c:442 +#: g10/keyedit.c:443 #, c-format msgid "Can't edit this key: %s\n" msgstr "Impossibile modificare questa chiave: %s\n" -#: g10/keyedit.c:447 +#: g10/keyedit.c:448 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Inserisci la nuova passphrase per questa chiave segreta.\n" "\n" -#: g10/keyedit.c:459 +#: g10/keyedit.c:460 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Non vuoi una passphrase - questa Х probabilmente una *cattiva* idea!\n" "\n" -#: g10/keyedit.c:462 +#: g10/keyedit.c:463 msgid "Do you really want to do this? " msgstr "Vuoi veramente farlo?" -#: g10/keyedit.c:523 +#: g10/keyedit.c:524 msgid "moving a key signature to the correct place\n" msgstr "spostamento della firma di una chiave nel posto corretto\n" -#: g10/keyedit.c:559 +#: g10/keyedit.c:561 msgid "quit this menu" msgstr "abbandona questo menЫ" -#: g10/keyedit.c:560 +#: g10/keyedit.c:562 msgid "q" msgstr "q" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save" msgstr "save" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save and quit" msgstr "salva ed esci" -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "help" msgstr "help" -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "show this help" msgstr "mostra questo aiuto" -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 msgid "fpr" msgstr "fpr" -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 msgid "show fingerprint" msgstr "mostra le impronte digitali" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 msgid "list" msgstr "list" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 msgid "list key and user ids" msgstr "elenca le chiavi e gli user id" -#: g10/keyedit.c:566 +#: g10/keyedit.c:568 msgid "l" msgstr "l" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "uid" msgstr "uid" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "select user id N" msgstr "scegli l'user id N" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "key" msgstr "key" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "select secondary key N" msgstr "scegli la chiave secondaria N" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 msgid "check" msgstr "check" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 msgid "list signatures" msgstr "elenca le firme" -#: g10/keyedit.c:570 +#: g10/keyedit.c:572 msgid "c" msgstr "c" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 msgid "sign" msgstr "sign" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 msgid "sign the key" msgstr "firma la chiave" -#: g10/keyedit.c:572 +#: g10/keyedit.c:574 msgid "s" msgstr "s" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 msgid "lsign" msgstr "lsign" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 msgid "sign the key locally" msgstr "firma la chiave localmente" -#: g10/keyedit.c:574 +#: g10/keyedit.c:576 msgid "debug" msgstr "debug" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "adduid" msgstr "adduid" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "add a user id" msgstr "aggiungi un user id" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 msgid "deluid" msgstr "deluid" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 msgid "delete user id" msgstr "cancella un user id" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 msgid "addkey" msgstr "addkey" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 msgid "add a secondary key" msgstr "aggiungi una chiave secondaria" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delkey" msgstr "delkey" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delete a secondary key" msgstr "cancella una chiave secondaria" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 msgid "delsig" msgstr "delsign" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 msgid "delete signatures" msgstr "cancella le firme" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 msgid "expire" msgstr "expire" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 msgid "change the expire date" msgstr "cambia la data di scadenza" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle" msgstr "toggle" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle between secret and public key listing" msgstr "cambia tra visualizzare la chiave segreta e la chiave pubblica" -#: g10/keyedit.c:583 +#: g10/keyedit.c:585 msgid "t" msgstr "t" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "pref" msgstr "pref" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "list preferences" msgstr "elenca le impostazioni" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 msgid "passwd" msgstr "passwd" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 msgid "change the passphrase" msgstr "cambia la passphrase" -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "trust" msgstr "trust" -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "change the ownertrust" msgstr "cambia il valore di fiducia" -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 msgid "revsig" msgstr "revsig" -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 msgid "revoke signatures" msgstr "revoca firme" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 msgid "revkey" msgstr "revkey" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 msgid "revoke a secondary key" msgstr "revoca una chiave secondaria" -#: g10/keyedit.c:607 +#: g10/keyedit.c:591 +msgid "disable" +msgstr "" + +#: g10/keyedit.c:591 +#, fuzzy +msgid "disable a key" +msgstr "chiave sbagliata" + +#: g10/keyedit.c:592 +msgid "enable" +msgstr "" + +#: g10/keyedit.c:592 +#, fuzzy +msgid "enable a key" +msgstr "chiave sbagliata" + +#: g10/keyedit.c:611 msgid "can't do that in batchmode\n" msgstr "impossibile fare questo in batch mode\n" #. check that they match #. FIXME: check that they both match -#: g10/keyedit.c:636 +#: g10/keyedit.c:640 msgid "Secret key is available.\n" msgstr "х disponibile una chiave segreta.\n" -#: g10/keyedit.c:665 +#: g10/keyedit.c:669 msgid "Command> " msgstr "Comando> " -#: g10/keyedit.c:692 +#: g10/keyedit.c:696 msgid "Need the secret key to do this.\n" msgstr "Per fare questo serve la chiave segreta.\n" -#: g10/keyedit.c:714 +#: g10/keyedit.c:718 msgid "Save changes? " msgstr "Salvo i cambiamenti? " -#: g10/keyedit.c:717 +#: g10/keyedit.c:721 msgid "Quit without saving? " msgstr "Esco senza salvare? " -#: g10/keyedit.c:727 +#: g10/keyedit.c:731 #, c-format msgid "update failed: %s\n" msgstr "aggiornamento fallito: %s\n" -#: g10/keyedit.c:734 +#: g10/keyedit.c:738 #, c-format msgid "update secret failed: %s\n" msgstr "aggiornamento della chiave segreta fallito: %s\n" -#: g10/keyedit.c:741 +#: g10/keyedit.c:745 msgid "Key not changed so no update needed.\n" msgstr "La chiave non Х cambiata quindi non sono necessari aggiornamenti.\n" -#: g10/keyedit.c:744 g10/keyedit.c:803 +#: g10/keyedit.c:748 g10/keyedit.c:807 #, c-format msgid "update of trustdb failed: %s\n" msgstr "aggiornamento del trustdb fallito: %s\n" -#: g10/keyedit.c:777 +#: g10/keyedit.c:781 msgid "Really sign all user ids? " msgstr "Firmo davvero tutti gli user id? " -#: g10/keyedit.c:778 +#: g10/keyedit.c:782 msgid "Hint: Select the user ids to sign\n" msgstr "Suggerimento: seleziona gli user id da firmare\n" -#: g10/keyedit.c:814 g10/keyedit.c:835 +#: g10/keyedit.c:818 g10/keyedit.c:839 msgid "You must select at least one user id.\n" msgstr "Devi selezionare almeno un user id.\n" -#: g10/keyedit.c:816 +#: g10/keyedit.c:820 msgid "You can't delete the last user id!\n" msgstr "Non puoi cancellare l'ultimo user id!\n" -#: g10/keyedit.c:819 +#: g10/keyedit.c:823 msgid "Really remove all selected user ids? " msgstr "Tolgo davvero tutti gli user id selezionati? " -#: g10/keyedit.c:820 +#: g10/keyedit.c:824 msgid "Really remove this user id? " msgstr "Tolgo davvero questo user id? " -#: g10/keyedit.c:858 g10/keyedit.c:880 +#: g10/keyedit.c:860 g10/keyedit.c:882 msgid "You must select at least one key.\n" msgstr "Devi selezionare almeno una chiave.\n" -#: g10/keyedit.c:862 +#: g10/keyedit.c:864 msgid "Do you really want to delete the selected keys? " msgstr "Vuoi davvero cancellare le chiavi selezionate? " -#: g10/keyedit.c:863 +#: g10/keyedit.c:865 msgid "Do you really want to delete this key? " msgstr "Vuoi davvero cancellare questa chiave? " -#: g10/keyedit.c:884 +#: g10/keyedit.c:886 msgid "Do you really want to revoke the selected keys? " msgstr "Vuoi davvero revocare le chiavi selezionate? " -#: g10/keyedit.c:885 +#: g10/keyedit.c:887 msgid "Do you really want to revoke this key? " msgstr "Vuoi davvero revocare questa chiave? " -#: g10/keyedit.c:939 +#: g10/keyedit.c:949 msgid "Invalid command (try \"help\")\n" msgstr "Comando non valido (prova \"help\")\n" -#: g10/keyedit.c:1294 +#: g10/keyedit.c:1039 +#, fuzzy +msgid "This key has been disabled" +msgstr "Nota: questa chiave Х scaduta!\n" + +#: g10/keyedit.c:1310 msgid "Delete this good signature? (y/N/q)" msgstr "Cancellare questa firma corretta? (s/N/q)" -#: g10/keyedit.c:1298 +#: g10/keyedit.c:1314 msgid "Delete this invalid signature? (y/N/q)" msgstr "Cancellare questa firma non valida? (s/N/q)" -#: g10/keyedit.c:1302 +#: g10/keyedit.c:1318 msgid "Delete this unknown signature? (y/N/q)" msgstr "Cancellare questa firma sconosciuta? (s/N/q)" -#: g10/keyedit.c:1308 +#: g10/keyedit.c:1324 msgid "Really delete this self-signature? (y/N)" msgstr "Cancellare davvero questa autofirma? (s/N)" -#: g10/keyedit.c:1322 +#: g10/keyedit.c:1338 #, c-format msgid "Deleted %d signature.\n" msgstr "Cancellata %d firma.\n" -#: g10/keyedit.c:1323 +#: g10/keyedit.c:1339 #, c-format msgid "Deleted %d signatures.\n" msgstr "Cancellate %d firme.\n" -#: g10/keyedit.c:1326 +#: g10/keyedit.c:1342 msgid "Nothing deleted.\n" msgstr "Non Х stato cancellato nulla.\n" -#: g10/keyedit.c:1395 +#: g10/keyedit.c:1411 msgid "Please remove selections from the secret keys.\n" msgstr "Togli le selezioni dalle chiavi segrete.\n" -#: g10/keyedit.c:1401 +#: g10/keyedit.c:1417 msgid "Please select at most one secondary key.\n" msgstr "Seleziona al massimo una chiave secondaria.\n" -#: g10/keyedit.c:1405 +#: g10/keyedit.c:1421 msgid "Changing expiration time for a secondary key.\n" msgstr "Cambio la data di scadenza per una chiave secondaria.\n" -#: g10/keyedit.c:1407 +#: g10/keyedit.c:1423 msgid "Changing expiration time for the primary key.\n" msgstr "Cambio la data di scadenza per la chiave primaria.\n" -#: g10/keyedit.c:1448 +#: g10/keyedit.c:1464 msgid "You can't change the expiration date of a v3 key\n" msgstr "Non Х possibile cambiare la data di scadenza di una chiave v3\n" -#: g10/keyedit.c:1464 +#: g10/keyedit.c:1480 msgid "No corresponding signature in secret ring\n" msgstr "Manca la firma corrispondente nel portachiavi segreto\n" -#: g10/keyedit.c:1524 +#: g10/keyedit.c:1540 #, c-format msgid "No user id with index %d\n" msgstr "Nessun user id con l'indice %d\n" -#: g10/keyedit.c:1570 +#: g10/keyedit.c:1586 #, c-format msgid "No secondary key with index %d\n" msgstr "Nessuna chiave secondaria con l'indice %d\n" -#: g10/keyedit.c:1668 +#: g10/keyedit.c:1684 msgid "user ID: \"" msgstr "user ID: \"" -#: g10/keyedit.c:1671 +#: g10/keyedit.c:1687 #, c-format msgid "" "\"\n" "signed with your key %08lX at %s\n" msgstr "" "\"\n" "firmata con la tua chiave %08lX a %s\n" "\n" -#: g10/keyedit.c:1675 +#: g10/keyedit.c:1691 msgid "Create a revocation certificate for this signature? (y/N)" msgstr "Creare un certificato di revoca per questa firma? (s/N)" -#: g10/keyedit.c:1755 +#: g10/keyedit.c:1771 msgid "Really create the revocation certificates? (y/N)" msgstr "Creare davvero i certificati di revoca? (s/N)" -#: g10/keyedit.c:1778 +#: g10/keyedit.c:1794 msgid "no secret key\n" msgstr "manca la chiave segreta\n" #: g10/mainproc.c:184 #, c-format msgid "public key is %08lX\n" msgstr "la chiave pubblica Х %08lX\n" -#: g10/mainproc.c:212 +#: g10/mainproc.c:213 msgid "public key encrypted data: good DEK\n" msgstr "dati cifrati con la chiave pubblica: DEK corretto\n" #. fixme: defer this message until we have parsed all packets of #. * this type - do this by building a list of keys with their stati #. * and store it with the context. do_proc_packets can then use #. * this list to display some information -#: g10/mainproc.c:219 +#: g10/mainproc.c:220 #, c-format msgid "public key decryption failed: %s\n" msgstr "decifratura della chiave pubblica fallita: %s\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:248 msgid "decryption okay\n" msgstr "decifratura corretta\n" -#: g10/mainproc.c:252 +#: g10/mainproc.c:253 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "ATTENZIONE: il messaggio cifrato Х stato manipolato!\n" -#: g10/mainproc.c:257 +#: g10/mainproc.c:258 #, c-format msgid "decryption failed: %s\n" msgstr "decifratura fallita: %s\n" -#: g10/mainproc.c:275 +#: g10/mainproc.c:276 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTA: il mittente ha richiesto \"solo-per-i-tuoi-occhi\"\n" -#: g10/mainproc.c:277 +#: g10/mainproc.c:278 #, c-format msgid "original file name='%.*s'\n" msgstr "nome del file originale='%.*s'\n" -#: g10/mainproc.c:505 g10/mainproc.c:514 +#: g10/mainproc.c:506 g10/mainproc.c:515 msgid "WARNING: invalid notation data found\n" msgstr "ATTENZIONE: trovati dati di una nota non validi\n" -#: g10/mainproc.c:517 +#: g10/mainproc.c:518 msgid "Notation: " msgstr "Nota: " -#: g10/mainproc.c:524 +#: g10/mainproc.c:525 msgid "Policy: " msgstr "Policy: " -#: g10/mainproc.c:929 +#: g10/mainproc.c:930 msgid "signature verification suppressed\n" msgstr "verifica della firma soppressa\n" -#: g10/mainproc.c:935 +#: g10/mainproc.c:936 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Firma fatta %.*s usando la chiave %s con ID %08lX\n" #. just in case that we have no userid -#: g10/mainproc.c:961 g10/mainproc.c:972 +#: g10/mainproc.c:962 g10/mainproc.c:973 msgid "BAD signature from \"" msgstr "Firma NON corretta da \"" -#: g10/mainproc.c:962 g10/mainproc.c:973 +#: g10/mainproc.c:963 g10/mainproc.c:974 msgid "Good signature from \"" msgstr "Firma valida da \"" -#: g10/mainproc.c:964 +#: g10/mainproc.c:965 msgid " aka \"" msgstr " anche noto come \"" -#: g10/mainproc.c:1015 +#: g10/mainproc.c:1016 #, c-format msgid "Can't check signature: %s\n" msgstr "Impossibile controllare la firma: %s\n" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1110 msgid "old style (PGP 2.x) signature\n" msgstr "firma vecchio stile (PGP 2.x)\n" -#: g10/mainproc.c:1114 +#: g10/mainproc.c:1115 msgid "invalid root packet detected in proc_tree()\n" msgstr "individuato un pacchetto radice non valido in proc_tree()\n" #: g10/misc.c:93 #, c-format msgid "can't disable core dumps: %s\n" msgstr "impossibile disabilitare i core dump: %s\n" #: g10/misc.c:96 msgid "WARNING: program may create a core file!\n" msgstr "ATTENZIONE: il programma potrebbe creare un file di core!\n" #: g10/misc.c:203 msgid "Experimental algorithms should not be used!\n" msgstr "Gli algoritmi sperimentali non dovrebbero essere usati!\n" #: g10/misc.c:217 msgid "" "RSA keys are deprecated; please consider creating a new key and use this key " "in the future\n" msgstr "" "Le chiavi RSA sono deprecate; per favore considera di creare una nuova " "chiave\n" "e usarla in futuro\n" #: g10/misc.c:239 msgid "this cipher algorithm is depreciated; please use a more standard one!\n" msgstr "questo algoritmo di cifratura Х deprecato; usatene uno piЫ standard!\n" #: g10/parse-packet.c:112 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "impossibile gestire l'algoritmo a chiave pubblica %d\n" #: g10/parse-packet.c:931 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "il sottopacchetto di tipo %d ha un bit critico impostato\n" -#: g10/passphrase.c:157 +#: g10/passphrase.c:159 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" "user: \"" msgstr "" "\n" "Ti serve una passphrase per sbloccare la chiave segreta\n" "dell'utente: \"" -#: g10/passphrase.c:166 +#: g10/passphrase.c:168 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "chiave %2$s di %1$u bit, ID %3$08lX, creata il %4$s" -#: g10/passphrase.c:171 +#: g10/passphrase.c:173 #, c-format msgid " (main key ID %08lX)" msgstr " (key ID principale %08lX)" -#: g10/passphrase.c:192 +#: g10/passphrase.c:194 msgid "Enter passphrase: " msgstr "Inserisci la passphrase: " -#: g10/passphrase.c:196 +#: g10/passphrase.c:198 msgid "Repeat passphrase: " msgstr "Ripeti la passphrase: " #: g10/plaintext.c:63 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "i dati non sono stati salvati; usa l'opzione \"--output\" per salvarli\n" #: g10/plaintext.c:266 msgid "Please enter name of data file: " msgstr "Inserisci il nome del file di dati: " #: g10/plaintext.c:287 msgid "reading stdin ...\n" msgstr "viene letto stdin...\n" #: g10/plaintext.c:360 #, c-format msgid "can't open signed data `%s'\n" msgstr "impossibile aprire i dati firmati `%s'\n" #: g10/pubkey-enc.c:79 #, c-format msgid "anonymous receiver; trying secret key %08lX ...\n" msgstr "destinatario anonimo; provo la chiave segreta %08lX ...\n" #: g10/pubkey-enc.c:85 msgid "okay, we are the anonymous recipient.\n" msgstr "bene, siamo il destinatario anonimo.\n" #: g10/pubkey-enc.c:137 msgid "old encoding of the DEK is not supported\n" msgstr "la vecchia codifica del DEK non Х gestita\n" #: g10/pubkey-enc.c:191 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "" "NOTA: l'algoritmo di cifratura %d non Х stato trovato nelle impostazioni\n" #: g10/seckey-cert.c:55 #, c-format msgid "protection algorithm %d is not supported\n" msgstr "l'algoritmo di protezione %d non Х gestito\n" #: g10/seckey-cert.c:171 msgid "Invalid passphrase; please try again ...\n" msgstr "Passphrase non valida; riprova...\n" #: g10/seckey-cert.c:227 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "ATTENZIONE: Individuata una chiave debole - per favore cambia ancora la\n" "passphrase.\n" -#: g10/sig-check.c:187 +#: g10/sig-check.c:199 msgid "assuming bad MDC due to an unknown critical bit\n" msgstr "si presume un MDC non valido a causa di un bit critico sconosciuto\n" -#: g10/sig-check.c:283 +#: g10/sig-check.c:295 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "questa Х una chiave ElGamal generata da PGP e NON Х sicura per le firme!\n" -#: g10/sig-check.c:291 +#: g10/sig-check.c:303 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "la chiave pubblica Х %lu secondo piЫ recente della firma\n" -#: g10/sig-check.c:292 +#: g10/sig-check.c:304 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "la chiave pubblica Х %lu secondi piЫ recente della firma\n" -#: g10/sig-check.c:308 +#: g10/sig-check.c:320 #, c-format msgid "NOTE: signature key expired %s\n" msgstr "NOTA: chiave per firmare scaduta il %s\n" -#: g10/sig-check.c:365 +#: g10/sig-check.c:377 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" "si presume una firma non valida a causa di un bit critico sconosciuto\n" #: g10/sign.c:132 #, c-format msgid "%s signature from: %s\n" msgstr "Firma %s da: %s\n" #: g10/sign.c:263 g10/sign.c:554 #, c-format msgid "can't create %s: %s\n" msgstr "impossibile creare %s: %s\n" #: g10/sign.c:361 msgid "signing:" msgstr "firma:" #: g10/sign.c:401 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "ATTENZIONE: `%s' Х un file vuoto\n" #: g10/textfilter.c:128 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "impossibile gestire linee di testo piЫ lunghe di %d caratteri\n" #: g10/textfilter.c:197 #, c-format msgid "input line longer than %d characters\n" msgstr "linea di input piЫ lunga di %d caratteri\n" -#: g10/tdbio.c:116 g10/tdbio.c:1505 +#: g10/tdbio.c:116 g10/tdbio.c:1634 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb rec %lu: lseek fallita: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1512 +#: g10/tdbio.c:122 g10/tdbio.c:1641 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb rec %lu: scrittura fallita (n=%d): %s\n" #: g10/tdbio.c:232 msgid "trustdb transaction too large\n" msgstr "transazione del trustdb troppo grande\n" #: g10/tdbio.c:424 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: impossibile acedere a: %s\n" #: g10/ringedit.c:296 g10/tdbio.c:444 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: impossibile creare la directory: %s\n" #: g10/ringedit.c:302 g10/tdbio.c:447 #, c-format msgid "%s: directory created\n" msgstr "%s: directory creata\n" #: g10/tdbio.c:451 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: la directory non esiste!\n" -#: g10/openfile.c:144 g10/openfile.c:215 g10/ringedit.c:1344 g10/tdbio.c:457 +#: g10/openfile.c:182 g10/openfile.c:253 g10/ringedit.c:1344 g10/tdbio.c:457 #, c-format msgid "%s: can't create: %s\n" msgstr "%s: impossibile creare: %s\n" #: g10/tdbio.c:472 g10/tdbio.c:521 #, c-format msgid "%s: can't create lock\n" msgstr "%s: impossibile creare il lock\n" #: g10/tdbio.c:486 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: creazione del record della versione fallita: %s" #: g10/tdbio.c:490 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: Х stato creato un trustdb non valido\n" #: g10/tdbio.c:493 #, c-format msgid "%s: trustdb created\n" msgstr "%s: creato il trustdb\n" #: g10/tdbio.c:530 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: trustdb non valido\n" #: g10/tdbio.c:563 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: creazione della tabella hash fallita: %s\n" #: g10/tdbio.c:571 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: errore durante l'aggiornamento del record di versione: %s\n" #: g10/tdbio.c:587 g10/tdbio.c:626 g10/tdbio.c:648 g10/tdbio.c:678 -#: g10/tdbio.c:703 g10/tdbio.c:1438 g10/tdbio.c:1465 +#: g10/tdbio.c:703 g10/tdbio.c:1567 g10/tdbio.c:1594 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: errore durante la lettura del record di versione: %s\n" #: g10/tdbio.c:600 g10/tdbio.c:659 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: errore durante la scrittura del record di versione: %s\n" -#: g10/tdbio.c:1132 +#: g10/tdbio.c:1246 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek fallita: %s\n" -#: g10/tdbio.c:1140 +#: g10/tdbio.c:1254 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: read fallita (n=%d): %s\n" -#: g10/tdbio.c:1161 +#: g10/tdbio.c:1275 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: non Х un file di trustdb\n" -#: g10/tdbio.c:1177 +#: g10/tdbio.c:1291 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: record di versione con recnum %lu\n" -#: g10/tdbio.c:1182 +#: g10/tdbio.c:1296 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: versione %d del file non valida\n" -#: g10/tdbio.c:1471 +#: g10/tdbio.c:1600 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: errore durante la lettura del record libero: %s\n" -#: g10/tdbio.c:1479 +#: g10/tdbio.c:1608 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: errore durante la scrittura del dir record: %s\n" -#: g10/tdbio.c:1489 +#: g10/tdbio.c:1618 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: azzeramento di un record fallito: %s\n" -#: g10/tdbio.c:1519 +#: g10/tdbio.c:1648 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: accodatura a un record fallita: %s\n" -#: g10/tdbio.c:1630 +#: g10/tdbio.c:1759 msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "Il trustdb Х danneggiato; eseguire \"gpg --fix-trust-db\".\n" -#: g10/trustdb.c:163 +#: g10/trustdb.c:160 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "trust record %lu, req type %d: read fallita: %s\n" -#: g10/trustdb.c:178 +#: g10/trustdb.c:175 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "trust record %lu, req type %d: write fallita: %s\n" -#: g10/trustdb.c:192 +#: g10/trustdb.c:189 #, c-format msgid "trust record %lu: delete failed: %s\n" msgstr "trust record %lu: delete fallita: %s\n" -#: g10/trustdb.c:206 +#: g10/trustdb.c:203 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: sync fallita: %s\n" -#: g10/trustdb.c:386 +#: g10/trustdb.c:347 #, c-format msgid "error reading dir record for LID %lu: %s\n" msgstr "errore durante la lettura del dir record per il LID %lu: %s\n" -#: g10/trustdb.c:393 +#: g10/trustdb.c:354 #, c-format msgid "lid %lu: expected dir record, got type %d\n" msgstr "lid %lu: atteso un dir record, trovato uno di tipo %d\n" -#: g10/trustdb.c:398 +#: g10/trustdb.c:359 #, c-format msgid "no primary key for LID %lu\n" msgstr "manca una chiave primaria per il LID %lu\n" -#: g10/trustdb.c:403 +#: g10/trustdb.c:364 #, c-format msgid "error reading primary key for LID %lu: %s\n" msgstr "" "errore durante la lettura della chiave primaria per il\n" "LID %lu: %s\n" -#: g10/trustdb.c:442 +#: g10/trustdb.c:403 #, c-format msgid "get_dir_record: search_record failed: %s\n" msgstr "get_dir_record: search_record fallito: %s\n" -#: g10/trustdb.c:510 +#: g10/trustdb.c:458 #, c-format msgid "NOTE: secret key %08lX is NOT protected.\n" msgstr "NOTA: la chiave segreta %08lX NON Х protetta.\n" -#: g10/trustdb.c:518 +#: g10/trustdb.c:466 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "chiave %08lX: chiave segreta senza chiave pubblica - saltata\n" -#: g10/trustdb.c:525 +#: g10/trustdb.c:473 #, c-format msgid "key %08lX: secret and public key don't match\n" msgstr "chiave %08lX: le chiavi segreta e pubblica non corrispondono\n" -#: g10/trustdb.c:535 +#: g10/trustdb.c:483 #, c-format msgid "key %08lX: can't put it into the trustdb\n" msgstr "chiave %08lX: impossibile metterla nel trustdb\n" -#: g10/trustdb.c:541 +#: g10/trustdb.c:489 #, c-format msgid "key %08lX: query record failed\n" msgstr "chiave %08lX: richiesta del record fallita\n" -#: g10/trustdb.c:550 +#: g10/trustdb.c:498 #, c-format msgid "key %08lX: already in trusted key table\n" msgstr "chiave %08lX: giЮ nella tabella delle chiavi affidabili\n" -#: g10/trustdb.c:553 +#: g10/trustdb.c:501 #, c-format msgid "key %08lX: accepted as trusted key.\n" msgstr "chiave %08lX: accettata come chiave affidabile\n" -#: g10/trustdb.c:561 +#: g10/trustdb.c:509 #, c-format msgid "enumerate secret keys failed: %s\n" msgstr "enumerate secret keys fallito: %s\n" -#: g10/trustdb.c:851 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" -msgstr "" -"NOTA: rec di %lu[%d] nella hintlist di %lu ma marcato come verificato\n" - -#: g10/trustdb.c:855 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" -msgstr "NOTA: rec di %lu[%d] nella hintlist di %lu ma non marcato\n" - -#. we need the dir record -#: g10/trustdb.c:862 -#, c-format -msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" -msgstr "Il rec di %lu[%d] nella hintlist di %lu non punta a un record dir\n" - -#: g10/trustdb.c:868 -#, c-format -msgid "lid %lu: no primary key\n" -msgstr "lid %lu: manca la chiave primaria\n" - -#: g10/trustdb.c:901 -#, c-format -msgid "lid %lu: user id not found in keyblock\n" -msgstr "lid %lu: user id non trovato nel keyblock\n" - -#: g10/trustdb.c:905 -#, c-format -msgid "lid %lu: user id without signature\n" -msgstr "chiave %08lX: user id senza firma\n" - -#: g10/trustdb.c:912 -#, c-format -msgid "lid %lu: self-signature in hintlist\n" -msgstr "lid %lu: autofirma nella hintlist\n" - -#: g10/trustdb.c:923 g10/trustdb.c:1675 g10/trustdb.c:1766 -msgid "Valid certificate revocation" -msgstr "Revoca del certificato valida" - -#: g10/trustdb.c:924 g10/trustdb.c:1676 g10/trustdb.c:1767 -msgid "Good certificate" -msgstr "Certificato corretto" - -#: g10/trustdb.c:933 -msgid "very strange: no public key\n" -msgstr "molto strano: non ci sono chiavi pubbliche\n" - -#: g10/trustdb.c:982 -#, c-format -msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" -msgstr "hintlist %lu[%d] di %lu non punta a un record dir\n" - -#: g10/trustdb.c:988 -#, c-format -msgid "lid %lu does not have a key\n" -msgstr "Il lid %lu non ha una chiave\n" - -#: g10/trustdb.c:998 -#, c-format -msgid "lid %lu: can't get keyblock: %s\n" -msgstr "lid %lu: impossibile ottenere il keyblock: %s\n" - -#: g10/trustdb.c:1055 g10/trustdb.c:2030 -#, c-format -msgid "tdbio_search_dir failed: %s\n" +#: g10/trustdb.c:800 +#, fuzzy, c-format +msgid "tdbio_search_sdir failed: %s\n" msgstr "tdbio_search_dir fallita: %s\n" -#: g10/trustdb.c:1210 +#: g10/trustdb.c:875 #, c-format msgid "key %08lX.%lu: Good subkey binding\n" msgstr "chiave %08lX.%lu: Legame con la subchiave corretto\n" -#: g10/trustdb.c:1216 g10/trustdb.c:1259 +#: g10/trustdb.c:881 g10/trustdb.c:916 #, c-format msgid "key %08lX.%lu: Invalid subkey binding: %s\n" msgstr "chiave %08lX.%lu: Legame con la subchiave non valido: %s\n" -#: g10/trustdb.c:1232 +#: g10/trustdb.c:893 #, c-format msgid "key %08lX.%lu: Valid key revocation\n" msgstr "chiave %08lX.%lu: Revoca della chiave valida\n" -#: g10/trustdb.c:1238 +#: g10/trustdb.c:899 #, c-format msgid "key %08lX.%lu: Invalid key revocation: %s\n" msgstr "chiave %08lX.%lu: Revoca della chiave non valida: %s\n" -#: g10/trustdb.c:1253 +#: g10/trustdb.c:910 #, c-format msgid "key %08lX.%lu: Valid subkey revocation\n" msgstr "chiave %08lX.%lu: Revoca della subchiave valida\n" -#: g10/trustdb.c:1360 +#: g10/trustdb.c:1021 msgid "Good self-signature" msgstr "Autofirma corretta" -#: g10/trustdb.c:1371 +#: g10/trustdb.c:1031 msgid "Invalid self-signature" msgstr "Autofirma non valida" -#: g10/trustdb.c:1403 -msgid "Valid user ID revocation skipped due to a newer self signature\n" +#: g10/trustdb.c:1058 +#, fuzzy +msgid "Valid user ID revocation skipped due to a newer self signature" msgstr "" "Evitata la revoca dell'user ID valida a causa di una autofirma piЫ recente\n" -#: g10/trustdb.c:1410 -msgid "Valid user ID revocation\n" +#: g10/trustdb.c:1064 +#, fuzzy +msgid "Valid user ID revocation" msgstr "Revoca dell'user ID valida\n" -#: g10/trustdb.c:1417 +#: g10/trustdb.c:1069 msgid "Invalid user ID revocation" msgstr "Revoca dell'user ID non valida" -#: g10/trustdb.c:1512 -msgid "Too many preferences" -msgstr "Troppe preferenze" - -#: g10/trustdb.c:1526 -msgid "Too many preference items" -msgstr "Troppi elementi di preferenza" - -#: g10/trustdb.c:1549 g10/trustdb.c:3075 g10/trustdb.c:3105 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "ATTENZIONE: non Х ancora possibile gestire record pref lunghi\n" - -#: g10/trustdb.c:1654 -msgid "duplicated certificate - deleted" -msgstr "certificato doppio - cancellato" +#: g10/trustdb.c:1110 +msgid "Valid certificate revocation" +msgstr "Revoca del certificato valida" -#: g10/trustdb.c:1692 -msgid "public key not anymore available" -msgstr "chiave pubblica non piЫ disponibile" +#: g10/trustdb.c:1111 +msgid "Good certificate" +msgstr "Certificato corretto" -#: g10/trustdb.c:1702 g10/trustdb.c:1791 +#: g10/trustdb.c:1132 msgid "Invalid certificate revocation" msgstr "Certificato di revoca non valido" -#: g10/trustdb.c:1703 g10/trustdb.c:1792 +#: g10/trustdb.c:1133 msgid "Invalid certificate" msgstr "Certificato non valido" -#: g10/trustdb.c:1720 -#, c-format -msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" -msgstr "uid %08lX.%lu/%02X%02X: ha shadow dir %lu ma non Х ancora marcato.\n" - -#: g10/trustdb.c:1734 +#: g10/trustdb.c:1150 g10/trustdb.c:1154 #, c-format msgid "sig record %lu[%d] points to wrong record.\n" msgstr "il sig recor di %lu[%d] punta al record sbagliato.\n" -#. that should never happen -#: g10/trustdb.c:2007 -#, c-format -msgid "insert_trust_record: keyblock not found: %s\n" -msgstr "insert_trust_record: keyblock non trovato: %s\n" - -#: g10/trustdb.c:2408 -msgid "Ooops, no keys\n" -msgstr "Ooops, mancano le chiavi\n" +#: g10/trustdb.c:1206 +msgid "duplicated certificate - deleted" +msgstr "certificato doppio - cancellato" -#: g10/trustdb.c:2412 -msgid "Ooops, no user ids\n" -msgstr "Ooops, mancano gli user id\n" +#: g10/trustdb.c:1512 +#, c-format +msgid "tdbio_search_dir failed: %s\n" +msgstr "tdbio_search_dir fallita: %s\n" -#: g10/trustdb.c:2529 +#: g10/trustdb.c:1634 #, c-format msgid "lid ?: insert failed: %s\n" msgstr "lid ?: inserimento fallito: %s\n" -#: g10/trustdb.c:2534 +#: g10/trustdb.c:1639 #, c-format msgid "lid %lu: insert failed: %s\n" msgstr "lid %lu: inserimento fallito: %s\n" -#: g10/trustdb.c:2540 +#: g10/trustdb.c:1645 #, c-format msgid "lid %lu: inserted\n" msgstr "lid %lu: inserito\n" -#: g10/trustdb.c:2545 g10/trustdb.c:2654 -#, c-format -msgid "lid %lu: update failed: %s\n" -msgstr "lid %lu: aggiornamento fallito: %s\n" - -#: g10/trustdb.c:2551 g10/trustdb.c:2660 -#, c-format -msgid "lid %lu: updated\n" -msgstr "lid %lu: aggiornato\n" - -#: g10/trustdb.c:2556 g10/trustdb.c:2664 -#, c-format -msgid "lid %lu: okay\n" -msgstr "lid %lu: corretto\n" +#: g10/trustdb.c:1650 +#, fuzzy, c-format +msgid "error reading dir record: %s\n" +msgstr "%s: errore durante la lettura del record libero: %s\n" -#: g10/trustdb.c:2562 g10/trustdb.c:2671 +#: g10/trustdb.c:1658 g10/trustdb.c:1712 #, c-format msgid "%lu keys processed\n" msgstr "%lu chiavi esaminate\n" -#: g10/trustdb.c:2564 g10/trustdb.c:2675 +#: g10/trustdb.c:1660 g10/trustdb.c:1716 #, c-format msgid "\t%lu keys with errors\n" msgstr "\t%lu chiavi con errori\n" -#: g10/trustdb.c:2566 g10/trustdb.c:2677 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu chiavi aggiornate\n" - -#: g10/trustdb.c:2568 +#: g10/trustdb.c:1662 #, c-format msgid "\t%lu keys inserted\n" msgstr "\t%lu chiavi inserite\n" -#: g10/trustdb.c:2571 +#: g10/trustdb.c:1665 #, c-format msgid "enumerate keyblocks failed: %s\n" msgstr "enumerate keyblocks fallito: %s\n" -#: g10/trustdb.c:2598 -#, c-format -msgid "%s: keyblock read problem: %s\n" -msgstr "%s: il keyblock ha problemi di lettura: %s\n" - -#: g10/trustdb.c:2612 -#, c-format -msgid "%s: update failed: %s\n" -msgstr "%s: aggiornamento fallito: %s\n" - -#: g10/trustdb.c:2615 -#, c-format -msgid "%s: updated\n" -msgstr "%s: aggiornato\n" - -#: g10/trustdb.c:2617 -#, c-format -msgid "%s: okay\n" -msgstr "%s: va bene\n" - -#: g10/trustdb.c:2632 +#: g10/trustdb.c:1703 #, c-format msgid "lid %lu: dir record w/o key - skipped\n" msgstr "lid %lu: dir record senza chiave - saltato\n" -#: g10/trustdb.c:2645 -#, c-format -msgid "lid %lu: keyblock not found: %s\n" -msgstr "lid %lu: keyblock non trovato: %s\n" - -#: g10/trustdb.c:2673 +#: g10/trustdb.c:1714 #, c-format msgid "\t%lu keys skipped\n" msgstr "\t%lu chiavi saltate\n" -#: g10/trustdb.c:2743 +#: g10/trustdb.c:1718 +#, c-format +msgid "\t%lu keys updated\n" +msgstr "\t%lu chiavi aggiornate\n" + +#: g10/trustdb.c:2055 +msgid "Ooops, no keys\n" +msgstr "Ooops, mancano le chiavi\n" + +#: g10/trustdb.c:2059 +msgid "Ooops, no user ids\n" +msgstr "Ooops, mancano gli user id\n" + +#: g10/trustdb.c:2216 #, c-format msgid "check_trust: search dir record failed: %s\n" msgstr "check_trust: ricerca del dir record fallita: %s\n" -#: g10/trustdb.c:2750 +#: g10/trustdb.c:2223 #, c-format msgid "key %08lX: insert trust record failed: %s\n" msgstr "chiave %08lX: inserimento del record della fiducia fallito: %s\n" -#: g10/trustdb.c:2754 +#: g10/trustdb.c:2227 #, c-format msgid "key %08lX.%lu: inserted into trustdb\n" msgstr "chiave %08lX.%lu: inserita nel trustdb\n" -#: g10/trustdb.c:2762 +#: g10/trustdb.c:2235 #, c-format msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" msgstr "" "chiave %08lX.%lu: creata nel futuro (salto nel tempo o problema\n" "con l'orologio)\n" -#: g10/trustdb.c:2769 +#: g10/trustdb.c:2244 #, c-format msgid "key %08lX.%lu: expired at %s\n" msgstr "chiave %08lX.%lu: scaduta il %s\n" -#: g10/trustdb.c:2777 +#: g10/trustdb.c:2252 #, c-format msgid "key %08lX.%lu: trust check failed: %s\n" msgstr "chiave %08lX.%lu: controllo della fiducia fallito: %s\n" -#: g10/trustdb.c:2881 +#: g10/trustdb.c:2358 #, c-format msgid "user '%s' not found: %s\n" msgstr "utente `%s' non trovato: %s\n" -#: g10/trustdb.c:2883 +#: g10/trustdb.c:2360 #, c-format msgid "problem finding '%s' in trustdb: %s\n" msgstr "problema cercando `%s' nel trustdb: %s\n" -#: g10/trustdb.c:2886 +#: g10/trustdb.c:2363 #, c-format msgid "user '%s' not in trustdb - inserting\n" msgstr "l'utente `%s' non Х nel trustdb - viene inserito\n" -#: g10/trustdb.c:2889 +#: g10/trustdb.c:2366 #, c-format msgid "failed to put '%s' into trustdb: %s\n" msgstr "impossibile mettere `%s' nel trustdb: %s\n" +#: g10/trustdb.c:2552 g10/trustdb.c:2582 +msgid "WARNING: can't yet handle long pref records\n" +msgstr "ATTENZIONE: non Х ancora possibile gestire record pref lunghi\n" + #: g10/ringedit.c:316 #, c-format msgid "%s: can't create keyring: %s\n" msgstr "%s: impossibile creare il portachiavi: %s\n" #: g10/ringedit.c:333 g10/ringedit.c:1349 #, c-format msgid "%s: keyring created\n" msgstr "%s: portachiavi creato\n" #: g10/ringedit.c:1526 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "ATTENZIONE: esistono due file con informazioni confidenziali.\n" #: g10/ringedit.c:1527 #, c-format msgid "%s is the unchanged one\n" msgstr "%s Х quello non modificato\n" #: g10/ringedit.c:1528 #, c-format msgid "%s is the new one\n" msgstr "%s Х quello nuovo\n" #: g10/ringedit.c:1529 msgid "Please fix this possible security flaw\n" msgstr "Per favore risolvete questo possibile problema di sicurezza\n" #: g10/skclist.c:88 g10/skclist.c:125 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "la chiave non Х indicata come insicura - impossibile usarla con il RNG " "finto!\n" #: g10/skclist.c:113 #, c-format msgid "skipped `%s': %s\n" msgstr "saltata `%s': %s\n" #: g10/skclist.c:119 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " "signatures!\n" msgstr "" "%s: questa Х una chiave ElGamal generata da PGP che NON Х sicura per\n" "le firme!\n" #. do not overwrite #: g10/openfile.c:65 #, c-format msgid "File `%s' exists. " msgstr "Il file `%s' esiste. " #: g10/openfile.c:67 msgid "Overwrite (y/N)? " msgstr "Sovrascrivo (s/N)? " #: g10/openfile.c:97 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: suffisso sconosciuto\n" -#: g10/openfile.c:122 +#: g10/openfile.c:119 +#, fuzzy +msgid "Enter new filename" +msgstr "--store [nomefile]" + +#: g10/openfile.c:160 msgid "writing to stdout\n" msgstr "scrivo su stdout\n" -#: g10/openfile.c:181 +#: g10/openfile.c:219 #, c-format msgid "assuming signed data in `%s'\n" msgstr "presumo che i dati firmati siano in `%s'\n" -#: g10/openfile.c:231 +#: g10/openfile.c:269 #, c-format msgid "%s: new options file created\n" msgstr "%s: creato un nuovo file delle opzioni\n" #: g10/encr-data.c:66 #, c-format msgid "%s encrypted data\n" msgstr "dati cifrati con %s\n" #: g10/encr-data.c:68 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "cifrato con l'algoritmo sconosciuto %d\n" #: g10/encr-data.c:85 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "ATTENZIONE: il messaggio era stato cifrato usando una chiave debole\n" "per il cifrario simmetrico\n" #: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "creata una chiave debole - riprovo\n" #: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "Impossibile evitare una chiave debole per il cifrario simmetrico;\n" "ho provato %d volte!\n" #. begin of list #: g10/helptext.c:48 msgid "edit_ownertrust.value" msgstr "edit_ownertrust.value" #: g10/helptext.c:54 msgid "revoked_key.override" msgstr "revoked_key.override" #: g10/helptext.c:58 msgid "untrusted_key.override" msgstr "untrusted_key.override" #: g10/helptext.c:62 msgid "pklist.user_id.enter" msgstr "pklist.user_id.enter" #: g10/helptext.c:66 msgid "keygen.algo" msgstr "keygen.algo" #: g10/helptext.c:82 msgid "keygen.algo.elg_se" msgstr "keygen.algo.elg_se" #: g10/helptext.c:89 msgid "keygen.size" msgstr "keygen.size" #: g10/helptext.c:93 msgid "keygen.size.huge.okay" msgstr "keygen.size.huge.okay" #: g10/helptext.c:98 msgid "keygen.size.large.okay" msgstr "keygen.size.large.okay" #: g10/helptext.c:103 msgid "keygen.valid" msgstr "keygen.valid" -#: g10/helptext.c:107 +#: g10/helptext.c:110 msgid "keygen.valid.okay" msgstr "keygen.valid.okay" -#: g10/helptext.c:112 +#: g10/helptext.c:115 msgid "keygen.name" msgstr "keygen.name" -#: g10/helptext.c:117 +#: g10/helptext.c:120 msgid "keygen.email" msgstr "keygen.email" -#: g10/helptext.c:121 +#: g10/helptext.c:124 msgid "keygen.comment" msgstr "keygen.comment" -#: g10/helptext.c:126 +#: g10/helptext.c:129 msgid "keygen.userid.cmd" msgstr "keygen.userid.cmd" -#: g10/helptext.c:135 +#: g10/helptext.c:138 msgid "keygen.sub.okay" msgstr "keygen.sub.okay" -#: g10/helptext.c:139 +#: g10/helptext.c:142 msgid "sign_uid.okay" msgstr "sign_uid.okay" -#: g10/helptext.c:144 +#: g10/helptext.c:147 msgid "change_passwd.empty.okay" msgstr "change_passwd.empty.okay" -#: g10/helptext.c:149 -msgid "keyedit.cmd" -msgstr "keyedit.cmd" - -#: g10/helptext.c:153 +#: g10/helptext.c:152 msgid "keyedit.save.okay" msgstr "keyedit.save.okay" -#: g10/helptext.c:158 +#: g10/helptext.c:157 msgid "keyedit.cancel.okay" msgstr "keyedit.cancel.okay" -#: g10/helptext.c:162 +#: g10/helptext.c:161 msgid "keyedit.sign_all.okay" msgstr "keyedit.sign_all.okay" -#: g10/helptext.c:166 +#: g10/helptext.c:165 msgid "keyedit.remove.uid.okay" msgstr "keyedit.remove.uid.okay" -#: g10/helptext.c:171 +#: g10/helptext.c:170 msgid "keyedit.remove.subkey.okay" msgstr "keyedit.remove.subkey.okay" -#: g10/helptext.c:176 +#: g10/helptext.c:175 msgid "keyedit.delsig.valid" msgstr "keyedit.delsig.valid" -#: g10/helptext.c:181 +#: g10/helptext.c:180 msgid "keyedit.delsig.unknown" msgstr "keyedit.delsig.unknown" -#: g10/helptext.c:187 +#: g10/helptext.c:186 msgid "keyedit.delsig.invalid" msgstr "keyedit.delsig.invalid" -#: g10/helptext.c:191 +#: g10/helptext.c:190 msgid "keyedit.delsig.selfsig" msgstr "keyedit.delsig.selfsig<" -#: g10/helptext.c:200 +#: g10/helptext.c:199 msgid "passphrase.enter" msgstr "passphrase.enter" -#: g10/helptext.c:207 +#: g10/helptext.c:206 msgid "passphrase.repeat" msgstr "passphrase.repeat" -#: g10/helptext.c:211 +#: g10/helptext.c:210 msgid "detached_signature.filename" msgstr "detached_signature.filename" +#. openfile.c (overwrite_filep) #: g10/helptext.c:215 msgid "openfile.overwrite.okay" msgstr "openfile.overwrite.okay" -#: g10/helptext.c:229 +#. openfile.c (ask_outfile_name) +#: g10/helptext.c:220 +msgid "openfile.askoutname" +msgstr "" + +#: g10/helptext.c:235 msgid "No help available" msgstr "Non Х disponibile un aiuto" -#: g10/helptext.c:241 +#: g10/helptext.c:247 #, c-format msgid "No help available for `%s'" msgstr "Non Х disponibile un aiuto per `%s'" + +#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" +#~ msgstr "" +#~ "NOTA: rec di %lu[%d] nella hintlist di %lu ma marcato come verificato\n" + +#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" +#~ msgstr "NOTA: rec di %lu[%d] nella hintlist di %lu ma non marcato\n" + +#~ msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" +#~ msgstr "Il rec di %lu[%d] nella hintlist di %lu non punta a un record dir\n" + +#~ msgid "lid %lu: no primary key\n" +#~ msgstr "lid %lu: manca la chiave primaria\n" + +#~ msgid "lid %lu: user id not found in keyblock\n" +#~ msgstr "lid %lu: user id non trovato nel keyblock\n" + +#~ msgid "lid %lu: user id without signature\n" +#~ msgstr "chiave %08lX: user id senza firma\n" + +#~ msgid "lid %lu: self-signature in hintlist\n" +#~ msgstr "lid %lu: autofirma nella hintlist\n" + +#~ msgid "very strange: no public key\n" +#~ msgstr "molto strano: non ci sono chiavi pubbliche\n" + +#~ msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" +#~ msgstr "hintlist %lu[%d] di %lu non punta a un record dir\n" + +#~ msgid "lid %lu does not have a key\n" +#~ msgstr "Il lid %lu non ha una chiave\n" + +#~ msgid "lid %lu: can't get keyblock: %s\n" +#~ msgstr "lid %lu: impossibile ottenere il keyblock: %s\n" + +#~ msgid "Too many preferences" +#~ msgstr "Troppe preferenze" + +#~ msgid "Too many preference items" +#~ msgstr "Troppi elementi di preferenza" + +#~ msgid "public key not anymore available" +#~ msgstr "chiave pubblica non piЫ disponibile" + +#~ msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" +#~ msgstr "" +#~ "uid %08lX.%lu/%02X%02X: ha shadow dir %lu ma non Х ancora marcato.\n" + +#~ msgid "insert_trust_record: keyblock not found: %s\n" +#~ msgstr "insert_trust_record: keyblock non trovato: %s\n" + +#~ msgid "lid %lu: update failed: %s\n" +#~ msgstr "lid %lu: aggiornamento fallito: %s\n" + +#~ msgid "lid %lu: updated\n" +#~ msgstr "lid %lu: aggiornato\n" + +#~ msgid "lid %lu: okay\n" +#~ msgstr "lid %lu: corretto\n" + +#~ msgid "%s: keyblock read problem: %s\n" +#~ msgstr "%s: il keyblock ha problemi di lettura: %s\n" + +#~ msgid "%s: update failed: %s\n" +#~ msgstr "%s: aggiornamento fallito: %s\n" + +#~ msgid "%s: updated\n" +#~ msgstr "%s: aggiornato\n" + +#~ msgid "%s: okay\n" +#~ msgstr "%s: va bene\n" + +#~ msgid "lid %lu: keyblock not found: %s\n" +#~ msgstr "lid %lu: keyblock non trovato: %s\n" + +#~ msgid "keyedit.cmd" +#~ msgstr "keyedit.cmd" diff --git a/po/pl.po b/po/pl.po index e88544761..8378d3050 100644 --- a/po/pl.po +++ b/po/pl.po @@ -1,3520 +1,3526 @@ # GNU PG polish translation # Copyright (C) 1998 Free Software Foundation, Inc. # Janusz A. Urbanowicz , 1998. # # msgid "" msgstr "" "Project-Id-Version: gnupg-0.9.7\n" -"POT-Creation-Date: 1999-06-26 11:22+0200\n" +"POT-Creation-Date: 1999-07-06 17:34+0200\n" "PO-Revision-Date: 1999-05-30 19:08+02:00\n" "Last-Translator: Janusz A. Urbanowicz \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" "Xgettext-Options: --default-domain=gnupg --directory=.. --add-comments " "--keywor\\d=_ --keyword=N_ --files-from=./POTFILES.in\n" "Files: util/secmem.c util/argparse.c cipher/random.c cipher/rand-dummy.c " "cipher\\/rand-unix.c cipher/rand-w32.c g10/g10.c g10/pkclist.c g10/keygen.c " "g10/decrypt\\.c g10/encode.c g10/import.c g10/keyedit.c g10/keylist.c " "g10/mainproc.c g10/pas\\sphrase.c g10/plaintext.c g10/pref.c " "g10/seckey-cert.c g10/sig-check.c g10/sign\\.c g10/trustdb.c g10/verify.c " "g10/status.c g10/pubkey-enc.c\n" -#: util/secmem.c:76 +#: util/secmem.c:79 msgid "Warning: using insecure memory!\n" msgstr "Ostrze©enie: u©ywana pamiЙФ nie jest pamiЙci╠ bezpieczn╠!\n" -#: util/secmem.c:249 +#: util/secmem.c:275 msgid "operation is not possible without initialized secure memory\n" msgstr "operacja niemo©liwa do wykonania bez dostЙpnej pamiЙci bezpiecznej\n" -#: util/secmem.c:250 +#: util/secmem.c:276 msgid "(you may have used the wrong program for this task)\n" msgstr "(prawdopodobnie u©ywany program jest niewЁa╤ciwy dlatego zadania)\n" -#: util/miscutil.c:156 util/miscutil.c:173 +#: util/miscutil.c:254 util/miscutil.c:271 msgid "yes" msgstr "tak" -#: util/miscutil.c:157 util/miscutil.c:175 +#: util/miscutil.c:255 util/miscutil.c:273 msgid "yY" msgstr "tT" -#: g10/keyedit.c:559 util/miscutil.c:174 +#: g10/keyedit.c:561 util/miscutil.c:272 msgid "quit" msgstr "wyj╤cie" -#: util/miscutil.c:176 +#: util/miscutil.c:274 #, fuzzy msgid "qQ" msgstr "w" #: util/errors.c:54 msgid "general error" msgstr "bЁ╠d ogСlny" #: util/errors.c:55 msgid "unknown packet type" msgstr "nieznany rodzaj pakietu" #: util/errors.c:56 msgid "unknown version" msgstr "nieznana wersja" #: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "nieznany algorytm klucza publicznego" #: util/errors.c:58 msgid "unknown digest algorithm" msgstr "nieznany algorytm skrСtu" #: util/errors.c:59 msgid "bad public key" msgstr "niepoprawny klucz publiczny" #: util/errors.c:60 msgid "bad secret key" msgstr "niepoprawny klucz prywatny" #: util/errors.c:61 msgid "bad signature" msgstr "niepoprawny podpis" #: util/errors.c:62 msgid "checksum error" msgstr "bЁ╠d sumy kontrolnej" #: util/errors.c:63 msgid "bad passphrase" msgstr "niepoprawne wyra©enie przej╤ciowe" #: util/errors.c:64 msgid "public key not found" msgstr "klucz publiczny nie odnaleziony" #: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "nieznany algorytm szyfruj╠cy" #: util/errors.c:66 msgid "can't open the keyring" msgstr "otwarcie zbioru kluczy jest niemo©liwe" #: util/errors.c:67 msgid "invalid packet" msgstr "niepoprawny pakiet" #: util/errors.c:68 msgid "invalid armor" msgstr "bЁ╠d w opakowaniu ASCII" #: util/errors.c:69 msgid "no such user id" msgstr "brak takiego identyfikatora u©ytkownika." #: util/errors.c:70 msgid "secret key not available" msgstr "klucz tajny jest niedostЙpny" #: util/errors.c:71 msgid "wrong secret key used" msgstr "zostaЁ u©yty niewЁa╤ciwy klucz tajny" #: util/errors.c:72 msgid "not supported" msgstr "nie jet obsЁugiwany" #: util/errors.c:73 msgid "bad key" msgstr "klucz niepoprawny" #: util/errors.c:74 msgid "file read error" msgstr "bЁ╠d przy odczycie pliku" #: util/errors.c:75 msgid "file write error" msgstr "bЁ╠d przy zapisie pliku" #: util/errors.c:76 msgid "unknown compress algorithm" msgstr "nieznany algorytm kompresji" #: util/errors.c:77 msgid "file open error" msgstr "bЁ╠d przy otwieraniu pliku" #: util/errors.c:78 msgid "file create error" msgstr "bЁ╠d przy tworzeniu pliku" #: util/errors.c:79 msgid "invalid passphrase" msgstr "niepoprawne wyra©enie przej╤ciowe" #: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "algorytm szyfrowania z kluczem publicznym nie jest zaimplementowany" #: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "algorytm szyfruj╠cy nie jest zaimplementowany" #: util/errors.c:82 msgid "unknown signature class" msgstr "nieznana klasa podpisu" #: util/errors.c:83 msgid "trust database error" msgstr "bЁ╠d w bazie zaufania" #: util/errors.c:84 msgid "bad MPI" msgstr "bЁ╠d MPI" #: util/errors.c:85 msgid "resource limit" msgstr "ograniczenie zasobСw" #: util/errors.c:86 msgid "invalid keyring" msgstr "bЁ╠d w zbiorze kluczy" #: util/errors.c:87 msgid "bad certificate" msgstr "niepoprawny certyfikat" #: util/errors.c:88 msgid "malformed user id" msgstr "bЁ╠d formatu indentyfikatora u©ytkownika" #: util/errors.c:89 msgid "file close error" msgstr "bЁ╠d przy zamykaniu pliku" #: util/errors.c:90 msgid "file rename error" msgstr "bЁ╠d przy zmianie nazwy pliku" #: util/errors.c:91 msgid "file delete error" msgstr "bЁ╠d przy usuwaniu pliku" #: util/errors.c:92 msgid "unexpected data" msgstr "nieoczekiowane dane" #: util/errors.c:93 msgid "timestamp conflict" msgstr "konflikt znacznikСw czasu" #: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "nieu©yteczny algorytm z kluczem publicznym" #: util/errors.c:95 msgid "file exists" msgstr "plik ju© istnieje" #: util/errors.c:96 msgid "weak key" msgstr "klucz sЁaby" #: util/errors.c:97 msgid "invalid argument" msgstr "bЁЙdny argument" #: util/errors.c:98 msgid "bad URI" msgstr "niepoprawny URI" #: util/errors.c:99 msgid "unsupported URI" msgstr "URI typu nie obsЁugiwanego" #: util/errors.c:100 msgid "network error" msgstr "bЁ╠d sieci" #: util/errors.c:102 msgid "not encrypted" msgstr "nie zaszyfrowany" #: util/logger.c:218 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... to jest bЁ╠d w programie (%s:%d:%s)\n" #: util/logger.c:224 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "znalazЁe╤(a╤) bЁ╠d w programie ... (%s:%d)\n" -#: cipher/random.c:412 +#: cipher/random.c:452 msgid "WARNING: using insecure random number generator!!\n" msgstr "" "OSTRZE╞ENIE: u©ywany generator liczb losowych\n" "nie jest kryptograficznie bezpieczny!!\n" -#: cipher/random.c:413 +#: cipher/random.c:453 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 "" "U©ywany generator liczb losowych jest atrap╠ wprowadzon╠ dla umo©liwienia\n" "normalnej kompilacji - nie jest kryptograficznie bezpieczny!\n" "\n" "JAKIEKOLWIEK DANE GENEROWANE PRZEZ TEN PROGRAM NIE NADAJ║ SIй DO \n" "NORMALNEGO U╞YTKU I NIE ZAPEWNIAJ║ BEZPIECZEяSTWA!!\n" #: cipher/rndlinux.c:135 #, 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" "Brakuje mo©liwo╤ci wygenerowania odpowiedniej liczby losowych bajtСw.\n" "ProszЙ kontynuowaФ inne dziaЁania aby system mСgЁ zebraФ odpowiedni╠\n" "ilo╤Ф entropii do ich wygenerowania (brakuje %d bajtСw).\n" -#: g10/g10.c:174 +#: g10/g10.c:176 msgid "" "@Commands:\n" " " msgstr "" "@Polecenia:\n" " " -#: g10/g10.c:176 +#: g10/g10.c:178 msgid "|[file]|make a signature" msgstr "|[plik]|zЁo©enie podpisu" -#: g10/g10.c:177 +#: g10/g10.c:179 msgid "|[file]|make a clear text signature" msgstr "|[plik]|zЁo©enie podpisu na czytelnym dokumencie" -#: g10/g10.c:178 +#: g10/g10.c:180 msgid "make a detached signature" msgstr "sporz╠dzenie podpisu oddzielonego od dokumentu" -#: g10/g10.c:179 +#: g10/g10.c:181 msgid "encrypt data" msgstr "szyfrowanie danych" -#: g10/g10.c:180 +#: g10/g10.c:182 msgid "encryption only with symmetric cipher" msgstr "szyfrowanie tylko szyfrem symetrycznym" -#: g10/g10.c:181 +#: g10/g10.c:183 msgid "store only" msgstr "tylko zapis" -#: g10/g10.c:182 +#: g10/g10.c:184 msgid "decrypt data (default)" msgstr "odszyfrowywanie danych (domy╤lnie)" -#: g10/g10.c:183 +#: g10/g10.c:185 msgid "verify a signature" msgstr "sprawdzenie podpisu" -#: g10/g10.c:184 +#: g10/g10.c:186 msgid "list keys" msgstr "lista kluczy" -#: g10/g10.c:186 +#: g10/g10.c:188 msgid "list keys and signatures" msgstr "lista kluczy i podpisСw" -#: g10/g10.c:187 +#: g10/g10.c:189 msgid "check key signatures" msgstr "sprawdzenie podpisСw kluczy" -#: g10/g10.c:188 +#: g10/g10.c:190 msgid "list keys and fingerprints" msgstr "lista kluczy i ich odciskСw" -#: g10/g10.c:189 +#: g10/g10.c:191 msgid "list secret keys" msgstr "lista kluczy tajnych" -#: g10/g10.c:190 +#: g10/g10.c:192 msgid "generate a new key pair" msgstr "generacja nowej pary klucza" -#: g10/g10.c:191 +#: g10/g10.c:193 msgid "remove key from the public keyring" msgstr "usuniЙcie klucza ze zbioru kluczy publicznych" -#: g10/g10.c:192 +#: g10/g10.c:194 msgid "sign or edit a key" msgstr "podpisanie lub modyfikacja klucza" -#: g10/g10.c:193 +#: g10/g10.c:195 msgid "generate a revocation certificate" msgstr "generacja certyfikatu uniewa©nienia klucza" -#: g10/g10.c:194 +#: g10/g10.c:196 msgid "export keys" msgstr "eksport kluczy do pliku" -#: g10/g10.c:195 +#: g10/g10.c:197 msgid "export keys to a key server" msgstr "eksport kluczy do serwera kluczy" -#: g10/g10.c:196 +#: g10/g10.c:198 msgid "import keys from a key server" msgstr "import kluczy z serwera kluczy" -#: g10/g10.c:199 +#: g10/g10.c:201 msgid "import/merge keys" msgstr "import/doЁ╠czenie kluczy" -#: g10/g10.c:201 +#: g10/g10.c:203 msgid "list only the sequence of packets" msgstr "wypisane sekwencji pakietСw" -#: g10/g10.c:203 +#: g10/g10.c:205 msgid "export the ownertrust values" msgstr "eksport warto╤ci zaufania" -#: g10/g10.c:205 +#: g10/g10.c:207 msgid "import ownertrust values" msgstr "wczytanie warto╤Фi zaufania" -#: g10/g10.c:207 +#: g10/g10.c:209 msgid "|[NAMES]|update the trust database" msgstr "|[NAZWY]|naniesienie poprawek do bazy zaufania" -#: g10/g10.c:209 +#: g10/g10.c:211 msgid "|[NAMES]|check the trust database" msgstr "|[NAZWY]|sprawdzenie bazy zaufania" -#: g10/g10.c:210 +#: g10/g10.c:212 msgid "fix a corrupted trust database" msgstr "naprawa uszkodzonej Bazy Zaufania" -#: g10/g10.c:211 +#: g10/g10.c:213 msgid "De-Armor a file or stdin" msgstr "zdjЙcie opakowania ASCII pliku lub potoku" -#: g10/g10.c:212 +#: g10/g10.c:214 msgid "En-Armor a file or stdin" msgstr "opakowanie ASCII pliku lub potoku" -#: g10/g10.c:213 +#: g10/g10.c:215 msgid "|algo [files]|print message digests" msgstr "|algo [pliki]|skrСty wiadomo╤ci" -#: g10/g10.c:214 +#: g10/g10.c:216 msgid "print all message digests" msgstr "wszystkie skrСty wiadomo╤ci" -#: g10/g10.c:220 +#: g10/g10.c:222 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opcje:\n" " " -#: g10/g10.c:222 +#: g10/g10.c:224 msgid "create ascii armored output" msgstr "plik wynikowy w opakowaniu ASCII" -#: g10/g10.c:223 +#: g10/g10.c:225 msgid "|NAME|encrypt for NAME" msgstr "|NAZWA|szyfrowanie dla odbiorcy NAZWA" -#: g10/g10.c:227 +#: g10/g10.c:229 msgid "use this user-id to sign or decrypt" msgstr "identyfikator do podpisania lub odszyfrowania" -#: g10/g10.c:228 +#: g10/g10.c:230 msgid "|N|set compress level N (0 disables)" msgstr "|N|poziom kompresji N (0 - brak)" -#: g10/g10.c:230 +#: g10/g10.c:232 msgid "use canonical text mode" msgstr "kanoniczny format tekstowy" -#: g10/g10.c:231 +#: g10/g10.c:233 msgid "use as output file" msgstr "plik wyj╤ciowy" -#: g10/g10.c:232 +#: g10/g10.c:234 msgid "verbose" msgstr "z informacjami dodatkowymi" -#: g10/g10.c:233 +#: g10/g10.c:235 msgid "be somewhat more quiet" msgstr "mniej komunikatСww" -#: g10/g10.c:234 +#: g10/g10.c:236 msgid "don't use the terminal at all" msgstr "" -#: g10/g10.c:235 +#: g10/g10.c:237 msgid "force v3 signatures" msgstr "wymuszenie trzeciej wersji formatu podpisСw" -#: g10/g10.c:236 +#: g10/g10.c:238 msgid "always use a MDC for encryption" msgstr "do szyfrowania bЙdzie u©ywany MDC" -#: g10/g10.c:237 +#: g10/g10.c:239 msgid "do not make any changes" msgstr "pozostawienie bez zmian" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/g10.c:239 +#: g10/g10.c:241 msgid "batch mode: never ask" msgstr "tryb wsadowy: ©adnych pytaЯ" -#: g10/g10.c:240 +#: g10/g10.c:242 msgid "assume yes on most questions" msgstr "automatyczna odpowied╪ tak na wiЙkszo╤Ф pytaЯ" -#: g10/g10.c:241 +#: g10/g10.c:243 msgid "assume no on most questions" msgstr "automatyczna odpowied╪ nie na wiЙkszo╤Ф pytaЯ" -#: g10/g10.c:242 +#: g10/g10.c:244 msgid "add this keyring to the list of keyrings" msgstr "dodaФ zbiСr kluczy do listy u©ywanych" -#: g10/g10.c:243 +#: g10/g10.c:245 msgid "add this secret keyring to the list" msgstr "dodaФ zbiСr kluczy tajnych do listy" -#: g10/g10.c:244 +#: g10/g10.c:246 msgid "|NAME|use NAME as default secret key" msgstr "|NAZWA|u©ycie NAZWA jako domy╤lnego klucza tajnego" -#: g10/g10.c:245 +#: g10/g10.c:247 msgid "|HOST|use this keyserver to lookup keys" msgstr "|HOST|serwer kluczy w ktСrym bЙd╠ poszukiwane" -#: g10/g10.c:246 +#: g10/g10.c:248 msgid "|NAME|set terminal charset to NAME" msgstr "|NAZWA|zestaw znakСw terminala NAZWA" -#: g10/g10.c:247 +#: g10/g10.c:249 msgid "read options from file" msgstr "wczytanie opcji z pliku" -#: g10/g10.c:249 +#: g10/g10.c:251 msgid "set debugging flags" msgstr "ustawienie opcji ╤ledzenia wykonania programu" -#: g10/g10.c:250 +#: g10/g10.c:252 msgid "enable full debugging" msgstr "umo©liwienie peЁnego ╤ledzenia programu" -#: g10/g10.c:251 +#: g10/g10.c:253 msgid "|FD|write status info to this FD" msgstr "|FD|zapisaФ opis stanu do FD" -#: g10/g10.c:252 +#: g10/g10.c:254 msgid "do not write comment packets" msgstr "nie zapisywaФ pakietСw z komentarzem" -#: g10/g10.c:253 +#: g10/g10.c:255 msgid "(default is 1)" msgstr "(domy╤lnie 1)" -#: g10/g10.c:254 +#: g10/g10.c:256 msgid "(default is 3)" msgstr "(domy╤lnie 3)" -#: g10/g10.c:256 +#: g10/g10.c:258 msgid "|FILE|load extension module FILE" msgstr "|PLIK|Ёadowanie moduЁu rozszerzenia z PLIK" -#: g10/g10.c:257 +#: g10/g10.c:259 msgid "emulate the mode described in RFC1991" msgstr "emulacja trybu opisanego w RFC1991" -#: g10/g10.c:258 +#: g10/g10.c:260 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "" -#: g10/g10.c:259 +#: g10/g10.c:261 msgid "|N|use passphrase mode N" msgstr "|N|N-ty tryb wprowadzania wyra©enia przej╤ciowego" -#: g10/g10.c:261 +#: g10/g10.c:263 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|ALG|algorytm obliczania skrСtСw wiadomo╤ci ALG" -#: g10/g10.c:263 +#: g10/g10.c:265 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|ALG|algorytmu szyfruj╠cy ALG dla hasЁa" -#: g10/g10.c:264 +#: g10/g10.c:266 msgid "|NAME|use cipher algorithm NAME" msgstr "|NAZWA|algorytm szyfruj╠cy NAZWA" -#: g10/g10.c:265 +#: g10/g10.c:267 msgid "|NAME|use message digest algorithm NAME" msgstr "|NAZWA|algorytm obliczania skrСtСw wiadomo╤ci NAZWA" -#: g10/g10.c:266 +#: g10/g10.c:268 msgid "|N|use compress algorithm N" msgstr "|N|algorytm kompresji N" -#: g10/g10.c:267 +#: g10/g10.c:269 msgid "throw keyid field of encrypted packets" msgstr "usuniЙcie identyfikatorСw kluczy z pakietСw" -#: g10/g10.c:268 +#: g10/g10.c:270 msgid "|NAME=VALUE|use this notation data" msgstr "" -#: g10/g10.c:270 +#: g10/g10.c:272 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" "PrzykЁady:\n" "\n" " -se -r Bob [plik] podpisaФ i zaszyfrowaФ kluczem Boba\n" " --clearsign [plik] podpisaФ z pozostawieniem czytelno╤ci dokumentu\n" " --detach-sign [plik] podpisaФ z umieszczeniem podpisu w osobnym " "pliku\n" " --list-keys [nazwy] pokazuje klucze\n" " --fingerprint [nazwy] pokazuje odciski kluczy\n" -#: g10/g10.c:347 +#: g10/g10.c:351 msgid "Please report bugs to .\n" msgstr "BЁЙdy prosimy zgЁaszaФ na adres .\n" -#: g10/g10.c:351 +#: g10/g10.c:355 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "WywoЁanie: gpg [opcje] [pliki] (-h podaje pomoc)" -#: g10/g10.c:354 +#: g10/g10.c:358 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" "default operation depends on the input data\n" msgstr "" "SkЁadnia: gpg [opcje] [pliki]\n" "podpisywanie, sprawdzanie podpisСw, szyfrowanie, deszyfrowanie\n" "domy╤lnie wykonywana operacja zale©y od danych wej╤ciowych\n" -#: g10/g10.c:359 +#: g10/g10.c:363 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "ObsЁugiwane algorytmy:\n" -#: g10/g10.c:433 +#: g10/g10.c:437 msgid "usage: gpg [options] " msgstr "wywoЁanie: gpg [opcje]" -#: g10/g10.c:473 +#: g10/g10.c:477 msgid "conflicting commands\n" msgstr "sprzeczne polecenia\n" -#: g10/g10.c:605 +#: g10/g10.c:609 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "UWAGA: brak domy╤lnego pliku opcji '%s'\n" -#: g10/g10.c:609 +#: g10/g10.c:613 #, c-format msgid "option file `%s': %s\n" msgstr "plik opcji '%s': %s\n" -#: g10/g10.c:616 +#: g10/g10.c:620 #, c-format msgid "reading options from `%s'\n" msgstr "odczyt opcji z '%s'\n" -#: g10/g10.c:782 +#: g10/g10.c:786 #, c-format msgid "%s is not a valid character set\n" msgstr "%s nie jest poprawn╠ nazw╠ zestawu znakСw\n" -#: g10/g10.c:827 g10/g10.c:839 +#: g10/g10.c:833 g10/g10.c:845 msgid "selected cipher algorithm is invalid\n" msgstr "wybrany algorytm szyfruj╠cy jest niepoprawny\n" -#: g10/g10.c:833 g10/g10.c:845 +#: g10/g10.c:839 g10/g10.c:851 msgid "selected digest algorithm is invalid\n" msgstr "wybrany algorytm geenracji skrСtСw wiadomo╤ci jest niepoprawny\n" -#: g10/g10.c:849 +#: g10/g10.c:855 msgid "the given policy URL is invalid\n" msgstr "" -#: g10/g10.c:852 +#: g10/g10.c:858 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "ustawienie algortytmu kompresji musi pochodziФ z zakresu %d..%d\n" -#: g10/g10.c:854 +#: g10/g10.c:860 msgid "completes-needed must be greater than 0\n" msgstr "warto╤Ф completes-needed musi byФ wiЙksza od 0\n" -#: g10/g10.c:856 +#: g10/g10.c:862 msgid "marginals-needed must be greater than 1\n" msgstr "warto╤Ф marginals-needed musi byФ wiЙksza od 1\n" -#: g10/g10.c:858 +#: g10/g10.c:864 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "warto╤Ф max-cert-depth musi mie╤ciФ siЙ w zakresie od 1 do 255\n" -#: g10/g10.c:861 +#: g10/g10.c:867 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "UWAGA: prosty tryb S2K (0) jest stanowczo odradzany\n" -#: g10/g10.c:865 +#: g10/g10.c:871 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "Niepoprawny tryb S2K; musi mieФ warto╤Ф 0, 1 lub 3\n" -#: g10/g10.c:942 +#: g10/g10.c:948 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "Inicjowanie Bazy Zaufania nie powiodЁo siЙ: %s\n" -#: g10/g10.c:948 +#: g10/g10.c:954 msgid "--store [filename]" msgstr "--store [plik]" -#: g10/g10.c:955 +#: g10/g10.c:961 msgid "--symmetric [filename]" msgstr "--symmetric [plik]" -#: g10/g10.c:963 +#: g10/g10.c:969 msgid "--encrypt [filename]" msgstr "--encrypt [plik]" -#: g10/g10.c:976 +#: g10/g10.c:982 msgid "--sign [filename]" msgstr "--sign [plik]" -#: g10/g10.c:989 +#: g10/g10.c:995 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [plik]" -#: g10/g10.c:1003 +#: g10/g10.c:1009 msgid "--clearsign [filename]" msgstr "--clearsign [plik]\"" -#: g10/g10.c:1015 +#: g10/g10.c:1021 msgid "--decrypt [filename]" msgstr "--decrypt [plik]" -#: g10/g10.c:1024 +#: g10/g10.c:1030 msgid "--edit-key username [commands]" msgstr "--edit-key nazwa u©ytkownika [polecenia]" -#: g10/g10.c:1038 +#: g10/g10.c:1044 msgid "--delete-secret-key username" msgstr "--delete-secret-key nazwa u©ytkownika" -#: g10/g10.c:1041 +#: g10/g10.c:1047 msgid "--delete-key username" msgstr "--delete-key nazwa u©ytkownika" -#: g10/encode.c:231 g10/g10.c:1064 g10/sign.c:366 +#: g10/encode.c:231 g10/g10.c:1071 g10/sign.c:366 #, c-format msgid "can't open %s: %s\n" msgstr "nie mogЙ otworzyФ %s: %s\n" -#: g10/g10.c:1075 +#: g10/g10.c:1082 msgid "-k[v][v][v][c] [userid] [keyring]" msgstr "-k[v][v][v][c] [identyfikator] [zbiСr kluczy]" -#: g10/g10.c:1134 +#: g10/g10.c:1141 #, c-format msgid "dearmoring failed: %s\n" msgstr "usuniЙcie opakowania ASCII nie powiodЁo siЙ: %s\n" -#: g10/g10.c:1142 +#: g10/g10.c:1149 #, c-format msgid "enarmoring failed: %s\n" msgstr "opakowywanie ASCII nie powiodЁo siЙ: %s\n" -#: g10/g10.c:1208 +#: g10/g10.c:1215 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "niewЁa╤ciwy algorytm skrСtu '%s'\n" -#: g10/g10.c:1283 +#: g10/g10.c:1290 msgid "[filename]" msgstr "[nazwa pliku]" -#: g10/g10.c:1287 +#: g10/g10.c:1294 msgid "Go ahead and type your message ...\n" msgstr "Wpisz tutaj swoj╠ wiadomo╤Ф ...\n" -#: g10/decrypt.c:59 g10/g10.c:1290 g10/verify.c:66 +#: g10/decrypt.c:59 g10/g10.c:1297 g10/verify.c:66 #, c-format msgid "can't open `%s'\n" msgstr "nie mogЙ otworzyФ '%s'\n" -#: g10/g10.c:1457 +#: g10/g10.c:1466 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" -#: g10/g10.c:1463 +#: g10/g10.c:1472 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" msgstr "" -#: g10/g10.c:1469 +#: g10/g10.c:1478 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "" -#: g10/g10.c:1477 +#: g10/g10.c:1486 msgid "a notation value must not use any control characters\n" msgstr "" #: g10/armor.c:296 #, c-format msgid "armor: %s\n" msgstr "opakowanie: %s\n" #: g10/armor.c:319 msgid "invalid armor header: " msgstr "niepoprawny nagЁСwek opakowania: " #: g10/armor.c:326 msgid "armor header: " msgstr "nagЁСwek opakowania: " #: g10/armor.c:337 msgid "invalid clearsig header\n" msgstr "niewЁa╤ciwy nagЁСwek czytelnego podpisanego dokumentu\n" #: g10/armor.c:389 msgid "nested clear text signatures\n" msgstr "zagnie©d©one podpisy na czytelnym dokumencie\n" #: g10/armor.c:500 msgid "invalid dash escaped line: " msgstr "niepoprawne oznaczenie linii minusami:" #: g10/armor.c:512 msgid "unexpected armor:" msgstr "nieoczekiwane opakowanie:" #: g10/armor.c:629 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "niewЁa╤ciwy znak formatu radix64 %02x zostaЁ pominiЙty\n" #: g10/armor.c:672 msgid "premature eof (no CRC)\n" msgstr "przewczesny koniec pliku (brak CRC)\n" #: g10/armor.c:706 msgid "premature eof (in CRC)\n" msgstr "przedwczesny koniec pliku (w CRC)\n" #: g10/armor.c:710 msgid "malformed CRC\n" msgstr "bЁ╠d formatu CRC\n" #: g10/armor.c:714 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "BЁ╠d sumy CRC; %06lx - %06lx\n" #: g10/armor.c:731 msgid "premature eof (in Trailer)\n" msgstr "przedwczesny koniec pliku (w linii koЯcz╠cej)\n" #: g10/armor.c:735 msgid "error in trailer line\n" msgstr "bЁ╠d w linii koЯcz╠cej\n" #: g10/armor.c:1001 msgid "no valid OpenPGP data found.\n" msgstr "nie odnaleziono poprawnych danych w formacie OpenPGP.\n" #: g10/armor.c:1005 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "bЁ╠d opakowania: linia dЁu©sza ni© %d znakСw\n" #: g10/armor.c:1009 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "znak kodowania quoted-printable w opakowaniu ASCII - prawdopodobnie\n" "przekЁamanie wprowadzone przez program transportowy poczty\n" #: g10/pkclist.c:137 #, c-format msgid "" "No trust value assigned to %lu:\n" "%4u%c/%08lX %s \"" msgstr "" "Brak warto╤ci zaufania dla %lu:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:147 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" " 1 = Don't know\n" " 2 = I do NOT trust\n" " 3 = I trust marginally\n" " 4 = I trust fully\n" " s = please show me more information\n" msgstr "" "ZastanСw siЙ jak bardzo ufasz temu u©ytkownikowi w kwestii sprawdzania\n" "to©samo╤ci innych wЁa╤cicieli kluczy (czy sprawdzi on odciski klucza \n" "pobrane z rС©nych ╪rСdeЁ, dokumenty potwierdzaj╠ce to©samo╤Ф wЁa╤ciciela\n" "klucza itd.)?\n" "\n" " 1 = Nie wiem.\n" " 2 = NIE ufam mu w tej kwestii.\n" " 3 = Ufam marginalnie.\n" " 4 = W peЁni mu ufam.\n" " i = potrzebujЙ wiЙcej informacji\n" #: g10/pkclist.c:156 msgid " m = back to the main menu\n" msgstr " p = powrСt do gЁСwnego menu\n" #: g10/pkclist.c:158 msgid " q = quit\n" msgstr "w = wyj╤cie\n" #. a string with valid answers #: g10/pkclist.c:163 msgid "sSmMqQ" msgstr "iIpPwW" #: g10/pkclist.c:167 msgid "Your decision? " msgstr "Twoja decyzja? " #: g10/pkclist.c:187 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certyfikaty prowadz╠ce do ostatecznie zaufanego klucza:\n" -#: g10/pkclist.c:254 +#: g10/pkclist.c:256 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 "" "Niemo©liwe jest znalezienie poprawnej scie©ki zaufania do tego klucza.\n" "Sprawd╪my czy mo©na przypisaФ brakuj╠ce warto╤ci zaufania.\n" "\n" -#: g10/pkclist.c:260 +#: g10/pkclist.c:262 msgid "" "No path leading to one of our keys found.\n" "\n" msgstr "" "Brak ╤cie©ki prowadz╠cej do ktСrego╤ z naszych kluczy.\n" "\n" -#: g10/pkclist.c:262 +#: g10/pkclist.c:264 msgid "" "No certificates with undefined trust found.\n" "\n" msgstr "" "Brak certyfikatСw o niezdefiniowanym poziomie zaufania.\n" "\n" -#: g10/pkclist.c:264 +#: g10/pkclist.c:266 msgid "" "No trust values changed.\n" "\n" msgstr "" "Parametry zaufania nie zostaЁy zmienione.\n" "\n" -#: g10/pkclist.c:281 +#: g10/pkclist.c:283 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "klucz %08lX: klucz zostaЁ uniewa©niony!\n" -#: g10/pkclist.c:287 g10/pkclist.c:297 g10/pkclist.c:403 +#: g10/pkclist.c:289 g10/pkclist.c:299 g10/pkclist.c:405 msgid "Use this key anyway? " msgstr "U©yФ tego klucza pomimo to? " -#: g10/pkclist.c:291 +#: g10/pkclist.c:293 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "klucz %08lX: podklucz zostaЁ uniewa©niony!\n" -#: g10/pkclist.c:321 +#: g10/pkclist.c:323 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: data wa©no╤ci klucza upЁynЙЁa\n" -#: g10/pkclist.c:327 +#: g10/pkclist.c:329 #, c-format msgid "%08lX: no info to calculate a trust probability\n" msgstr "%08lX: brak informacji aby obliczyФ prawdopodobieЯstwo zaufania\n" -#: g10/pkclist.c:341 +#: g10/pkclist.c:343 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: NIE UFAMY temu kluczowi\n" -#: g10/pkclist.c:347 +#: g10/pkclist.c:349 #, 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: Nie ma pewno╤Фi ©e ten klucz faktycznie nale©y do odoby podaj╠cej\n" "siЙ za jego wЁa╤ciciela, ale jest akceptowalny.\n" -#: g10/pkclist.c:353 +#: g10/pkclist.c:355 msgid "This key probably belongs to the owner\n" msgstr "" "Ten klucz prawdopodobnie nale©y do osoby podaj╠cej siЙ za jego wЁa╤ciciela.\n" -#: g10/pkclist.c:358 +#: g10/pkclist.c:360 msgid "This key belongs to us\n" msgstr "Ten klucz nale©y do nas\n" -#: g10/pkclist.c:398 +#: g10/pkclist.c:400 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" "the next question with yes\n" "\n" msgstr "" "NIE MA pewno╤ci ©e ten klucz nale©y do osoby ktСra podaje siЙ za jego\n" "wЁa╤ciciela. Je╤li nie masz co do tego ©adnych w╠tpliwo╤ci i *naprawdЙ*\n" "wiesz co robisz mo©esz odpowiedzieФ \"tak\" na nastЙpne pytanie.\n" -#: g10/pkclist.c:411 g10/pkclist.c:433 +#: g10/pkclist.c:413 g10/pkclist.c:435 msgid "WARNING: Using untrusted key!\n" msgstr "OSTRZE╞ENIE: u©ywany jest klucz nie obdarzony zaufaniem!\n" -#: g10/pkclist.c:454 +#: g10/pkclist.c:456 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "OSTRZE╞ENIE: Ten klucz zostaЁ uniewa©niony przez wЁa╤ciciela!\n" -#: g10/pkclist.c:455 +#: g10/pkclist.c:457 msgid " This could mean that the signature is forgery.\n" msgstr " To mo©e oznaczaФ ©e podpis jest faЁszerstwem.\n" -#: g10/pkclist.c:459 +#: g10/pkclist.c:461 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "OSTRZE╞ENIE: Ten podklucz zostaЁ uniewa©niony przez wЁa╤ciciela!\n" -#: g10/pkclist.c:480 +#: g10/pkclist.c:482 msgid "Note: This key has expired!\n" msgstr "Uwaga: Data wa©no╤ci tego klucza upЁynЙЁa!\n" -#: g10/pkclist.c:487 +#: g10/pkclist.c:489 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "OSTRZE╞ENIE: Ten klucz nie jest po╤wiadczony zaufanym podpisem!\n" -#: g10/pkclist.c:489 +#: g10/pkclist.c:491 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Nic nie wskazuje na to ©e ten podpis zЁo©yЁ wЁa╤ciciel klucza.\n" -#: g10/pkclist.c:505 +#: g10/pkclist.c:507 msgid "WARNING: We do NOT trust this key!\n" msgstr "OSTRZE╞ENIE: NIE UFAMY temu kluczowi!\n" -#: g10/pkclist.c:506 +#: g10/pkclist.c:508 msgid " The signature is probably a FORGERY.\n" msgstr " Ten podpis prawdopodobnie jest FAёSZERSTWEM.\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:515 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "OSTRZE╞ENIE: Ten klucz nie jest po╤wiadczony wystarczaj╠co zaufanymi " "podpisami!\n" -#: g10/pkclist.c:516 +#: g10/pkclist.c:518 msgid " It is not certain that the signature belongs to the owner.\n" msgstr "" " Nie ma pewno╤ci ©e ten podpis zostaЁ zЁo©nony przez wЁa╤ciciela.\n" -#: g10/pkclist.c:580 g10/pkclist.c:602 g10/pkclist.c:665 g10/pkclist.c:705 +#: g10/pkclist.c:582 g10/pkclist.c:604 g10/pkclist.c:670 g10/pkclist.c:715 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: pominiЙty: %s\n" -#: g10/pkclist.c:588 g10/pkclist.c:687 +#: g10/pkclist.c:590 g10/pkclist.c:697 #, fuzzy, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: problem przy odczycie bloku klucza: %s\n" -#: g10/pkclist.c:611 +#: g10/pkclist.c:613 msgid "" "You did not specify a user ID. (you may use \"-r\")\n" "\n" msgstr "" "Nie podaЁe╤ identyfikatora u©ytkownika (user ID). \n" "Mo©na to zrobiФ za pomoc╠ opcji \"-r\".\n" -#: g10/pkclist.c:616 +#: g10/pkclist.c:618 msgid "Enter the user ID: " msgstr "Wprowad╪ identyfikator u©ytkownika (user ID): " -#: g10/pkclist.c:627 +#: g10/pkclist.c:629 msgid "No such user ID.\n" msgstr "Brak takiego identyfikatora u©ytkownika.\n" -#: g10/pkclist.c:673 +#: g10/pkclist.c:639 +#, fuzzy +msgid "Public key is disabled.\n" +msgstr "klucz publiczny %08lX\n" + +#: g10/pkclist.c:678 #, c-format msgid "%s: error checking key: %s\n" msgstr "%s: bЁ╠d podczas sprawdzania klucza: %s\n" -#: g10/pkclist.c:711 +#: g10/pkclist.c:683 +#, fuzzy, c-format +msgid "%s: skipped: public key is disabled\n" +msgstr "%s: problem przy odczycie bloku klucza: %s\n" + +#: g10/pkclist.c:721 msgid "no valid addressees\n" msgstr "brak poprawnych adresСw\n" #: g10/keygen.c:122 msgid "writing self signature\n" msgstr "zapis podpisu klucza nim samym\n" #: g10/keygen.c:160 msgid "writing key binding signature\n" msgstr "zapis podpisu wi╠©╠cego klucz\n" #: g10/keygen.c:386 msgid "Please select what kind of key you want:\n" msgstr "ProszЙ wybraФ rodzaj klucza:\n" #: g10/keygen.c:388 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) Para kluczy dla algorytmСw DSA i ElGamala (domy╤lne)\n" #: g10/keygen.c:389 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (tylko do podpisywania)\n" #: g10/keygen.c:391 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) Klucz dla algorytmu ElGamala (tylko do szyfrowanie)\n" #: g10/keygen.c:392 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) Klucz dla algorytmu ElGamala (do szyfrowania i podpisywania)\n" #: g10/keygen.c:394 #, c-format msgid " (%d) ElGamal in a v3 packet\n" msgstr "" " (%d) Klucz dla algorytmu ElGamala w pakiecie w trzeciej wersji formatu\n" #: g10/keygen.c:399 msgid "Your selection? " msgstr "TwСj wybСr? " #: g10/keygen.c:409 msgid "Do you really want to create a sign and encrypt key? " msgstr "Czy na pewno chcesz stworzyФ klucz do szyfrowania i podpisywania? " #: g10/keygen.c:430 msgid "Invalid selection.\n" msgstr "NiewЁa╤ciwy wybСr.\n" #: g10/keygen.c:442 #, 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 "" "Nast╠pi generacja nowej pary kluczy dla algorytmu(Сw) %s.\n" " minimalny rozmiar klucza wynosi 768 bitСw\n" " domy╤lny rozmiar klucza wynosi 1024 bity\n" " najwiЙkszy sugerowany rozmiar klucza wynosi 2048 bitСw\n" #: g10/keygen.c:449 msgid "What keysize do you want? (1024) " msgstr "Jakiej dЁugo╤ci klucz wygenerowaФ? (1024) " #: g10/keygen.c:454 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "Klucz dla DSA musi mieФ dЁugo╤Ф pomiЙdzy 512 i 1024 bitow.\n" #: g10/keygen.c:456 msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "DЁugo╤Ф klucza zbyt maЁa; minimalna dopuszczona wynosi 768 bitСw.\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:466 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "zbyt du©y rozmiar klucza, ograniczenie wynosi %d.\n" #: g10/keygen.c:471 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" msgstr "" "Klucze dЁu©sze ni© 2048 bitСw s╠ odradzane, poniewa© obliczenia\n" "trwaj╠ wtedy BARDZO dЁugo!\n" #: g10/keygen.c:474 msgid "Are you sure that you want this keysize? " msgstr "Na pewno wygenerowaФ klucz takiej dЁugo╤ci? " #: g10/keygen.c:475 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" msgstr "" "Nale©y tak©e pamiЙtaФ o tym, ©e informacje mog╠ byФ te© wykradzione z\n" "komputera przez podsЁuch emisji elektromagnetycznej klawiatury i monitora!\n" #: g10/keygen.c:483 msgid "Do you really need such a large keysize? " msgstr "Czy naprawdЙ potrzebujesz takiego dЁugiego klucza? " #: g10/keygen.c:489 #, c-format msgid "Requested keysize is %u bits\n" msgstr "╞╠dana dЁugo╤Ф klucza to %u bity.\n" #: g10/keygen.c:492 g10/keygen.c:496 #, c-format msgid "rounded up to %u bits\n" msgstr "zaokr╠glono do %u bitСw\n" #: g10/keygen.c:509 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" " = key expires in n days\n" " w = key expires in n weeks\n" " m = key expires in n months\n" " y = key expires in n years\n" msgstr "" "Okres wa©no╤Фi klucza.\n" " 0 = klucz nie ma okre╤lonego terminu wa©no╤ci\n" " = termin wa©no╤ci klucza upЁywa za n dni\n" " w = termin wa©no╤ci klucza upЁywa za n tygodni\n" " m = termin wa©no╤ci klucza upЁywa za n miesiЙcy\n" " y = termin wa©no╤ci klucza upЁywa za n lat\n" -#: g10/keygen.c:524 +#: g10/keygen.c:526 msgid "Key is valid for? (0) " msgstr "Okres wa©no╤ci klucza ? (0) " -#: g10/keygen.c:535 +#: g10/keygen.c:547 msgid "invalid value\n" msgstr "niepoprawna warto╤Ф\n" -#: g10/keygen.c:540 +#: g10/keygen.c:552 msgid "Key does not expire at all\n" msgstr "Klucz nie ma daty wa©no╤ci (nie traci wa©no╤ci z upЁywem czasu).\n" #. print the date when the key expires -#: g10/keygen.c:546 +#: g10/keygen.c:558 #, c-format msgid "Key expires at %s\n" msgstr "Data wa©no╤ci klucza: %s\n" -#: g10/keygen.c:552 +#: g10/keygen.c:564 msgid "Is this correct (y/n)? " msgstr "Dane poprawne (t/n)? " -#: g10/keygen.c:595 +#: g10/keygen.c:607 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) \"\n" "\n" msgstr "" "\n" "Musisz okre╤liФ identyfikator u©ytkownika aby mo©na byЁo rozpoznaФ twСj\n" "klucz; program zЁo©y go z twojego imienia i nazwiska, komentarza i adresu\n" "poczty elektronicznej. BЙdzie on miaЁ tak╠ postaФ:\n" " \"Tadeusz ╞eleЯski (Boy) \"\n" "\n" -#: g10/keygen.c:606 +#: g10/keygen.c:618 msgid "Real name: " msgstr "ImiЙ i nazwisko: " -#: g10/keygen.c:610 +#: g10/keygen.c:622 msgid "Invalid character in name\n" msgstr "NiewЁa╤ciwy znak w imieniu lub nazwisku\n" -#: g10/keygen.c:612 +#: g10/keygen.c:624 msgid "Name may not start with a digit\n" msgstr "ImiЙ lub nazwisko nie mo©e zaczynaФ siЙ od cyfry\n" -#: g10/keygen.c:614 +#: g10/keygen.c:626 msgid "Name must be at least 5 characters long\n" msgstr "ImiЙ i nazwisko musz╠ mieФ conajmniej 5 znakСw dЁugo╤ci.\n" -#: g10/keygen.c:622 +#: g10/keygen.c:634 msgid "Email address: " msgstr "Adres poczty elektronicznej: " -#: g10/keygen.c:633 +#: g10/keygen.c:645 msgid "Not a valid email address\n" msgstr "To nie jest poprawny adres poczty elektronicznej\n" -#: g10/keygen.c:641 +#: g10/keygen.c:653 msgid "Comment: " msgstr "Komentarz: " -#: g10/keygen.c:647 +#: g10/keygen.c:659 msgid "Invalid character in comment\n" msgstr "NiewЁa╤ciwy znak w komentarzu\n" -#: g10/keygen.c:669 +#: g10/keygen.c:681 #, c-format msgid "You are using the `%s' character set.\n" msgstr "U©ywasz zestawu znakСw %s.\n" -#: g10/keygen.c:675 +#: g10/keygen.c:687 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "TwСj identyfikator u©ytkownika bЙdzie wygl╠daЁ tak:\n" " \"%s\"\n" "\n" -#: g10/keygen.c:678 +#: g10/keygen.c:690 msgid "NnCcEeOoQq" msgstr "IiKkEeDdWw" -#: g10/keygen.c:688 +#: g10/keygen.c:700 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "" "ZmieniФ (I)miЙ/nazwisko, (K)omentarz, adres (E)mail, \n" "przej╤Ф (D)alej czy (W)yj╤Ф z programu ? " -#: g10/keygen.c:740 +#: g10/keygen.c:752 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Musisz podaФ wyra©enie przej╤ciowe (hasЁo) aby ochroniФ swСj klucz tajny.\n" -#: g10/keyedit.c:455 g10/keygen.c:748 +#: g10/keyedit.c:456 g10/keygen.c:760 msgid "passphrase not correctly repeated; try again.\n" msgstr "" "PowtСrzone wyra©enie przej╤ciowe nie zgadza siЙ z podanym w pierwszej " "prСbie;\n" "sprСbuj jeszcze raz.\n" -#: g10/keygen.c:754 +#: g10/keygen.c:766 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 "" "Nie chcesz podaФ wyra©enia przej╤ciowego (hasЁa) - to zЁy pomysЁ!\n" "W ka©dej chwili mo©esz ustawiФ wyra©enie przej╤ciowe u©ywaj╠c tego programu\n" "i opcji \"--edit-key\".\n" "\n" -#: g10/keygen.c:775 +#: g10/keygen.c:787 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 "" "Musimy wygenerowaФ du©o losowych bajtСw. Dobrym pomysЁem podczas " "generowania\n" "liczb pierszych jest wykonanywanie w tym czasie innych dziaЁaЯ (pisanie na\n" "klawiaturzeze, poruszanie myszk╠, odwoЁanie siЙ do dyskСw); dziЙki temu\n" "generator liczb losowych ma mo©liwo╤Ф zebrania odpowiedniej ilo╤ci " "entropii.\n" -#: g10/keygen.c:845 +#: g10/keygen.c:857 msgid "Key generation can only be used in interactive mode\n" msgstr "GeneracjЙ klucza mo©na wykonywaФ tylko w trybie interaktywnym\n" -#: g10/keygen.c:853 +#: g10/keygen.c:865 msgid "DSA keypair will have 1024 bits.\n" msgstr "Para kluczy dla DSA bЙdzie miaЁa 1024 bity dЁugo╤ci.\n" -#: g10/keygen.c:859 +#: g10/keygen.c:871 #, fuzzy msgid "Key generation canceled.\n" msgstr "Procedura generacji klucza zostaЁa anulowana.\n" -#: g10/keygen.c:869 +#: g10/keygen.c:881 #, c-format msgid "writing public certificate to `%s'\n" msgstr "zapisujЙ certyfikat publiczny w '%s'\n" -#: g10/keygen.c:870 +#: g10/keygen.c:882 #, c-format msgid "writing secret certificate to `%s'\n" msgstr "zapisujЙ certyfikat prywatny w '%s'\n" -#: g10/keygen.c:947 +#: g10/keygen.c:959 msgid "public and secret key created and signed.\n" msgstr "Prywatny i publiczny klucz zostaЁ stworzony i podpisany.\n" -#: g10/keygen.c:949 +#: g10/keygen.c:961 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 "" "Ten klucz nie mo©e byФ wykorzystany do szyfrowania. Komend╠ \"--edit-key\" \n" "mo©na dodaФ do niego podklucz u©ywany do szyfrowania.\n" -#: g10/keygen.c:963 g10/keygen.c:1062 +#: g10/keygen.c:975 g10/keygen.c:1074 #, c-format msgid "Key generation failed: %s\n" msgstr "Generacja klucza nie powiodЁa siЙ: %s\n" -#: g10/keygen.c:1007 g10/sig-check.c:300 g10/sign.c:105 +#: g10/keygen.c:1019 g10/sig-check.c:312 g10/sign.c:105 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "klucz zostaЁ stworzony %lu sekundЙ w przyszЁo╤ci (zaburzenia\n" "czasoprzestrzeni, lub ╪le ustawiony zegar systemowy)\n" -#: g10/keygen.c:1009 g10/sig-check.c:302 g10/sign.c:107 +#: g10/keygen.c:1021 g10/sig-check.c:314 g10/sign.c:107 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "klucz zostaЁ stworzony %lu sekund w przyszЁo╤ci (zaburzenia\n" "czasoprzestrzeni, lub ╪le ustawiony zegar systemowy)\n" -#: g10/keygen.c:1040 +#: g10/keygen.c:1052 msgid "Really create? " msgstr "Na pewno generowaФ? " -#: g10/encode.c:91 g10/openfile.c:118 g10/openfile.c:208 g10/tdbio.c:467 +#: g10/encode.c:91 g10/openfile.c:156 g10/openfile.c:246 g10/tdbio.c:467 #: g10/tdbio.c:528 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: nie mogЙ otworzyФ: %s\n" #: g10/encode.c:113 #, c-format msgid "error creating passphrase: %s\n" msgstr "bЁ╠d podczs tworzenia wyra©enia przej╤ciowego (hasЁa): %s\n" #: g10/encode.c:167 g10/encode.c:287 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: OSTRZE╞ENIE: plik jest pusty\n" #: g10/encode.c:237 #, c-format msgid "reading from `%s'\n" msgstr "odczyt z '%s'\n" #: g10/encode.c:431 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s zaszyfrowany dla: %s\n" #: g10/export.c:147 #, c-format msgid "%s: user not found: %s\n" msgstr "%s: nie znaleziono u©ytkownika %s\n" #: g10/export.c:156 #, c-format msgid "certificate read problem: %s\n" msgstr "bЁ╠d przy odczycie certyfikatu: %s\n" #: g10/export.c:165 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "klucz %08lX: nie jest w formacie RFC 2440 - pominiЙty\n" #: g10/export.c:203 msgid "WARNING: nothing exported\n" msgstr "OSTRZE╞ENIE: nic nie zostaЁo wyeksportowane!\n" #: g10/getkey.c:206 msgid "too many entries in pk cache - disabled\n" msgstr "zbyt wiele wpisСw w buforze kluczy publicznych - wyЁ╠czony\n" #: g10/getkey.c:345 msgid "too many entries in unk cache - disabled\n" msgstr "zbyt wiele wpisСw w buforze nieznanych kluczy - wyЁ╠czony\n" #: g10/getkey.c:1535 g10/getkey.c:1591 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "u©ywany jest podklucz %08lX zamiast klucza gЁСwnego %08lX\n" #: g10/import.c:116 #, c-format msgid "can't open `%s': %s\n" msgstr "nie mo©na otworzyФ %s: %s\n" #: g10/import.c:160 #, c-format msgid "skipping block of type %d\n" msgstr "pomijam blok typu %d\n" -#: g10/import.c:167 g10/trustdb.c:2560 g10/trustdb.c:2668 +#: g10/import.c:167 g10/trustdb.c:1656 g10/trustdb.c:1695 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu kluczy przetworzonych do tej chwili\n" #: g10/import.c:172 #, c-format msgid "error reading `%s': %s\n" msgstr "bЁ╠d odczytu '%s': %s\n" #: g10/import.c:175 #, c-format msgid "Total number processed: %lu\n" msgstr "OgСЁem przetworzonych kluczy: %lu\n" #: g10/import.c:177 #, c-format msgid " w/o user IDs: %lu\n" msgstr " bez identyfikatora: %lu\n" #: g10/import.c:179 #, c-format msgid " imported: %lu" msgstr " doЁ╠czono do zbioru: %lu" #: g10/import.c:185 #, c-format msgid " unchanged: %lu\n" msgstr " bez zmian: %lu\n" #: g10/import.c:187 #, c-format msgid " new user IDs: %lu\n" msgstr " nowych identyfikatorСw: %lu\n" #: g10/import.c:189 #, c-format msgid " new subkeys: %lu\n" msgstr " nowych podkluczy: %lu\n" #: g10/import.c:191 #, c-format msgid " new signatures: %lu\n" msgstr " nowych podpisСw: %lu\n" #: g10/import.c:193 #, c-format msgid " new key revocations: %lu\n" msgstr " nowych uniewa©nieЯ kluczy: %lu\n" #: g10/import.c:195 #, c-format msgid " secret keys read: %lu\n" msgstr " tajnych kluczy wczytanych: %lu\n" #: g10/import.c:197 #, c-format msgid " secret keys imported: %lu\n" msgstr " tajnych kluczy dodanych: %lu\n" #: g10/import.c:199 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " tajnych kluczy bez zmian: %lu\n" -#: g10/import.c:342 g10/import.c:529 +#: g10/import.c:342 g10/import.c:526 #, c-format msgid "key %08lX: no user id\n" msgstr "klucz %08lX: brak identyfikatora u©ytkownika\n" #: g10/import.c:353 #, c-format msgid "key %08lX: no valid user ids\n" msgstr "klucz %08lX: brak poprawnych identyfikatorСw u©ytkownika\n" #: g10/import.c:355 msgid "this may be caused by a missing self-signature\n" msgstr "to mo©e byФ spowodowane brakiem podpisu wЁa╤ciciela klucza\n" -#: g10/import.c:366 g10/import.c:596 +#: g10/import.c:366 g10/import.c:593 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "klucz %08lX: brak klucza publicznego: %s\n" #: g10/import.c:372 msgid "no default public keyring\n" msgstr "brak domy╤lnego zbioru kluczy publicznych\n" -#: g10/import.c:376 g10/openfile.c:148 g10/sign.c:268 g10/sign.c:559 +#: g10/import.c:376 g10/openfile.c:186 g10/sign.c:268 g10/sign.c:559 #, c-format msgid "writing to `%s'\n" msgstr "zapis do '%s'\n" -#: g10/import.c:379 g10/import.c:435 g10/import.c:544 g10/import.c:645 +#: g10/import.c:379 g10/import.c:432 g10/import.c:541 g10/import.c:642 #, c-format msgid "can't lock keyring `%s': %s\n" msgstr "nie mo©na zablokowaФ zbioru kluczy publicznych '%s': %s\n" -#: g10/import.c:382 g10/import.c:438 g10/import.c:547 g10/import.c:648 +#: g10/import.c:382 g10/import.c:435 g10/import.c:544 g10/import.c:645 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "bЁ╠d zapisu zbioru kluczy '%s': %s\n" #: g10/import.c:387 #, c-format msgid "key %08lX: public key imported\n" msgstr "klucz %08lX: klucz publiczny wczytany do zbioru\n" #: g10/import.c:399 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "klucz %08lX: nie zgadza siЙ z lokalnie posiadan╠ kopi╠\n" -#: g10/import.c:411 g10/import.c:604 +#: g10/import.c:408 g10/import.c:601 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "klucz %08lX: brak oryginalnego bloku klucza; %s\n" -#: g10/import.c:417 g10/import.c:610 +#: g10/import.c:414 g10/import.c:607 #, c-format msgid "key %08lX: can't read original keyblock: %s\n" msgstr "klucz %08lX: nie mo©na odczytaФ oryginalnego bloku klucza; %s\n" -#: g10/import.c:444 +#: g10/import.c:441 #, c-format msgid "key %08lX: 1 new user-id\n" msgstr "klucz %08lX: 1 nowy identyfikator u©ytkownika\n" -#: g10/import.c:447 +#: g10/import.c:444 #, c-format msgid "key %08lX: %d new user-ids\n" msgstr "klucz %08lX: %d nowych identyfikatorСw u©ytkownika\n" -#: g10/import.c:450 +#: g10/import.c:447 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "klucz %08lX: 1 nowy podpis\n" -#: g10/import.c:453 +#: g10/import.c:450 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "klucz %08lX: %d nowych podpisСw\n" -#: g10/import.c:456 +#: g10/import.c:453 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "klucz %08lX: 1 nowy podklucz\n" -#: g10/import.c:459 +#: g10/import.c:456 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "klucz %08lX: %d nowych podkluczy\n" -#: g10/import.c:469 +#: g10/import.c:466 #, c-format msgid "key %08lX: not changed\n" msgstr "klucz %08lX: bez zmian\n" -#: g10/import.c:552 +#: g10/import.c:549 #, c-format msgid "key %08lX: secret key imported\n" msgstr "Klucz %08lX: klucz tajny wczytany do zbioru\n" #. we can't merge secret keys -#: g10/import.c:556 +#: g10/import.c:553 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "Klucz %08lX: ten klucz ju© znajduje siЙ w zbiorze\n" -#: g10/import.c:561 +#: g10/import.c:558 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "klucz %08lX: brak klucza tajnego: %s\n" -#: g10/import.c:590 +#: g10/import.c:587 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "klucz %08lX: brak klucza publicznego - wczytany certyfikat \n" "uniwa©nienia nie mo©e byФ zastosowany\n" -#: g10/import.c:621 +#: g10/import.c:618 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "" "klucz %08lX: niepoprawny certyfikat uniewa©nienia:\n" "%s - odrzucony\n" -#: g10/import.c:653 +#: g10/import.c:650 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "klucz %08lX: wczytany certyfikat uniewa©nienia\n" -#: g10/import.c:686 +#: g10/import.c:683 #, c-format msgid "key %08lX: no user-id for signature\n" msgstr "klucz %08lX: brak identyfikatora u©ytkownika do podpisu\n" -#: g10/import.c:693 g10/import.c:717 +#: g10/import.c:690 g10/import.c:714 #, c-format msgid "key %08lX: unsupported public key algorithm\n" msgstr "" "klucz %08lX: nie obsЁugiwany algorytm szyfrowania z kluczem publicznym\n" -#: g10/import.c:694 +#: g10/import.c:691 #, c-format msgid "key %08lX: invalid self-signature\n" msgstr "klucz %08lX: niepoprawny podpis wЁa╤ciciela klucza\n" -#: g10/import.c:709 +#: g10/import.c:706 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "klucz %08lX: brak podklucza do dowi╠zania\n" -#: g10/import.c:718 +#: g10/import.c:715 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "klucz %08lX: niepoprawne dowi╠zanie podklucza\n" -#: g10/import.c:750 +#: g10/import.c:747 #, c-format msgid "key %08lX: skipped userid '" msgstr "klucz %08lX: zostaЁ pominiЙty identyfikator u©ytkownika '" -#: g10/import.c:773 +#: g10/import.c:770 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "klucz %08lX: podklucz pominiЙty\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:798 +#: g10/import.c:795 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "klucz %08lX: podpis nieeksportowalny (klasa %02x) - pominiЙty\n" -#: g10/import.c:807 +#: g10/import.c:804 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "" "klucz %08lX: certyfikat uniewa©nienia umieszczony w niewЁa╤ciwym \n" "miejscu - zostaЁ pominiЙty\n" -#: g10/import.c:815 +#: g10/import.c:812 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "klucz %08lX: niepoprawny certyfikat uniewa©nienia: %s - pominiЙty\n" -#: g10/import.c:915 +#: g10/import.c:912 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "key %08lX: powtСrzony identyfikator u©ytkownika - doЁ╠czony\n" -#: g10/import.c:966 +#: g10/import.c:963 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "klucz %08lX: dodany certyfikat uniewa©nienia\n" -#: g10/import.c:1079 g10/import.c:1134 +#: g10/import.c:1076 g10/import.c:1131 #, c-format msgid "key %08lX: our copy has no self-signature\n" msgstr "klucz %08lX: dostЙpna kopia nie jest podpisana ni╠ sam╠\n" -#: g10/keyedit.c:92 +#: g10/keyedit.c:93 #, c-format msgid "%s: user not found\n" msgstr "%s: nie znaleziono u©ytkownika\n" -#: g10/keyedit.c:153 +#: g10/keyedit.c:154 msgid "[revocation]" msgstr "[uniewa©nienie]" -#: g10/keyedit.c:154 +#: g10/keyedit.c:155 msgid "[self-signature]" msgstr "[podpis klucza nim samym]" -#: g10/keyedit.c:218 +#: g10/keyedit.c:219 msgid "1 bad signature\n" msgstr "1 niepoprawny podpis\n" -#: g10/keyedit.c:220 +#: g10/keyedit.c:221 #, c-format msgid "%d bad signatures\n" msgstr "%d niepoprawnych podpisСw\n" -#: g10/keyedit.c:222 +#: g10/keyedit.c:223 msgid "1 signature not checked due to a missing key\n" msgstr "1 podpis nie zostaЁ sprawdzony z powodu braku klucza\n" -#: g10/keyedit.c:224 +#: g10/keyedit.c:225 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d podpisСw nie zostaЁo sprawdzonych z powodu braku kluczy\n" -#: g10/keyedit.c:226 +#: g10/keyedit.c:227 msgid "1 signature not checked due to an error\n" msgstr "1 podpis nie zostaЁ sprawdzony z powodu bЁЙdu\n" -#: g10/keyedit.c:228 +#: g10/keyedit.c:229 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d podpisСw nie sprawdzonych z powodu bЁЙdСw\n" -#: g10/keyedit.c:230 +#: g10/keyedit.c:231 msgid "1 user id without valid self-signature detected\n" msgstr "wykryto 1 identyfikator u©ytkownika bez podpisu wЁa╤ciciela klucza\n" -#: g10/keyedit.c:232 +#: g10/keyedit.c:233 #, c-format msgid "%d user ids without valid self-signatures detected\n" msgstr "" "wykryto %d identyfikatorСw u©ytkownika bez podpisСw wЁa╤ciciela klucza\n" #. Fixme: see whether there is a revocation in which #. * case we should allow to sign it again. -#: g10/keyedit.c:312 +#: g10/keyedit.c:313 #, c-format msgid "Already signed by key %08lX\n" msgstr "Ju© podpisano kluczem %08lX.\n" -#: g10/keyedit.c:320 +#: g10/keyedit.c:321 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Nie ma nic do podpisania kluczem %08lX.\n" -#: g10/keyedit.c:329 +#: g10/keyedit.c:330 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" msgstr "" "Czy jeste╤ naprawdЙ pewien ©e chcesz podpisaФ ten klucz \n" "swoim kluczem: \"" -#: g10/keyedit.c:338 +#: g10/keyedit.c:339 msgid "" "The signature will be marked as non-exportable.\n" "\n" msgstr "" "Podpis zostanie oznaczony jako nieeksportowalny.\n" "\n" -#: g10/keyedit.c:343 +#: g10/keyedit.c:344 msgid "Really sign? " msgstr "Na pewno podpisaФ? " -#: g10/keyedit.c:369 g10/keyedit.c:1790 g10/keyedit.c:1839 g10/sign.c:128 +#: g10/keyedit.c:370 g10/keyedit.c:1806 g10/keyedit.c:1855 g10/sign.c:128 #, c-format msgid "signing failed: %s\n" msgstr "zЁo©enie podpisu nie powiodЁo siЙ: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:423 msgid "This key is not protected.\n" msgstr "Ten klucz nie jest chroniony.\n" -#: g10/keyedit.c:425 +#: g10/keyedit.c:426 msgid "Key is protected.\n" msgstr "Klucz jest chroniony.\n" -#: g10/keyedit.c:442 +#: g10/keyedit.c:443 #, c-format msgid "Can't edit this key: %s\n" msgstr "Tego klucza nie mo©na edytowaФ: %s.\n" -#: g10/keyedit.c:447 +#: g10/keyedit.c:448 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Wprowad╪ nowe wyra©enie przej╤ciowe (hasЁo) dla tego klucza tajnego.\n" "\n" -#: g10/keyedit.c:459 +#: g10/keyedit.c:460 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Nie chcesz podaФ wyra©enia przej╤ciowego (hasЁa) - to *zЁy* pomysЁ!\n" "\n" -#: g10/keyedit.c:462 +#: g10/keyedit.c:463 msgid "Do you really want to do this? " msgstr "Czy na pewno chcesz to zrobiФ? " -#: g10/keyedit.c:523 +#: g10/keyedit.c:524 msgid "moving a key signature to the correct place\n" msgstr "przenoszЙ podpis klucza na wЁa╤ciwe miejsce\n" -#: g10/keyedit.c:559 +#: g10/keyedit.c:561 msgid "quit this menu" msgstr "wyj╤cie z tego menu" -#: g10/keyedit.c:560 +#: g10/keyedit.c:562 msgid "q" msgstr "w" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save" msgstr "zapis" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save and quit" msgstr "zapis zmian i wyj╤cie" -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "help" msgstr "pomoc" -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "show this help" msgstr "ten tekst pomocy" -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 msgid "fpr" msgstr "odc" -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 msgid "show fingerprint" msgstr "okazanie odcisku klucza" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 msgid "list" msgstr "lista" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 msgid "list key and user ids" msgstr "lista kluczy i identyfikatorСw u©ytkownikСw" -#: g10/keyedit.c:566 +#: g10/keyedit.c:568 msgid "l" msgstr "l" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "uid" msgstr "id" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "select user id N" msgstr "wybСr identyfikatora u©ytkownika N" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "key" msgstr "klucz" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "select secondary key N" msgstr "wybСr podklucza N" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 msgid "check" msgstr "lista" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 msgid "list signatures" msgstr "lista podpisСw" -#: g10/keyedit.c:570 +#: g10/keyedit.c:572 msgid "c" msgstr "l" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 msgid "sign" msgstr "podpis" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 msgid "sign the key" msgstr "zЁo©enie podpisu na kluczu" -#: g10/keyedit.c:572 +#: g10/keyedit.c:574 msgid "s" msgstr "p" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 msgid "lsign" msgstr "lpodpis" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 msgid "sign the key locally" msgstr "zЁo©enie lokalnego podpisu na kluczu" -#: g10/keyedit.c:574 +#: g10/keyedit.c:576 msgid "debug" msgstr "╤ledzenia" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "adduid" msgstr "dodid" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "add a user id" msgstr "dodanie nowego identyfikatora u©ytkownika do klucza" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 msgid "deluid" msgstr "usid" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 msgid "delete user id" msgstr "usuniЙcie identyfikatora u©ytkownika z klucza" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 msgid "addkey" msgstr "dodkl" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 msgid "add a secondary key" msgstr "dodanie podklucza" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delkey" msgstr "uskl" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delete a secondary key" msgstr "usuniЙcie podklucza" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 #, fuzzy msgid "delsig" msgstr "lpodpis" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 #, fuzzy msgid "delete signatures" msgstr "lista podpisСw" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 msgid "expire" msgstr "data" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 msgid "change the expire date" msgstr "zmiana daty wa©no╤ci klucza" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle" msgstr "przeЁ" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle between secret and public key listing" msgstr "przeЁ╠czenie pomiЙdzy list╠ kluczy publicznych i tajnych" -#: g10/keyedit.c:583 +#: g10/keyedit.c:585 msgid "t" msgstr "p" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "pref" msgstr "opcje" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "list preferences" msgstr "lista opcji" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 msgid "passwd" msgstr "hasЁo" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 msgid "change the passphrase" msgstr "zmiana wyra©enia przej╤ciowego (hasЁa)" -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "trust" msgstr "zaufanie" -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "change the ownertrust" msgstr "zmiana zaufania wЁa╤ciciela" -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 msgid "revsig" msgstr "unpod" -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 msgid "revoke signatures" msgstr "uniewa©nienie podpisu" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 msgid "revkey" msgstr "unpkl" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 msgid "revoke a secondary key" msgstr "uniewa©nienie podklucza" -#: g10/keyedit.c:607 +#: g10/keyedit.c:591 +msgid "disable" +msgstr "" + +#: g10/keyedit.c:591 +#, fuzzy +msgid "disable a key" +msgstr "klucz niepoprawny" + +#: g10/keyedit.c:592 +msgid "enable" +msgstr "" + +#: g10/keyedit.c:592 +#, fuzzy +msgid "enable a key" +msgstr "klucz niepoprawny" + +#: g10/keyedit.c:611 msgid "can't do that in batchmode\n" msgstr "nie dziaЁa w trybie wsadowym\n" #. check that they match #. FIXME: check that they both match -#: g10/keyedit.c:636 +#: g10/keyedit.c:640 msgid "Secret key is available.\n" msgstr "DostЙpny jest klucz tajny.\n" -#: g10/keyedit.c:665 +#: g10/keyedit.c:669 msgid "Command> " msgstr "Polecenie> " -#: g10/keyedit.c:692 +#: g10/keyedit.c:696 msgid "Need the secret key to do this.\n" msgstr "Do wykonania tej operacji potrzebny jest klucz tajny.\n" -#: g10/keyedit.c:714 +#: g10/keyedit.c:718 msgid "Save changes? " msgstr "ZapisaФ zmiany? " -#: g10/keyedit.c:717 +#: g10/keyedit.c:721 msgid "Quit without saving? " msgstr "Wyj╤Ф bez zapisania zmian? " -#: g10/keyedit.c:727 +#: g10/keyedit.c:731 #, c-format msgid "update failed: %s\n" msgstr "naniesienie poprawek nie powiodЁo siЙ: %s\n" -#: g10/keyedit.c:734 +#: g10/keyedit.c:738 #, c-format msgid "update secret failed: %s\n" msgstr "naniesienie poprawek na kluczu tajnym nie powiodЁo siЙ: %s\n" -#: g10/keyedit.c:741 +#: g10/keyedit.c:745 msgid "Key not changed so no update needed.\n" msgstr "" "Klucz nie zostaЁ zmieniony wiЙc nanoszenie poprawek nie jest konieczne.\n" -#: g10/keyedit.c:744 g10/keyedit.c:803 +#: g10/keyedit.c:748 g10/keyedit.c:807 #, c-format msgid "update of trustdb failed: %s\n" msgstr "naniesienie poprawek bazy zaufania nie powiodЁo siЙ: %s\n" -#: g10/keyedit.c:777 +#: g10/keyedit.c:781 msgid "Really sign all user ids? " msgstr "PodpisaФ wszystkie identyfikatory u©ytkownika na tym kluczu? " -#: g10/keyedit.c:778 +#: g10/keyedit.c:782 msgid "Hint: Select the user ids to sign\n" msgstr "Podpowied╪: wybierz identyfikatory u©ytkownika do podpisania.\n" -#: g10/keyedit.c:814 g10/keyedit.c:835 +#: g10/keyedit.c:818 g10/keyedit.c:839 msgid "You must select at least one user id.\n" msgstr "Musisz wybraФ co najmniej jeden identyfikator u©ytkownika.\n" -#: g10/keyedit.c:816 +#: g10/keyedit.c:820 msgid "You can't delete the last user id!\n" msgstr "Nie mo©esz usun╠Ф ostatniego identyfikatora u©ytkownika!\n" -#: g10/keyedit.c:819 +#: g10/keyedit.c:823 msgid "Really remove all selected user ids? " msgstr "Czy na pewno usun╠Ф wszystkie wybrane identyfikatory u©ytkownika? " -#: g10/keyedit.c:820 +#: g10/keyedit.c:824 msgid "Really remove this user id? " msgstr "Czy na pewno usun╠Ф ten identyfikator u©ytkownika? " -#: g10/keyedit.c:858 g10/keyedit.c:880 +#: g10/keyedit.c:860 g10/keyedit.c:882 msgid "You must select at least one key.\n" msgstr "Musisz wybraФ co najmniej jeden klucz.\n" -#: g10/keyedit.c:862 +#: g10/keyedit.c:864 msgid "Do you really want to delete the selected keys? " msgstr "Czy na pewno chcesz usun╠Ф wybrane klucze? " -#: g10/keyedit.c:863 +#: g10/keyedit.c:865 msgid "Do you really want to delete this key? " msgstr "Czy na pewno chcesz usun╠Ф ten klucz? " -#: g10/keyedit.c:884 +#: g10/keyedit.c:886 msgid "Do you really want to revoke the selected keys? " msgstr "Czy na pewno chcesz uniewa©niФ wybrane klucze? " -#: g10/keyedit.c:885 +#: g10/keyedit.c:887 msgid "Do you really want to revoke this key? " msgstr "Czy na pewno chcesz uniewa©niФ ten klucz? " -#: g10/keyedit.c:939 +#: g10/keyedit.c:949 msgid "Invalid command (try \"help\")\n" msgstr "Niepoprawna komenda (sprСbuj \"help\")\n" -#: g10/keyedit.c:1294 +#: g10/keyedit.c:1039 +#, fuzzy +msgid "This key has been disabled" +msgstr "Uwaga: Data wa©no╤ci tego klucza upЁynЙЁa!\n" + +#: g10/keyedit.c:1310 msgid "Delete this good signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1298 +#: g10/keyedit.c:1314 msgid "Delete this invalid signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1302 +#: g10/keyedit.c:1318 #, fuzzy msgid "Delete this unknown signature? (y/N/q)" msgstr "Na pewno utworzyФ certyfikaty uniewa©nienia ? (t/N)" -#: g10/keyedit.c:1308 +#: g10/keyedit.c:1324 #, fuzzy msgid "Really delete this self-signature? (y/N)" msgstr "Na pewno utworzyФ certyfikaty uniewa©nienia ? (t/N)" -#: g10/keyedit.c:1322 +#: g10/keyedit.c:1338 #, fuzzy, c-format msgid "Deleted %d signature.\n" msgstr "%d niepoprawnych podpisСw\n" -#: g10/keyedit.c:1323 +#: g10/keyedit.c:1339 #, fuzzy, c-format msgid "Deleted %d signatures.\n" msgstr "%d niepoprawnych podpisСw\n" -#: g10/keyedit.c:1326 +#: g10/keyedit.c:1342 #, fuzzy msgid "Nothing deleted.\n" msgstr "OSTRZE╞ENIE: nic nie zostaЁo wyeksportowane!\n" -#: g10/keyedit.c:1395 +#: g10/keyedit.c:1411 msgid "Please remove selections from the secret keys.\n" msgstr "ProszЙ usun╠Ф znacznik wyboru z kluczy tajnych.\n" -#: g10/keyedit.c:1401 +#: g10/keyedit.c:1417 msgid "Please select at most one secondary key.\n" msgstr "ProszЙ wybraФ najwy©ej jeden podklucz.\n" -#: g10/keyedit.c:1405 +#: g10/keyedit.c:1421 #, fuzzy msgid "Changing expiration time for a secondary key.\n" msgstr "Zmiana daty wa©no╤ci podklucza.\n" -#: g10/keyedit.c:1407 +#: g10/keyedit.c:1423 #, fuzzy msgid "Changing expiration time for the primary key.\n" msgstr "Zmiana daty wa©no╤ci gЁСwnego klucza.\n" -#: g10/keyedit.c:1448 +#: g10/keyedit.c:1464 msgid "You can't change the expiration date of a v3 key\n" msgstr "Nie mo©na zmieniФ daty wa©no╤ci klucza w wersji 3.\n" -#: g10/keyedit.c:1464 +#: g10/keyedit.c:1480 msgid "No corresponding signature in secret ring\n" msgstr "Brak odpowiadaj╠cego podpisu w zbiorze kluczy tajnych\n" -#: g10/keyedit.c:1524 +#: g10/keyedit.c:1540 #, c-format msgid "No user id with index %d\n" msgstr "Brak identyfikatora u©ytkownika o numerze %d.\n" -#: g10/keyedit.c:1570 +#: g10/keyedit.c:1586 #, c-format msgid "No secondary key with index %d\n" msgstr "Brak podklucza o indeksie %d\n" -#: g10/keyedit.c:1668 +#: g10/keyedit.c:1684 msgid "user ID: \"" msgstr "Identyfikator u©ytkownika: " -#: g10/keyedit.c:1671 +#: g10/keyedit.c:1687 #, c-format msgid "" "\"\n" "signed with your key %08lX at %s\n" msgstr "" "\"\n" "podpisano Twoim kluczem %08lX w %s\n" -#: g10/keyedit.c:1675 +#: g10/keyedit.c:1691 msgid "Create a revocation certificate for this signature? (y/N)" msgstr "StworzyФ certyfikat uniewa©nienia tego podpisu? (t/N)" -#: g10/keyedit.c:1755 +#: g10/keyedit.c:1771 msgid "Really create the revocation certificates? (y/N)" msgstr "Na pewno utworzyФ certyfikaty uniewa©nienia ? (t/N)" -#: g10/keyedit.c:1778 +#: g10/keyedit.c:1794 msgid "no secret key\n" msgstr "brak klucza prywatnego\n" #: g10/mainproc.c:184 #, c-format msgid "public key is %08lX\n" msgstr "klucz publiczny %08lX\n" -#: g10/mainproc.c:212 +#: g10/mainproc.c:213 msgid "public key encrypted data: good DEK\n" msgstr "dane zaszyfrowane kluczem publicznym: poprawny klucz sesyjny\n" #. fixme: defer this message until we have parsed all packets of #. * this type - do this by building a list of keys with their stati #. * and store it with the context. do_proc_packets can then use #. * this list to display some information -#: g10/mainproc.c:219 +#: g10/mainproc.c:220 #, c-format msgid "public key decryption failed: %s\n" msgstr "bЁ╠d odszyfrowywania kluczem publicznym: %s\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:248 msgid "decryption okay\n" msgstr "odszyfrowane poprawnie\n" -#: g10/mainproc.c:252 +#: g10/mainproc.c:253 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "OSTRZE╞ENIE: zaszyfrowana wiadomo╤Ф byЁa manipulowana!\n" -#: g10/mainproc.c:257 +#: g10/mainproc.c:258 #, c-format msgid "decryption failed: %s\n" msgstr "bЁ╠d odszyfrowywania: %s\n" -#: g10/mainproc.c:275 +#: g10/mainproc.c:276 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "UWAGA: nadawca zaznaczyЁ ©e wiadomo╤Ф nie powinna byФ zapisywana\n" -#: g10/mainproc.c:277 +#: g10/mainproc.c:278 #, c-format msgid "original file name='%.*s'\n" msgstr "pierwotna nazwa pliku='%.*s'\n" -#: g10/mainproc.c:505 g10/mainproc.c:514 +#: g10/mainproc.c:506 g10/mainproc.c:515 #, fuzzy msgid "WARNING: invalid notation data found\n" msgstr "nie odnaleziono poprawnych danych w formacie OpenPGP.\n" -#: g10/mainproc.c:517 +#: g10/mainproc.c:518 msgid "Notation: " msgstr "" -#: g10/mainproc.c:524 +#: g10/mainproc.c:525 msgid "Policy: " msgstr "" -#: g10/mainproc.c:929 +#: g10/mainproc.c:930 msgid "signature verification suppressed\n" msgstr "wymuszono pominiЙcie sprawdzenia podpisu\n" -#: g10/mainproc.c:935 +#: g10/mainproc.c:936 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "" "Podpis zЁo©ony %.*s za pomoc╠ %s,\n" "z u©yciem klucza o identyfikatorze %08lX\n" #. just in case that we have no userid -#: g10/mainproc.c:961 g10/mainproc.c:972 +#: g10/mainproc.c:962 g10/mainproc.c:973 msgid "BAD signature from \"" msgstr "NIEPOPRAWNY podpis zЁo©ony przez \"" -#: g10/mainproc.c:962 g10/mainproc.c:973 +#: g10/mainproc.c:963 g10/mainproc.c:974 msgid "Good signature from \"" msgstr "Poprawny podpis zЁo©ony przez \"" -#: g10/mainproc.c:964 +#: g10/mainproc.c:965 msgid " aka \"" msgstr " alias \"" -#: g10/mainproc.c:1015 +#: g10/mainproc.c:1016 #, c-format msgid "Can't check signature: %s\n" msgstr "Nie mogЙ sprawdziФ podpisu: %s\n" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1110 msgid "old style (PGP 2.x) signature\n" msgstr "podpis starego typu (PGP 2.x)\n" -#: g10/mainproc.c:1114 +#: g10/mainproc.c:1115 msgid "invalid root packet detected in proc_tree()\n" msgstr "wykryto niepoprawny pakiet pierwotny w proc_tree()\n" #: g10/misc.c:93 #, c-format msgid "can't disable core dumps: %s\n" msgstr "nie mo©na wyЁ╠czyФ zrzucania pamiЙci: %s\n" #: g10/misc.c:96 msgid "WARNING: program may create a core file!\n" msgstr "OSTRZE╞ENIE: program mo©e stworzyФ plik zrzutu pamiЙci!\n" #: g10/misc.c:203 msgid "Experimental algorithms should not be used!\n" msgstr "Nie nale©y u©ywaФ algorytmСw do╤wiadczalnych!\n" #: g10/misc.c:217 msgid "" "RSA keys are deprecated; please consider creating a new key and use this key " "in the future\n" msgstr "" "Klucze RSA s╠ odradzane; proszЙ rozwa©yФ przej╤cie na inne algorytmy po\n" "wygenerowaniu odpowiednich kluczy.\n" #: g10/misc.c:239 msgid "this cipher algorithm is depreciated; please use a more standard one!\n" msgstr "" "ten algorytm szyfruj╠cy jest odradzanym proszЙ u©ywaФ bardziej " "standardowych!\n" #: g10/parse-packet.c:112 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "algorytm klucza publicznego niemo©liwy do obsЁu©enia: %d\n" #: g10/parse-packet.c:931 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "podpakiet typu %d ma ustawiony krytyczny bit\n" -#: g10/passphrase.c:157 +#: g10/passphrase.c:159 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" "user: \"" msgstr "" "\n" "Musisz podaФ wyra©enie przej╤ciowe (hasЁo) aby uaktywniФ klucz tajny\n" "dla u©ytkownika: \"" -#: g10/passphrase.c:166 +#: g10/passphrase.c:168 #, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "dЁugo╤Ф %u bitСw, typ %s, klucz %08lX, stworzony %s" -#: g10/passphrase.c:171 +#: g10/passphrase.c:173 #, c-format msgid " (main key ID %08lX)" msgstr " (gЁСwny ID klucza %08lX)" -#: g10/passphrase.c:192 +#: g10/passphrase.c:194 msgid "Enter passphrase: " msgstr "Wyra©enie przej╤ciowe: " -#: g10/passphrase.c:196 +#: g10/passphrase.c:198 msgid "Repeat passphrase: " msgstr "PowtСrzone wyra©enie przej╤ciowe: " #: g10/plaintext.c:63 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "dane nie zostaЁy zapisane; nale©y u©yФ opcji \"--output\" aby je zapisaФ\n" #: g10/plaintext.c:266 msgid "Please enter name of data file: " msgstr "Nazwa pliku danych: " #: g10/plaintext.c:287 msgid "reading stdin ...\n" msgstr "czytam strumieЯ standardowego wej╤cia\n" #: g10/plaintext.c:360 #, c-format msgid "can't open signed data `%s'\n" msgstr "nie mo©na otworzyФ podpisanego pliku '%s'\n" #: g10/pubkey-enc.c:79 #, c-format msgid "anonymous receiver; trying secret key %08lX ...\n" msgstr "adresat anonimowy; prСbujЙ klucz tajny %08lX ...\n" #: g10/pubkey-enc.c:85 msgid "okay, we are the anonymous recipient.\n" msgstr "OK, to my jeste╤my adresatem anonimowym.\n" #: g10/pubkey-enc.c:137 msgid "old encoding of the DEK is not supported\n" msgstr "stary, nie obsЁugiwany algorytm szyfrowania klucza sesyjnego\n" #: g10/pubkey-enc.c:191 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "UWAGA: brak algorytmu szyfruj╠cego %d w ustawieniach\n" #: g10/seckey-cert.c:55 #, c-format msgid "protection algorithm %d is not supported\n" msgstr "%d - algorytm ochrony nie obsЁugiwany\n" #: g10/seckey-cert.c:171 msgid "Invalid passphrase; please try again ...\n" msgstr "" "Niepoprawne wyra©enie przej╤ciowe (hasЁo); proszЙ sprСbowaФ ponownie ...\n" #: g10/seckey-cert.c:227 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "Ostrze©enie: Wykryto klucz sЁaby algorytmu - nale©y ponownie zmieniФ \n" "wyra©enie przej╤ciowe (hasЁo).\n" -#: g10/sig-check.c:187 +#: g10/sig-check.c:199 msgid "assuming bad MDC due to an unknown critical bit\n" msgstr "" "przyjЙto niepoprawno╤Ф MDC z powonu ustawienia nieznanego bitu krytycznego\n" -#: g10/sig-check.c:283 +#: g10/sig-check.c:295 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "Klucz algorytmu ElGamala wygenerowany przez PGP - podpisy nim skЁadane\n" "nie zapewniaj╠ bezpieczeЯstwa!\n" -#: g10/sig-check.c:291 +#: g10/sig-check.c:303 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "klucz publiczny jest o %lu sekund mЁodszy od podpisu\n" -#: g10/sig-check.c:292 +#: g10/sig-check.c:304 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "klucz publiczny jest o %lu sekund mЁodszy od podpisu\n" -#: g10/sig-check.c:308 +#: g10/sig-check.c:320 #, c-format msgid "NOTE: signature key expired %s\n" msgstr "UWAGA: klucz podpisuj╠cy przekroczyЁ datЙ wa©no╤ci %s\n" -#: g10/sig-check.c:365 +#: g10/sig-check.c:377 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" "przyjЙto niewa©no╤Ф podpisu z powonu ustawienia nieznanego bitu krytycznego\n" #: g10/sign.c:132 #, c-format msgid "%s signature from: %s\n" msgstr "%s podpis zЁo©ony przez: %s\n" #: g10/sign.c:263 g10/sign.c:554 #, c-format msgid "can't create %s: %s\n" msgstr "nie mogЙ stworzyФ %s: %s\n" #: g10/sign.c:361 msgid "signing:" msgstr "podpis:" #: g10/sign.c:401 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "OSTRZE╞ENIE: plik '%s' jest pusty\n" #: g10/textfilter.c:128 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "nie mogЙ obsЁu©yФ linii tekstu dЁu©szej ni© %d znakСw\n" #: g10/textfilter.c:197 #, c-format msgid "input line longer than %d characters\n" msgstr "linia dЁu©sza ni© %d znakСw\n" -#: g10/tdbio.c:116 g10/tdbio.c:1505 +#: g10/tdbio.c:116 g10/tdbio.c:1634 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "baza zaufania, wpis %lu: lseek() nie powiodЁa siЙ: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1512 +#: g10/tdbio.c:122 g10/tdbio.c:1641 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "baza zaufania, wpis %lu: zapis nie powiСdЁ siЙ (n=%d): %s\n" #: g10/tdbio.c:232 msgid "trustdb transaction too large\n" msgstr "zbyt du©e zlecenie dla bazy zaufania\n" #: g10/tdbio.c:424 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: dostЙp niemo©liwy: %s\n" #: g10/ringedit.c:296 g10/tdbio.c:444 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: nie mogЙ utworzyФ katalogu: %s\n" #: g10/ringedit.c:302 g10/tdbio.c:447 #, c-format msgid "%s: directory created\n" msgstr "%s: katalog utworzony\n" #: g10/tdbio.c:451 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: katalog nie istnieje!\n" -#: g10/openfile.c:144 g10/openfile.c:215 g10/ringedit.c:1344 g10/tdbio.c:457 +#: g10/openfile.c:182 g10/openfile.c:253 g10/ringedit.c:1344 g10/tdbio.c:457 #, c-format msgid "%s: can't create: %s\n" msgstr "%s: nie mogЙ utworzyФ: %s\n" #: g10/tdbio.c:472 g10/tdbio.c:521 #, c-format msgid "%s: can't create lock\n" msgstr "%s: nie mogЙ utworzyФ blokady\n" #: g10/tdbio.c:486 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: stworzenie zapisu o wersji nie powiodЁo siЙ: %s" #: g10/tdbio.c:490 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: stworzony niepoprawny plik bazy zaufania\n" #: g10/tdbio.c:493 #, c-format msgid "%s: trustdb created\n" msgstr "%s: baza zaufania utworzona\n" #: g10/tdbio.c:530 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: niepoprawny plik bazy zaufania\n" #: g10/tdbio.c:563 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: tworzenie tablicy skrСtСw nie powiodЁo siЙ: %s\n" #: g10/tdbio.c:571 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: bЁ╠d przy uaktualnianiu numeru wersji: %s\n" #: g10/tdbio.c:587 g10/tdbio.c:626 g10/tdbio.c:648 g10/tdbio.c:678 -#: g10/tdbio.c:703 g10/tdbio.c:1438 g10/tdbio.c:1465 +#: g10/tdbio.c:703 g10/tdbio.c:1567 g10/tdbio.c:1594 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: bЁ╠d odczytu numeru wersji: %s\n" #: g10/tdbio.c:600 g10/tdbio.c:659 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: bЁ╠d zapisu numeru wersji: %s\n" -#: g10/tdbio.c:1132 +#: g10/tdbio.c:1246 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "baza zaufania: procedura lseek() zawiodЁa: %s\n" -#: g10/tdbio.c:1140 +#: g10/tdbio.c:1254 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "baza zaufania: procedura read() (n=%d) zawiodЁa: %s\n" -#: g10/tdbio.c:1161 +#: g10/tdbio.c:1275 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: to nie jest plik bazy zaufania\n" -#: g10/tdbio.c:1177 +#: g10/tdbio.c:1291 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: wpis wersji z numerem %lu\n" -#: g10/tdbio.c:1182 +#: g10/tdbio.c:1296 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: niewЁa╤ciwa wersja pliku %d\n" -#: g10/tdbio.c:1471 +#: g10/tdbio.c:1600 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: bЁ╠d odczytu pustego wpisu: %s\n" -#: g10/tdbio.c:1479 +#: g10/tdbio.c:1608 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: bЁ╠d zapisu wpisu katalogowego: %s\n" -#: g10/tdbio.c:1489 +#: g10/tdbio.c:1618 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: zerowanie rekordu nie powiodЁo siЙ: %s\n" -#: g10/tdbio.c:1519 +#: g10/tdbio.c:1648 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: dopisanie rekordu nie powiodЁo siЙ: %s\n" -#: g10/tdbio.c:1630 +#: g10/tdbio.c:1759 #, fuzzy msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "" "Baza zaufania jest uszkodzona; proszЙ uruchomiФ \"gpgm --fix-trust-db\".\n" -#: g10/trustdb.c:163 +#: g10/trustdb.c:160 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "wpis zaufania %lu, typ zapytania %d: odczyt nie powiСdЁ siЙ: %s\n" -#: g10/trustdb.c:178 +#: g10/trustdb.c:175 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "wpis zaufania %lu, typ zapytania %d: zapis nie powiСdЁ siЙ: %s\n" -#: g10/trustdb.c:192 +#: g10/trustdb.c:189 #, c-format msgid "trust record %lu: delete failed: %s\n" msgstr "wpis zaufania %lu: usuniЙcie nie powiodЁo siЙ %s\n" -#: g10/trustdb.c:206 +#: g10/trustdb.c:203 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "baza zaufania: synchronizacja nie powiodЁa siЙ %s\n" -#: g10/trustdb.c:386 +#: g10/trustdb.c:347 #, c-format msgid "error reading dir record for LID %lu: %s\n" msgstr "bЁ╠d odczytu wpisu katalogowego dla LID %lu: %s\n" -#: g10/trustdb.c:393 +#: g10/trustdb.c:354 #, c-format msgid "lid %lu: expected dir record, got type %d\n" msgstr "lid %lu: oczekiwany wpis katalogowy, napotkano typ %d\n" -#: g10/trustdb.c:398 +#: g10/trustdb.c:359 #, c-format msgid "no primary key for LID %lu\n" msgstr "brak klucza gЁСwnego dla LID %lu\n" -#: g10/trustdb.c:403 +#: g10/trustdb.c:364 #, c-format msgid "error reading primary key for LID %lu: %s\n" msgstr "bЁ╠d odczytu gЁСwnego klucza dla LID %lu: %s\n" -#: g10/trustdb.c:442 +#: g10/trustdb.c:403 #, c-format msgid "get_dir_record: search_record failed: %s\n" msgstr "get_dir_record: funkcja search_record zawiodЁa: %s\n" -#: g10/trustdb.c:510 +#: g10/trustdb.c:458 #, c-format msgid "NOTE: secret key %08lX is NOT protected.\n" msgstr "UWAGA: klucz tajny %08lX NIE jest chroniony.\n" -#: g10/trustdb.c:518 +#: g10/trustdb.c:466 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "klucz %08lX: klucz tajny bez klucza jawnego - pominiЙty\n" -#: g10/trustdb.c:525 +#: g10/trustdb.c:473 #, c-format msgid "key %08lX: secret and public key don't match\n" msgstr "klucz %08lX: klucz tajny nie pasuje do klucza jawnego\n" -#: g10/trustdb.c:535 +#: g10/trustdb.c:483 #, c-format msgid "key %08lX: can't put it into the trustdb\n" msgstr "klucz %08lX: wpisanie do bazy zaufania niemo©liwe\n" -#: g10/trustdb.c:541 +#: g10/trustdb.c:489 #, c-format msgid "key %08lX: query record failed\n" msgstr "klucz %08lX: wyszukanie zapisu nie powiodЁo siЙ\n" -#: g10/trustdb.c:550 +#: g10/trustdb.c:498 #, c-format msgid "key %08lX: already in trusted key table\n" msgstr "klucz %08lX: ju© znajduje siЙ w tablicy kluczy zaufanych\n" -#: g10/trustdb.c:553 +#: g10/trustdb.c:501 #, c-format msgid "key %08lX: accepted as trusted key.\n" msgstr "Klucz %08lX: zaakceptowany jako klucz zaufany.\n" -#: g10/trustdb.c:561 +#: g10/trustdb.c:509 #, c-format msgid "enumerate secret keys failed: %s\n" msgstr "wyliczenie kluczy tajnych nie powiodЁo siЙ %s\n" -#: g10/trustdb.c:851 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" -msgstr "" -"UWAGA: wpis podpisu %lu[%d] znajduje siЙ w li╤cie domy╤lnej %lu,\n" -"ale jest zaznaczony jako sprawdzony.\n" - -#: g10/trustdb.c:855 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" -msgstr "" -"UWAGA: wpis podpisu %lu[%d] znajduje siЙ w li╤cie domy╤lnej %lu,\n" -"ale nie jest zaznaczony.\n" - -#. we need the dir record -#: g10/trustdb.c:862 -#, c-format -msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" -msgstr "" -"wpis oi podpisie %lu[%d] w li╤cie domy╤lnej %lu nie wskazuje \n" -"na wpis katalogowy\n" - -#: g10/trustdb.c:868 -#, c-format -msgid "lid %lu: no primary key\n" -msgstr "lid %lu: brak klucza gЁСwnego\n" - -#: g10/trustdb.c:901 -#, c-format -msgid "lid %lu: user id not found in keyblock\n" -msgstr "" -"lid %lu: identyfikator u©ytkownika nie zostaЁ odnaleziony w bloku klucza\n" - -#: g10/trustdb.c:905 -#, c-format -msgid "lid %lu: user id without signature\n" -msgstr "lid %lu: niepodpisany identyfikator u©ytkownika\n" - -#: g10/trustdb.c:912 -#, c-format -msgid "lid %lu: self-signature in hintlist\n" -msgstr "lid %lu: podpis klucza nim samym w li╤cie domy╤lnej\n" - -#: g10/trustdb.c:923 g10/trustdb.c:1675 g10/trustdb.c:1766 -msgid "Valid certificate revocation" -msgstr "Poprawne uniewa©nienie certyfikatu" - -#: g10/trustdb.c:924 g10/trustdb.c:1676 g10/trustdb.c:1767 -msgid "Good certificate" -msgstr "Poprawny certyfikat" - -#: g10/trustdb.c:933 -msgid "very strange: no public key\n" -msgstr "bardzo dziwne: brak klucza publicznego\n" - -#: g10/trustdb.c:982 -#, c-format -msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" -msgstr "lista domy╤lna %lu[%d] z %lu nie wskazuje na wpis katalogowy\n" - -#: g10/trustdb.c:988 -#, c-format -msgid "lid %lu does not have a key\n" -msgstr "lid %lu nie ma klucza\n" - -#: g10/trustdb.c:998 -#, c-format -msgid "lid %lu: can't get keyblock: %s\n" -msgstr "lid %lu: pobranie bloku klucza niemo©liwe: %s\n" - -#: g10/trustdb.c:1055 g10/trustdb.c:2030 -#, c-format -msgid "tdbio_search_dir failed: %s\n" +#: g10/trustdb.c:800 +#, fuzzy, c-format +msgid "tdbio_search_sdir failed: %s\n" msgstr "Procedura tdbio_search_dir nie powiodЁa siЙ: %s\n" -#: g10/trustdb.c:1210 +#: g10/trustdb.c:875 #, c-format msgid "key %08lX.%lu: Good subkey binding\n" msgstr "klucz %08lX.%lu Dobre dowi╠zanie podklucza\n" -#: g10/trustdb.c:1216 g10/trustdb.c:1259 +#: g10/trustdb.c:881 g10/trustdb.c:916 #, c-format msgid "key %08lX.%lu: Invalid subkey binding: %s\n" msgstr "klucz %08lX.%lu: Niepoprawne dowi╠zanie podklucza %s\n" -#: g10/trustdb.c:1232 +#: g10/trustdb.c:893 #, c-format msgid "key %08lX.%lu: Valid key revocation\n" msgstr "klucz %08lX.%lu: Poprawne uniewa©nienie klucza\n" -#: g10/trustdb.c:1238 +#: g10/trustdb.c:899 #, c-format msgid "key %08lX.%lu: Invalid key revocation: %s\n" msgstr "klucz %08lX.%lu: NiewЁa╤ciwe uniewa©nienie klucza: %s\n" -#: g10/trustdb.c:1253 +#: g10/trustdb.c:910 #, c-format msgid "key %08lX.%lu: Valid subkey revocation\n" msgstr "klucz %08lX.%lu: Poprawne uniewa©nienie podklucza\n" -#: g10/trustdb.c:1360 +#: g10/trustdb.c:1021 msgid "Good self-signature" msgstr "Poprawny podpis klucza nim samym" -#: g10/trustdb.c:1371 +#: g10/trustdb.c:1031 msgid "Invalid self-signature" msgstr "Niepoprawny podpis klucza nim samym" -#: g10/trustdb.c:1403 -msgid "Valid user ID revocation skipped due to a newer self signature\n" +#: g10/trustdb.c:1058 +#, fuzzy +msgid "Valid user ID revocation skipped due to a newer self signature" msgstr "" "Poprawne uniewa©nienie identyfikatora u©ytkownika pominiЙte z powodu \n" "nowszego podpisu tym samym kluczem\n" -#: g10/trustdb.c:1410 -msgid "Valid user ID revocation\n" +#: g10/trustdb.c:1064 +#, fuzzy +msgid "Valid user ID revocation" msgstr "Poprawne uniewa©nienie identyfikatora u©ytkownika\n" -#: g10/trustdb.c:1417 +#: g10/trustdb.c:1069 msgid "Invalid user ID revocation" msgstr "Niepoprawne uniewa©nienie identyfikatora u©ytkownika" -#: g10/trustdb.c:1512 -msgid "Too many preferences" -msgstr "Zbyt wiele ustawieЯ." - -#: g10/trustdb.c:1526 -msgid "Too many preference items" -msgstr "Zbyt wiele pozycji w ustawieniach" - -#: g10/trustdb.c:1549 g10/trustdb.c:3075 g10/trustdb.c:3105 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "OSTRZE╞ENIE: dЁugie wpisy ustawieЯ jeszcze nie s╠ obsЁugiwane.\n" - -#: g10/trustdb.c:1654 -msgid "duplicated certificate - deleted" -msgstr "podwСjny certyfikat - usuniЙty" +#: g10/trustdb.c:1110 +msgid "Valid certificate revocation" +msgstr "Poprawne uniewa©nienie certyfikatu" -#: g10/trustdb.c:1692 -msgid "public key not anymore available" -msgstr "klucz publiczny jest ju© niedostЙpny" +#: g10/trustdb.c:1111 +msgid "Good certificate" +msgstr "Poprawny certyfikat" -#: g10/trustdb.c:1702 g10/trustdb.c:1791 +#: g10/trustdb.c:1132 msgid "Invalid certificate revocation" msgstr "Niepoprawne uniewa©nienie certyfikatu" -#: g10/trustdb.c:1703 g10/trustdb.c:1792 +#: g10/trustdb.c:1133 msgid "Invalid certificate" msgstr "Niepoprawny certyfikat" -#: g10/trustdb.c:1720 -#, c-format -msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" -msgstr "" -"identyfikator %08lX.%lu/%02X%02X: ma zdublowany katalog %lu,\n" -"ale nie jest jeszcze zaznaczony.\n" - -#: g10/trustdb.c:1734 +#: g10/trustdb.c:1150 g10/trustdb.c:1154 #, c-format msgid "sig record %lu[%d] points to wrong record.\n" msgstr "zapis o podpisach %lu[%d] wskazuje na zЁy wpis.\n" -#. that should never happen -#: g10/trustdb.c:2007 -#, c-format -msgid "insert_trust_record: keyblock not found: %s\n" -msgstr "insert_trust_record: brak bloku klucza: %s\n" - -#: g10/trustdb.c:2408 -msgid "Ooops, no keys\n" -msgstr "Oops, brak kluczy\n" +#: g10/trustdb.c:1206 +msgid "duplicated certificate - deleted" +msgstr "podwСjny certyfikat - usuniЙty" -#: g10/trustdb.c:2412 -msgid "Ooops, no user ids\n" -msgstr "Oops, brak identyfikatorСw u©ytkownikСw\n" +#: g10/trustdb.c:1512 +#, c-format +msgid "tdbio_search_dir failed: %s\n" +msgstr "Procedura tdbio_search_dir nie powiodЁa siЙ: %s\n" -#: g10/trustdb.c:2529 +#: g10/trustdb.c:1634 #, c-format msgid "lid ?: insert failed: %s\n" msgstr "lid ?: wpisanie nie powiodЁo siЙ: %s\n" -#: g10/trustdb.c:2534 +#: g10/trustdb.c:1639 #, c-format msgid "lid %lu: insert failed: %s\n" msgstr "lid %lu: wpisanie nie powiodЁo siЙ: %s\n" -#: g10/trustdb.c:2540 +#: g10/trustdb.c:1645 #, c-format msgid "lid %lu: inserted\n" msgstr "lid %lu: wpisany\n" -#: g10/trustdb.c:2545 g10/trustdb.c:2654 -#, c-format -msgid "lid %lu: update failed: %s\n" -msgstr "lid %lu: naniesienie poprawek nie powiodЁo siЙ: %s\n" - -#: g10/trustdb.c:2551 g10/trustdb.c:2660 -#, c-format -msgid "lid %lu: updated\n" -msgstr "lid %lu: uaktualniony\n" - -#: g10/trustdb.c:2556 g10/trustdb.c:2664 -#, c-format -msgid "lid %lu: okay\n" -msgstr "lid %lu: OK\n" +#: g10/trustdb.c:1650 +#, fuzzy, c-format +msgid "error reading dir record: %s\n" +msgstr "bЁ╠d podczas poszukiwania wpisu katalogowego: %s\n" -#: g10/trustdb.c:2562 g10/trustdb.c:2671 +#: g10/trustdb.c:1658 g10/trustdb.c:1712 #, c-format msgid "%lu keys processed\n" msgstr "%lu kluczy przetworzonych\n" -#: g10/trustdb.c:2564 g10/trustdb.c:2675 +#: g10/trustdb.c:1660 g10/trustdb.c:1716 #, c-format msgid "\t%lu keys with errors\n" msgstr "\t%lu kluczy z bЁЙdami\n" -#: g10/trustdb.c:2566 g10/trustdb.c:2677 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu kluczy uaktualnionych\n" - -#: g10/trustdb.c:2568 +#: g10/trustdb.c:1662 #, c-format msgid "\t%lu keys inserted\n" msgstr "\t%lu kluczy wpisanych\n" -#: g10/trustdb.c:2571 +#: g10/trustdb.c:1665 #, c-format msgid "enumerate keyblocks failed: %s\n" msgstr "wyliczenie blokСw kluczy nie powiodЁo siЙ: %s\n" -#: g10/trustdb.c:2598 -#, c-format -msgid "%s: keyblock read problem: %s\n" -msgstr "%s: problem przy odczycie bloku klucza: %s\n" - -#: g10/trustdb.c:2612 -#, c-format -msgid "%s: update failed: %s\n" -msgstr "%s: zapis zmian nie powiodЁ siЙ: %s\n" - -#: g10/trustdb.c:2615 -#, c-format -msgid "%s: updated\n" -msgstr "%s: uaktualniony\n" - -#: g10/trustdb.c:2617 -#, c-format -msgid "%s: okay\n" -msgstr "%s: OK\n" - -#: g10/trustdb.c:2632 +#: g10/trustdb.c:1703 #, c-format msgid "lid %lu: dir record w/o key - skipped\n" msgstr "lid %lu: wpis katalogowy bez bloku klucza - pominiЙty\n" -#: g10/trustdb.c:2645 -#, c-format -msgid "lid %lu: keyblock not found: %s\n" -msgstr "lid %lu: blok klucza nie zostaЁ odnaleziony: %s\n" - -#: g10/trustdb.c:2673 +#: g10/trustdb.c:1714 #, c-format msgid "\t%lu keys skipped\n" msgstr "\t%lu kluczy pominiЙtych\n" -#: g10/trustdb.c:2743 +#: g10/trustdb.c:1718 +#, c-format +msgid "\t%lu keys updated\n" +msgstr "\t%lu kluczy uaktualnionych\n" + +#: g10/trustdb.c:2055 +msgid "Ooops, no keys\n" +msgstr "Oops, brak kluczy\n" + +#: g10/trustdb.c:2059 +msgid "Ooops, no user ids\n" +msgstr "Oops, brak identyfikatorСw u©ytkownikСw\n" + +#: g10/trustdb.c:2216 #, c-format msgid "check_trust: search dir record failed: %s\n" msgstr "check_trust: poszukiwanie wpisu katalogowego nie powiodЁo siЙ: %s\n" -#: g10/trustdb.c:2750 +#: g10/trustdb.c:2223 #, c-format msgid "key %08lX: insert trust record failed: %s\n" msgstr "klucz %08lX: wprowadzenie wpisu zaufania nie powiodЁo siЙ: %s\n" -#: g10/trustdb.c:2754 +#: g10/trustdb.c:2227 #, c-format msgid "key %08lX.%lu: inserted into trustdb\n" msgstr "Klucz %08lX.%lu: wprowadzony do bazy zaufania\n" -#: g10/trustdb.c:2762 +#: g10/trustdb.c:2235 #, c-format msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" msgstr "" "Klucz %08lX.%lu: stworzony w przyszЁo╤ci (zaburzenia czasoprzestrzeni,\n" "lub ╪le ustawiony zegar systemowy)\n" -#: g10/trustdb.c:2769 +#: g10/trustdb.c:2244 #, c-format msgid "key %08lX.%lu: expired at %s\n" msgstr "klucz %08lX.%lu: okres wa©no╤ci upЁyn╠Ё %s\n" -#: g10/trustdb.c:2777 +#: g10/trustdb.c:2252 #, c-format msgid "key %08lX.%lu: trust check failed: %s\n" msgstr "klucz %08lX.%lu: bЁ╠d przy sprawdzaniu zaufania: %s\n" -#: g10/trustdb.c:2881 +#: g10/trustdb.c:2358 #, c-format msgid "user '%s' not found: %s\n" msgstr "u©ytkownik '%s' nie odnaleziony: %s\n" -#: g10/trustdb.c:2883 +#: g10/trustdb.c:2360 #, c-format msgid "problem finding '%s' in trustdb: %s\n" msgstr "problem podczas szukania '%s' w bazie zaufania: %s\n" -#: g10/trustdb.c:2886 +#: g10/trustdb.c:2363 #, c-format msgid "user '%s' not in trustdb - inserting\n" msgstr "brak u©ytkownika '%s' w bazie zaufania - dodano\n" -#: g10/trustdb.c:2889 +#: g10/trustdb.c:2366 #, c-format msgid "failed to put '%s' into trustdb: %s\n" msgstr "umieszczenie '%s' w Bazie Zaufania nie powiodЁo siЙ: %s\n" +#: g10/trustdb.c:2552 g10/trustdb.c:2582 +msgid "WARNING: can't yet handle long pref records\n" +msgstr "OSTRZE╞ENIE: dЁugie wpisy ustawieЯ jeszcze nie s╠ obsЁugiwane.\n" + #: g10/ringedit.c:316 #, c-format msgid "%s: can't create keyring: %s\n" msgstr "%s: stworzenie zbioru kluczy jest niemo©liwe: %s\n" #: g10/ringedit.c:333 g10/ringedit.c:1349 #, c-format msgid "%s: keyring created\n" msgstr "%s: zbiСr kluczy utworzony\n" #: g10/ringedit.c:1526 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "OSTRZE╞ENIE: Istniej╠ dwa pliki z poufnymi informacjami.\n" #: g10/ringedit.c:1527 #, c-format msgid "%s is the unchanged one\n" msgstr "%s pozostaЁ bez zmian\n" #: g10/ringedit.c:1528 #, c-format msgid "%s is the new one\n" msgstr "%s zostaЁ utworzony\n" #: g10/ringedit.c:1529 msgid "Please fix this possible security flaw\n" msgstr "ProszЙ usun╠Ф to naruszenie zasad bezpieczeЯstwa\n" #: g10/skclist.c:88 g10/skclist.c:125 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "klucz nie jest oznaczony jako niepewny - nie mo©na go u©yФ z atrap╠ \n" "generatora liczb losowych!\n" #: g10/skclist.c:113 #, c-format msgid "skipped `%s': %s\n" msgstr "pominiЙty '%s': %s\n" #: g10/skclist.c:119 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " "signatures!\n" msgstr "" "pominiЙty '%s': wygenerowany przez PGP klucz dla algorytmu ElGamala,\n" "podpisy skЁadane tym kluczem nie zapewniaj╠ bezpieczeЯstwa!\n" #. do not overwrite #: g10/openfile.c:65 #, c-format msgid "File `%s' exists. " msgstr "Plik '%s' ju© istnieje. " #: g10/openfile.c:67 msgid "Overwrite (y/N)? " msgstr "NadpisaФ (t/N)? " #: g10/openfile.c:97 #, c-format msgid "%s: unknown suffix\n" msgstr "" -#: g10/openfile.c:122 +#: g10/openfile.c:119 +#, fuzzy +msgid "Enter new filename" +msgstr "--store [plik]" + +#: g10/openfile.c:160 msgid "writing to stdout\n" msgstr "zapisywanie na wyj╤cie standardowe\n" -#: g10/openfile.c:181 +#: g10/openfile.c:219 #, c-format msgid "assuming signed data in `%s'\n" msgstr "przyjЙto obecno╤Ф podpisanych danych w '%s'\n" -#: g10/openfile.c:231 +#: g10/openfile.c:269 #, c-format msgid "%s: new options file created\n" msgstr "%s: stworzono nowy plik ustawieЯ\n" #: g10/encr-data.c:66 #, c-format msgid "%s encrypted data\n" msgstr "%s zaszyfrowane dane\n" #: g10/encr-data.c:68 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "zaszyfrowane nieznanym algorytmem %d\n" #: g10/encr-data.c:85 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "OSTRZE╞ENIE: wiadomo╤Ф byЁa szyfrowana sЁabym kluczem szyfru symetrycznego.\n" #: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "wygenerowano sЁaby klucz - operacja zostaje powtСrzona\n" #: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "brak mo©liwo╤ci generacji dobrego klucza dla szyfru symetrycznego;\n" "operacja byЁa powtarzana %d razy!\n" #. begin of list #: g10/helptext.c:48 msgid "edit_ownertrust.value" msgstr "" "Przypisanie tych warto╤ci nale©y do Ciebie, nie bЙd╠ one udostЙpnione\n" "nikomu innemu. S╠ one u©ywane do stworzenia sieci zaufania i nie ma\n" "to nic wspСlnego z tworzon╠ sieci╠ certyfikatСw." #: g10/helptext.c:54 msgid "revoked_key.override" msgstr "" "Je╤li mimo wszystko chcesz u©yФ tego uniewa©nionego klucza, odpowiedz " "\"tak\"." #: g10/helptext.c:58 msgid "untrusted_key.override" msgstr "" "Je╤li mimo wszystko chcesz u©yФ tego klucza, klucza do ktСrego nie masz\n" "zaufania, odpowiedz \"tak\"." #: g10/helptext.c:62 msgid "pklist.user_id.enter" msgstr "Podaj identyfikator u©ytkownika adresata tych informacji." #: g10/helptext.c:66 msgid "keygen.algo" msgstr "" "WybСr algorytmu:\n" "DSA (znany te© jako DSS) to Algorytm Podpisu Cyfrowego - u©ywaФ go mo©na " "tylko\n" "do tworzenia cyfrowych podpisСw. Jego wybСr jest sugerowany poniewa©\n" "sprawdzanie podpisСw zЁo©onych algorytmem DSA jest du©o szybsze ni© tych\n" "zЁo©onych algorytmem ElGamala.\n" "Algorytm ElGamala to algorytm klucza publicznego ktСry nadaje mo©na " "stosowaФ\n" "zarСwno do szyfrowania jak i do tworzenia podpisСw cyfrowych\n" "W standardzie OpenPGP algorytm ElGamala wystЙpuje w dwСch wersjach:\n" "obsЁuguj╠cej podpisywanie, oraz obsЁuguj╠cej podpisywanie i szyfrowanie; z\n" "technicznego punktu widzenia algorytm dziaЁa tak samo, ale pewne " "wspСЁczynniki\n" "musz╠ byФ dobrane tak aby klucz nadawaЁ siЙ do skЁadania bezpiecznych\n" "podpisСw. Ten program obsЁuguje obie wersje, ale inne implementacje OpenPGP\n" "nie musz╠ rozumieФ obsЁugiwaФ klucza przeznaczonego jednocze╤nie do\n" "podpisywania i szyfrowania.\n" "GЁСwny klucz musi byФ zawsze kluczem sЁu©╠cym umo©liwiaj╠cym podpisywanie,\n" "dlatego te© ten program nie obsЁuguje osobnych kluczy ElGamala sЁu©╠cych " "tylko\n" "do szyfrowania." #: g10/helptext.c:82 msgid "keygen.algo.elg_se" msgstr "" "Mimo ©e ten rodzaj kluczy jest zdefiniowany w RFC 2440, wybСr takiego " "klucza\n" "nie jest sugerowany. Nie wszystkie programy taki klucz s╠ w stanie " "obsЁu©yФ,\n" "a podpisy zЁo©one za jego pomoc╠ s╠ du©e i ich sprawdzenie zajmuje du©o " "czasu." #: g10/helptext.c:89 msgid "keygen.size" msgstr "Rozmiar klucza" #: g10/helptext.c:93 msgid "keygen.size.huge.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" #: g10/helptext.c:98 msgid "keygen.size.large.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" #: g10/helptext.c:103 msgid "keygen.valid" msgstr "Podaj ©╠dan╠ warto╤Ф" -#: g10/helptext.c:107 +#: g10/helptext.c:110 msgid "keygen.valid.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" -#: g10/helptext.c:112 +#: g10/helptext.c:115 msgid "keygen.name" msgstr "Podaj nazwЙ (imiЙ, nazwisko) wЁa╤ciciela klucza" -#: g10/helptext.c:117 +#: g10/helptext.c:120 msgid "keygen.email" msgstr "Adres e-mail (opcjonalny ale warto go wpisaФ)" -#: g10/helptext.c:121 +#: g10/helptext.c:124 msgid "keygen.comment" msgstr "Komentarz (opcjonalny)" -#: g10/helptext.c:126 +#: g10/helptext.c:129 msgid "keygen.userid.cmd" msgstr "" "I - zmiana imienia lub nazwiska.\n" "K - zmiana komentarza.\n" "E - zmiana adresu email.\n" "D - przej╤cie do wЁa╤ciwej generacji klucza.\n" "W - wyj╤cie z procedury generacji i z programu." -#: g10/helptext.c:135 +#: g10/helptext.c:138 msgid "keygen.sub.okay" msgstr "" "Odpowiedz \"tak\" (lub po prostu \"t\") je╤li zgadzasz siЙ na stworzenie " "podklucza." -#: g10/helptext.c:139 +#: g10/helptext.c:142 msgid "sign_uid.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" -#: g10/helptext.c:144 +#: g10/helptext.c:147 msgid "change_passwd.empty.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" -#: g10/helptext.c:149 -msgid "keyedit.cmd" -msgstr "Podaj \"help\" aby zobaczyФ listЙ poleceЯ." - -#: g10/helptext.c:153 +#: g10/helptext.c:152 msgid "keyedit.save.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" -#: g10/helptext.c:158 +#: g10/helptext.c:157 msgid "keyedit.cancel.okay" msgstr "Odpowiedz \"tak\" lub \"nie\"" -#: g10/helptext.c:162 +#: g10/helptext.c:161 msgid "keyedit.sign_all.okay" msgstr "" "Odpowiedz \"tak\" je╤li chcesz podpisaФ wszystkie identyfikatory klucza" -#: g10/helptext.c:166 +#: g10/helptext.c:165 msgid "keyedit.remove.uid.okay" msgstr "" "Odpowiedz \"tak\" je╤li na pewno chcesz skasowaФ ten identyfikator klucza.\n" "Utracisz wszystkie podpisy innych u©ytkownikСw zЁo©one na tym " "identyfikatorze!" -#: g10/helptext.c:171 +#: g10/helptext.c:170 msgid "keyedit.remove.subkey.okay" msgstr "Odpowiedz \"tak\" je╤li na pewno chcesz skasowaФ ten podklucz" -#: g10/helptext.c:176 +#: g10/helptext.c:175 #, fuzzy msgid "keyedit.delsig.valid" msgstr "" "Odpowiedz \"tak\" je╤li chcesz podpisaФ wszystkie identyfikatory klucza" -#: g10/helptext.c:181 +#: g10/helptext.c:180 #, fuzzy msgid "keyedit.delsig.unknown" msgstr "" "Odpowiedz \"tak\" je╤li chcesz podpisaФ wszystkie identyfikatory klucza" -#: g10/helptext.c:187 +#: g10/helptext.c:186 #, fuzzy msgid "keyedit.delsig.invalid" msgstr "" "Odpowiedz \"tak\" je╤li chcesz podpisaФ wszystkie identyfikatory klucza" -#: g10/helptext.c:191 +#: g10/helptext.c:190 msgid "keyedit.delsig.selfsig" msgstr "" -#: g10/helptext.c:200 +#: g10/helptext.c:199 msgid "passphrase.enter" msgstr "" "ProszЙ wprowadziФ wyra©enie przej╤ciowe (tajne zdanie)\n" " Bla, bla, bla ..." -#: g10/helptext.c:207 +#: g10/helptext.c:206 msgid "passphrase.repeat" msgstr "" "ProszЙ powtСrzyФ podane wyra©enie przej╤ciowe dla wyeliminowania pomyЁek." -#: g10/helptext.c:211 +#: g10/helptext.c:210 msgid "detached_signature.filename" msgstr "Nazwa pliku ktСrego dotyczy ten podpis" +#. openfile.c (overwrite_filep) #: g10/helptext.c:215 msgid "openfile.overwrite.okay" msgstr "Odpowiedz \"tak\" je╤li na pewno chcesz nadpisaФ ten plik" -#: g10/helptext.c:229 +#. openfile.c (ask_outfile_name) +#: g10/helptext.c:220 +msgid "openfile.askoutname" +msgstr "" + +#: g10/helptext.c:235 msgid "No help available" msgstr "Pomoc niedostЙpna" -#: g10/helptext.c:241 +#: g10/helptext.c:247 #, c-format msgid "No help available for `%s'" msgstr "Brak pomocy o '%s'" +#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" +#~ msgstr "" +#~ "UWAGA: wpis podpisu %lu[%d] znajduje siЙ w li╤cie domy╤lnej %lu,\n" +#~ "ale jest zaznaczony jako sprawdzony.\n" + +#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" +#~ msgstr "" +#~ "UWAGA: wpis podpisu %lu[%d] znajduje siЙ w li╤cie domy╤lnej %lu,\n" +#~ "ale nie jest zaznaczony.\n" + +#~ msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" +#~ msgstr "" +#~ "wpis oi podpisie %lu[%d] w li╤cie domy╤lnej %lu nie wskazuje \n" +#~ "na wpis katalogowy\n" + +#~ msgid "lid %lu: no primary key\n" +#~ msgstr "lid %lu: brak klucza gЁСwnego\n" + +#~ msgid "lid %lu: user id not found in keyblock\n" +#~ msgstr "" +#~ "lid %lu: identyfikator u©ytkownika nie zostaЁ odnaleziony w bloku klucza\n" + +#~ msgid "lid %lu: user id without signature\n" +#~ msgstr "lid %lu: niepodpisany identyfikator u©ytkownika\n" + +#~ msgid "lid %lu: self-signature in hintlist\n" +#~ msgstr "lid %lu: podpis klucza nim samym w li╤cie domy╤lnej\n" + +#~ msgid "very strange: no public key\n" +#~ msgstr "bardzo dziwne: brak klucza publicznego\n" + +#~ msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" +#~ msgstr "lista domy╤lna %lu[%d] z %lu nie wskazuje na wpis katalogowy\n" + +#~ msgid "lid %lu does not have a key\n" +#~ msgstr "lid %lu nie ma klucza\n" + +#~ msgid "lid %lu: can't get keyblock: %s\n" +#~ msgstr "lid %lu: pobranie bloku klucza niemo©liwe: %s\n" + +#~ msgid "Too many preferences" +#~ msgstr "Zbyt wiele ustawieЯ." + +#~ msgid "Too many preference items" +#~ msgstr "Zbyt wiele pozycji w ustawieniach" + +#~ msgid "public key not anymore available" +#~ msgstr "klucz publiczny jest ju© niedostЙpny" + +#~ msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" +#~ msgstr "" +#~ "identyfikator %08lX.%lu/%02X%02X: ma zdublowany katalog %lu,\n" +#~ "ale nie jest jeszcze zaznaczony.\n" + +#~ msgid "insert_trust_record: keyblock not found: %s\n" +#~ msgstr "insert_trust_record: brak bloku klucza: %s\n" + +#~ msgid "lid %lu: update failed: %s\n" +#~ msgstr "lid %lu: naniesienie poprawek nie powiodЁo siЙ: %s\n" + +#~ msgid "lid %lu: updated\n" +#~ msgstr "lid %lu: uaktualniony\n" + +#~ msgid "lid %lu: okay\n" +#~ msgstr "lid %lu: OK\n" + +#~ msgid "%s: keyblock read problem: %s\n" +#~ msgstr "%s: problem przy odczycie bloku klucza: %s\n" + +#~ msgid "%s: update failed: %s\n" +#~ msgstr "%s: zapis zmian nie powiodЁ siЙ: %s\n" + +#~ msgid "%s: updated\n" +#~ msgstr "%s: uaktualniony\n" + +#~ msgid "%s: okay\n" +#~ msgstr "%s: OK\n" + +#~ msgid "lid %lu: keyblock not found: %s\n" +#~ msgstr "lid %lu: blok klucza nie zostaЁ odnaleziony: %s\n" + +#~ msgid "keyedit.cmd" +#~ msgstr "Podaj \"help\" aby zobaczyФ listЙ poleceЯ." + #~ msgid "can't lock keyring `%': %s\n" #~ msgstr "nie mo©na zablokowaФ zbioru kluczy publicznych: %s\n" #~ msgid "error writing keyring `%': %s\n" #~ msgstr "bЁ╠d zapisu zbioru kluczy '%': %s\n" #~ msgid "can't open file: %s\n" #~ msgstr "nie mo©na otworzyФ pliku: %s\n" #~ msgid "read error: %s\n" #~ msgstr "bЁ╠d odczytu: %s\n" #~ msgid "can't write to keyring: %s\n" #~ msgstr "niemo©liwy jest zapis do zbioru kluczy: %s\n" #~ msgid "writing keyblock\n" #~ msgstr "zapisujЙ blok klucza\n" #~ msgid "can't write keyblock: %s\n" #~ msgstr "nie mogЙ zapisaФ bloku klucza: %s\n" #~ msgid "can't lock secret keyring: %s\n" #~ msgstr "nie mogЙ zablokowaФ zbioru kluczy tajnych: %s\n" #~ msgid "can't write keyring: %s\n" #~ msgstr "niemo©liwy jest zapis zbioru kluczy: %s\n" #~ msgid "encrypted message is valid\n" #~ msgstr "zaszyfrowana wiadomo╤Ф jest poprawna\n" #~ msgid "Can't check MDC: %s\n" #~ msgstr "Sprawdzenie MDC niemo©liwe: %s\n" #~ msgid "Usage: gpgm [options] [files] (-h for help)" #~ msgstr "WywoЁanie: gpgm [opcje] [pliki] (-h podaje pomoc)" #~ msgid "" #~ "Syntax: gpgm [options] [files]\n" #~ "GnuPG maintenance utility\n" #~ msgstr "" #~ "SkЁadnia: gpgm [opcje] [pliki]\n" #~ "GnuPG program obsЁuguj╠cy\n" #~ msgid "usage: gpgm [options] " #~ msgstr "sposСb u©ycia: gpgm [opcje]" #~ msgid "|KEYID|ulimately trust this key" #~ msgstr "|KLUCZ|caЁkowite zaufanie dla tego klucza" #~ msgid "chained sigrec %lu has a wrong owner\n" #~ msgstr "powi╠zany rekord podpisu %lu ma niewЁa╤ciwego wЁa╤ciciela\n" #~ msgid "'%s' is not a valid long keyID\n" #~ msgstr "'%s\" nie jest wЁa╤ciwym identyfikatorem klucza\n" #~ msgid "key %08lX: no public key for trusted key - skipped\n" #~ msgstr "" #~ "klucz %08lX: brak klucza publicznego dla klucza zaufanego - pominiЙty\n" #~ msgid "lid %lu: read dir record failed: %s\n" #~ msgstr "lid %lu: odczyt wpisu katalogowego nie powiСdЁ siЙ: %s\n" #~ msgid "lid %lu: read key record failed: %s\n" #~ msgstr "lid %lu: odczyt wpisu klucza nie powiСdЁ siЙ: %s\n" #~ msgid "lid %lu: read uid record failed: %s\n" #~ msgstr "lid %lu: odczyt wpisu z identyfikatorem nie powiСdЁ siЙ; %s\n" #~ msgid "lid %lu: read pref record failed: %s\n" #~ msgstr "lid %lu: odczyt wpisu ustawieЯ nie powiСdЁ siЙ: %s\n" #~ msgid "lid %lu: read sig record failed: %s\n" #~ msgstr "lid %lu: odczyt wpisu o podpisach nie powiСdЁ siЙ: %s\n" #~ msgid "user '%s' read problem: %s\n" #~ msgstr "u©ytkownik '%s' bЁ╠d przy odczycie: %s\n" #~ msgid "user '%s' list problem: %s\n" #~ msgstr "u©ytkownik '%s' bЁ╠d listy: %s\n" #~ msgid "user '%s' not in trustdb\n" #~ msgstr "brak u©ytkownika '%s' w bazie zaufania\n" #~ msgid "" #~ "# List of assigned trustvalues, created %s\n" #~ "# (Use \"gpgm --import-ownertrust\" to restore them)\n" #~ msgstr "" #~ "# Lista przypisanych warto╤ci zaufania, stworzona %s\n" #~ "# (u©yj \"gpgm --import-ownertrust\" aby j╠ przywrСciФ)\n" #~ msgid "directory record w/o primary key\n" #~ msgstr "wpis katalogowy bez klucza gЁСwnego\n" #~ msgid "line too long\n" #~ msgstr "linia za dЁuga\n" #~ msgid "error: missing colon\n" #~ msgstr "bЁ╠d: brak dwukropka\n" #~ msgid "error: invalid fingerprint\n" #~ msgstr "bЁ╠d: niewЁa╤ciwy odcisk klucza\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "bЁ╠d: brak warto╤Фi zaufania wЁa╤ciciela\n" #~ msgid "key not in trustdb, searching ring.\n" #~ msgstr "brak klucza w bazie zaufania, przeszukiwany jest zbiСr kluczy\n" #~ msgid "key not in ring: %s\n" #~ msgstr "klucza nie ma w zbiorze: %s\n" #~ msgid "Oops: key is now in trustdb???\n" #~ msgstr "Oops: klucz ju© jest w bazie zaufania???\n" #~ msgid "insert trust record failed: %s\n" #~ msgstr "wstawienie wpisu zaufania nie powiodЁo siЙ: %s\n" -#~ msgid "error finding dir record: %s\n" -#~ msgstr "bЁ╠d podczas poszukiwania wpisu katalogowego: %s\n" - #~ msgid "Hmmm, public key lost?" #~ msgstr "Hmmm, klucz publiczny utracony?" #~ msgid "did not use primary key for insert_trust_record()\n" #~ msgstr "gЁowny klucz nie zostaЁ u©yty w procedurze insert_trust_record()\n" #~ msgid "second" #~ msgstr "sekunda" #~ msgid "seconds" #~ msgstr "sekund" #~ msgid "invalid clear text header: " #~ msgstr "niepoprawny nagЁСwek tekstu jawnego:" #~ msgid "This key belongs to us (we have the secret key)\n" #~ msgstr "Ten klucz nale©y do nas (mamy odpowiadaj╠cy mu klucz tajny).\n" #~ msgid "You will see a list of signators etc. here\n" #~ msgstr "Tu uka©e siЙ lista podpisСw itd.\n" diff --git a/po/pt_BR.po b/po/pt_BR.po index 3963ff03b..18aa28769 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -1,3469 +1,3471 @@ # Portuguese messages for gnupg # Thiago Jung Bauermann , 1999. # Revised by Rafael Caetano dos Santos . # I tried to make this one close to es_ES by Urko Lusa # msgid "" msgstr "" -"POT-Creation-Date: 1999-06-26 11:22+0200\n" +"POT-Creation-Date: 1999-07-06 17:34+0200\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Date: 1998-11-20 23:46:36-0200\n" "From: Thiago Jung Bauermann \n" "Xgettext-Options: --default-domain=gnupg --directory=.. --add-comments " "--keyword=_ --keyword=N_ --files-from=./POTFILES.in\n" "Files: util/secmem.c util/argparse.c cipher/random.c cipher/rand-dummy.c " "cipher/rand-unix.c cipher/rand-w32.c g10/g10.c g10/pkclist.c g10/keygen.c " "g10/decrypt.c g10/encode.c g10/import.c g10/keyedit.c g10/keylist.c " "g10/mainproc.c g10/passphrase.c g10/plaintext.c g10/pref.c g10/seckey-cert.c " "g10/sig-check.c g10/sign.c g10/trustdb.c g10/verify.c\n" -#: util/secmem.c:76 +#: util/secmem.c:79 msgid "Warning: using insecure memory!\n" msgstr "Aviso: usando memСria insegura!\n" -#: util/secmem.c:249 +#: util/secmem.c:275 msgid "operation is not possible without initialized secure memory\n" msgstr "a operaГЦo nЦo И possМvel sem memСria segura inicializada\n" -#: util/secmem.c:250 +#: util/secmem.c:276 msgid "(you may have used the wrong program for this task)\n" msgstr "(vocЙ pode ter usado o programa errado para esta tarefa)\n" -#: util/miscutil.c:156 util/miscutil.c:173 +#: util/miscutil.c:254 util/miscutil.c:271 msgid "yes" msgstr "sim" -#: util/miscutil.c:157 util/miscutil.c:175 +#: util/miscutil.c:255 util/miscutil.c:273 msgid "yY" msgstr "sS" # INICIO MENU -#: g10/keyedit.c:559 util/miscutil.c:174 +#: g10/keyedit.c:561 util/miscutil.c:272 msgid "quit" msgstr "sair" -#: util/miscutil.c:176 +#: util/miscutil.c:274 #, fuzzy msgid "qQ" msgstr "s" #: util/errors.c:54 msgid "general error" msgstr "erro geral" #: util/errors.c:55 msgid "unknown packet type" msgstr "formato de pacote desconhecido" #: util/errors.c:56 msgid "unknown version" msgstr "versЦo desconhecida" #: util/errors.c:57 msgid "unknown pubkey algorithm" msgstr "algoritmo de chave pЗblica desconhecido" #: util/errors.c:58 msgid "unknown digest algorithm" msgstr "algoritmo de \"digest\" desconhecido" #: util/errors.c:59 msgid "bad public key" msgstr "chave pЗblica invАlida" #: util/errors.c:60 msgid "bad secret key" msgstr "chave secreta incorreta" #: util/errors.c:61 msgid "bad signature" msgstr "assinatura incorreta" #: util/errors.c:62 msgid "checksum error" msgstr "erro de \"checksum\"" #: util/errors.c:63 msgid "bad passphrase" msgstr "frase secreta incorreta" #: util/errors.c:64 msgid "public key not found" msgstr "chave pЗblica nЦo encontrada" #: util/errors.c:65 msgid "unknown cipher algorithm" msgstr "algoritmo de criptografia desconhecido" # keyring == molho ??? #: util/errors.c:66 msgid "can't open the keyring" msgstr "nЦo И possМvel abrir o chaveiro" #: util/errors.c:67 msgid "invalid packet" msgstr "pacote invАlido" #: util/errors.c:68 msgid "invalid armor" msgstr "armadura invАlida" #: util/errors.c:69 msgid "no such user id" msgstr "identificaГЦo de usuАrio inexistente" #: util/errors.c:70 msgid "secret key not available" msgstr "chave secreta nЦo disponМvel" #: util/errors.c:71 msgid "wrong secret key used" msgstr "chave secreta incorreta" # suportado ??? #: util/errors.c:72 msgid "not supported" msgstr "nЦo suportado" #: util/errors.c:73 msgid "bad key" msgstr "chave incorreta" #: util/errors.c:74 msgid "file read error" msgstr "erro de leitura" #: util/errors.c:75 msgid "file write error" msgstr "erro de escrita" #: util/errors.c:76 msgid "unknown compress algorithm" msgstr "algoritmo de compressЦo desconhecido" #: util/errors.c:77 msgid "file open error" msgstr "erro na abertura de arquivo" #: util/errors.c:78 msgid "file create error" msgstr "erro na criaГЦo de arquivo" # frase secreta ??? #: util/errors.c:79 msgid "invalid passphrase" msgstr "frase secreta invАlida" #: util/errors.c:80 msgid "unimplemented pubkey algorithm" msgstr "algoritmo de chave pЗblica nЦo implementado" #: util/errors.c:81 msgid "unimplemented cipher algorithm" msgstr "algoritmo de criptografia nЦo implementado" #: util/errors.c:82 msgid "unknown signature class" msgstr "classe de assinatura desconhecida" # confiabilidade ??? # do jeito que estА, pode parecer que o BD И confiАvel, quando na verdade # os dados И que sЦo sobre confianГa #: util/errors.c:83 msgid "trust database error" msgstr "erro no banco de dados de confiabilidade" #: util/errors.c:84 msgid "bad MPI" msgstr "MPI incorreto" #: util/errors.c:85 msgid "resource limit" msgstr "limite de recurso" #: util/errors.c:86 msgid "invalid keyring" msgstr "chaveiro invАlido" #: util/errors.c:87 msgid "bad certificate" msgstr "certificado incorreto" #: util/errors.c:88 msgid "malformed user id" msgstr "identificaГЦo de usuАrio malformada" #: util/errors.c:89 msgid "file close error" msgstr "erro no fechamento de arquivo" #: util/errors.c:90 msgid "file rename error" msgstr "erro na renomeaГЦo de arquivo" #: util/errors.c:91 msgid "file delete error" msgstr "erro na remoГЦo de arquivo" #: util/errors.c:92 msgid "unexpected data" msgstr "dados inesperados" #: util/errors.c:93 msgid "timestamp conflict" msgstr "conflito de \"timestamp\"" #: util/errors.c:94 msgid "unusable pubkey algorithm" msgstr "algoritmo de chave pЗblica inutilizАvel" #: util/errors.c:95 msgid "file exists" msgstr "o arquivo jА existe" #: util/errors.c:96 msgid "weak key" msgstr "chave fraca" #: util/errors.c:97 msgid "invalid argument" msgstr "argumento invАlido" #: util/errors.c:98 msgid "bad URI" msgstr "URI incorreto" #: util/errors.c:99 msgid "unsupported URI" msgstr "URI nЦo suportado" #: util/errors.c:100 msgid "network error" msgstr "erro na rede" #: util/errors.c:102 msgid "not encrypted" msgstr "nЦo criptografado" #: util/logger.c:218 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... isto И um bug (%s:%d:%s)\n" #: util/logger.c:224 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "vocЙ encontrou um bug ... (%s:%d)\n" -#: cipher/random.c:412 +#: cipher/random.c:452 msgid "WARNING: using insecure random number generator!!\n" msgstr "AVISO: usando gerador de nЗmeros aleatСrios inseguro!\n" -#: cipher/random.c:413 +#: cipher/random.c:453 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 "" "O gerador de nЗmeros aleatСrios И apenas um \"remendo\"\n" "para poder compilar - nЦo И de modo algum um bom gerador!\n" "\n" "NцO USE NENHUM DADO GERADO POR ESTE PROGRAMA!\n" "\n" #: cipher/rndlinux.c:135 #, 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" "NЦo hА bytes aleatСrios suficientes. Por favor, faГa algum outro trabalho\n" "para que o sistema possa coletar mais entropia!\n" "(SЦo necessАrios mais %d bytes)\n" -#: g10/g10.c:174 +#: g10/g10.c:176 msgid "" "@Commands:\n" " " msgstr "" "@Comandos:\n" " " -#: g10/g10.c:176 +#: g10/g10.c:178 msgid "|[file]|make a signature" msgstr "|[arquivo]|faz uma assinatura" -#: g10/g10.c:177 +#: g10/g10.c:179 msgid "|[file]|make a clear text signature" msgstr "|[arquivo]|faz uma assinatura em texto puro" -#: g10/g10.c:178 +#: g10/g10.c:180 msgid "make a detached signature" msgstr "faz uma assinatura separada" -#: g10/g10.c:179 +#: g10/g10.c:181 msgid "encrypt data" msgstr "criptografa dados" -#: g10/g10.c:180 +#: g10/g10.c:182 msgid "encryption only with symmetric cipher" msgstr "criptografa apenas com criptografia simИtrica" -#: g10/g10.c:181 +#: g10/g10.c:183 msgid "store only" msgstr "apenas armazena" -#: g10/g10.c:182 +#: g10/g10.c:184 msgid "decrypt data (default)" msgstr "descriptografa dados (padrЦo)" -#: g10/g10.c:183 +#: g10/g10.c:185 msgid "verify a signature" msgstr "verifica uma assinatura" -#: g10/g10.c:184 +#: g10/g10.c:186 msgid "list keys" msgstr "lista as chaves" -#: g10/g10.c:186 +#: g10/g10.c:188 msgid "list keys and signatures" msgstr "lista as chaves e as assinaturas" -#: g10/g10.c:187 +#: g10/g10.c:189 msgid "check key signatures" msgstr "confere as assinaturas das chaves" -#: g10/g10.c:188 +#: g10/g10.c:190 msgid "list keys and fingerprints" msgstr "lista as chaves e as impressУes digitais" -#: g10/g10.c:189 +#: g10/g10.c:191 msgid "list secret keys" msgstr "lista as chaves secretas" -#: g10/g10.c:190 +#: g10/g10.c:192 msgid "generate a new key pair" msgstr "gera um novo par de chaves" -#: g10/g10.c:191 +#: g10/g10.c:193 msgid "remove key from the public keyring" msgstr "remove a chave do chaveiro pЗblico" -#: g10/g10.c:192 +#: g10/g10.c:194 msgid "sign or edit a key" msgstr "assina ou edita uma chave" -#: g10/g10.c:193 +#: g10/g10.c:195 msgid "generate a revocation certificate" msgstr "gera um certificado de revogaГЦo" -#: g10/g10.c:194 +#: g10/g10.c:196 msgid "export keys" msgstr "exporta as chaves" -#: g10/g10.c:195 +#: g10/g10.c:197 msgid "export keys to a key server" msgstr "exporta chaves para um servidor" -#: g10/g10.c:196 +#: g10/g10.c:198 msgid "import keys from a key server" msgstr "importa chaves de um servidor" -#: g10/g10.c:199 +#: g10/g10.c:201 msgid "import/merge keys" msgstr "importa/funde as chaves" -#: g10/g10.c:201 +#: g10/g10.c:203 msgid "list only the sequence of packets" msgstr "lista apenas as seqЭЙncias de pacotes" # ownertrust ??? -#: g10/g10.c:203 +#: g10/g10.c:205 msgid "export the ownertrust values" msgstr "exporta os valores de confianГa" -#: g10/g10.c:205 +#: g10/g10.c:207 msgid "import ownertrust values" msgstr "importa os valores de confianГa" -#: g10/g10.c:207 +#: g10/g10.c:209 msgid "|[NAMES]|update the trust database" msgstr "|[NOMES]|atualiza o banco de dados de confiabilidade" -#: g10/g10.c:209 +#: g10/g10.c:211 msgid "|[NAMES]|check the trust database" msgstr "|[NOMES]|confere o banco de dados de confiabilidade" -#: g10/g10.c:210 +#: g10/g10.c:212 msgid "fix a corrupted trust database" msgstr "" "conserta um banco de dados de confiabilidade\n" "danificado" -#: g10/g10.c:211 +#: g10/g10.c:213 msgid "De-Armor a file or stdin" msgstr "Retira a armadura de um arquivo ou de \"stdin\"" -#: g10/g10.c:212 +#: g10/g10.c:214 msgid "En-Armor a file or stdin" msgstr "Cria armadura para um arquivo ou \"stdin\"" -#: g10/g10.c:213 +#: g10/g10.c:215 msgid "|algo [files]|print message digests" msgstr "|algo [arquivos]|imprime \"digests\" de mensagens" -#: g10/g10.c:214 +#: g10/g10.c:216 msgid "print all message digests" msgstr "imprime todos os \"digests\" de mensagens" -#: g10/g10.c:220 +#: g10/g10.c:222 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "OpГУes:\n" " " -#: g10/g10.c:222 +#: g10/g10.c:224 msgid "create ascii armored output" msgstr "cria uma saМda com armadura ascii" -#: g10/g10.c:223 +#: g10/g10.c:225 msgid "|NAME|encrypt for NAME" msgstr "|NOME|criptografa para NOME" -#: g10/g10.c:227 +#: g10/g10.c:229 msgid "use this user-id to sign or decrypt" msgstr "" "usa este identificador de usuАrio para assinar\n" "ou descriptografar" -#: g10/g10.c:228 +#: g10/g10.c:230 msgid "|N|set compress level N (0 disables)" msgstr "|N|estabelece nМvel de compressЦo N (0 desabilita)" -#: g10/g10.c:230 +#: g10/g10.c:232 msgid "use canonical text mode" msgstr "usa modo de texto canТnico" -#: g10/g10.c:231 +#: g10/g10.c:233 msgid "use as output file" msgstr "usa como arquivo de saМda" -#: g10/g10.c:232 +#: g10/g10.c:234 msgid "verbose" msgstr "detalhado" -#: g10/g10.c:233 +#: g10/g10.c:235 msgid "be somewhat more quiet" msgstr "ser mais silencioso" -#: g10/g10.c:234 +#: g10/g10.c:236 msgid "don't use the terminal at all" msgstr "" -#: g10/g10.c:235 +#: g10/g10.c:237 msgid "force v3 signatures" msgstr "forГa assinaturas v3" -#: g10/g10.c:236 +#: g10/g10.c:238 msgid "always use a MDC for encryption" msgstr "sempre usar um MDC para criptografar" -#: g10/g10.c:237 +#: g10/g10.c:239 msgid "do not make any changes" msgstr "nЦo fazer alteraГУes" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/g10.c:239 +#: g10/g10.c:241 msgid "batch mode: never ask" msgstr "modo nЦo-interativo: nunca perguntar" -#: g10/g10.c:240 +#: g10/g10.c:242 msgid "assume yes on most questions" msgstr "assumir sim para a maioria das perguntas" -#: g10/g10.c:241 +#: g10/g10.c:243 msgid "assume no on most questions" msgstr "assumir nЦo para a maioria das perguntas" -#: g10/g10.c:242 +#: g10/g10.c:244 msgid "add this keyring to the list of keyrings" msgstr "adiciona este chaveiro Ю lista de chaveiros" -#: g10/g10.c:243 +#: g10/g10.c:245 msgid "add this secret keyring to the list" msgstr "adiciona este chaveiro secreto Ю lista" -#: g10/g10.c:244 +#: g10/g10.c:246 msgid "|NAME|use NAME as default secret key" msgstr "|NOME|usa NOME como chave secreta padrЦo" -#: g10/g10.c:245 +#: g10/g10.c:247 msgid "|HOST|use this keyserver to lookup keys" msgstr "|ENDEREгO|usa este servidor para buscar chaves" -#: g10/g10.c:246 +#: g10/g10.c:248 msgid "|NAME|set terminal charset to NAME" msgstr "|NOME|define mapa de caracteres do terminal como NOME" -#: g10/g10.c:247 +#: g10/g10.c:249 msgid "read options from file" msgstr "lЙ opГУes do arquivo" -#: g10/g10.c:249 +#: g10/g10.c:251 msgid "set debugging flags" msgstr "define parБmetros de depuraГЦo" -#: g10/g10.c:250 +#: g10/g10.c:252 msgid "enable full debugging" msgstr "habilita depuraГЦo completa" -#: g10/g10.c:251 +#: g10/g10.c:253 msgid "|FD|write status info to this FD" msgstr "" "|DA|escreve informaГУes de status para o descritor\n" "de arquivo DA" -#: g10/g10.c:252 +#: g10/g10.c:254 msgid "do not write comment packets" msgstr "nЦo escreve pacotes de comentАrio" -#: g10/g10.c:253 +#: g10/g10.c:255 msgid "(default is 1)" msgstr "(o padrЦo И 1)" -#: g10/g10.c:254 +#: g10/g10.c:256 msgid "(default is 3)" msgstr "(o padrЦo И 3)" -#: g10/g10.c:256 +#: g10/g10.c:258 msgid "|FILE|load extension module FILE" msgstr "|ARQUIVO|carrega mСdulo de extensЦo ARQUIVO" -#: g10/g10.c:257 +#: g10/g10.c:259 msgid "emulate the mode described in RFC1991" msgstr "emula o modo descrito no RFC1991" -#: g10/g10.c:258 +#: g10/g10.c:260 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "" -#: g10/g10.c:259 +#: g10/g10.c:261 msgid "|N|use passphrase mode N" msgstr "|N|usa frase secreta modo N" -#: g10/g10.c:261 +#: g10/g10.c:263 msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "" "|NOME|usa algoritmo de \"digest\" de mensagens NOME para\n" "frases secretas" -#: g10/g10.c:263 +#: g10/g10.c:265 msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "" "|NOME|usa algoritmo de criptografia NOME para\n" "frases secretas" -#: g10/g10.c:264 +#: g10/g10.c:266 msgid "|NAME|use cipher algorithm NAME" msgstr "|NOME|usa algoritmo de criptografia NOME" -#: g10/g10.c:265 +#: g10/g10.c:267 msgid "|NAME|use message digest algorithm NAME" msgstr "|NOME|usa algoritmo de \"digest\" de mensagens NOME" -#: g10/g10.c:266 +#: g10/g10.c:268 msgid "|N|use compress algorithm N" msgstr "|N|usa algoritmo de compressЦo N" -#: g10/g10.c:267 +#: g10/g10.c:269 msgid "throw keyid field of encrypted packets" msgstr "elimina o campo keyid dos pacotes criptografados" -#: g10/g10.c:268 +#: g10/g10.c:270 msgid "|NAME=VALUE|use this notation data" msgstr "" -#: g10/g10.c:270 +#: g10/g10.c:272 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" "Exemplos:\n" "\n" " -se -r Bob [arquivo] assina e criptografa para usuАrio Bob\n" " --clearsign [arquivo] cria uma assinatura em texto puro\n" " --detach-sign [arquivo] cria uma assinatura separada\n" " --list-keys [nomes] mostra chaves\n" " --fingerprint [nomes] mostra impressУes digitais\n" -#: g10/g10.c:347 +#: g10/g10.c:351 msgid "Please report bugs to .\n" msgstr "Por favor comunique bugs para .\n" -#: g10/g10.c:351 +#: g10/g10.c:355 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uso: gpg [opГУes] [arquivos] (-h para ajuda)" # em cima, "check" estА como "conferir" -#: g10/g10.c:354 +#: g10/g10.c:358 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" "default operation depends on the input data\n" msgstr "" "Sintaxe: gpg [opГУes] [arquivos]\n" "assina, verifica, criptografa ou descriptografa\n" "a operaГЦo padrЦo depende dos dados de entrada\n" -#: g10/g10.c:359 +#: g10/g10.c:363 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algoritmos suportados:\n" -#: g10/g10.c:433 +#: g10/g10.c:437 msgid "usage: gpg [options] " msgstr "uso: gpg [opГУes] " -#: g10/g10.c:473 +#: g10/g10.c:477 msgid "conflicting commands\n" msgstr "comandos conflitantes\n" -#: g10/g10.c:605 +#: g10/g10.c:609 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTA: arquivo de opГУes padrЦo `%s' inexistente\n" -#: g10/g10.c:609 +#: g10/g10.c:613 #, c-format msgid "option file `%s': %s\n" msgstr "arquivo de opГУes `%s': %s\n" -#: g10/g10.c:616 +#: g10/g10.c:620 #, c-format msgid "reading options from `%s'\n" msgstr "lendo opГУes de `%s'\n" -#: g10/g10.c:782 +#: g10/g10.c:786 #, c-format msgid "%s is not a valid character set\n" msgstr "%s nЦo И um conjunto de caracteres vАlido\n" -#: g10/g10.c:827 g10/g10.c:839 +#: g10/g10.c:833 g10/g10.c:845 msgid "selected cipher algorithm is invalid\n" msgstr "o algoritmo de criptografia selecionado nЦo И vАlido\n" -#: g10/g10.c:833 g10/g10.c:845 +#: g10/g10.c:839 g10/g10.c:851 msgid "selected digest algorithm is invalid\n" msgstr "o algoritmo de \"digest\" selecionado nЦo И vАlido\n" -#: g10/g10.c:849 +#: g10/g10.c:855 msgid "the given policy URL is invalid\n" msgstr "" -#: g10/g10.c:852 +#: g10/g10.c:858 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "o algoritmo de compressЦo deve estar na faixa %d..%d\n" -#: g10/g10.c:854 +#: g10/g10.c:860 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed deve ser maior que 0\n" -#: g10/g10.c:856 +#: g10/g10.c:862 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed deve ser maior que 1\n" -#: g10/g10.c:858 +#: g10/g10.c:864 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "max-cert-depth deve estar na faixa 1 a 255\n" -#: g10/g10.c:861 +#: g10/g10.c:867 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTA: o modo S2K simples (0) nЦo И recomendАvel\n" -#: g10/g10.c:865 +#: g10/g10.c:871 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "modo S2K invАlido: deve ser 0, 1 ou 3\n" -#: g10/g10.c:942 +#: g10/g10.c:948 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "falha ao inicializar o banco de dados de confiabilidade: %s\n" -#: g10/g10.c:948 +#: g10/g10.c:954 msgid "--store [filename]" msgstr "--store [nome_do_arquivo]" -#: g10/g10.c:955 +#: g10/g10.c:961 msgid "--symmetric [filename]" msgstr "--symmetric [nome_do_arquivo]" -#: g10/g10.c:963 +#: g10/g10.c:969 msgid "--encrypt [filename]" msgstr "--encrypt [nome_do_arquivo]" -#: g10/g10.c:976 +#: g10/g10.c:982 msgid "--sign [filename]" msgstr "--sign [nome_do_arquivo]" -#: g10/g10.c:989 +#: g10/g10.c:995 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nome_do_arquivo]" -#: g10/g10.c:1003 +#: g10/g10.c:1009 msgid "--clearsign [filename]" msgstr "--clearsign [nome_do_arquivo]" -#: g10/g10.c:1015 +#: g10/g10.c:1021 msgid "--decrypt [filename]" msgstr "--decrypt [nome_do_arquivo]" -#: g10/g10.c:1024 +#: g10/g10.c:1030 msgid "--edit-key username [commands]" msgstr "--edit-key nome_do_usuАrio [comandos]" -#: g10/g10.c:1038 +#: g10/g10.c:1044 msgid "--delete-secret-key username" msgstr "--delete-secret-key nome_do_usuАrio" -#: g10/g10.c:1041 +#: g10/g10.c:1047 msgid "--delete-key username" msgstr "--delete-key nome_do_usuАrio" -#: g10/encode.c:231 g10/g10.c:1064 g10/sign.c:366 +#: g10/encode.c:231 g10/g10.c:1071 g10/sign.c:366 #, c-format msgid "can't open %s: %s\n" msgstr "impossМvel abrir %s: %s\n" -#: g10/g10.c:1075 +#: g10/g10.c:1082 msgid "-k[v][v][v][c] [userid] [keyring]" msgstr "-k[v][v][v][c] [id_do_usuАrio] [chaveiro]" -#: g10/g10.c:1134 +#: g10/g10.c:1141 #, c-format msgid "dearmoring failed: %s\n" msgstr "retirada de armadura falhou: %s\n" -#: g10/g10.c:1142 +#: g10/g10.c:1149 #, c-format msgid "enarmoring failed: %s\n" msgstr "criaГЦo de armadura falhou: %s\n" # "hash" poderia ser "espalhamento", mas nЦo fica claro -#: g10/g10.c:1208 +#: g10/g10.c:1215 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algoritmo de hash invАlido `%s'\n" -#: g10/g10.c:1283 +#: g10/g10.c:1290 msgid "[filename]" msgstr "[nome_do_arquivo]" -#: g10/g10.c:1287 +#: g10/g10.c:1294 msgid "Go ahead and type your message ...\n" msgstr "VА em frente e digite sua mensagem ...\n" -#: g10/decrypt.c:59 g10/g10.c:1290 g10/verify.c:66 +#: g10/decrypt.c:59 g10/g10.c:1297 g10/verify.c:66 #, c-format msgid "can't open `%s'\n" msgstr "impossМvel abrir `%s'\n" -#: g10/g10.c:1457 +#: g10/g10.c:1466 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" -#: g10/g10.c:1463 +#: g10/g10.c:1472 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" msgstr "" -#: g10/g10.c:1469 +#: g10/g10.c:1478 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "" -#: g10/g10.c:1477 +#: g10/g10.c:1486 msgid "a notation value must not use any control characters\n" msgstr "" #: g10/armor.c:296 #, c-format msgid "armor: %s\n" msgstr "armadura: %s\n" #: g10/armor.c:319 msgid "invalid armor header: " msgstr "cabeГalho de armadura invАlido: " #: g10/armor.c:326 msgid "armor header: " msgstr "cabeГalho de armadura: " #: g10/armor.c:337 msgid "invalid clearsig header\n" msgstr "cabeГalho de assinatura em texto puro invАlido\n" #: g10/armor.c:389 msgid "nested clear text signatures\n" msgstr "assinaturas em texto puro aninhadas\n" #: g10/armor.c:500 msgid "invalid dash escaped line: " msgstr "linha com hМfen invАlida: " #: g10/armor.c:512 msgid "unexpected armor:" msgstr "armadura inesperada:" #: g10/armor.c:629 #, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "caractere radix64 invАlido %02x ignorado\n" #: g10/armor.c:672 msgid "premature eof (no CRC)\n" msgstr "fim de arquivo prematuro (sem CRC)\n" #: g10/armor.c:706 msgid "premature eof (in CRC)\n" msgstr "fim de arquivo prematuro (no CRC)\n" #: g10/armor.c:710 msgid "malformed CRC\n" msgstr "CRC malformado\n" #: g10/armor.c:714 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "erro de CRC; %06lx - %06lx\n" #: g10/armor.c:731 msgid "premature eof (in Trailer)\n" msgstr "fim de arquivo prematuro (no \"Trailer\")\n" #: g10/armor.c:735 msgid "error in trailer line\n" msgstr "erro na linha \"trailer\"\n" #: g10/armor.c:1001 msgid "no valid OpenPGP data found.\n" msgstr "nenhum dado OpenPGP vАlido encontrado.\n" #: g10/armor.c:1005 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armadura invАlida: linha maior que %d caracteres\n" #: g10/armor.c:1009 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "caracter \"quoted printable\" na armadura - provavelmente um MTA com bugs " "foi usado\n" #: g10/pkclist.c:137 #, c-format msgid "" "No trust value assigned to %lu:\n" "%4u%c/%08lX %s \"" msgstr "" "Nenhum valor de confianГa designado para %lu:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:147 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" " 1 = Don't know\n" " 2 = I do NOT trust\n" " 3 = I trust marginally\n" " 4 = I trust fully\n" " s = please show me more information\n" msgstr "" "Por favor decida quanto vocЙ confia neste usuАrio para\n" "verificar corretamente as chaves de outros usuАrios\n" "(olhando em passaportes, checando impressУes digitais\n" "de outras fontes...)?\n" "\n" " 1 = NЦo sei\n" " 2 = Eu NцO confio\n" " 3 = Eu confio marginalmente\n" " 4 = Eu confio completamente\n" " 5 = Mostrar mais informaГЦo\n" #: g10/pkclist.c:156 msgid " m = back to the main menu\n" msgstr " m = volta ao menu principal\n" #: g10/pkclist.c:158 msgid " q = quit\n" msgstr " q = sai\n" # ??? #. a string with valid answers #: g10/pkclist.c:163 #, fuzzy msgid "sSmMqQ" msgstr "sSmMqQ" #: g10/pkclist.c:167 msgid "Your decision? " msgstr "Sua decisЦo? " #: g10/pkclist.c:187 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificados que levam a uma chave confiada plenamente:\n" -#: g10/pkclist.c:254 +#: g10/pkclist.c:256 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 "" "NЦo foi possМvel encontrar uma rota de confianГa vАlida para a chave.\n" "Vamos ver se И possМvel designar alguns valores de confianГa ausentes.\n" "\n" -#: g10/pkclist.c:260 +#: g10/pkclist.c:262 msgid "" "No path leading to one of our keys found.\n" "\n" msgstr "Nenhuma rota encontrada que leve a uma de nossas chaves.\n" -#: g10/pkclist.c:262 +#: g10/pkclist.c:264 msgid "" "No certificates with undefined trust found.\n" "\n" msgstr "" "Nenhum certificado com confianГa indefinida encontrado.\n" "\n" -#: g10/pkclist.c:264 +#: g10/pkclist.c:266 msgid "" "No trust values changed.\n" "\n" msgstr "" "Nenhum valor de confianГa modificado.\n" "\n" -#: g10/pkclist.c:281 +#: g10/pkclist.c:283 #, c-format msgid "key %08lX: key has been revoked!\n" msgstr "chave %08lX: a chave foi revogada!\n" -#: g10/pkclist.c:287 g10/pkclist.c:297 g10/pkclist.c:403 +#: g10/pkclist.c:289 g10/pkclist.c:299 g10/pkclist.c:405 msgid "Use this key anyway? " msgstr "Usa esta chave de qualquer modo? " -#: g10/pkclist.c:291 +#: g10/pkclist.c:293 #, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "chave %08lX: a subchave foi revogada!\n" -#: g10/pkclist.c:321 +#: g10/pkclist.c:323 #, c-format msgid "%08lX: key has expired\n" msgstr "%08lX: a chave expirou\n" -#: g10/pkclist.c:327 +#: g10/pkclist.c:329 #, c-format msgid "%08lX: no info to calculate a trust probability\n" msgstr "%08lX: sem informaГЦo para calcular probabilidade de confianГa\n" -#: g10/pkclist.c:341 +#: g10/pkclist.c:343 #, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "%08lX: NСs NцO confiamos nesta chave\n" -#: g10/pkclist.c:347 +#: g10/pkclist.c:349 #, 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: NЦo se tem certeza de que esta chave realmente pertence ao dono,\n" "mas И aceita de qualquer modo\n" -#: g10/pkclist.c:353 +#: g10/pkclist.c:355 msgid "This key probably belongs to the owner\n" msgstr "Esta chave provavelmente pertence ao dono\n" -#: g10/pkclist.c:358 +#: g10/pkclist.c:360 msgid "This key belongs to us\n" msgstr "Esta chave pertence a nСs\n" -#: g10/pkclist.c:398 +#: g10/pkclist.c:400 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" "the next question with yes\n" "\n" msgstr "" "NЦo se tem certeza de que esta chave pertence a seu dono.\n" "Se vocЙ *realmente* sabe o que estА fazendo, pode responder\n" "afirmativamente Ю prСxima pergunta\n" "\n" -#: g10/pkclist.c:411 g10/pkclist.c:433 +#: g10/pkclist.c:413 g10/pkclist.c:435 msgid "WARNING: Using untrusted key!\n" msgstr "AVISO: Usando chave nЦo confiАvel!\n" -#: g10/pkclist.c:454 +#: g10/pkclist.c:456 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" -#: g10/pkclist.c:455 +#: g10/pkclist.c:457 msgid " This could mean that the signature is forgery.\n" msgstr " Isto pode significar que a assinatura И falsificada.\n" -#: g10/pkclist.c:459 +#: g10/pkclist.c:461 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "AVISO: Esta subchave foi revogada pelo seu dono!\n" -#: g10/pkclist.c:480 +#: g10/pkclist.c:482 msgid "Note: This key has expired!\n" msgstr "Nota: Esta chave expirou!\n" -#: g10/pkclist.c:487 +#: g10/pkclist.c:489 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "AVISO: Esta chave nЦo estА certificada com uma assinatura confiАvel!\n" -#: g10/pkclist.c:489 +#: g10/pkclist.c:491 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " NЦo hА indicaГЦo de que a assinatura pertence ao dono.\n" -#: g10/pkclist.c:505 +#: g10/pkclist.c:507 msgid "WARNING: We do NOT trust this key!\n" msgstr "AVISO: NСs NцO confiamos nesta chave!\n" -#: g10/pkclist.c:506 +#: g10/pkclist.c:508 msgid " The signature is probably a FORGERY.\n" msgstr " A assinatura И provavelmente uma FALSIFICAгцO.\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:515 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "AVISO: Esta chave nЦo estА certificada com assinaturas suficientemente\n" " confiАveis!\n" -#: g10/pkclist.c:516 +#: g10/pkclist.c:518 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " NЦo se tem certeza de que a assinatura pertence ao dono.\n" -#: g10/pkclist.c:580 g10/pkclist.c:602 g10/pkclist.c:665 g10/pkclist.c:705 +#: g10/pkclist.c:582 g10/pkclist.c:604 g10/pkclist.c:670 g10/pkclist.c:715 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: ignorado: %s\n" -#: g10/pkclist.c:588 g10/pkclist.c:687 +#: g10/pkclist.c:590 g10/pkclist.c:697 #, fuzzy, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: erro de leitura de bloco de chaves: %s\n" -#: g10/pkclist.c:611 +#: g10/pkclist.c:613 msgid "" "You did not specify a user ID. (you may use \"-r\")\n" "\n" msgstr "" "VocЙ nЦo especificou um ID de usuАrio. (pode-se usar \"-r\")\n" "\n" -#: g10/pkclist.c:616 +#: g10/pkclist.c:618 msgid "Enter the user ID: " msgstr "Digite o identificador de usuАrio: " -#: g10/pkclist.c:627 +#: g10/pkclist.c:629 msgid "No such user ID.\n" msgstr "Identificador de usuАrio inexistente.\n" -#: g10/pkclist.c:673 +#: g10/pkclist.c:639 +#, fuzzy +msgid "Public key is disabled.\n" +msgstr "a chave pЗblica И %08lX\n" + +#: g10/pkclist.c:678 #, c-format msgid "%s: error checking key: %s\n" msgstr "%s: erro na verificaГЦo da chave: %s\n" -#: g10/pkclist.c:711 +#: g10/pkclist.c:683 +#, fuzzy, c-format +msgid "%s: skipped: public key is disabled\n" +msgstr "%s: erro de leitura de bloco de chaves: %s\n" + +#: g10/pkclist.c:721 msgid "no valid addressees\n" msgstr "nenhum endereГo vАlido\n" #: g10/keygen.c:122 msgid "writing self signature\n" msgstr "escrevendo auto-assinatura\n" # key binding ??? #: g10/keygen.c:160 msgid "writing key binding signature\n" msgstr "escrevendo assinatura ligada a uma chave\n" #: g10/keygen.c:386 msgid "Please select what kind of key you want:\n" msgstr "Por favor selecione o tipo de chave desejado:\n" #: g10/keygen.c:388 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA e ElGamal (padrЦo)\n" #: g10/keygen.c:389 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (apenas assinatura)\n" #: g10/keygen.c:391 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (apenas criptografia)\n" #: g10/keygen.c:392 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (assinatura e criptografia)\n" #: g10/keygen.c:394 #, c-format msgid " (%d) ElGamal in a v3 packet\n" msgstr " (%d) ElGamal em um pacote v3\n" #: g10/keygen.c:399 msgid "Your selection? " msgstr "Sua opГЦo? " #: g10/keygen.c:409 msgid "Do you really want to create a sign and encrypt key? " msgstr "VocЙ realmente quer criar uma chave para assinatura e criptografia? " #: g10/keygen.c:430 msgid "Invalid selection.\n" msgstr "OpГЦo invАlida.\n" #: g10/keygen.c:442 #, 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 "" "Prestes a gerar novo par de chaves %s.\n" " tamanho mМnimo И 768 bits\n" " tamanho padrЦo И 1024 bits\n" " tamanho mАximo sugerido И 2048 bits\n" #: g10/keygen.c:449 msgid "What keysize do you want? (1024) " msgstr "Que tamanho de chave vocЙ quer? (1024) " #: g10/keygen.c:454 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "DSA permite apenas tamanhos de 512 a 1024\n" #: g10/keygen.c:456 msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "tamanho muito pequeno; 768 И o valor mМnimo permitido.\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:466 #, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "tamanho muito grande; %d И o valor mАximo permitido.\n" #: g10/keygen.c:471 msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" msgstr "" "Tamanhos de chave maiores que 2048 nЦo sЦo recomendados\n" "porque o tempo de computaГЦo И REALMENTE longo!\n" #: g10/keygen.c:474 msgid "Are you sure that you want this keysize? " msgstr "VocЙ tem certeza de que quer este tamanho de chave? " #: g10/keygen.c:475 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" msgstr "" "Tudo bem, mas tenha em mente que a radiaГЦo de seu monitor e teclado tambИm " "sЦo vulnerАveis a ataques!\n" #: g10/keygen.c:483 msgid "Do you really need such a large keysize? " msgstr "VocЙ realmente precisa de uma chave tЦo grande? " #: g10/keygen.c:489 #, c-format msgid "Requested keysize is %u bits\n" msgstr "O tamanho de chave pedido И %u bits\n" #: g10/keygen.c:492 g10/keygen.c:496 #, c-format msgid "rounded up to %u bits\n" msgstr "arredondado para %u bits\n" #: g10/keygen.c:509 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" " = key expires in n days\n" " w = key expires in n weeks\n" " m = key expires in n months\n" " y = key expires in n years\n" msgstr "" "Por favor especifique por quanto tempo a chave deve ser vАlida.\n" " 0 = chave nЦo expira\n" " = chave expira em n dias\n" " w = chave expira em n semanas\n" " m = chave expira em n meses\n" " y = chave expira em n anos\n" -#: g10/keygen.c:524 +#: g10/keygen.c:526 msgid "Key is valid for? (0) " msgstr "A chave И valida por? (0) " -#: g10/keygen.c:535 +#: g10/keygen.c:547 msgid "invalid value\n" msgstr "valor invАlido\n" -#: g10/keygen.c:540 +#: g10/keygen.c:552 msgid "Key does not expire at all\n" msgstr "A chave nЦo expira nunca\n" #. print the date when the key expires -#: g10/keygen.c:546 +#: g10/keygen.c:558 #, c-format msgid "Key expires at %s\n" msgstr "A chave expira em %s\n" -#: g10/keygen.c:552 +#: g10/keygen.c:564 msgid "Is this correct (y/n)? " msgstr "EstА correto (s/n)? " -#: g10/keygen.c:595 +#: g10/keygen.c:607 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) \"\n" "\n" msgstr "" "\n" "VocЙ precisa de uma identificaГЦo de usuАrio para identificar sua chave; o\n" "programa constrСi a identificaГЦo a partir do Nome Completo, ComentАrio e\n" "EndereГo EletrТnico desta forma:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" -#: g10/keygen.c:606 +#: g10/keygen.c:618 msgid "Real name: " msgstr "Nome completo: " -#: g10/keygen.c:610 +#: g10/keygen.c:622 msgid "Invalid character in name\n" msgstr "Caractere invАlido no nome\n" -#: g10/keygen.c:612 +#: g10/keygen.c:624 msgid "Name may not start with a digit\n" msgstr "O nome nЦo pode comeГar com um dМgito\n" -#: g10/keygen.c:614 +#: g10/keygen.c:626 msgid "Name must be at least 5 characters long\n" msgstr "O nome deve ter pelo menos 5 caracteres\n" -#: g10/keygen.c:622 +#: g10/keygen.c:634 msgid "Email address: " msgstr "EndereГo de correio eletrТnico: " -#: g10/keygen.c:633 +#: g10/keygen.c:645 msgid "Not a valid email address\n" msgstr "EndereГo eletrТnico invАlido\n" -#: g10/keygen.c:641 +#: g10/keygen.c:653 msgid "Comment: " msgstr "ComentАrio: " -#: g10/keygen.c:647 +#: g10/keygen.c:659 msgid "Invalid character in comment\n" msgstr "Caractere invАlido no comentАrio\n" -#: g10/keygen.c:669 +#: g10/keygen.c:681 #, c-format msgid "You are using the `%s' character set.\n" msgstr "VocЙ estА usando o conjunto de caracteres `%s'.\n" -#: g10/keygen.c:675 +#: g10/keygen.c:687 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "VocЙ selecionou esta identificaГЦo de usuАrio:\n" " \"%s\"\n" "\n" -#: g10/keygen.c:678 +#: g10/keygen.c:690 msgid "NnCcEeOoQq" msgstr "NnCcEeVvSs" -#: g10/keygen.c:688 +#: g10/keygen.c:700 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Muda (N)ome, (C)omentАrio, (E)ndereГo ou (V)Аlido/(S)air? " -#: g10/keygen.c:740 +#: g10/keygen.c:752 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "VocЙ precisa de uma frase secreta para proteger sua chave.\n" "\n" -#: g10/keyedit.c:455 g10/keygen.c:748 +#: g10/keyedit.c:456 g10/keygen.c:760 msgid "passphrase not correctly repeated; try again.\n" msgstr "A frase secreta nЦo foi repetida corretamente; tente outra vez.\n" -#: g10/keygen.c:754 +#: g10/keygen.c:766 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 "" "VocЙ nЦo quer uma frase secreta - provavelmente isto И uma *mА* idИia!\n" "Vou fazer isso de qualquer modo. VocЙ pode mudar sua frase secreta a\n" "qualquer hora, usando este programa com a opГЦo \"--edit-key\".\n" "\n" -#: g10/keygen.c:775 +#: g10/keygen.c:787 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 "" "Precisamos gerar muitos bytes aleatСrios. и uma boa idИia realizar outra\n" "atividade (digitar no teclado, mover o mouse, usar os discos) durante a\n" "geraГЦo dos nЗmeros primos; isso dА ao gerador de nЗmeros aleatСrios\n" "uma chance melhor de conseguir entropia suficiente.\n" -#: g10/keygen.c:845 +#: g10/keygen.c:857 msgid "Key generation can only be used in interactive mode\n" msgstr "A geraГЦo de chaves sС pode ser feita em modo interativo\n" -#: g10/keygen.c:853 +#: g10/keygen.c:865 msgid "DSA keypair will have 1024 bits.\n" msgstr "O par de chaves DSA terА 1024 bits.\n" -#: g10/keygen.c:859 +#: g10/keygen.c:871 #, fuzzy msgid "Key generation canceled.\n" msgstr "GeraГЦo de chaves cancelada.\n" -#: g10/keygen.c:869 +#: g10/keygen.c:881 #, c-format msgid "writing public certificate to `%s'\n" msgstr "escrevendo certificado pЗblico para `%s'\n" -#: g10/keygen.c:870 +#: g10/keygen.c:882 #, c-format msgid "writing secret certificate to `%s'\n" msgstr "escrevendo certificado privado para `%s'\n" -#: g10/keygen.c:947 +#: g10/keygen.c:959 msgid "public and secret key created and signed.\n" msgstr "chaves pЗblica e privada criadas e assinadas.\n" -#: g10/keygen.c:949 +#: g10/keygen.c:961 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 "" "Note que esta chave nЦo pode ser usada para criptografia. VocЙ pode usar\n" "o comando \"--edit-key\" para gerar uma chave secundАria para esse fim.\n" -#: g10/keygen.c:963 g10/keygen.c:1062 +#: g10/keygen.c:975 g10/keygen.c:1074 #, c-format msgid "Key generation failed: %s\n" msgstr "A geraГЦo de chaves falhou: %s\n" -#: g10/keygen.c:1007 g10/sig-check.c:300 g10/sign.c:105 +#: g10/keygen.c:1019 g10/sig-check.c:312 g10/sign.c:105 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "a chave foi criada %lu segundos no futuro\n" "(viagem no tempo ou problema no relСgio)\n" -#: g10/keygen.c:1009 g10/sig-check.c:302 g10/sign.c:107 +#: g10/keygen.c:1021 g10/sig-check.c:314 g10/sign.c:107 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "a chave foi criada %lu segundos no futuro\n" "(viagem no tempo ou problema no relСgio)\n" -#: g10/keygen.c:1040 +#: g10/keygen.c:1052 msgid "Really create? " msgstr "Realmente criar? " -#: g10/encode.c:91 g10/openfile.c:118 g10/openfile.c:208 g10/tdbio.c:467 +#: g10/encode.c:91 g10/openfile.c:156 g10/openfile.c:246 g10/tdbio.c:467 #: g10/tdbio.c:528 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: impossМvel abrir: %s\n" #: g10/encode.c:113 #, c-format msgid "error creating passphrase: %s\n" msgstr "erro na criaГЦo da frase secreta: %s\n" #: g10/encode.c:167 g10/encode.c:287 #, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: AVISO: arquivo vazio\n" #: g10/encode.c:237 #, c-format msgid "reading from `%s'\n" msgstr "lendo de `%s'\n" #: g10/encode.c:431 #, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s/%s criptografado para: %s\n" #: g10/export.c:147 #, c-format msgid "%s: user not found: %s\n" msgstr "%s: usuАrio nЦo encontrado: %s\n" #: g10/export.c:156 #, c-format msgid "certificate read problem: %s\n" msgstr "erro de leitura do certificado: %s\n" #: g10/export.c:165 #, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "chave %08lX: nЦo И uma chave rfc2440 - ignorada\n" #: g10/export.c:203 msgid "WARNING: nothing exported\n" msgstr "AVISO: nada exportado\n" #: g10/getkey.c:206 msgid "too many entries in pk cache - disabled\n" msgstr "entradas demais no cache pk - desabilitado\n" #: g10/getkey.c:345 msgid "too many entries in unk cache - disabled\n" msgstr "entradas demais no cache unk - desabilitado\n" #: g10/getkey.c:1535 g10/getkey.c:1591 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "usando chave secundАria %08lX ao invИs de chave primАria %08lX\n" #: g10/import.c:116 #, c-format msgid "can't open `%s': %s\n" msgstr "impossМvel abrir `%s': %s\n" #: g10/import.c:160 #, c-format msgid "skipping block of type %d\n" msgstr "ignorando bloco do tipo %d\n" -#: g10/import.c:167 g10/trustdb.c:2560 g10/trustdb.c:2668 +#: g10/import.c:167 g10/trustdb.c:1656 g10/trustdb.c:1695 #, c-format msgid "%lu keys so far processed\n" msgstr "%lu chaves processadas atИ agora\n" #: g10/import.c:172 #, c-format msgid "error reading `%s': %s\n" msgstr "erro na leitura de `%s': %s\n" #: g10/import.c:175 #, c-format msgid "Total number processed: %lu\n" msgstr "NЗmero total processado: %lu\n" #: g10/import.c:177 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sem IDs de usuАrios: %lu\n" #: g10/import.c:179 #, c-format msgid " imported: %lu" msgstr " importados: %lu" #: g10/import.c:185 #, c-format msgid " unchanged: %lu\n" msgstr " nЦo modificados: %lu\n" #: g10/import.c:187 #, c-format msgid " new user IDs: %lu\n" msgstr " novos IDs de usuАrios: %lu\n" #: g10/import.c:189 #, c-format msgid " new subkeys: %lu\n" msgstr " novas subchaves: %lu\n" #: g10/import.c:191 #, c-format msgid " new signatures: %lu\n" msgstr " novas assinaturas: %lu\n" #: g10/import.c:193 #, c-format msgid " new key revocations: %lu\n" msgstr " novas revogaГУes de chaves: %lu\n" #: g10/import.c:195 #, c-format msgid " secret keys read: %lu\n" msgstr " chaves secretas lidas: %lu\n" #: g10/import.c:197 #, c-format msgid " secret keys imported: %lu\n" msgstr " chaves secretas importadas: %lu\n" #: g10/import.c:199 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " chaves secretas nЦo modificadas: %lu\n" -#: g10/import.c:342 g10/import.c:529 +#: g10/import.c:342 g10/import.c:526 #, c-format msgid "key %08lX: no user id\n" msgstr "chave %08lX: sem id de usuАrio\n" #: g10/import.c:353 #, c-format msgid "key %08lX: no valid user ids\n" msgstr "chave %08lX: sem ids de usuАrios vАlidos\n" #: g10/import.c:355 msgid "this may be caused by a missing self-signature\n" msgstr "isto pode ser causado por falta de auto-assinatura\n" -#: g10/import.c:366 g10/import.c:596 +#: g10/import.c:366 g10/import.c:593 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "chave %08lX: chave pЗblica nЦo encontrada: %s\n" #: g10/import.c:372 msgid "no default public keyring\n" msgstr "sem chaveiro pЗblico padrЦo\n" -#: g10/import.c:376 g10/openfile.c:148 g10/sign.c:268 g10/sign.c:559 +#: g10/import.c:376 g10/openfile.c:186 g10/sign.c:268 g10/sign.c:559 #, c-format msgid "writing to `%s'\n" msgstr "escrevendo para `%s'\n" -#: g10/import.c:379 g10/import.c:435 g10/import.c:544 g10/import.c:645 +#: g10/import.c:379 g10/import.c:432 g10/import.c:541 g10/import.c:642 #, fuzzy, c-format msgid "can't lock keyring `%s': %s\n" msgstr "impossМvel bloquear chaveiro `%s': %s\n" -#: g10/import.c:382 g10/import.c:438 g10/import.c:547 g10/import.c:648 +#: g10/import.c:382 g10/import.c:435 g10/import.c:544 g10/import.c:645 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "%s: erro na escrita do chaveiro `%s': %s\n" #: g10/import.c:387 #, c-format msgid "key %08lX: public key imported\n" msgstr "chave %08lX: chave pЗblica importada\n" #: g10/import.c:399 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "chave %08lX: nЦo corresponde Ю nossa cСpia\n" -#: g10/import.c:411 g10/import.c:604 +#: g10/import.c:408 g10/import.c:601 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "chave %08lX: impossМvel localizar bloco de chaves original: %s\n" -#: g10/import.c:417 g10/import.c:610 +#: g10/import.c:414 g10/import.c:607 #, c-format msgid "key %08lX: can't read original keyblock: %s\n" msgstr "chave %08lX: impossМvel ler bloco de chaves original: %s\n" -#: g10/import.c:444 +#: g10/import.c:441 #, c-format msgid "key %08lX: 1 new user-id\n" msgstr "chave %8lX: 1 novo id de usuАrio\n" -#: g10/import.c:447 +#: g10/import.c:444 #, c-format msgid "key %08lX: %d new user-ids\n" msgstr "chave %08lX: %d novos ids de usuАrios\n" -#: g10/import.c:450 +#: g10/import.c:447 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "chave %08lX: 1 nova assinatura\n" -#: g10/import.c:453 +#: g10/import.c:450 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "chave %08lX: %d novas assinaturas\n" -#: g10/import.c:456 +#: g10/import.c:453 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "chave %08lX: 1 nova subchave\n" -#: g10/import.c:459 +#: g10/import.c:456 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "chave %08lX: %d novas subchaves\n" -#: g10/import.c:469 +#: g10/import.c:466 #, c-format msgid "key %08lX: not changed\n" msgstr "chave %08lX: nЦo modificada\n" -#: g10/import.c:552 +#: g10/import.c:549 #, c-format msgid "key %08lX: secret key imported\n" msgstr "chave %08lX: chave secreta importada\n" #. we can't merge secret keys -#: g10/import.c:556 +#: g10/import.c:553 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "chave %08lX: jА existe no chaveiro secreto\n" -#: g10/import.c:561 +#: g10/import.c:558 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "chave %08lX: chave secreta nЦo encontrada: %s\n" -#: g10/import.c:590 +#: g10/import.c:587 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "chave %08lX: sem chave pЗblica - impossМvel aplicar certificado\n" "de revogaГЦo\n" -#: g10/import.c:621 +#: g10/import.c:618 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "chave %08lX: certificado de revogaГЦo invАlido: %s - rejeitado\n" -#: g10/import.c:653 +#: g10/import.c:650 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "chave %08lX: certificado de revogaГЦo importado\n" -#: g10/import.c:686 +#: g10/import.c:683 #, c-format msgid "key %08lX: no user-id for signature\n" msgstr "chave %08lX: sem id de usuАrio para assinatura\n" -#: g10/import.c:693 g10/import.c:717 +#: g10/import.c:690 g10/import.c:714 #, c-format msgid "key %08lX: unsupported public key algorithm\n" msgstr "chave %08lX: algoritmo de chave pЗblica nЦo suportado\n" -#: g10/import.c:694 +#: g10/import.c:691 #, c-format msgid "key %08lX: invalid self-signature\n" msgstr "chave %08lX: auto-assinatura invАlida\n" -#: g10/import.c:709 +#: g10/import.c:706 #, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "chave %08lX: sem subchave para ligaГЦo de chaves\n" -#: g10/import.c:718 +#: g10/import.c:715 #, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "chave %08lX: ligaГЦo de subchave invАlida\n" -#: g10/import.c:750 +#: g10/import.c:747 #, c-format msgid "key %08lX: skipped userid '" msgstr "chave %08lX: id de usuАrio ignorado '" -#: g10/import.c:773 +#: g10/import.c:770 #, c-format msgid "key %08lX: skipped subkey\n" msgstr "chave %08lX: subchave ignorada\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:798 +#: g10/import.c:795 #, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "chave %08lX: assinatura nЦo exportАvel (classe %02x) - ignorada\n" -#: g10/import.c:807 +#: g10/import.c:804 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "chave %08lX: certificado de revogaГЦo no local errado - ignorada\n" -#: g10/import.c:815 +#: g10/import.c:812 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "chave %08lX: certificado de revogaГЦo invАlido: %s - ignorada\n" -#: g10/import.c:915 +#: g10/import.c:912 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "chave %08lX: detectado ID de usuАrio duplicado - unido\n" -#: g10/import.c:966 +#: g10/import.c:963 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "chave %08lX: certificado de revogaГЦo adicionado\n" -#: g10/import.c:1079 g10/import.c:1134 +#: g10/import.c:1076 g10/import.c:1131 #, c-format msgid "key %08lX: our copy has no self-signature\n" msgstr "chave %08lX: nossa cСpia nЦo tem auto-assinatura\n" -#: g10/keyedit.c:92 +#: g10/keyedit.c:93 #, c-format msgid "%s: user not found\n" msgstr "%s: usuАrio nЦo encontrado\n" -#: g10/keyedit.c:153 +#: g10/keyedit.c:154 msgid "[revocation]" msgstr "[revogaГЦo]" -#: g10/keyedit.c:154 +#: g10/keyedit.c:155 msgid "[self-signature]" msgstr "[auto-assinatura]" -#: g10/keyedit.c:218 +#: g10/keyedit.c:219 msgid "1 bad signature\n" msgstr "1 assinatura incorreta\n" -#: g10/keyedit.c:220 +#: g10/keyedit.c:221 #, c-format msgid "%d bad signatures\n" msgstr "%d assinaturas incorretas\n" -#: g10/keyedit.c:222 +#: g10/keyedit.c:223 msgid "1 signature not checked due to a missing key\n" msgstr "1 assinatura nЦo verificada por falta de chave\n" -#: g10/keyedit.c:224 +#: g10/keyedit.c:225 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d assinaturas nЦo verificadas por falta de chaves\n" -#: g10/keyedit.c:226 +#: g10/keyedit.c:227 msgid "1 signature not checked due to an error\n" msgstr "1 assinatura nЦo checada devido a um erro\n" -#: g10/keyedit.c:228 +#: g10/keyedit.c:229 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d assinaturas nЦo verificadas devido a erros\n" -#: g10/keyedit.c:230 +#: g10/keyedit.c:231 msgid "1 user id without valid self-signature detected\n" msgstr "1 id de usuАrio sem auto-assinatura vАlida detectado\n" -#: g10/keyedit.c:232 +#: g10/keyedit.c:233 #, c-format msgid "%d user ids without valid self-signatures detected\n" msgstr "%d ids de usuАrios sem auto-assinaturas vАlidas detectados\n" #. Fixme: see whether there is a revocation in which #. * case we should allow to sign it again. -#: g10/keyedit.c:312 +#: g10/keyedit.c:313 #, c-format msgid "Already signed by key %08lX\n" msgstr "JА assinado pela chave %08lX\n" -#: g10/keyedit.c:320 +#: g10/keyedit.c:321 #, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Nada para assinar com a chave %08lX\n" -#: g10/keyedit.c:329 +#: g10/keyedit.c:330 msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" msgstr "" "VocЙ tem certeza de que quer assinar esta chave com\n" "sua chave: \"" -#: g10/keyedit.c:338 +#: g10/keyedit.c:339 msgid "" "The signature will be marked as non-exportable.\n" "\n" msgstr "" "A assinatura serА marcada como nЦo-exportАvel.\n" "\n" -#: g10/keyedit.c:343 +#: g10/keyedit.c:344 msgid "Really sign? " msgstr "Realmente assinar? " -#: g10/keyedit.c:369 g10/keyedit.c:1790 g10/keyedit.c:1839 g10/sign.c:128 +#: g10/keyedit.c:370 g10/keyedit.c:1806 g10/keyedit.c:1855 g10/sign.c:128 #, c-format msgid "signing failed: %s\n" msgstr "assinatura falhou: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:423 msgid "This key is not protected.\n" msgstr "Esta chave nЦo И protegida.\n" -#: g10/keyedit.c:425 +#: g10/keyedit.c:426 msgid "Key is protected.\n" msgstr "A chave И protegida.\n" -#: g10/keyedit.c:442 +#: g10/keyedit.c:443 #, c-format msgid "Can't edit this key: %s\n" msgstr "ImpossМvel editar esta chave: %s\n" -#: g10/keyedit.c:447 +#: g10/keyedit.c:448 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Digite a nova frase para esta chave secreta.\n" "\n" -#: g10/keyedit.c:459 +#: g10/keyedit.c:460 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "VocЙ nЦo quer uma frase secreta - provavelmente isto И uma *mА* idИia!\n" "\n" -#: g10/keyedit.c:462 +#: g10/keyedit.c:463 msgid "Do you really want to do this? " msgstr "VocЙ realmente quer fazer isso? " -#: g10/keyedit.c:523 +#: g10/keyedit.c:524 msgid "moving a key signature to the correct place\n" msgstr "movendo a assinatura da chave para o local correto\n" -#: g10/keyedit.c:559 +#: g10/keyedit.c:561 msgid "quit this menu" msgstr "sair deste menu" -#: g10/keyedit.c:560 +#: g10/keyedit.c:562 msgid "q" msgstr "s" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save" msgstr "gravar" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save and quit" msgstr "gravar e sair" -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "help" msgstr "ajuda" -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "show this help" msgstr "mostra esta ajuda" -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 msgid "fpr" msgstr "imp" -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 msgid "show fingerprint" msgstr "mostra impressЦo digital" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 msgid "list" msgstr "lista" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 msgid "list key and user ids" msgstr "lista chave e identificaГУes de usuАrios" # ??? -#: g10/keyedit.c:566 +#: g10/keyedit.c:568 msgid "l" msgstr "l" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "uid" msgstr "uid" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "select user id N" msgstr "seleciona id de usuАrio N" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "key" msgstr "chave" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "select secondary key N" msgstr "seleciona chave secundАria N" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 msgid "check" msgstr "verifica" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 msgid "list signatures" msgstr "lista assinaturas" # ??? -#: g10/keyedit.c:570 +#: g10/keyedit.c:572 msgid "c" msgstr "c" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 msgid "sign" msgstr "assina" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 msgid "sign the key" msgstr "assina a chave" # ??? -#: g10/keyedit.c:572 +#: g10/keyedit.c:574 msgid "s" msgstr "s" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 #, fuzzy msgid "lsign" msgstr "lassina" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 msgid "sign the key locally" msgstr "assina a chave localmente" -#: g10/keyedit.c:574 +#: g10/keyedit.c:576 msgid "debug" msgstr "depura" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "adduid" msgstr "" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "add a user id" msgstr "adiciona um novo id de usuАrio" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 msgid "deluid" msgstr "" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 msgid "delete user id" msgstr "remove id de usuАrio" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 msgid "addkey" msgstr "" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 msgid "add a secondary key" msgstr "adiciona nova chave secundАria" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delkey" msgstr "" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delete a secondary key" msgstr "remove uma chave secundАria" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 #, fuzzy msgid "delsig" msgstr "lassina" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 #, fuzzy msgid "delete signatures" msgstr "lista assinaturas" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 msgid "expire" msgstr "expira" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 msgid "change the expire date" msgstr "muda a data de expiraГЦo" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle" msgstr "alterna" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle between secret and public key listing" msgstr "alterna entre listagem de chave secreta e pЗblica" -#: g10/keyedit.c:583 +#: g10/keyedit.c:585 msgid "t" msgstr "c" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "pref" msgstr "" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "list preferences" msgstr "lista preferЙncias" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 msgid "passwd" msgstr "senha" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 msgid "change the passphrase" msgstr "muda a frase secreta" -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "trust" msgstr "confianca" -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "change the ownertrust" msgstr "muda os valores de confianГa" -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 #, fuzzy msgid "revsig" msgstr "revsig" -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 msgid "revoke signatures" msgstr "revoga assinaturas" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 #, fuzzy msgid "revkey" msgstr "revkey" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 msgid "revoke a secondary key" msgstr "revoga uma chave secundАria" -#: g10/keyedit.c:607 +#: g10/keyedit.c:591 +msgid "disable" +msgstr "" + +#: g10/keyedit.c:591 +#, fuzzy +msgid "disable a key" +msgstr "chave incorreta" + +#: g10/keyedit.c:592 +msgid "enable" +msgstr "" + +#: g10/keyedit.c:592 +#, fuzzy +msgid "enable a key" +msgstr "chave incorreta" + +#: g10/keyedit.c:611 msgid "can't do that in batchmode\n" msgstr "impossМvel fazer isso em modo nЦo-interativo\n" #. check that they match #. FIXME: check that they both match -#: g10/keyedit.c:636 +#: g10/keyedit.c:640 msgid "Secret key is available.\n" msgstr "Chave secreta disponМvel.\n" -#: g10/keyedit.c:665 +#: g10/keyedit.c:669 msgid "Command> " msgstr "Comando> " -#: g10/keyedit.c:692 +#: g10/keyedit.c:696 msgid "Need the secret key to do this.\n" msgstr "A chave secreta И necessАria para fazer isto.\n" -#: g10/keyedit.c:714 +#: g10/keyedit.c:718 msgid "Save changes? " msgstr "Salvar alteraГУes? " -#: g10/keyedit.c:717 +#: g10/keyedit.c:721 msgid "Quit without saving? " msgstr "Sair sem salvar? " -#: g10/keyedit.c:727 +#: g10/keyedit.c:731 #, c-format msgid "update failed: %s\n" msgstr "atualizaГЦo falhou: %s\n" -#: g10/keyedit.c:734 +#: g10/keyedit.c:738 #, c-format msgid "update secret failed: %s\n" msgstr "atualizaГЦo da chave secreta falhou: %s\n" -#: g10/keyedit.c:741 +#: g10/keyedit.c:745 msgid "Key not changed so no update needed.\n" msgstr "Chave nЦo alterada, nenhuma atualizaГЦo И necessАria.\n" -#: g10/keyedit.c:744 g10/keyedit.c:803 +#: g10/keyedit.c:748 g10/keyedit.c:807 #, c-format msgid "update of trustdb failed: %s\n" msgstr "atualizaГЦo do banco de dados de confiabilidade falhou: %s\n" -#: g10/keyedit.c:777 +#: g10/keyedit.c:781 msgid "Really sign all user ids? " msgstr "Realmente assinar todos os ids de usuАrio? " -#: g10/keyedit.c:778 +#: g10/keyedit.c:782 msgid "Hint: Select the user ids to sign\n" msgstr "SugestЦo: Selecione os ids de usuАrio para assinar\n" -#: g10/keyedit.c:814 g10/keyedit.c:835 +#: g10/keyedit.c:818 g10/keyedit.c:839 msgid "You must select at least one user id.\n" msgstr "VocЙ precisa selecionar pelo menos um id de usuАrio.\n" -#: g10/keyedit.c:816 +#: g10/keyedit.c:820 msgid "You can't delete the last user id!\n" msgstr "VocЙ nЦo pode remover o Зltimo id de usuАrio!\n" -#: g10/keyedit.c:819 +#: g10/keyedit.c:823 msgid "Really remove all selected user ids? " msgstr "Realmente remover todos os ids de usuАrio selecionados? " -#: g10/keyedit.c:820 +#: g10/keyedit.c:824 msgid "Really remove this user id? " msgstr "Realmente remover este id de usuАrio? " -#: g10/keyedit.c:858 g10/keyedit.c:880 +#: g10/keyedit.c:860 g10/keyedit.c:882 msgid "You must select at least one key.\n" msgstr "VocЙ deve selecionar pelo menos uma chave.\n" -#: g10/keyedit.c:862 +#: g10/keyedit.c:864 msgid "Do you really want to delete the selected keys? " msgstr "VocЙ realmente quer remover as chaves selecionadas? " -#: g10/keyedit.c:863 +#: g10/keyedit.c:865 msgid "Do you really want to delete this key? " msgstr "VocЙ realmente quer remover esta chave? " -#: g10/keyedit.c:884 +#: g10/keyedit.c:886 msgid "Do you really want to revoke the selected keys? " msgstr "VocЙ realmente quer revogar as chaves selecionadas? " -#: g10/keyedit.c:885 +#: g10/keyedit.c:887 msgid "Do you really want to revoke this key? " msgstr "VocЙ realmente quer revogar esta chave? " # help ou ajuda ??? -#: g10/keyedit.c:939 +#: g10/keyedit.c:949 msgid "Invalid command (try \"help\")\n" msgstr "Comando invАlido (tente \"help\")\n" -#: g10/keyedit.c:1294 +#: g10/keyedit.c:1039 +#, fuzzy +msgid "This key has been disabled" +msgstr "Nota: Esta chave expirou!\n" + +#: g10/keyedit.c:1310 msgid "Delete this good signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1298 +#: g10/keyedit.c:1314 msgid "Delete this invalid signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1302 +#: g10/keyedit.c:1318 msgid "Delete this unknown signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1308 +#: g10/keyedit.c:1324 #, fuzzy msgid "Really delete this self-signature? (y/N)" msgstr "Realmente gerar os certificados de revogaГЦo? (s/N)" -#: g10/keyedit.c:1322 +#: g10/keyedit.c:1338 #, fuzzy, c-format msgid "Deleted %d signature.\n" msgstr "%d assinaturas incorretas\n" -#: g10/keyedit.c:1323 +#: g10/keyedit.c:1339 #, fuzzy, c-format msgid "Deleted %d signatures.\n" msgstr "%d assinaturas incorretas\n" -#: g10/keyedit.c:1326 +#: g10/keyedit.c:1342 #, fuzzy msgid "Nothing deleted.\n" msgstr "AVISO: nada exportado\n" -#: g10/keyedit.c:1395 +#: g10/keyedit.c:1411 msgid "Please remove selections from the secret keys.\n" msgstr "Por favor remova as seleГУes das chaves secretas.\n" -#: g10/keyedit.c:1401 +#: g10/keyedit.c:1417 msgid "Please select at most one secondary key.\n" msgstr "Por favor selecione no mАximo uma chave secundАria.\n" -#: g10/keyedit.c:1405 +#: g10/keyedit.c:1421 #, fuzzy msgid "Changing expiration time for a secondary key.\n" msgstr "Modificando a data de expiraГЦo para a chave secundАria.\n" -#: g10/keyedit.c:1407 +#: g10/keyedit.c:1423 #, fuzzy msgid "Changing expiration time for the primary key.\n" msgstr "Modificando a data de expiraГЦo para a chave primАria.\n" -#: g10/keyedit.c:1448 +#: g10/keyedit.c:1464 msgid "You can't change the expiration date of a v3 key\n" msgstr "VocЙ nЦo pode modificar a data de expiraГЦo de uma chave v3\n" -#: g10/keyedit.c:1464 +#: g10/keyedit.c:1480 msgid "No corresponding signature in secret ring\n" msgstr "Nenhuma assinatura correspondente no chaveiro secreto\n" -#: g10/keyedit.c:1524 +#: g10/keyedit.c:1540 #, c-format msgid "No user id with index %d\n" msgstr "Nenhum id de usuАrio com Мndice %d\n" -#: g10/keyedit.c:1570 +#: g10/keyedit.c:1586 #, c-format msgid "No secondary key with index %d\n" msgstr "Nenhuma chave secundАria com Мndice %d\n" -#: g10/keyedit.c:1668 +#: g10/keyedit.c:1684 msgid "user ID: \"" msgstr "Digite o identificador de usuАrio:" -#: g10/keyedit.c:1671 +#: g10/keyedit.c:1687 #, c-format msgid "" "\"\n" "signed with your key %08lX at %s\n" msgstr "" "\"\n" "assinado com sua chave %08lX em %s\n" -#: g10/keyedit.c:1675 +#: g10/keyedit.c:1691 msgid "Create a revocation certificate for this signature? (y/N)" msgstr "Gerar um certificado de revogaГЦo para esta assinatura? (s/N)" -#: g10/keyedit.c:1755 +#: g10/keyedit.c:1771 msgid "Really create the revocation certificates? (y/N)" msgstr "Realmente gerar os certificados de revogaГЦo? (s/N)" -#: g10/keyedit.c:1778 +#: g10/keyedit.c:1794 msgid "no secret key\n" msgstr "nenhuma chave secreta\n" #: g10/mainproc.c:184 #, c-format msgid "public key is %08lX\n" msgstr "a chave pЗblica И %08lX\n" -#: g10/mainproc.c:212 +#: g10/mainproc.c:213 msgid "public key encrypted data: good DEK\n" msgstr "dados criptografados com chave pЗblica: DEK vАlido\n" #. fixme: defer this message until we have parsed all packets of #. * this type - do this by building a list of keys with their stati #. * and store it with the context. do_proc_packets can then use #. * this list to display some information -#: g10/mainproc.c:219 +#: g10/mainproc.c:220 #, c-format msgid "public key decryption failed: %s\n" msgstr "descriptografia de chave pЗblica falhou: %s\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:248 msgid "decryption okay\n" msgstr "descriptografia correta\n" -#: g10/mainproc.c:252 +#: g10/mainproc.c:253 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "CUIDADO: a mensagem criptografada foi manipulada!\n" -#: g10/mainproc.c:257 +#: g10/mainproc.c:258 #, c-format msgid "decryption failed: %s\n" msgstr "descriptografia falhou: %s\n" -#: g10/mainproc.c:275 +#: g10/mainproc.c:276 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTA: o remetente solicitou \"apenas-para-seus-olhos\"\n" -#: g10/mainproc.c:277 +#: g10/mainproc.c:278 #, c-format msgid "original file name='%.*s'\n" msgstr "nome de arquivo original='%.*s'\n" -#: g10/mainproc.c:505 g10/mainproc.c:514 +#: g10/mainproc.c:506 g10/mainproc.c:515 #, fuzzy msgid "WARNING: invalid notation data found\n" msgstr "nenhum dado OpenPGP vАlido encontrado.\n" -#: g10/mainproc.c:517 +#: g10/mainproc.c:518 msgid "Notation: " msgstr "" -#: g10/mainproc.c:524 +#: g10/mainproc.c:525 msgid "Policy: " msgstr "" -#: g10/mainproc.c:929 +#: g10/mainproc.c:930 msgid "signature verification suppressed\n" msgstr "verificaГЦo de assinatura suprimida\n" # XXX Verificar -#: g10/mainproc.c:935 +#: g10/mainproc.c:936 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Assinatura feita em %.*s usando %s, ID da chave %08lX\n" #. just in case that we have no userid -#: g10/mainproc.c:961 g10/mainproc.c:972 +#: g10/mainproc.c:962 g10/mainproc.c:973 msgid "BAD signature from \"" msgstr "Assinatura INCORRETA de \"" -#: g10/mainproc.c:962 g10/mainproc.c:973 +#: g10/mainproc.c:963 g10/mainproc.c:974 msgid "Good signature from \"" msgstr "Assinatura correta de \"" -#: g10/mainproc.c:964 +#: g10/mainproc.c:965 msgid " aka \"" msgstr " ou \"" -#: g10/mainproc.c:1015 +#: g10/mainproc.c:1016 #, c-format msgid "Can't check signature: %s\n" msgstr "ImpossМvel verificar assinatura: %s\n" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1110 msgid "old style (PGP 2.x) signature\n" msgstr "assinatura antiga (PGP2.x)\n" -#: g10/mainproc.c:1114 +#: g10/mainproc.c:1115 msgid "invalid root packet detected in proc_tree()\n" msgstr "pacote raiz invАlido detectado em proc_tree()\n" #: g10/misc.c:93 #, c-format msgid "can't disable core dumps: %s\n" msgstr "impossМvel desabilitar core dumps: %s\n" #: g10/misc.c:96 msgid "WARNING: program may create a core file!\n" msgstr "AVISO: O programa pode criar um arquivo core!\n" #: g10/misc.c:203 msgid "Experimental algorithms should not be used!\n" msgstr "Algoritmos experimentais nЦo devem ser usados!\n" #: g10/misc.c:217 msgid "" "RSA keys are deprecated; please consider creating a new key and use this key " "in the future\n" msgstr "" "Chaves RSA nЦo sЦo recomendАveis; por favor considere criar uma nova chave e " "usА-la no futuro\n" #: g10/misc.c:239 msgid "this cipher algorithm is depreciated; please use a more standard one!\n" msgstr "" "este algoritmo de criptografia И depreciado; por favor use algum\n" "algoritmo padrЦo!\n" #: g10/parse-packet.c:112 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "impossМvel manipular algoritmo de chave pЗblica %d\n" #: g10/parse-packet.c:931 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "subpacote de tipo %d tem bit crМtico ligado\n" -#: g10/passphrase.c:157 +#: g10/passphrase.c:159 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" "user: \"" msgstr "" "\n" "VocЙ precisa de uma frase secreta para desbloquear a chave secreta do\n" "usuАrio: \"" -#: g10/passphrase.c:166 +#: g10/passphrase.c:168 #, fuzzy, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "chave de %u-bit/%s, ID %08lX, criada em %s\n" -#: g10/passphrase.c:171 +#: g10/passphrase.c:173 #, c-format msgid " (main key ID %08lX)" msgstr " (ID principal da chave %08lX)" -#: g10/passphrase.c:192 +#: g10/passphrase.c:194 msgid "Enter passphrase: " msgstr "Digite a frase secreta: " -#: g10/passphrase.c:196 +#: g10/passphrase.c:198 msgid "Repeat passphrase: " msgstr "Repita a frase secreta: " #: g10/plaintext.c:63 msgid "data not saved; use option \"--output\" to save it\n" msgstr "dados nЦo salvos; use a opГЦo \"--output\" para salvА-los\n" #: g10/plaintext.c:266 msgid "Please enter name of data file: " msgstr "Por favor digite o nome do arquivo de dados: " #: g10/plaintext.c:287 msgid "reading stdin ...\n" msgstr "lendo \"stdin\" ...\n" #: g10/plaintext.c:360 #, c-format msgid "can't open signed data `%s'\n" msgstr "impossМvel abrir dados assinados `%s'\n" #: g10/pubkey-enc.c:79 #, c-format msgid "anonymous receiver; trying secret key %08lX ...\n" msgstr "destinatАrio anТnimo; tentando chave secreta %08lX ...\n" #: g10/pubkey-enc.c:85 msgid "okay, we are the anonymous recipient.\n" msgstr "certo, nСs somos o destinatАrio anТnimo.\n" #: g10/pubkey-enc.c:137 msgid "old encoding of the DEK is not supported\n" msgstr "codificaГЦo antiga do DEK nЦo suportada\n" #: g10/pubkey-enc.c:191 #, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "NOTA: algoritmo de criptografia %d nЦo encontrado nas preferЙncias\n" #: g10/seckey-cert.c:55 #, c-format msgid "protection algorithm %d is not supported\n" msgstr "algoritmo de proteГЦo %d nЦo И suportado\n" #: g10/seckey-cert.c:171 msgid "Invalid passphrase; please try again ...\n" msgstr "Frase secreta invАlida; por favor tente novamente ...\n" #: g10/seckey-cert.c:227 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "AVISO: Chave fraca detectada - por favor mude a frase secreta novamente.\n" -#: g10/sig-check.c:187 +#: g10/sig-check.c:199 msgid "assuming bad MDC due to an unknown critical bit\n" msgstr "assumindo MDC incorreto devido a um bit crМtico desconhecido\n" -#: g10/sig-check.c:283 +#: g10/sig-check.c:295 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "" "esta И uma chave ElGamal gerada pelo PGP que NцO И segura para assinaturas!\n" -#: g10/sig-check.c:291 +#: g10/sig-check.c:303 #, c-format msgid "public key is %lu second newer than the signature\n" msgstr "a chave pЗblica И %lu segundo mais nova que a assinatura\n" -#: g10/sig-check.c:292 +#: g10/sig-check.c:304 #, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "a chave pЗblica И %lu segundos mais nova que a assinatura\n" -#: g10/sig-check.c:308 +#: g10/sig-check.c:320 #, c-format msgid "NOTE: signature key expired %s\n" msgstr "NOTA: chave de assinatura expirou %s\n" -#: g10/sig-check.c:365 +#: g10/sig-check.c:377 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "assumindo assinatura incorreta devido a um bit crМtico desconhecido\n" #: g10/sign.c:132 #, c-format msgid "%s signature from: %s\n" msgstr "%s assinatura de: %s\n" #: g10/sign.c:263 g10/sign.c:554 #, c-format msgid "can't create %s: %s\n" msgstr "impossМvel criar %s: %s\n" #: g10/sign.c:361 msgid "signing:" msgstr "assinando:" #: g10/sign.c:401 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "AVISO: `%s' И um arquivo vazio\n" #: g10/textfilter.c:128 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "impossМvel manejar linhas de texto maiores que %d caracteres\n" #: g10/textfilter.c:197 #, c-format msgid "input line longer than %d characters\n" msgstr "linha de entrada maior que %d caracteres\n" -#: g10/tdbio.c:116 g10/tdbio.c:1505 +#: g10/tdbio.c:116 g10/tdbio.c:1634 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "banco de dados de confiabilidade rec %lu: lseek falhou: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1512 +#: g10/tdbio.c:122 g10/tdbio.c:1641 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "banco de dados de confiabilidade rec %lu: escrita falhou (n=%d): %s\n" #: g10/tdbio.c:232 msgid "trustdb transaction too large\n" msgstr "transaГЦo de banco de dados de confiabilidade muito grande\n" #: g10/tdbio.c:424 #, c-format msgid "%s: can't access: %s\n" msgstr "%s: impossМvel acessar: %s\n" #: g10/ringedit.c:296 g10/tdbio.c:444 #, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: impossМvel criar diretСrio: %s\n" #: g10/ringedit.c:302 g10/tdbio.c:447 #, c-format msgid "%s: directory created\n" msgstr "%s: diretСrio criado\n" #: g10/tdbio.c:451 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: diretСrio inexistente!\n" -#: g10/openfile.c:144 g10/openfile.c:215 g10/ringedit.c:1344 g10/tdbio.c:457 +#: g10/openfile.c:182 g10/openfile.c:253 g10/ringedit.c:1344 g10/tdbio.c:457 #, c-format msgid "%s: can't create: %s\n" msgstr "%s: impossМvel criar: %s\n" #: g10/tdbio.c:472 g10/tdbio.c:521 #, c-format msgid "%s: can't create lock\n" msgstr "%s: impossМvel criar trava\n" #: g10/tdbio.c:486 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: falha ao criar registro de versЦo: %s" #: g10/tdbio.c:490 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: banco de dados de confiabilidade invАlido criado\n" #: g10/tdbio.c:493 #, c-format msgid "%s: trustdb created\n" msgstr "%s: banco de dados de confiabilidade criado\n" #: g10/tdbio.c:530 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: banco de dados de confiabilidade invАlido\n" #: g10/tdbio.c:563 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: falha ao criar tabela de \"hash\": %s\n" #: g10/tdbio.c:571 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: erro atualizando registro de versЦo: %s\n" #: g10/tdbio.c:587 g10/tdbio.c:626 g10/tdbio.c:648 g10/tdbio.c:678 -#: g10/tdbio.c:703 g10/tdbio.c:1438 g10/tdbio.c:1465 +#: g10/tdbio.c:703 g10/tdbio.c:1567 g10/tdbio.c:1594 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: erro lendo registro de versЦo: %s\n" #: g10/tdbio.c:600 g10/tdbio.c:659 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: erro escrevendo registro de versЦo: %s\n" -#: g10/tdbio.c:1132 +#: g10/tdbio.c:1246 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "banco de dados de confiabilidade: lseek falhou: %s\n" -#: g10/tdbio.c:1140 +#: g10/tdbio.c:1254 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "banco de dados de confiabilidade: leitura falhou (n=%d): %s\n" -#: g10/tdbio.c:1161 +#: g10/tdbio.c:1275 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: nЦo И um banco de dados de confiabilidade\n" -#: g10/tdbio.c:1177 +#: g10/tdbio.c:1291 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: registro de versЦo com recnum %lu\n" -#: g10/tdbio.c:1182 +#: g10/tdbio.c:1296 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: versЦo de arquivo invАlida %d\n" -#: g10/tdbio.c:1471 +#: g10/tdbio.c:1600 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: erro lendo registro livre: %s\n" -#: g10/tdbio.c:1479 +#: g10/tdbio.c:1608 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: erro escrevendo registro de diretСrio: %s\n" -#: g10/tdbio.c:1489 +#: g10/tdbio.c:1618 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: falha ao zerar um registro: %s\n" -#: g10/tdbio.c:1519 +#: g10/tdbio.c:1648 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: falha ao anexar um registro: %s\n" -#: g10/tdbio.c:1630 +#: g10/tdbio.c:1759 #, fuzzy msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "" "O banco de dados de confiabilidade estА danificado; por favor rode\n" "\"gpgm --fix-trust-db\".\n" -#: g10/trustdb.c:163 +#: g10/trustdb.c:160 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "registro de confianГa %lu, tipo req %d: falha na leitura: %s\n" -#: g10/trustdb.c:178 +#: g10/trustdb.c:175 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "registro de confianГa %lu, tipo %d: gravaГЦo falhou: %s\n" -#: g10/trustdb.c:192 +#: g10/trustdb.c:189 #, c-format msgid "trust record %lu: delete failed: %s\n" msgstr "registro de confianГa %lu: remoГЦo falhou: %s\n" -#: g10/trustdb.c:206 +#: g10/trustdb.c:203 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "banco de dados de confiabilidade: sincronizaГЦo falhou: %s\n" -#: g10/trustdb.c:386 +#: g10/trustdb.c:347 #, c-format msgid "error reading dir record for LID %lu: %s\n" msgstr "erro lendo registro de diretСrio para LID %lu: %s\n" -#: g10/trustdb.c:393 +#: g10/trustdb.c:354 #, c-format msgid "lid %lu: expected dir record, got type %d\n" msgstr "lid %lu: registro de diretСrio esperado, tipo %d recebido\n" -#: g10/trustdb.c:398 +#: g10/trustdb.c:359 #, c-format msgid "no primary key for LID %lu\n" msgstr "nenhuma chave primАria para LID %lu\n" -#: g10/trustdb.c:403 +#: g10/trustdb.c:364 #, c-format msgid "error reading primary key for LID %lu: %s\n" msgstr "erro lendo chave primАria para LID %lu: %s\n" -#: g10/trustdb.c:442 +#: g10/trustdb.c:403 #, c-format msgid "get_dir_record: search_record failed: %s\n" msgstr "get_dir_record: search_record falhou: %s\n" -#: g10/trustdb.c:510 +#: g10/trustdb.c:458 #, c-format msgid "NOTE: secret key %08lX is NOT protected.\n" msgstr "NOTA: chave secreta %08lX NцO estА protegida.\n" -#: g10/trustdb.c:518 +#: g10/trustdb.c:466 #, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "chave %08lX: chave secreta sem chave pЗblica - ignorada\n" -#: g10/trustdb.c:525 +#: g10/trustdb.c:473 #, c-format msgid "key %08lX: secret and public key don't match\n" msgstr "chave %08lX: chaves secreta e pЗblica nЦo sЦo correspondentes\n" -#: g10/trustdb.c:535 +#: g10/trustdb.c:483 #, c-format msgid "key %08lX: can't put it into the trustdb\n" msgstr "" "chave %08lX: impossМvel colocА-la no banco de dados de confiabilidade\n" -#: g10/trustdb.c:541 +#: g10/trustdb.c:489 #, c-format msgid "key %08lX: query record failed\n" msgstr "chave %08lX: pedido de registro falhou\n" -#: g10/trustdb.c:550 +#: g10/trustdb.c:498 #, c-format msgid "key %08lX: already in trusted key table\n" msgstr "chave %08lX: jА estА na tabela de chaves confiАveis\n" -#: g10/trustdb.c:553 +#: g10/trustdb.c:501 #, c-format msgid "key %08lX: accepted as trusted key.\n" msgstr "chave %08lX: aceita como chave confiАvel.\n" -#: g10/trustdb.c:561 +#: g10/trustdb.c:509 #, c-format msgid "enumerate secret keys failed: %s\n" msgstr "enumeraГЦo de chaves secretas falhou: %s\n" -#: g10/trustdb.c:851 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" -msgstr "" -"NOTA: assinatura rec %lu[%d] estА na lista de sugestУes de %lu mas estА\n" -" marcada como verificada\n" - -#: g10/trustdb.c:855 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" -msgstr "" -"NOTA: assinatura rec %lu[%d] estА na lista de sugestУes de %lu mas nЦo estА\n" -" marcada\n" - -#. we need the dir record -#: g10/trustdb.c:862 -#, c-format -msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" -msgstr "" -"assinatura rec %lu[%d] na lista de sugestУes de %lu nЦo aponta para\n" -"um registro de diretСrio\n" - -#: g10/trustdb.c:868 -#, c-format -msgid "lid %lu: no primary key\n" -msgstr "lid %lu: nenhuma chave primАria\n" - -#: g10/trustdb.c:901 -#, c-format -msgid "lid %lu: user id not found in keyblock\n" -msgstr "lid %lu: id de usuАrio nЦo encontrado no bloco de chaves\n" - -#: g10/trustdb.c:905 -#, c-format -msgid "lid %lu: user id without signature\n" -msgstr "lid %lu: id de usuАrio sem assinatura\n" - -#: g10/trustdb.c:912 -#, c-format -msgid "lid %lu: self-signature in hintlist\n" -msgstr "lid %lu: auto-assinatura na lista de sugestУes\n" - -#: g10/trustdb.c:923 g10/trustdb.c:1675 g10/trustdb.c:1766 -msgid "Valid certificate revocation" -msgstr "Certificado de revogaГЦo vАlido" - -#: g10/trustdb.c:924 g10/trustdb.c:1676 g10/trustdb.c:1767 -msgid "Good certificate" -msgstr "Certificado correto" - -#: g10/trustdb.c:933 -msgid "very strange: no public key\n" -msgstr "muito estranho: nenhuma chave pЗblica\n" - -#: g10/trustdb.c:982 -#, c-format -msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" -msgstr "" -"lista de sugestУes %lu[%d] de %lu nЦo aponta para registro de diretСrio\n" - -#: g10/trustdb.c:988 -#, c-format -msgid "lid %lu does not have a key\n" -msgstr "lid %lu nЦo tem chave\n" - -#: g10/trustdb.c:998 -#, c-format -msgid "lid %lu: can't get keyblock: %s\n" -msgstr "lid %lu: impossМvel pegar bloco de chaves: %s\n" - -#: g10/trustdb.c:1055 g10/trustdb.c:2030 -#, c-format -msgid "tdbio_search_dir failed: %s\n" +#: g10/trustdb.c:800 +#, fuzzy, c-format +msgid "tdbio_search_sdir failed: %s\n" msgstr "tdbio_search_dir falhou: %s\n" -#: g10/trustdb.c:1210 +#: g10/trustdb.c:875 #, c-format msgid "key %08lX.%lu: Good subkey binding\n" msgstr "chave %08lX.%lu: LigaГЦo de subchave vАlida\n" -#: g10/trustdb.c:1216 g10/trustdb.c:1259 +#: g10/trustdb.c:881 g10/trustdb.c:916 #, c-format msgid "key %08lX.%lu: Invalid subkey binding: %s\n" msgstr "chave %08lX.%lu: LigaГЦo de subchave invАlida: %s\n" -#: g10/trustdb.c:1232 +#: g10/trustdb.c:893 #, c-format msgid "key %08lX.%lu: Valid key revocation\n" msgstr "chave %08lX.%lu: RevogaГЦo de chave vАlida\n" -#: g10/trustdb.c:1238 +#: g10/trustdb.c:899 #, c-format msgid "key %08lX.%lu: Invalid key revocation: %s\n" msgstr "chave %08lX.%lu: RevogaГЦo de chave invАlida: %s\n" -#: g10/trustdb.c:1253 +#: g10/trustdb.c:910 #, c-format msgid "key %08lX.%lu: Valid subkey revocation\n" msgstr "chave %08lX.%lu: RevogaГЦo de subchave vАlida\n" -#: g10/trustdb.c:1360 +#: g10/trustdb.c:1021 msgid "Good self-signature" msgstr "Auto-assinatura vАlida" -#: g10/trustdb.c:1371 +#: g10/trustdb.c:1031 msgid "Invalid self-signature" msgstr "Auto-assinatura invАlida" -#: g10/trustdb.c:1403 -msgid "Valid user ID revocation skipped due to a newer self signature\n" +#: g10/trustdb.c:1058 +#, fuzzy +msgid "Valid user ID revocation skipped due to a newer self signature" msgstr "" "RevogaГЦo vАlida de ID de usuАrio ignorada devido a nova auto-assinatura\n" -#: g10/trustdb.c:1410 -msgid "Valid user ID revocation\n" +#: g10/trustdb.c:1064 +#, fuzzy +msgid "Valid user ID revocation" msgstr "RevogaГЦo de ID de usuАrio vАlida\n" -#: g10/trustdb.c:1417 +#: g10/trustdb.c:1069 msgid "Invalid user ID revocation" msgstr "RevogaГЦo de ID de usuАrio invАlida" -# muitas ou demais ??? -#: g10/trustdb.c:1512 -msgid "Too many preferences" -msgstr "PreferЙncias demais" - -#: g10/trustdb.c:1526 -msgid "Too many preference items" -msgstr "Muitos itens de preferЙncia" - -#: g10/trustdb.c:1549 g10/trustdb.c:3075 g10/trustdb.c:3105 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "AVISO: ainda И impossМvel manipular registros de preferЙncias longos\n" - -#: g10/trustdb.c:1654 -msgid "duplicated certificate - deleted" -msgstr "certificado duplicado - removido" +#: g10/trustdb.c:1110 +msgid "Valid certificate revocation" +msgstr "Certificado de revogaГЦo vАlido" -#: g10/trustdb.c:1692 -msgid "public key not anymore available" -msgstr "a chave pЗblica nЦo estА mais disponМvel" +#: g10/trustdb.c:1111 +msgid "Good certificate" +msgstr "Certificado correto" -#: g10/trustdb.c:1702 g10/trustdb.c:1791 +#: g10/trustdb.c:1132 msgid "Invalid certificate revocation" msgstr "Certificado de revogaГЦo invАlido" -#: g10/trustdb.c:1703 g10/trustdb.c:1792 +#: g10/trustdb.c:1133 msgid "Invalid certificate" msgstr "Certificado invАlido" -# trauzir sombra ??? -#: g10/trustdb.c:1720 -#, c-format -msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" -msgstr "" -"uid %08lX.%lu/%02X%02X: tem diretСrio \"shadow\" %lu mas ainda nЦo estА\n" -"marcado\n" - -#: g10/trustdb.c:1734 +#: g10/trustdb.c:1150 g10/trustdb.c:1154 #, c-format msgid "sig record %lu[%d] points to wrong record.\n" msgstr "registro de assinatura %lu[%d] aponta para registro errado.\n" -#. that should never happen -#: g10/trustdb.c:2007 -#, c-format -msgid "insert_trust_record: keyblock not found: %s\n" -msgstr "insert_trust_record: bloco de chaves nЦo encontrado: %s\n" - -#: g10/trustdb.c:2408 -msgid "Ooops, no keys\n" -msgstr "Ooops, nenhuma chave\n" +#: g10/trustdb.c:1206 +msgid "duplicated certificate - deleted" +msgstr "certificado duplicado - removido" -#: g10/trustdb.c:2412 -msgid "Ooops, no user ids\n" -msgstr "Ooops, nenhum id de usuАrio\n" +#: g10/trustdb.c:1512 +#, c-format +msgid "tdbio_search_dir failed: %s\n" +msgstr "tdbio_search_dir falhou: %s\n" -#: g10/trustdb.c:2529 +#: g10/trustdb.c:1634 #, c-format msgid "lid ?: insert failed: %s\n" msgstr "lid ?: inserГЦo falhou: %s\n" -#: g10/trustdb.c:2534 +#: g10/trustdb.c:1639 #, c-format msgid "lid %lu: insert failed: %s\n" msgstr "lid %lu: inserГЦo falhou: %s\n" -#: g10/trustdb.c:2540 +#: g10/trustdb.c:1645 #, c-format msgid "lid %lu: inserted\n" msgstr "lid %lu: inserido\n" -#: g10/trustdb.c:2545 g10/trustdb.c:2654 -#, c-format -msgid "lid %lu: update failed: %s\n" -msgstr "lid %lu: atualizaГЦo falhou %s\n" - -#: g10/trustdb.c:2551 g10/trustdb.c:2660 -#, c-format -msgid "lid %lu: updated\n" -msgstr "lid %lu: atualizado\n" - -#: g10/trustdb.c:2556 g10/trustdb.c:2664 -#, c-format -msgid "lid %lu: okay\n" -msgstr "lid %lu: correto\n" +#: g10/trustdb.c:1650 +#, fuzzy, c-format +msgid "error reading dir record: %s\n" +msgstr "erro encontrando registro de diretСrio: %s\n" -#: g10/trustdb.c:2562 g10/trustdb.c:2671 +#: g10/trustdb.c:1658 g10/trustdb.c:1712 #, c-format msgid "%lu keys processed\n" msgstr "%lu chaves processadas\n" -#: g10/trustdb.c:2564 g10/trustdb.c:2675 +#: g10/trustdb.c:1660 g10/trustdb.c:1716 #, c-format msgid "\t%lu keys with errors\n" msgstr "\t%lu chaves com erros\n" -#: g10/trustdb.c:2566 g10/trustdb.c:2677 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "\t%lu chaves atualizadas\n" - -#: g10/trustdb.c:2568 +#: g10/trustdb.c:1662 #, c-format msgid "\t%lu keys inserted\n" msgstr "\t%lu chaves inseridas\n" -#: g10/trustdb.c:2571 +#: g10/trustdb.c:1665 #, c-format msgid "enumerate keyblocks failed: %s\n" msgstr "enumeraГЦo de blocos de chaves falhou: %s\n" -#: g10/trustdb.c:2598 -#, c-format -msgid "%s: keyblock read problem: %s\n" -msgstr "%s: erro de leitura de bloco de chaves: %s\n" - -#: g10/trustdb.c:2612 -#, c-format -msgid "%s: update failed: %s\n" -msgstr "%s: atualizaГЦo falhou: %s\n" - -#: g10/trustdb.c:2615 -#, c-format -msgid "%s: updated\n" -msgstr "%s: atualizado\n" - -#: g10/trustdb.c:2617 -#, c-format -msgid "%s: okay\n" -msgstr "%s: correto\n" - -#: g10/trustdb.c:2632 +#: g10/trustdb.c:1703 #, c-format msgid "lid %lu: dir record w/o key - skipped\n" msgstr "lid %lu: registro de diretСrio sem chave - ignorado\n" -#: g10/trustdb.c:2645 -#, c-format -msgid "lid %lu: keyblock not found: %s\n" -msgstr "lid %lu: bloco de chaves nЦo encontrado: %s\n" - -#: g10/trustdb.c:2673 +#: g10/trustdb.c:1714 #, c-format msgid "\t%lu keys skipped\n" msgstr "\t%lu chaves ignoradas\n" -#: g10/trustdb.c:2743 +#: g10/trustdb.c:1718 +#, c-format +msgid "\t%lu keys updated\n" +msgstr "\t%lu chaves atualizadas\n" + +#: g10/trustdb.c:2055 +msgid "Ooops, no keys\n" +msgstr "Ooops, nenhuma chave\n" + +#: g10/trustdb.c:2059 +msgid "Ooops, no user ids\n" +msgstr "Ooops, nenhum id de usuАrio\n" + +#: g10/trustdb.c:2216 #, c-format msgid "check_trust: search dir record failed: %s\n" msgstr "check_trust: busca de registro de diretСrio falhou: %s\n" -#: g10/trustdb.c:2750 +#: g10/trustdb.c:2223 #, c-format msgid "key %08lX: insert trust record failed: %s\n" msgstr "chave %08lX: inserГЦo de registro de confianГa falhou: %s\n" -#: g10/trustdb.c:2754 +#: g10/trustdb.c:2227 #, c-format msgid "key %08lX.%lu: inserted into trustdb\n" msgstr "chave %08lX.%lu: inserida no banco de dados de confiabilidade\n" -#: g10/trustdb.c:2762 +#: g10/trustdb.c:2235 #, c-format msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" msgstr "" "chave %08lX.%lu: criada no futuro (viagem no tempo ou problema no relogio)\n" -#: g10/trustdb.c:2769 +#: g10/trustdb.c:2244 #, c-format msgid "key %08lX.%lu: expired at %s\n" msgstr "chave %08lX.%lu: expirada em %s\n" -#: g10/trustdb.c:2777 +#: g10/trustdb.c:2252 #, c-format msgid "key %08lX.%lu: trust check failed: %s\n" msgstr "chave %08lX.%lu: verificaГЦo de confianГa falhou: %s\n" -#: g10/trustdb.c:2881 +#: g10/trustdb.c:2358 #, c-format msgid "user '%s' not found: %s\n" msgstr "usuАrio `%s' nЦo encontrado: %s\n" -#: g10/trustdb.c:2883 +#: g10/trustdb.c:2360 #, c-format msgid "problem finding '%s' in trustdb: %s\n" msgstr "problemas na procura de `%s' no banco de dados de confiabilidade: %s\n" -#: g10/trustdb.c:2886 +#: g10/trustdb.c:2363 #, c-format msgid "user '%s' not in trustdb - inserting\n" msgstr "" "usuАrio `%s' nЦo encontrado no banco de dados de confiabilidade - inserindo\n" -#: g10/trustdb.c:2889 +#: g10/trustdb.c:2366 #, c-format msgid "failed to put '%s' into trustdb: %s\n" msgstr "falha ao colocar `%s' no banco de dados de confiabilidade: %s\n" +#: g10/trustdb.c:2552 g10/trustdb.c:2582 +msgid "WARNING: can't yet handle long pref records\n" +msgstr "AVISO: ainda И impossМvel manipular registros de preferЙncias longos\n" + #: g10/ringedit.c:316 #, c-format msgid "%s: can't create keyring: %s\n" msgstr "%s: impossМvel criar chaveiro: %s\n" #: g10/ringedit.c:333 g10/ringedit.c:1349 #, c-format msgid "%s: keyring created\n" msgstr "%s: chaveiro criado\n" #: g10/ringedit.c:1526 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "AVISO: existem 2 arquivos com informaГУes confidenciais.\n" #: g10/ringedit.c:1527 #, c-format msgid "%s is the unchanged one\n" msgstr "%s И o nЦo modificado\n" #: g10/ringedit.c:1528 #, c-format msgid "%s is the new one\n" msgstr "%s И o novo\n" #: g10/ringedit.c:1529 msgid "Please fix this possible security flaw\n" msgstr "Por favor conserte este possМvel furo de seguranГa\n" #: g10/skclist.c:88 g10/skclist.c:125 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "a chave nЦo estА marcada como insegura - impossМvel usА-la com o pseudo " "RNG!\n" #: g10/skclist.c:113 #, c-format msgid "skipped `%s': %s\n" msgstr "ignorado `%s': %s\n" #: g10/skclist.c:119 #, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " "signatures!\n" msgstr "" "ignorado `%s': esta И uma chave ElGamal gerada pelo PGP que nЦo И segura " "para assinaturas!\n" #. do not overwrite #: g10/openfile.c:65 #, c-format msgid "File `%s' exists. " msgstr "Arquivo `%s' jА existe. " #: g10/openfile.c:67 msgid "Overwrite (y/N)? " msgstr "Sobrescrever (s/N)? " #: g10/openfile.c:97 #, c-format msgid "%s: unknown suffix\n" msgstr "" -#: g10/openfile.c:122 +#: g10/openfile.c:119 +#, fuzzy +msgid "Enter new filename" +msgstr "--store [nome_do_arquivo]" + +#: g10/openfile.c:160 msgid "writing to stdout\n" msgstr "escrevendo em \"stdout\"\n" -#: g10/openfile.c:181 +#: g10/openfile.c:219 #, c-format msgid "assuming signed data in `%s'\n" msgstr "assumindo dados assinados em `%s'\n" -#: g10/openfile.c:231 +#: g10/openfile.c:269 #, c-format msgid "%s: new options file created\n" msgstr "%s: novo arquivo de opГУes criado\n" #: g10/encr-data.c:66 #, c-format msgid "%s encrypted data\n" msgstr "dados criptografados com %s\n" #: g10/encr-data.c:68 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "criptografado com algoritmo desconhecido %d\n" #: g10/encr-data.c:85 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "AVISO: A mensagem foi criptografada com uma chave fraca na criptografia\n" "simИtrica.\n" #: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "chave fraca criada - tentando novamente\n" #: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "impossМvel evitar chave fraca para criptografia simИtrica;\n" "tentadas %d vezes!\n" #. begin of list #: g10/helptext.c:48 msgid "edit_ownertrust.value" msgstr "" #: g10/helptext.c:54 msgid "revoked_key.override" msgstr "" #: g10/helptext.c:58 msgid "untrusted_key.override" msgstr "" #: g10/helptext.c:62 msgid "pklist.user_id.enter" msgstr "" #: g10/helptext.c:66 msgid "keygen.algo" msgstr "" #: g10/helptext.c:82 msgid "keygen.algo.elg_se" msgstr "" #: g10/helptext.c:89 msgid "keygen.size" msgstr "" #: g10/helptext.c:93 msgid "keygen.size.huge.okay" msgstr "" #: g10/helptext.c:98 msgid "keygen.size.large.okay" msgstr "" #: g10/helptext.c:103 msgid "keygen.valid" msgstr "" -#: g10/helptext.c:107 +#: g10/helptext.c:110 msgid "keygen.valid.okay" msgstr "" -#: g10/helptext.c:112 +#: g10/helptext.c:115 msgid "keygen.name" msgstr "" -#: g10/helptext.c:117 +#: g10/helptext.c:120 msgid "keygen.email" msgstr "" -#: g10/helptext.c:121 +#: g10/helptext.c:124 msgid "keygen.comment" msgstr "" -#: g10/helptext.c:126 +#: g10/helptext.c:129 msgid "keygen.userid.cmd" msgstr "" -#: g10/helptext.c:135 +#: g10/helptext.c:138 msgid "keygen.sub.okay" msgstr "" -#: g10/helptext.c:139 +#: g10/helptext.c:142 msgid "sign_uid.okay" msgstr "" -#: g10/helptext.c:144 +#: g10/helptext.c:147 msgid "change_passwd.empty.okay" msgstr "" -#: g10/helptext.c:149 -msgid "keyedit.cmd" -msgstr "" - -#: g10/helptext.c:153 +#: g10/helptext.c:152 msgid "keyedit.save.okay" msgstr "" -#: g10/helptext.c:158 +#: g10/helptext.c:157 msgid "keyedit.cancel.okay" msgstr "" -#: g10/helptext.c:162 +#: g10/helptext.c:161 msgid "keyedit.sign_all.okay" msgstr "" -#: g10/helptext.c:166 +#: g10/helptext.c:165 msgid "keyedit.remove.uid.okay" msgstr "" -#: g10/helptext.c:171 +#: g10/helptext.c:170 msgid "keyedit.remove.subkey.okay" msgstr "" -#: g10/helptext.c:176 +#: g10/helptext.c:175 msgid "keyedit.delsig.valid" msgstr "" -#: g10/helptext.c:181 +#: g10/helptext.c:180 msgid "keyedit.delsig.unknown" msgstr "" -#: g10/helptext.c:187 +#: g10/helptext.c:186 msgid "keyedit.delsig.invalid" msgstr "" -#: g10/helptext.c:191 +#: g10/helptext.c:190 msgid "keyedit.delsig.selfsig" msgstr "" -#: g10/helptext.c:200 +#: g10/helptext.c:199 msgid "passphrase.enter" msgstr "" -#: g10/helptext.c:207 +#: g10/helptext.c:206 msgid "passphrase.repeat" msgstr "" -#: g10/helptext.c:211 +#: g10/helptext.c:210 msgid "detached_signature.filename" msgstr "" +#. openfile.c (overwrite_filep) #: g10/helptext.c:215 msgid "openfile.overwrite.okay" msgstr "" -#: g10/helptext.c:229 +#. openfile.c (ask_outfile_name) +#: g10/helptext.c:220 +msgid "openfile.askoutname" +msgstr "" + +#: g10/helptext.c:235 msgid "No help available" msgstr "Nenhuma ajuda disponМvel" -#: g10/helptext.c:241 +#: g10/helptext.c:247 #, c-format msgid "No help available for `%s'" msgstr "Nenhuma ajuda disponМvel para `%s'" +#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" +#~ msgstr "" +#~ "NOTA: assinatura rec %lu[%d] estА na lista de sugestУes de %lu mas estА\n" +#~ " marcada como verificada\n" + +#~ msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" +#~ msgstr "" +#~ "NOTA: assinatura rec %lu[%d] estА na lista de sugestУes de %lu mas nЦo estА\n" +#~ " marcada\n" + +#~ msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" +#~ msgstr "" +#~ "assinatura rec %lu[%d] na lista de sugestУes de %lu nЦo aponta para\n" +#~ "um registro de diretСrio\n" + +#~ msgid "lid %lu: no primary key\n" +#~ msgstr "lid %lu: nenhuma chave primАria\n" + +#~ msgid "lid %lu: user id not found in keyblock\n" +#~ msgstr "lid %lu: id de usuАrio nЦo encontrado no bloco de chaves\n" + +#~ msgid "lid %lu: user id without signature\n" +#~ msgstr "lid %lu: id de usuАrio sem assinatura\n" + +#~ msgid "lid %lu: self-signature in hintlist\n" +#~ msgstr "lid %lu: auto-assinatura na lista de sugestУes\n" + +#~ msgid "very strange: no public key\n" +#~ msgstr "muito estranho: nenhuma chave pЗblica\n" + +#~ msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" +#~ msgstr "" +#~ "lista de sugestУes %lu[%d] de %lu nЦo aponta para registro de diretСrio\n" + +#~ msgid "lid %lu does not have a key\n" +#~ msgstr "lid %lu nЦo tem chave\n" + +#~ msgid "lid %lu: can't get keyblock: %s\n" +#~ msgstr "lid %lu: impossМvel pegar bloco de chaves: %s\n" + +# muitas ou demais ??? +#~ msgid "Too many preferences" +#~ msgstr "PreferЙncias demais" + +#~ msgid "Too many preference items" +#~ msgstr "Muitos itens de preferЙncia" + +#~ msgid "public key not anymore available" +#~ msgstr "a chave pЗblica nЦo estА mais disponМvel" + +# trauzir sombra ??? +#~ msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" +#~ msgstr "" +#~ "uid %08lX.%lu/%02X%02X: tem diretСrio \"shadow\" %lu mas ainda nЦo estА\n" +#~ "marcado\n" + +#~ msgid "insert_trust_record: keyblock not found: %s\n" +#~ msgstr "insert_trust_record: bloco de chaves nЦo encontrado: %s\n" + +#~ msgid "lid %lu: update failed: %s\n" +#~ msgstr "lid %lu: atualizaГЦo falhou %s\n" + +#~ msgid "lid %lu: updated\n" +#~ msgstr "lid %lu: atualizado\n" + +#~ msgid "lid %lu: okay\n" +#~ msgstr "lid %lu: correto\n" + +#~ msgid "%s: keyblock read problem: %s\n" +#~ msgstr "%s: erro de leitura de bloco de chaves: %s\n" + +#~ msgid "%s: update failed: %s\n" +#~ msgstr "%s: atualizaГЦo falhou: %s\n" + +#~ msgid "%s: updated\n" +#~ msgstr "%s: atualizado\n" + +#~ msgid "%s: okay\n" +#~ msgstr "%s: correto\n" + +#~ msgid "lid %lu: keyblock not found: %s\n" +#~ msgstr "lid %lu: bloco de chaves nЦo encontrado: %s\n" + #~ msgid "can't lock keyring `%': %s\n" #~ msgstr "impossМvel bloquear chaveiro `%': %s\n" #~ msgid "error writing keyring `%': %s\n" #~ msgstr "erro na escrita do chaveiro `%': %s\n" #~ msgid "can't open file: %s\n" #~ msgstr "impossМvel abrir arquivo: %s\n" #~ msgid "read error: %s\n" #~ msgstr "erro de leitura: %s\n" #~ msgid "can't write to keyring: %s\n" #~ msgstr "impossМvel escrever para o chaveiro: %s\n" #~ msgid "writing keyblock\n" #~ msgstr "escrevendo bloco de chaves\n" #~ msgid "can't write keyblock: %s\n" #~ msgstr "impossМvel escrever bloco de chaves: %s\n" #~ msgid "can't lock secret keyring: %s\n" #~ msgstr "impossМvel bloquear chaveiro secreto: %s\n" #~ msgid "can't write keyring: %s\n" #~ msgstr "impossМvel escrever chaveiro: %s\n" #, fuzzy #~ msgid "encrypted message is valid\n" #~ msgstr "algoritmo de \"digest\" selecionado nЦo И vАlido\n" #, fuzzy #~ msgid "Can't check MDC: %s\n" #~ msgstr "ImpossМvel verificar assinatura: %s\n" #~ msgid "Usage: gpgm [options] [files] (-h for help)" #~ msgstr "Uso: gpgm [opГУes] [arquivos] (-h para ajuda)" #~ msgid "" #~ "Syntax: gpgm [options] [files]\n" #~ "GnuPG maintenance utility\n" #~ msgstr "" #~ "Sintaxe: gpgm [opГУes] [arquivos]\n" #~ "UtilitАrio de manutenГЦo do GnuPG\n" #~ msgid "usage: gpgm [options] " #~ msgstr "Uso: gpgm [opГУes] " #, fuzzy #~ msgid "chained sigrec %lu has a wrong owner\n" #~ msgstr "sigrec em cadeia %lu possui dono errado\n" #, fuzzy #~ msgid "'%s' is not a valid long keyID\n" #~ msgstr "%s nЦo И um mapa de caracteres vАlido\n" #, fuzzy #~ msgid "key %08lX: no public key for trusted key - skipped\n" #~ msgstr "chave %08lX: chave secreta sem chave pЗblica - ignorada\n" #, fuzzy #~ msgid "lid %lu: read dir record failed: %s\n" #~ msgstr "lid %lu: leitura de registro de diretСrio falhou: %s\n" #~ msgid "lid %lu: read key record failed: %s\n" #~ msgstr "lid %lu: leitura de registro de chave falhou: %s\n" #~ msgid "lid %lu: read uid record failed: %s\n" #~ msgstr "lid %lu: leitura de registro de uid falhou: %s\n" #, fuzzy #~ msgid "lid %lu: read pref record failed: %s\n" #~ msgstr "lid %lu: leitura de registro de preferЙncias falhou: %s\n" #~ msgid "lid %lu: read sig record failed: %s\n" #~ msgstr "lid %lu: leitura de registro de assinatura falhou: %s\n" #, fuzzy #~ msgid "user '%s' read problem: %s\n" #~ msgstr "erro de leitura do usuАrio `%s': %s\n" #, fuzzy #~ msgid "user '%s' list problem: %s\n" #~ msgstr "erro de listagem do usuАrio `%s': %s\n" #, fuzzy #~ msgid "user '%s' not in trustdb\n" #~ msgstr "usuАrio `%s' nЦo estА no banco de dados de confiabilidade\n" #~ msgid "" #~ "# List of assigned trustvalues, created %s\n" #~ "# (Use \"gpgm --import-ownertrust\" to restore them)\n" #~ msgstr "" #~ "# Lista de valores de confianГa designados, criada em %s\n" #~ "# (Use \"gpgm --import-ownertrust\" para restaurА-los)\n" #~ msgid "directory record w/o primary key\n" #~ msgstr "registro de diretСrio sem chave primАria\n" #~ msgid "line too long\n" #~ msgstr "linha muito longa\n" #~ msgid "error: missing colon\n" #~ msgstr "erro: falta dois pontos\n" #~ msgid "error: invalid fingerprint\n" #~ msgstr "erro: impressЦo digital invАlida\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "erro: nenhum valor de confianГa\n" #~ msgid "key not in trustdb, searching ring.\n" #~ msgstr "" #~ "chave nЦo encontrada no banco de dados de confiabilidade, procurando no " #~ "chaveiro\n" #~ msgid "key not in ring: %s\n" #~ msgstr "chave nЦo encontrada no chaveiro: %s\n" #~ msgid "Oops: key is now in trustdb???\n" #~ msgstr "Oops: agora a chave estА no banco de dados de confiabilidade???\n" #~ msgid "insert trust record failed: %s\n" #~ msgstr "inserГЦo de registro de confianГa falhou: %s\n" -#, fuzzy -#~ msgid "error finding dir record: %s\n" -#~ msgstr "erro encontrando registro de diretСrio: %s\n" - #~ msgid "Hmmm, public key lost?" #~ msgstr "Hmmm, chave pЗblica perdida?" #~ msgid "did not use primary key for insert_trust_record()\n" #~ msgstr "vocЙ usou a chave primАria para insert_trust_record()\n" #~ msgid "invalid clear text header: " #~ msgstr "cabeГalho de texto puro invАlido: " #~ msgid "LID %lu: changing trust from %u to %u\n" #~ msgstr "LID %lu: mudando confianГa de %u para %u\n" #~ msgid "LID %lu: setting trust to %u\n" #~ msgstr "LID %lu: estabelecendo confianГa para %u\n" diff --git a/po/ru.po b/po/ru.po index 611b9a121..eae3e2277 100644 --- a/po/ru.po +++ b/po/ru.po @@ -1,3614 +1,3577 @@ # I finished the translation without looking at the contrib directory of # GPG site. Werner enlightened me about two previous translations and I # dared to look in them to correct my translation of questionable phrases. # So I'd like to thank: # Artem Belevich # Alexey Morozov # Michael Sobolev , 1998 # Alexey Vyskubov , 1998 # QingLong (couldn't send an email to let you know) msgid "" msgstr "" -"POT-Creation-Date: 1999-06-26 11:22+0200\n" +"POT-Creation-Date: 1999-07-06 17:34+0200\n" "Content-Type: text/plain; charset=\n" "Date: 1998-01-26 22:08:36+0100\n" "From: Gregory Steuck \n" "Xgettext-Options: --default-domain=gnupg --directory=.. --add-comments " "--keyword=_ --keyword=N_ --files-from=./POTFILES.in\n" "Files: util/secmem.c util/argparse.c cipher/random.c cipher/rand-dummy.c " "cipher/rand-unix.c cipher/rand-w32.c g10/g10.c g10/pkclist.c g10/keygen.c " "g10/decrypt.c g10/encode.c g10/import.c g10/keyedit.c g10/keylist.c " "g10/mainproc.c g10/passphrase.c g10/plaintext.c g10/pref.c g10/seckey-cert.c " "g10/sig-check.c g10/sign.c g10/trustdb.c g10/verify.c\n" -#: util/secmem.c:76 +#: util/secmem.c:79 msgid "Warning: using insecure memory!\n" msgstr "" "Внимание, возможна утечка секретных данных!\n" "Эту проблему можно решить, установив программу suid(root).\n" "Обратитесь для этого к администратору Вашей системы.\n" -#: util/secmem.c:249 +#: util/secmem.c:275 msgid "operation is not possible without initialized secure memory\n" msgstr "" -#: util/secmem.c:250 +#: util/secmem.c:276 msgid "(you may have used the wrong program for this task)\n" msgstr "" -#: util/miscutil.c:156 util/miscutil.c:173 +#: util/miscutil.c:254 util/miscutil.c:271 msgid "yes" msgstr "да(y)" -#: util/miscutil.c:157 util/miscutil.c:175 +#: util/miscutil.c:255 util/miscutil.c:273 msgid "yY" msgstr "yY" -#: g10/keyedit.c:559 util/miscutil.c:174 +#: g10/keyedit.c:561 util/miscutil.c:272 msgid "quit" msgstr "выход" -#: util/miscutil.c:176 +#: util/miscutil.c:274 msgid "qQ" msgstr "" #: util/errors.c:54 #, fuzzy msgid "general error" msgstr "Общая ошибка" #: util/errors.c:55 #, fuzzy msgid "unknown packet type" msgstr "Неизвестный тип пакета" #: util/errors.c:56 #, fuzzy msgid "unknown version" msgstr "Неизвестная версия" #: util/errors.c:57 #, fuzzy msgid "unknown pubkey algorithm" msgstr "Неизвестный алгоритм шифрования с открытым ключом" #: util/errors.c:58 #, fuzzy msgid "unknown digest algorithm" msgstr "Неизвестный алгоритм генерации дайджеста" #: util/errors.c:59 #, fuzzy msgid "bad public key" msgstr "Плохой открытый ключ" #: util/errors.c:60 #, fuzzy msgid "bad secret key" msgstr "Плохой секретный ключ" #: util/errors.c:61 #, fuzzy msgid "bad signature" msgstr "Плохая подпись" #: util/errors.c:62 #, fuzzy msgid "checksum error" msgstr "Несовпадение контрольной суммы" #: util/errors.c:63 #, fuzzy msgid "bad passphrase" msgstr "Неверная \"ключевая фраза\"" #: util/errors.c:64 #, fuzzy msgid "public key not found" msgstr "Открытый ключ не найден" #: util/errors.c:65 #, fuzzy msgid "unknown cipher algorithm" msgstr "Неизвестный алгоритм шифрования" #: util/errors.c:66 #, fuzzy msgid "can't open the keyring" msgstr "Невозможно открыть \"связку ключей\"" #: util/errors.c:67 #, fuzzy msgid "invalid packet" msgstr "Недопустимый пакет" #: util/errors.c:68 #, fuzzy msgid "invalid armor" msgstr "Недопустимая ASCII-кодировка" #: util/errors.c:69 #, fuzzy msgid "no such user id" msgstr "Неизвестный идентификатор пользователя" #: util/errors.c:70 #, fuzzy msgid "secret key not available" msgstr "Секретный ключ не существует" #: util/errors.c:71 #, fuzzy msgid "wrong secret key used" msgstr "Использован неправильный секретный ключ" #: util/errors.c:72 #, fuzzy msgid "not supported" msgstr "Не поддерживается" #: util/errors.c:73 #, fuzzy msgid "bad key" msgstr "Плохой ключ" #: util/errors.c:74 #, fuzzy msgid "file read error" msgstr "Ошибка чтения файла" #: util/errors.c:75 #, fuzzy msgid "file write error" msgstr "Ошибка записи файла" #: util/errors.c:76 #, fuzzy msgid "unknown compress algorithm" msgstr "Неизвестный алгоритм упаковки" #: util/errors.c:77 #, fuzzy msgid "file open error" msgstr "Ошибка открытия файла" #: util/errors.c:78 #, fuzzy msgid "file create error" msgstr "Ошибка создания файла" #: util/errors.c:79 #, fuzzy msgid "invalid passphrase" msgstr "Неверная \"ключевая фраза\"" #: util/errors.c:80 #, fuzzy msgid "unimplemented pubkey algorithm" msgstr "Нереализованный алгоритм шифрования с открытым ключом" #: util/errors.c:81 #, fuzzy msgid "unimplemented cipher algorithm" msgstr "Нереализованный алгоритм шифрования" #: util/errors.c:82 #, fuzzy msgid "unknown signature class" msgstr "Подпись неизвестного типа" #: util/errors.c:83 #, fuzzy msgid "trust database error" msgstr "Ошибка в Trust-DB (база данных доверия)" #: util/errors.c:84 msgid "bad MPI" msgstr "" #: util/errors.c:85 #, fuzzy msgid "resource limit" msgstr "Недостаточно ресурсов" #: util/errors.c:86 #, fuzzy msgid "invalid keyring" msgstr "Недопустимая \"связка ключей\"" #: util/errors.c:87 #, fuzzy msgid "bad certificate" msgstr "Плохой сертификат" #: util/errors.c:88 #, fuzzy msgid "malformed user id" msgstr "Недопустимая форма идентификатора пользователя" #: util/errors.c:89 #, fuzzy msgid "file close error" msgstr "Ошибка закрытия файла" #: util/errors.c:90 #, fuzzy msgid "file rename error" msgstr "Ошибка переименования файла" #: util/errors.c:91 #, fuzzy msgid "file delete error" msgstr "Ошибка удаления файла" #: util/errors.c:92 #, fuzzy msgid "unexpected data" msgstr "Неожиданные данные" #: util/errors.c:93 #, fuzzy msgid "timestamp conflict" msgstr "Конфликт временных отпечатков (timestamp)" #: util/errors.c:94 #, fuzzy msgid "unusable pubkey algorithm" msgstr "Непригодный для использования алгоритм открытого ключа" #: util/errors.c:95 #, fuzzy msgid "file exists" msgstr "Файл существует" #: util/errors.c:96 #, fuzzy msgid "weak key" msgstr "Слабый ключ" #: util/errors.c:97 #, fuzzy msgid "invalid argument" msgstr "Недопустимая ASCII-кодировка" #: util/errors.c:98 msgid "bad URI" msgstr "" #: util/errors.c:99 #, fuzzy msgid "unsupported URI" msgstr "Не поддерживается" #: util/errors.c:100 #, fuzzy msgid "network error" msgstr "Общая ошибка" #: util/errors.c:102 #, fuzzy msgid "not encrypted" msgstr "зашифровать данные" #: util/logger.c:218 #, fuzzy, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "Ой-йо ... ошибка в программе (%s:%d:%s)\n" #: util/logger.c:224 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "Вы нашли ошибку в программе ... (%s:%d)\n" -#: cipher/random.c:412 +#: cipher/random.c:452 #, fuzzy msgid "WARNING: using insecure random number generator!!\n" msgstr "Внимание: используется ненадежный генератор случайных чисел!\n" -#: cipher/random.c:413 +#: cipher/random.c:453 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 "" "Используемый генератор случайных чисел -- только заглушка,\n" "чтобы скомпилировать программу, никак не надежный ГСЧ!\n" "\n" "НЕ ПОЛЬЗУЙТЕСЬ ДАННЫМИ СОЗДАННЫМИ ЭТОЙ ПРОГРАММОЙ!\n" "\n" #: cipher/rndlinux.c:135 #, 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" "Недостаточно случайных данных. Пожалуйста, поделайте что-нибудь, чтобы\n" "ОС могла набрать дополнительные случайные числа! (нужно еще %d байт)\n" -#: g10/g10.c:174 +#: g10/g10.c:176 msgid "" "@Commands:\n" " " msgstr "" "@Команды:\n" " " -#: g10/g10.c:176 +#: g10/g10.c:178 #, fuzzy msgid "|[file]|make a signature" msgstr "|[файл]|создать подпись" -#: g10/g10.c:177 +#: g10/g10.c:179 #, fuzzy msgid "|[file]|make a clear text signature" msgstr "|[файл]|создать текстовую подпись" -#: g10/g10.c:178 +#: g10/g10.c:180 msgid "make a detached signature" msgstr "создать отдельную подпись" -#: g10/g10.c:179 +#: g10/g10.c:181 msgid "encrypt data" msgstr "зашифровать данные" -#: g10/g10.c:180 +#: g10/g10.c:182 msgid "encryption only with symmetric cipher" msgstr "зашифровать симметричным алгоритмом" -#: g10/g10.c:181 +#: g10/g10.c:183 msgid "store only" msgstr "только сохранить" -#: g10/g10.c:182 +#: g10/g10.c:184 msgid "decrypt data (default)" msgstr "расшифровать данные (по умолчанию)" -#: g10/g10.c:183 +#: g10/g10.c:185 msgid "verify a signature" msgstr "проверить подпись" -#: g10/g10.c:184 +#: g10/g10.c:186 msgid "list keys" msgstr "список ключей" -#: g10/g10.c:186 +#: g10/g10.c:188 msgid "list keys and signatures" msgstr "список ключей и подписей" -#: g10/g10.c:187 +#: g10/g10.c:189 msgid "check key signatures" msgstr "проверить подпись на ключе" -#: g10/g10.c:188 +#: g10/g10.c:190 msgid "list keys and fingerprints" msgstr "список ключей с их \"отпечатками пальцев\"" -#: g10/g10.c:189 +#: g10/g10.c:191 msgid "list secret keys" msgstr "список секретных ключей" -#: g10/g10.c:190 +#: g10/g10.c:192 msgid "generate a new key pair" msgstr "сгенерировать новую пару ключей (открытый и секретный)" -#: g10/g10.c:191 +#: g10/g10.c:193 msgid "remove key from the public keyring" msgstr "удалить ключ со связки" -#: g10/g10.c:192 +#: g10/g10.c:194 msgid "sign or edit a key" msgstr "подписать или редактировать ключ" -#: g10/g10.c:193 +#: g10/g10.c:195 msgid "generate a revocation certificate" msgstr "сгенерировать отзывающий сертификат" -#: g10/g10.c:194 +#: g10/g10.c:196 msgid "export keys" msgstr "экспортировать ключи" -#: g10/g10.c:195 +#: g10/g10.c:197 msgid "export keys to a key server" msgstr "" -#: g10/g10.c:196 +#: g10/g10.c:198 msgid "import keys from a key server" msgstr "" -#: g10/g10.c:199 +#: g10/g10.c:201 msgid "import/merge keys" msgstr "импортировать/добавить ключи" -#: g10/g10.c:201 +#: g10/g10.c:203 msgid "list only the sequence of packets" msgstr "напечатать только последовательность пакетов" -#: g10/g10.c:203 +#: g10/g10.c:205 #, fuzzy msgid "export the ownertrust values" msgstr "экспортировать параметры доверия\n" -#: g10/g10.c:205 +#: g10/g10.c:207 #, fuzzy msgid "import ownertrust values" msgstr "импортировать параметры доверия\n" -#: g10/g10.c:207 +#: g10/g10.c:209 #, fuzzy msgid "|[NAMES]|update the trust database" msgstr "|[ИМЕНА]|проверить базу данных доверия" -#: g10/g10.c:209 +#: g10/g10.c:211 msgid "|[NAMES]|check the trust database" msgstr "|[ИМЕНА]|проверить базу данных доверия" -#: g10/g10.c:210 +#: g10/g10.c:212 msgid "fix a corrupted trust database" msgstr "исправить разрушенную базу данных доверия" -#: g10/g10.c:211 +#: g10/g10.c:213 msgid "De-Armor a file or stdin" msgstr "Декодировать stdin или файл из ASCII-представления" -#: g10/g10.c:212 +#: g10/g10.c:214 msgid "En-Armor a file or stdin" msgstr "Закодировать stdin или файл в ASCII-представление" -#: g10/g10.c:213 +#: g10/g10.c:215 msgid "|algo [files]|print message digests" msgstr "|algo [files]|напечатать дайджест сообщения" -#: g10/g10.c:214 +#: g10/g10.c:216 msgid "print all message digests" msgstr "напечатать все дайджесты сообщения" -#: g10/g10.c:220 +#: g10/g10.c:222 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Параметры:\n" " " -#: g10/g10.c:222 +#: g10/g10.c:224 msgid "create ascii armored output" msgstr "вывод в ASCII-представлении" -#: g10/g10.c:223 +#: g10/g10.c:225 #, fuzzy msgid "|NAME|encrypt for NAME" msgstr "|ИМЯ|использовать шифровальный алгоритмом ИМЯ" -#: g10/g10.c:227 +#: g10/g10.c:229 msgid "use this user-id to sign or decrypt" msgstr "" "использовать указанный идентификатор пользователя для подписи или расшифровки" -#: g10/g10.c:228 +#: g10/g10.c:230 msgid "|N|set compress level N (0 disables)" msgstr "|N|установить уровень сжатия (0 - не сжимать)" -#: g10/g10.c:230 +#: g10/g10.c:232 msgid "use canonical text mode" msgstr "использовать канонический текстовый режим" -#: g10/g10.c:231 +#: g10/g10.c:233 msgid "use as output file" msgstr "использовать в качестве выходного файла" -#: g10/g10.c:232 +#: g10/g10.c:234 msgid "verbose" msgstr "многословный" -#: g10/g10.c:233 +#: g10/g10.c:235 msgid "be somewhat more quiet" msgstr "" -#: g10/g10.c:234 +#: g10/g10.c:236 msgid "don't use the terminal at all" msgstr "" -#: g10/g10.c:235 +#: g10/g10.c:237 #, fuzzy msgid "force v3 signatures" msgstr "проверить подпись на ключе" -#: g10/g10.c:236 +#: g10/g10.c:238 #, fuzzy msgid "always use a MDC for encryption" msgstr "использовать указанный идентификатор пользователя для шифрования" -#: g10/g10.c:237 +#: g10/g10.c:239 msgid "do not make any changes" msgstr "Keine wirklichen дnderungen durchfЭhren" #. { oInteractive, "interactive", 0, N_("prompt before overwriting") }, -#: g10/g10.c:239 +#: g10/g10.c:241 msgid "batch mode: never ask" msgstr "пакетный режим: ничего не спрашивать" -#: g10/g10.c:240 +#: g10/g10.c:242 msgid "assume yes on most questions" msgstr "отвечать \"да\" на большинство вопросов" -#: g10/g10.c:241 +#: g10/g10.c:243 msgid "assume no on most questions" msgstr "отвечать \"нет\" на большинство вопросов" -#: g10/g10.c:242 +#: g10/g10.c:244 msgid "add this keyring to the list of keyrings" msgstr "добавить эту связку к списку связок ключей" -#: g10/g10.c:243 +#: g10/g10.c:245 msgid "add this secret keyring to the list" msgstr "добавить эту секретную связку к списку связок ключей" -#: g10/g10.c:244 +#: g10/g10.c:246 msgid "|NAME|use NAME as default secret key" msgstr "|ИМЯ|использовать ИМЯ в качестве секретного ключа по умолчанию" -#: g10/g10.c:245 +#: g10/g10.c:247 msgid "|HOST|use this keyserver to lookup keys" msgstr "" -#: g10/g10.c:246 +#: g10/g10.c:248 #, fuzzy msgid "|NAME|set terminal charset to NAME" msgstr "|ИМЯ|использовать шифровальный алгоритмом ИМЯ" -#: g10/g10.c:247 +#: g10/g10.c:249 msgid "read options from file" msgstr "читать параметры из файла" -#: g10/g10.c:249 +#: g10/g10.c:251 msgid "set debugging flags" msgstr "установить отладочные флаги" -#: g10/g10.c:250 +#: g10/g10.c:252 msgid "enable full debugging" msgstr "разрешить всю отладку" -#: g10/g10.c:251 +#: g10/g10.c:253 msgid "|FD|write status info to this FD" msgstr "|FD| записывать информацию о состоянии в дескриптор (FD)" -#: g10/g10.c:252 +#: g10/g10.c:254 msgid "do not write comment packets" msgstr "не писать пакеты с комментариями" -#: g10/g10.c:253 +#: g10/g10.c:255 msgid "(default is 1)" msgstr "(по умолчанию 1)" -#: g10/g10.c:254 +#: g10/g10.c:256 msgid "(default is 3)" msgstr "(по умолчанию 3)" -#: g10/g10.c:256 +#: g10/g10.c:258 #, fuzzy msgid "|FILE|load extension module FILE" msgstr "|ФАЙЛ|загрузить ФАЙЛ с расширяющими модулями" -#: g10/g10.c:257 +#: g10/g10.c:259 msgid "emulate the mode described in RFC1991" msgstr "эмулировать режим описанный в RFC1991" -#: g10/g10.c:258 +#: g10/g10.c:260 msgid "set all packet, cipher and digest options to OpenPGP behavior" msgstr "" -#: g10/g10.c:259 +#: g10/g10.c:261 #, fuzzy msgid "|N|use passphrase mode N" msgstr "|N|использовать ключевую фразу режима N\n" -#: g10/g10.c:261 +#: g10/g10.c:263 #, fuzzy msgid "|NAME|use message digest algorithm NAME for passphrases" msgstr "|ИМЯ|использовать хэш-алгоритм ИМЯ для ключевых фраз" -#: g10/g10.c:263 +#: g10/g10.c:265 #, fuzzy msgid "|NAME|use cipher algorithm NAME for passphrases" msgstr "|ИМЯ|использовать шифровальный алгоритмом ИМЯ для ключевых фраз" -#: g10/g10.c:264 +#: g10/g10.c:266 msgid "|NAME|use cipher algorithm NAME" msgstr "|ИМЯ|использовать шифровальный алгоритмом ИМЯ" -#: g10/g10.c:265 +#: g10/g10.c:267 msgid "|NAME|use message digest algorithm NAME" msgstr "|ИМЯ|использовать хэш-алгоритм ИМЯ" -#: g10/g10.c:266 +#: g10/g10.c:268 msgid "|N|use compress algorithm N" msgstr "|N|использовать алгоритм сжатия N" -#: g10/g10.c:267 +#: g10/g10.c:269 msgid "throw keyid field of encrypted packets" msgstr "выбрасывать поле keyid у зашифрованных пакетов" -#: g10/g10.c:268 +#: g10/g10.c:270 msgid "|NAME=VALUE|use this notation data" msgstr "" -#: g10/g10.c:270 +#: g10/g10.c:272 #, fuzzy 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" "Примеры:\n" "\n" " -se -r Bob [file] подписать и зашифровать для пользователя Bob\n" " --clearsign [file] сделать текстовую подпись\n" " --detach-sign [file] сделать отдельную подпись\n" " --list-keys [names] показать список ключей\n" " --fingerprint [names] показать \"отпечатки пальцев\" ключей\n" -#: g10/g10.c:347 +#: g10/g10.c:351 msgid "Please report bugs to .\n" msgstr "" "Пожалуйста, отправляйте сообщения об ошибках по адресу " ".\n" -#: g10/g10.c:351 +#: g10/g10.c:355 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Использование: gpg [параметры] [файлы] (-h для помощи)" -#: g10/g10.c:354 +#: g10/g10.c:358 msgid "" "Syntax: gpg [options] [files]\n" "sign, check, encrypt or decrypt\n" "default operation depends on the input data\n" msgstr "" "Синтаксис: gpg [параметры] [файлы]\n" "подписывает, проверяет подписи, шифрует или расшифровывает\n" "режим работы зависит от входных данных\n" -#: g10/g10.c:359 +#: g10/g10.c:363 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Поддерживаемые алгоритмы:\n" -#: g10/g10.c:433 +#: g10/g10.c:437 msgid "usage: gpg [options] " msgstr "Использование: gpg [параметры] " -#: g10/g10.c:473 +#: g10/g10.c:477 msgid "conflicting commands\n" msgstr "WidersprЭchliche Kommandos\n" -#: g10/g10.c:605 +#: g10/g10.c:609 #, fuzzy, c-format msgid "NOTE: no default option file `%s'\n" msgstr "замечание: файл параметров по умолчанию `%s' отсутствует\n" -#: g10/g10.c:609 +#: g10/g10.c:613 #, c-format msgid "option file `%s': %s\n" msgstr "файл параметров `%s': %s\n" -#: g10/g10.c:616 +#: g10/g10.c:620 #, c-format msgid "reading options from `%s'\n" msgstr "читаются параметры из `%s'\n" -#: g10/g10.c:782 +#: g10/g10.c:786 #, fuzzy, c-format msgid "%s is not a valid character set\n" msgstr "Недопустимый символ в комментарии.\n" -#: g10/g10.c:827 g10/g10.c:839 +#: g10/g10.c:833 g10/g10.c:845 msgid "selected cipher algorithm is invalid\n" msgstr "выбран недопустимый алгоритм шифрования\n" -#: g10/g10.c:833 g10/g10.c:845 +#: g10/g10.c:839 g10/g10.c:851 msgid "selected digest algorithm is invalid\n" msgstr "выбран недопустимый дайджест-алгоритм\n" -#: g10/g10.c:849 +#: g10/g10.c:855 msgid "the given policy URL is invalid\n" msgstr "" -#: g10/g10.c:852 +#: g10/g10.c:858 #, c-format msgid "compress algorithm must be in range %d..%d\n" msgstr "алгоритм упаковки может иметь значения от %d до %d\n" -#: g10/g10.c:854 +#: g10/g10.c:860 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed должен быть больше 0\n" -#: g10/g10.c:856 +#: g10/g10.c:862 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed должен быть больше 1\n" -#: g10/g10.c:858 +#: g10/g10.c:864 msgid "max-cert-depth must be in range 1 to 255\n" msgstr "" -#: g10/g10.c:861 +#: g10/g10.c:867 #, fuzzy msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "замечание: простой S2K режим (0) очень не рекомендуется\n" -#: g10/g10.c:865 +#: g10/g10.c:871 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "недопустимый режим S2K: должен быть 0, 1 или 3\n" -#: g10/g10.c:942 +#: g10/g10.c:948 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "Ошибка инициализации базы данных доверия: %s\n" -#: g10/g10.c:948 +#: g10/g10.c:954 msgid "--store [filename]" msgstr "--store [имя файла]" -#: g10/g10.c:955 +#: g10/g10.c:961 msgid "--symmetric [filename]" msgstr "--symmetric [имя файла]" -#: g10/g10.c:963 +#: g10/g10.c:969 msgid "--encrypt [filename]" msgstr "--encrypt [имя файла]" -#: g10/g10.c:976 +#: g10/g10.c:982 msgid "--sign [filename]" msgstr "--sign [имя файла]" -#: g10/g10.c:989 +#: g10/g10.c:995 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [имя файла]" -#: g10/g10.c:1003 +#: g10/g10.c:1009 msgid "--clearsign [filename]" msgstr "--clearsign [имя файла]" -#: g10/g10.c:1015 +#: g10/g10.c:1021 msgid "--decrypt [filename]" msgstr "--decrypt [имя файла]" -#: g10/g10.c:1024 +#: g10/g10.c:1030 #, fuzzy msgid "--edit-key username [commands]" msgstr "--edit-key имя-пользователя" -#: g10/g10.c:1038 +#: g10/g10.c:1044 msgid "--delete-secret-key username" msgstr "--delete-secret-key имя-пользователя" -#: g10/g10.c:1041 +#: g10/g10.c:1047 msgid "--delete-key username" msgstr "--delete-key имя-пользователя" -#: g10/encode.c:231 g10/g10.c:1064 g10/sign.c:366 +#: g10/encode.c:231 g10/g10.c:1071 g10/sign.c:366 #, c-format msgid "can't open %s: %s\n" msgstr "невозможно открыть файл `%s': %s\n" -#: g10/g10.c:1075 +#: g10/g10.c:1082 msgid "-k[v][v][v][c] [userid] [keyring]" msgstr "-k[v][v][v][c] [идентификатор пользователя] [связка ключей]" -#: g10/g10.c:1134 +#: g10/g10.c:1141 #, c-format msgid "dearmoring failed: %s\n" msgstr "ошибка декодирования: %s\n" -#: g10/g10.c:1142 +#: g10/g10.c:1149 #, c-format msgid "enarmoring failed: %s\n" msgstr "ошибка кодирования: %s\n" -#: g10/g10.c:1208 +#: g10/g10.c:1215 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "недопустимый хэш-алгоритм `%s'\n" -#: g10/g10.c:1283 +#: g10/g10.c:1290 msgid "[filename]" msgstr "[имя файла]" -#: g10/g10.c:1287 +#: g10/g10.c:1294 msgid "Go ahead and type your message ...\n" msgstr "" -#: g10/decrypt.c:59 g10/g10.c:1290 g10/verify.c:66 +#: g10/decrypt.c:59 g10/g10.c:1297 g10/verify.c:66 #, c-format msgid "can't open `%s'\n" msgstr "невозможно открыть файл `%s'\n" -#: g10/g10.c:1457 +#: g10/g10.c:1466 msgid "" "the first character of a notation name must be a letter or an underscore\n" msgstr "" -#: g10/g10.c:1463 +#: g10/g10.c:1472 msgid "" "a notation name must have only letters, digits, dots or underscores and end " "with an '='\n" msgstr "" -#: g10/g10.c:1469 +#: g10/g10.c:1478 msgid "dots in a notation name must be surrounded by other characters\n" msgstr "" -#: g10/g10.c:1477 +#: g10/g10.c:1486 msgid "a notation value must not use any control characters\n" msgstr "" #: g10/armor.c:296 #, fuzzy, c-format msgid "armor: %s\n" msgstr "Кодировка: %s\n" #: g10/armor.c:319 msgid "invalid armor header: " msgstr "" #: g10/armor.c:326 msgid "armor header: " msgstr "" #: g10/armor.c:337 #, fuzzy msgid "invalid clearsig header\n" msgstr "недопустимое начало текстовой подписи\n" #: g10/armor.c:389 #, fuzzy msgid "nested clear text signatures\n" msgstr "|[файл]|создать текстовую подпись" #: g10/armor.c:500 msgid "invalid dash escaped line: " msgstr "недопустимая строка начинающаяся с минусов: " #: g10/armor.c:512 #, fuzzy msgid "unexpected armor:" msgstr "Неожиданные данные" #: g10/armor.c:629 #, fuzzy, c-format msgid "invalid radix64 character %02x skipped\n" msgstr "недопустимый для кодировки radix64 символ %02x пропущен\n" #: g10/armor.c:672 msgid "premature eof (no CRC)\n" msgstr "неожиданный конец файла (нет CRC)\n" #: g10/armor.c:706 msgid "premature eof (in CRC)\n" msgstr "неожиданный конец файла (в CRC)\n" #: g10/armor.c:710 msgid "malformed CRC\n" msgstr "неправильная форма CRC\n" #: g10/armor.c:714 #, c-format msgid "CRC error; %06lx - %06lx\n" msgstr "ошибка CRC; %06lx - %06lx\n" #: g10/armor.c:731 msgid "premature eof (in Trailer)\n" msgstr "неожиданный конец файла (в хвосте)\n" #: g10/armor.c:735 msgid "error in trailer line\n" msgstr "ошибка в завершающей строке\n" #: g10/armor.c:1001 #, fuzzy msgid "no valid OpenPGP data found.\n" msgstr "не найдено допустимых RFC1991 или OpenPGP данных.\n" #: g10/armor.c:1005 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "" #: g10/armor.c:1009 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" #: g10/pkclist.c:137 #, fuzzy, c-format msgid "" "No trust value assigned to %lu:\n" "%4u%c/%08lX %s \"" msgstr "" "Не определены параметры доверия для %lu:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:147 #, fuzzy 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" " 1 = Don't know\n" " 2 = I do NOT trust\n" " 3 = I trust marginally\n" " 4 = I trust fully\n" " s = please show me more information\n" msgstr "" "\"\n" "\n" "Пожалуйста решите, насколько вы доверяете этому пользователю проверять\n" "чужие ключи (глядя в паспорта, проверяя \"отпечатки пальцев\" по другим\n" "источникам)?\n" "\n" " 1 = Не знаю\n" " 2 = Нет, не доверяю\n" " 3 = Верю отчасти\n" " 4 = Верю полностью\n" " s = Пожалуйста, покажите дополнительную информацию\n" #: g10/pkclist.c:156 msgid " m = back to the main menu\n" msgstr " m = обратно в главное меню\n" #: g10/pkclist.c:158 msgid " q = quit\n" msgstr "" # valid user replies (not including 1..4) #. a string with valid answers #: g10/pkclist.c:163 #, fuzzy msgid "sSmMqQ" msgstr "sSmMqQ" #: g10/pkclist.c:167 msgid "Your decision? " msgstr "Ваше решение? " #: g10/pkclist.c:187 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "" -#: g10/pkclist.c:254 +#: g10/pkclist.c:256 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 "" "Не получилось найти цепочку доверия для ключа. Посмотрим, можно ли " "присвоить\n" "некоторые недостающие значения \"доверия владельцу\"\n" "\n" -#: g10/pkclist.c:260 +#: g10/pkclist.c:262 msgid "" "No path leading to one of our keys found.\n" "\n" msgstr "" -#: g10/pkclist.c:262 +#: g10/pkclist.c:264 msgid "" "No certificates with undefined trust found.\n" "\n" msgstr "" -#: g10/pkclist.c:264 +#: g10/pkclist.c:266 #, fuzzy msgid "" "No trust values changed.\n" "\n" msgstr "Значения параметров доверия не изменены.\n" -#: g10/pkclist.c:281 +#: g10/pkclist.c:283 #, fuzzy, c-format msgid "key %08lX: key has been revoked!\n" msgstr "build_sigrecs: ключ ist widerrufen\n" -#: g10/pkclist.c:287 g10/pkclist.c:297 g10/pkclist.c:403 +#: g10/pkclist.c:289 g10/pkclist.c:299 g10/pkclist.c:405 msgid "Use this key anyway? " msgstr "Все равно использовать этот ключ?" -#: g10/pkclist.c:291 +#: g10/pkclist.c:293 #, fuzzy, c-format msgid "key %08lX: subkey has been revoked!\n" msgstr "build_sigrecs: ключ ist widerrufen\n" -#: g10/pkclist.c:321 +#: g10/pkclist.c:323 #, fuzzy, c-format msgid "%08lX: key has expired\n" msgstr "Замечание: Срок действия ключа уже истек!\n" -#: g10/pkclist.c:327 +#: g10/pkclist.c:329 #, c-format msgid "%08lX: no info to calculate a trust probability\n" msgstr "" -#: g10/pkclist.c:341 +#: g10/pkclist.c:343 #, fuzzy, c-format msgid "%08lX: We do NOT trust this key\n" msgstr "ВНИМАНИЕ: Мы НЕ доверяем этому ключу!\n" -#: g10/pkclist.c:347 +#: g10/pkclist.c:349 #, c-format msgid "" "%08lX: It is not sure that this key really belongs to the owner\n" "but it is accepted anyway\n" msgstr "" -#: g10/pkclist.c:353 +#: g10/pkclist.c:355 msgid "This key probably belongs to the owner\n" msgstr "" -#: g10/pkclist.c:358 +#: g10/pkclist.c:360 msgid "This key belongs to us\n" msgstr "" -#: g10/pkclist.c:398 +#: g10/pkclist.c:400 msgid "" "It is NOT certain that the key belongs to its owner.\n" "If you *really* know what you are doing, you may answer\n" "the next question with yes\n" "\n" msgstr "" "Невозможно установить достоверно, что ключ принадлежит тому,\n" "кто указан его владельцем. Отвечайте \"да\" на следующий вопрос,\n" "только если вы *действительно* понимаете что делаете.\n" -#: g10/pkclist.c:411 g10/pkclist.c:433 +#: g10/pkclist.c:413 g10/pkclist.c:435 msgid "WARNING: Using untrusted key!\n" msgstr "ВНИМАНИЕ: Используется ключ к которому нет доверия!\n" -#: g10/pkclist.c:454 +#: g10/pkclist.c:456 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ВНИМАНИЕ: Владелец ключа уже отозвал его!\n" -#: g10/pkclist.c:455 +#: g10/pkclist.c:457 msgid " This could mean that the signature is forgery.\n" msgstr " Это может означать, что подпись поддельная.\n" -#: g10/pkclist.c:459 +#: g10/pkclist.c:461 #, fuzzy msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "ВНИМАНИЕ: Владелец ключа уже отозвал его!\n" -#: g10/pkclist.c:480 +#: g10/pkclist.c:482 msgid "Note: This key has expired!\n" msgstr "Замечание: Срок действия ключа уже истек!\n" -#: g10/pkclist.c:487 +#: g10/pkclist.c:489 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "ВНИМАНИЕ: Этот ключ не заверен доверенной подписью!\n" -#: g10/pkclist.c:489 +#: g10/pkclist.c:491 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Нет никаких указания на то, что ключ принадлежит его владельцу.\n" -#: g10/pkclist.c:505 +#: g10/pkclist.c:507 msgid "WARNING: We do NOT trust this key!\n" msgstr "ВНИМАНИЕ: Мы НЕ доверяем этому ключу!\n" -#: g10/pkclist.c:506 +#: g10/pkclist.c:508 msgid " The signature is probably a FORGERY.\n" msgstr " Подпись вероятно -- ПОДДЕЛКА.\n" -#: g10/pkclist.c:513 +#: g10/pkclist.c:515 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "ВНИМАНИЕ: Этот ключ не заверен достаточно доверенными подписями!\n" -#: g10/pkclist.c:516 +#: g10/pkclist.c:518 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Нет уверенности, что подпись принадлежит владельцу.\n" -#: g10/pkclist.c:580 g10/pkclist.c:602 g10/pkclist.c:665 g10/pkclist.c:705 +#: g10/pkclist.c:582 g10/pkclist.c:604 g10/pkclist.c:670 g10/pkclist.c:715 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: пропущен: %s\n" -#: g10/pkclist.c:588 g10/pkclist.c:687 +#: g10/pkclist.c:590 g10/pkclist.c:697 #, c-format msgid "%s: skipped: public key already present\n" msgstr "" -#: g10/pkclist.c:611 +#: g10/pkclist.c:613 msgid "" "You did not specify a user ID. (you may use \"-r\")\n" "\n" msgstr "" "Вы не указали идентификатор пользователя (воспользуйтесь параметром " "\"-r\").\n" "\n" -#: g10/pkclist.c:616 +#: g10/pkclist.c:618 msgid "Enter the user ID: " msgstr "Введите идентификатор пользователя: " -#: g10/pkclist.c:627 +#: g10/pkclist.c:629 msgid "No such user ID.\n" msgstr "Нет такого идентификатора пользователя.\n" -#: g10/pkclist.c:673 +#: g10/pkclist.c:639 +#, fuzzy +msgid "Public key is disabled.\n" +msgstr "Открытый ключ не найден" + +#: g10/pkclist.c:678 #, c-format msgid "%s: error checking key: %s\n" msgstr "%s: ошибка при проверке ключа: %s\n" -#: g10/pkclist.c:711 +#: g10/pkclist.c:683 +#, c-format +msgid "%s: skipped: public key is disabled\n" +msgstr "" + +#: g10/pkclist.c:721 msgid "no valid addressees\n" msgstr "нет допустимых адресов\n" #: g10/keygen.c:122 msgid "writing self signature\n" msgstr "пишется само-подпись\n" #: g10/keygen.c:160 msgid "writing key binding signature\n" msgstr "пишется \"key-binding\" подпись\n" #: g10/keygen.c:386 msgid "Please select what kind of key you want:\n" msgstr "Выберите желаемый тип ключа:\n" #: g10/keygen.c:388 #, c-format msgid " (%d) DSA and ElGamal (default)\n" msgstr " (%d) DSA и ElGamal (по умолчанию)\n" #: g10/keygen.c:389 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (только подпись)\n" #: g10/keygen.c:391 #, c-format msgid " (%d) ElGamal (encrypt only)\n" msgstr " (%d) ElGamal (только шифрование)\n" #: g10/keygen.c:392 #, c-format msgid " (%d) ElGamal (sign and encrypt)\n" msgstr " (%d) ElGamal (подпись и шифрование)\n" #: g10/keygen.c:394 #, c-format msgid " (%d) ElGamal in a v3 packet\n" msgstr " (%d) ElGamal в v3-пакете\n" #: g10/keygen.c:399 msgid "Your selection? " msgstr "Ваш выбор? " #: g10/keygen.c:409 #, fuzzy msgid "Do you really want to create a sign and encrypt key? " msgstr "Вы действительно хотите удалить выбранные ключи? " #: g10/keygen.c:430 msgid "Invalid selection.\n" msgstr "Недопустимый выбор.\n" #: g10/keygen.c:442 #, 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 "" "Собираемся сгенерировать %s ключевую пару.\n" " минимальная длина ключа: 768 бит\n" " длина ключа по умолчанию: 1024 бита\n" " максимальная рекомендуемая длина ключа: 2048 бит\n" #: g10/keygen.c:449 msgid "What keysize do you want? (1024) " msgstr "Какого размера ключ вы желаете? (1024)" #: g10/keygen.c:454 msgid "DSA only allows keysizes from 512 to 1024\n" msgstr "Допустимый размер DSA ключей - от 512 до 1024 бит\n" #: g10/keygen.c:456 msgid "keysize too small; 768 is smallest value allowed.\n" msgstr "слишком маленькая длина ключа, наименьшее значение - 768.\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:466 #, fuzzy, c-format msgid "keysize too large; %d is largest value allowed.\n" msgstr "слишком маленькая длина ключа, наименьшее значение - 768.\n" #: g10/keygen.c:471 #, fuzzy msgid "" "Keysizes larger than 2048 are not suggested because\n" "computations take REALLY long!\n" msgstr "" "Ключи длиной больше 2048 не рекомендуются, потому что вычислениязанимают " "ОЧЕНЬ много времени!\n" #: g10/keygen.c:474 msgid "Are you sure that you want this keysize? " msgstr "Вы действительно хотите ключ такой длины? " #: g10/keygen.c:475 msgid "" "Okay, but keep in mind that your monitor and keyboard radiation is also very " "vulnerable to attacks!\n" msgstr "" "Ок, только не забывайте, что излучение ваших клавиатуры и монитора тоже\n" "делают вас уязвимым для атак.\n" #: g10/keygen.c:483 msgid "Do you really need such a large keysize? " msgstr "Вам действительно нужен такой длинный ключ? " #: g10/keygen.c:489 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Запрошенный ключ имеет длину %u бит\n" #: g10/keygen.c:492 g10/keygen.c:496 #, c-format msgid "rounded up to %u bits\n" msgstr "округлено до %u бит\n" #: g10/keygen.c:509 msgid "" "Please specify how long the key should be valid.\n" " 0 = key does not expire\n" " = key expires in n days\n" " w = key expires in n weeks\n" " m = key expires in n months\n" " y = key expires in n years\n" msgstr "" "Пожалуйста, укажите продолжительность действия вашего ключа.\n" " 0 = бессрочный ключ\n" " = срок действия ключа n дней\n" " w = срок действия ключа n недель\n" " m = срок действия ключа n месяцев\n" " y = срок действия ключа n лет\n" -#: g10/keygen.c:524 +#: g10/keygen.c:526 msgid "Key is valid for? (0) " msgstr "Ключ действителен в течение? (0) " -#: g10/keygen.c:535 +#: g10/keygen.c:547 msgid "invalid value\n" msgstr "недопустимое значение.\n" -#: g10/keygen.c:540 +#: g10/keygen.c:552 msgid "Key does not expire at all\n" msgstr "Бессрочный ключ.\n" #. print the date when the key expires -#: g10/keygen.c:546 +#: g10/keygen.c:558 #, c-format msgid "Key expires at %s\n" msgstr "Ключ действует до %s\n" -#: g10/keygen.c:552 +#: g10/keygen.c:564 msgid "Is this correct (y/n)? " msgstr "Это верно? (y/n) " -#: g10/keygen.c:595 +#: g10/keygen.c:607 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) \"\n" "\n" msgstr "" "\n" "Для идентификации ключа необходим идентификатор пользователя; программа\n" "конструирует его из полного имени пользователя, комментария и адреса emailв " "виде:\n" " \"Vasya Pupkin (KRUTOI) \"\n" "\n" -#: g10/keygen.c:606 +#: g10/keygen.c:618 msgid "Real name: " msgstr "Ваше имя (\"Имя Фамилия\"): " -#: g10/keygen.c:610 +#: g10/keygen.c:622 msgid "Invalid character in name\n" msgstr "Недопустимый символ в имени\n" -#: g10/keygen.c:612 +#: g10/keygen.c:624 msgid "Name may not start with a digit\n" msgstr "Полное имя не может начинаться с цифры.\n" -#: g10/keygen.c:614 +#: g10/keygen.c:626 msgid "Name must be at least 5 characters long\n" msgstr "Полное имя должно состоять не менее чем из 5ти символов.\n" -#: g10/keygen.c:622 +#: g10/keygen.c:634 msgid "Email address: " msgstr "E-Mail: " -#: g10/keygen.c:633 +#: g10/keygen.c:645 msgid "Not a valid email address\n" msgstr "Недопустимый E-Mail\n" -#: g10/keygen.c:641 +#: g10/keygen.c:653 msgid "Comment: " msgstr "Комментарий: " -#: g10/keygen.c:647 +#: g10/keygen.c:659 msgid "Invalid character in comment\n" msgstr "Недопустимый символ в комментарии.\n" -#: g10/keygen.c:669 +#: g10/keygen.c:681 #, c-format msgid "You are using the `%s' character set.\n" msgstr "" -#: g10/keygen.c:675 +#: g10/keygen.c:687 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Вы выбрали идентификатор пользователя:\n" " \"%s\"\n" "\n" -#: g10/keygen.c:678 +#: g10/keygen.c:690 msgid "NnCcEeOoQq" msgstr "" -#: g10/keygen.c:688 +#: g10/keygen.c:700 #, fuzzy msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Изменить: N=Имя, C=Комментарий, E=E-Mail, O=Okay/Q=Выход? " -#: g10/keygen.c:740 +#: g10/keygen.c:752 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Для защиты вашего ключа нужна ключевая фраза.\n" "\n" -#: g10/keyedit.c:455 g10/keygen.c:748 +#: g10/keyedit.c:456 g10/keygen.c:760 msgid "passphrase not correctly repeated; try again.\n" msgstr "ключевая фраза не была воспроизведена, попробуйте снова.\n" -#: g10/keygen.c:754 +#: g10/keygen.c:766 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 "" "Вы не хотите использовать ключевую фразу - это, скорее всего, *плохая*\n" "идея. Но я сделаю, что Вы хотите. Ключевую фразу можно сменить в любое\n" "время, запустив эту программу с параметром \"--edit-key\".\n" "\n" -#: g10/keygen.c:775 +#: g10/keygen.c:787 #, fuzzy 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 "" "Нам нужно сгенерировать много случайных байтов. Сейчас очень хорошо было бы\n" "что-то поделать на машине (поработать в другом окне, подвигать мышь,\n" "нагрузить сетевую или дисковую подсистему). Это даст генератору случайных\n" "чисел возможность набрать достаточно энтропии.\n" -#: g10/keygen.c:845 +#: g10/keygen.c:857 msgid "Key generation can only be used in interactive mode\n" msgstr "Генерация ключа может быть выполнена только в интерактивном режиме.\n" -#: g10/keygen.c:853 +#: g10/keygen.c:865 msgid "DSA keypair will have 1024 bits.\n" msgstr "Ключевая пара DSA будет иметь длину 1024 бита.\n" -#: g10/keygen.c:859 +#: g10/keygen.c:871 #, fuzzy msgid "Key generation canceled.\n" msgstr "Генерация ключа отменена: %s\n" -#: g10/keygen.c:869 +#: g10/keygen.c:881 #, c-format msgid "writing public certificate to `%s'\n" msgstr "открытый сертификат записывается в `%s'\n" -#: g10/keygen.c:870 +#: g10/keygen.c:882 #, c-format msgid "writing secret certificate to `%s'\n" msgstr "секретный сертификат записывается в `%s'\n" -#: g10/keygen.c:947 +#: g10/keygen.c:959 msgid "public and secret key created and signed.\n" msgstr "открытый и секретный ключи созданы и подписаны.\n" -#: g10/keygen.c:949 +#: g10/keygen.c:961 #, fuzzy 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 "" "Обратите внимание, что этот ключ не может быть использован для шифрования.\n" "Вы можете воспользоваться параметром --add-key для генерации " "дополнительного\n" "ключа для шифрования.\n" -#: g10/keygen.c:963 g10/keygen.c:1062 +#: g10/keygen.c:975 g10/keygen.c:1074 #, c-format msgid "Key generation failed: %s\n" msgstr "Генерация ключа не удалась: %s\n" -#: g10/keygen.c:1007 g10/sig-check.c:300 g10/sign.c:105 +#: g10/keygen.c:1019 g10/sig-check.c:312 g10/sign.c:105 #, fuzzy, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "открытый ключ сгенерирован в будущем (искривление времени или неправильно " "установлены часы)\n" -#: g10/keygen.c:1009 g10/sig-check.c:302 g10/sign.c:107 +#: g10/keygen.c:1021 g10/sig-check.c:314 g10/sign.c:107 #, fuzzy, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "открытый ключ сгенерирован в будущем (искривление времени или неправильно " "установлены часы)\n" -#: g10/keygen.c:1040 +#: g10/keygen.c:1052 #, fuzzy msgid "Really create? " msgstr "Действительно создать? " -#: g10/encode.c:91 g10/openfile.c:118 g10/openfile.c:208 g10/tdbio.c:467 +#: g10/encode.c:91 g10/openfile.c:156 g10/openfile.c:246 g10/tdbio.c:467 #: g10/tdbio.c:528 #, c-format msgid "%s: can't open: %s\n" msgstr "%s: невозможно открыть: %s\n" #: g10/encode.c:113 #, c-format msgid "error creating passphrase: %s\n" msgstr "ошибка при создании ключевой фразы: %s\n" #: g10/encode.c:167 g10/encode.c:287 #, fuzzy, c-format msgid "%s: WARNING: empty file\n" msgstr "%s: предупреждение: пустой файл.\n" #: g10/encode.c:237 #, c-format msgid "reading from `%s'\n" msgstr "Читается из `%s'\n" #: g10/encode.c:431 #, fuzzy, c-format msgid "%s/%s encrypted for: %s\n" msgstr "%s зашифровано для: %s\n" #: g10/export.c:147 #, fuzzy, c-format msgid "%s: user not found: %s\n" msgstr "%s: пользователь не найден\n" #: g10/export.c:156 #, c-format msgid "certificate read problem: %s\n" msgstr "" #: g10/export.c:165 #, fuzzy, c-format msgid "key %08lX: not a rfc2440 key - skipped\n" msgstr "секретный ключ %08lX: не имеет соответствующего открытого ключа.\n" #: g10/export.c:203 #, fuzzy msgid "WARNING: nothing exported\n" msgstr "ВНИМАНИЕ: Используется ключ к которому нет доверия!\n" #: g10/getkey.c:206 msgid "too many entries in pk cache - disabled\n" msgstr "" #: g10/getkey.c:345 msgid "too many entries in unk cache - disabled\n" msgstr "" #: g10/getkey.c:1535 g10/getkey.c:1591 #, c-format msgid "using secondary key %08lX instead of primary key %08lX\n" msgstr "используется дополнительный ключ %09lX вместо основного %08lX%\n" #: g10/import.c:116 #, fuzzy, c-format msgid "can't open `%s': %s\n" msgstr "невозможно открыть файл `%s': %s\n" #: g10/import.c:160 #, c-format msgid "skipping block of type %d\n" msgstr "пропускаем блок типа %d\n" -#: g10/import.c:167 g10/trustdb.c:2560 g10/trustdb.c:2668 +#: g10/import.c:167 g10/trustdb.c:1656 g10/trustdb.c:1695 #, c-format msgid "%lu keys so far processed\n" msgstr "" #: g10/import.c:172 #, fuzzy, c-format msgid "error reading `%s': %s\n" msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" #: g10/import.c:175 #, c-format msgid "Total number processed: %lu\n" msgstr "" #: g10/import.c:177 #, c-format msgid " w/o user IDs: %lu\n" msgstr "" #: g10/import.c:179 #, c-format msgid " imported: %lu" msgstr "" #: g10/import.c:185 #, c-format msgid " unchanged: %lu\n" msgstr "" #: g10/import.c:187 #, c-format msgid " new user IDs: %lu\n" msgstr "" #: g10/import.c:189 #, c-format msgid " new subkeys: %lu\n" msgstr "" #: g10/import.c:191 #, fuzzy, c-format msgid " new signatures: %lu\n" msgstr "ключ %08lX: %d новых подписей\n" #: g10/import.c:193 #, c-format msgid " new key revocations: %lu\n" msgstr "" #: g10/import.c:195 #, c-format msgid " secret keys read: %lu\n" msgstr "" #: g10/import.c:197 #, fuzzy, c-format msgid " secret keys imported: %lu\n" msgstr "ключ %08lX: секретный ключ импортирован\n" #: g10/import.c:199 #, fuzzy, c-format msgid " secret keys unchanged: %lu\n" msgstr "Использован неправильный секретный ключ" -#: g10/import.c:342 g10/import.c:529 +#: g10/import.c:342 g10/import.c:526 #, c-format msgid "key %08lX: no user id\n" msgstr "ключ %08lX: нет идентификатора пользователя\n" #: g10/import.c:353 #, c-format msgid "key %08lX: no valid user ids\n" msgstr "ключ %08lX: нет допустимых идентификаторов пользователей\n" #: g10/import.c:355 msgid "this may be caused by a missing self-signature\n" msgstr "это может быть вызвано отсутствием само-подписи\n" -#: g10/import.c:366 g10/import.c:596 +#: g10/import.c:366 g10/import.c:593 #, c-format msgid "key %08lX: public key not found: %s\n" msgstr "ключ %08lX: открытый ключ не найден: %s\n" #: g10/import.c:372 msgid "no default public keyring\n" msgstr "нет связки открытых ключей по умолчанию\n" -#: g10/import.c:376 g10/openfile.c:148 g10/sign.c:268 g10/sign.c:559 +#: g10/import.c:376 g10/openfile.c:186 g10/sign.c:268 g10/sign.c:559 #, c-format msgid "writing to `%s'\n" msgstr "записывается в `%s'\n" -#: g10/import.c:379 g10/import.c:435 g10/import.c:544 g10/import.c:645 +#: g10/import.c:379 g10/import.c:432 g10/import.c:541 g10/import.c:642 #, fuzzy, c-format msgid "can't lock keyring `%s': %s\n" msgstr "невозможно заблокировать связку открытых ключей: %s\n" -#: g10/import.c:382 g10/import.c:438 g10/import.c:547 g10/import.c:648 +#: g10/import.c:382 g10/import.c:435 g10/import.c:544 g10/import.c:645 #, fuzzy, c-format msgid "error writing keyring `%s': %s\n" msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" #: g10/import.c:387 #, c-format msgid "key %08lX: public key imported\n" msgstr "ключ %08lX: открытый ключ импортирован\n" #: g10/import.c:399 #, c-format msgid "key %08lX: doesn't match our copy\n" msgstr "ключ %08lX: не совпадает с нашей копией\n" -#: g10/import.c:411 g10/import.c:604 +#: g10/import.c:408 g10/import.c:601 #, c-format msgid "key %08lX: can't locate original keyblock: %s\n" msgstr "ключ %08lX: невозможно обнаружить original keyblock: %s\n" -#: g10/import.c:417 g10/import.c:610 +#: g10/import.c:414 g10/import.c:607 #, c-format msgid "key %08lX: can't read original keyblock: %s\n" msgstr "ключ %08lX: невозможно прочитать original keyblock: %s\n" -#: g10/import.c:444 +#: g10/import.c:441 #, c-format msgid "key %08lX: 1 new user-id\n" msgstr "ключ %08lX: 1 новый идентификатор пользователя\n" -#: g10/import.c:447 +#: g10/import.c:444 #, c-format msgid "key %08lX: %d new user-ids\n" msgstr "ключ %08lX: %d новых идентификаторов пользователей\n" -#: g10/import.c:450 +#: g10/import.c:447 #, c-format msgid "key %08lX: 1 new signature\n" msgstr "ключ %08lX: 1 новая подпись\n" -#: g10/import.c:453 +#: g10/import.c:450 #, c-format msgid "key %08lX: %d new signatures\n" msgstr "ключ %08lX: %d новых подписей\n" -#: g10/import.c:456 +#: g10/import.c:453 #, c-format msgid "key %08lX: 1 new subkey\n" msgstr "ключ %08lX: 1 новый под-ключ\n" -#: g10/import.c:459 +#: g10/import.c:456 #, c-format msgid "key %08lX: %d new subkeys\n" msgstr "ключ %08lX: %d новых под-ключей\n" -#: g10/import.c:469 +#: g10/import.c:466 #, c-format msgid "key %08lX: not changed\n" msgstr "ключ %08lX: не изменен\n" -#: g10/import.c:552 +#: g10/import.c:549 #, c-format msgid "key %08lX: secret key imported\n" msgstr "ключ %08lX: секретный ключ импортирован\n" #. we can't merge secret keys -#: g10/import.c:556 +#: g10/import.c:553 #, c-format msgid "key %08lX: already in secret keyring\n" msgstr "ключ %08lX: уже на связке секретных ключей\n" -#: g10/import.c:561 +#: g10/import.c:558 #, c-format msgid "key %08lX: secret key not found: %s\n" msgstr "ключ %08lX: секретный ключ не найден: %s\n" -#: g10/import.c:590 +#: g10/import.c:587 #, c-format msgid "key %08lX: no public key - can't apply revocation certificate\n" msgstr "" "ключ %08lX: нет открытого ключа - невозможно применить отзывающий " "сертификат\n" -#: g10/import.c:621 +#: g10/import.c:618 #, c-format msgid "key %08lX: invalid revocation certificate: %s - rejected\n" msgstr "ключ %08lX: недопустимый отзывающий сертификат: %s - отвергнут\n" -#: g10/import.c:653 +#: g10/import.c:650 #, c-format msgid "key %08lX: revocation certificate imported\n" msgstr "ключ %08lX: отзывающий сертификат импортирован\n" -#: g10/import.c:686 +#: g10/import.c:683 #, c-format msgid "key %08lX: no user-id for signature\n" msgstr "ключ %08lX: нет идентификатора пользователя для подписи\n" -#: g10/import.c:693 g10/import.c:717 +#: g10/import.c:690 g10/import.c:714 #, c-format msgid "key %08lX: unsupported public key algorithm\n" msgstr "ключ %08lX: неподдерживаемый алгоритм открытого ключа\n" -#: g10/import.c:694 +#: g10/import.c:691 #, c-format msgid "key %08lX: invalid self-signature\n" msgstr "ключ %08lX: недопустимая само-подпись\n" -#: g10/import.c:709 +#: g10/import.c:706 #, fuzzy, c-format msgid "key %08lX: no subkey for key binding\n" msgstr "ключ %08lX: нет идентификатора пользователя\n" -#: g10/import.c:718 +#: g10/import.c:715 #, fuzzy, c-format msgid "key %08lX: invalid subkey binding\n" msgstr "ключ %08lX: нет допустимых идентификаторов пользователей\n" -#: g10/import.c:750 +#: g10/import.c:747 #, c-format msgid "key %08lX: skipped userid '" msgstr "ключ %08lX: пропущен идентификатор пользователя '" -#: g10/import.c:773 +#: g10/import.c:770 #, fuzzy, c-format msgid "key %08lX: skipped subkey\n" msgstr "ключ %08lX: 1 новый под-ключ\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:798 +#: g10/import.c:795 #, fuzzy, c-format msgid "key %08lX: non exportable signature (class %02x) - skipped\n" msgstr "ключ %08lX: отзывающий сертификат в неправильном месте - пропущен\n" -#: g10/import.c:807 +#: g10/import.c:804 #, c-format msgid "key %08lX: revocation certificate at wrong place - skipped\n" msgstr "ключ %08lX: отзывающий сертификат в неправильном месте - пропущен\n" -#: g10/import.c:815 +#: g10/import.c:812 #, c-format msgid "key %08lX: invalid revocation certificate: %s - skipped\n" msgstr "ключ %08lX: недопустимый отзывающий сертификат: %s - пропущен\n" -#: g10/import.c:915 +#: g10/import.c:912 #, c-format msgid "key %08lX: duplicated user ID detected - merged\n" msgstr "" -#: g10/import.c:966 +#: g10/import.c:963 #, c-format msgid "key %08lX: revocation certificate added\n" msgstr "ключ %08lX: отзывающий сертификат добавлен\n" -#: g10/import.c:1079 g10/import.c:1134 +#: g10/import.c:1076 g10/import.c:1131 #, c-format msgid "key %08lX: our copy has no self-signature\n" msgstr "ключ %08lX: наша копия не имеет само-подписи\n" -#: g10/keyedit.c:92 +#: g10/keyedit.c:93 #, c-format msgid "%s: user not found\n" msgstr "%s: пользователь не найден\n" -#: g10/keyedit.c:153 +#: g10/keyedit.c:154 msgid "[revocation]" msgstr "" -#: g10/keyedit.c:154 +#: g10/keyedit.c:155 #, fuzzy msgid "[self-signature]" msgstr "[само-подпись]\n" -#: g10/keyedit.c:218 +#: g10/keyedit.c:219 #, fuzzy msgid "1 bad signature\n" msgstr "1 плохая подпись\n" -#: g10/keyedit.c:220 +#: g10/keyedit.c:221 #, c-format msgid "%d bad signatures\n" msgstr "%d плохих подписей\n" -#: g10/keyedit.c:222 +#: g10/keyedit.c:223 #, fuzzy msgid "1 signature not checked due to a missing key\n" msgstr "1 подпись не проверена из-за отсутствия ключа\n" -#: g10/keyedit.c:224 +#: g10/keyedit.c:225 #, fuzzy, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%s подписей не проверено из-за отсутствия ключей\n" -#: g10/keyedit.c:226 +#: g10/keyedit.c:227 #, fuzzy msgid "1 signature not checked due to an error\n" msgstr "1 подпись не проверена из-за ошибки\n" -#: g10/keyedit.c:228 +#: g10/keyedit.c:229 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%s подписей не проверено из-за ошибок\n" -#: g10/keyedit.c:230 +#: g10/keyedit.c:231 #, fuzzy msgid "1 user id without valid self-signature detected\n" msgstr "обнаружен 1 идентификатор пользователя без допустимой само-подписи\n" -#: g10/keyedit.c:232 +#: g10/keyedit.c:233 #, c-format msgid "%d user ids without valid self-signatures detected\n" msgstr "" "обнаружено %d идентификаторов пользователей без допустимых само-подписей\n" #. Fixme: see whether there is a revocation in which #. * case we should allow to sign it again. -#: g10/keyedit.c:312 +#: g10/keyedit.c:313 #, fuzzy, c-format msgid "Already signed by key %08lX\n" msgstr "Уже подписано ключом %08lX.\n" -#: g10/keyedit.c:320 +#: g10/keyedit.c:321 #, fuzzy, c-format msgid "Nothing to sign with key %08lX\n" msgstr "Нечего подписывать ключам %08lX\n" -#: g10/keyedit.c:329 +#: g10/keyedit.c:330 #, fuzzy msgid "" "Are you really sure that you want to sign this key\n" "with your key: \"" msgstr "Вы действительно уверены, что хотите подписать этот ключ своим:\n" -#: g10/keyedit.c:338 +#: g10/keyedit.c:339 msgid "" "The signature will be marked as non-exportable.\n" "\n" msgstr "" -#: g10/keyedit.c:343 +#: g10/keyedit.c:344 msgid "Really sign? " msgstr "Действительно подписать? " -#: g10/keyedit.c:369 g10/keyedit.c:1790 g10/keyedit.c:1839 g10/sign.c:128 +#: g10/keyedit.c:370 g10/keyedit.c:1806 g10/keyedit.c:1855 g10/sign.c:128 #, fuzzy, c-format msgid "signing failed: %s\n" msgstr "ошибка подписывания: %s\n" -#: g10/keyedit.c:422 +#: g10/keyedit.c:423 msgid "This key is not protected.\n" msgstr "Этот ключ не защищен.\n" -#: g10/keyedit.c:425 +#: g10/keyedit.c:426 msgid "Key is protected.\n" msgstr "Этот ключ защищен.\n" -#: g10/keyedit.c:442 +#: g10/keyedit.c:443 #, c-format msgid "Can't edit this key: %s\n" msgstr "Невозможно редактировать этот ключ: %s\n" -#: g10/keyedit.c:447 +#: g10/keyedit.c:448 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Введите новую ключевую фразу для этого секретного ключа.\n" "\n" -#: g10/keyedit.c:459 +#: g10/keyedit.c:460 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Вы не хотите ключевую фразу - это скорее всего *плохая* идея!\n" "\n" -#: g10/keyedit.c:462 +#: g10/keyedit.c:463 msgid "Do you really want to do this? " msgstr "Вы действительно этого хотите? " -#: g10/keyedit.c:523 +#: g10/keyedit.c:524 msgid "moving a key signature to the correct place\n" msgstr "" -#: g10/keyedit.c:559 +#: g10/keyedit.c:561 msgid "quit this menu" msgstr "выйти из меню" -#: g10/keyedit.c:560 +#: g10/keyedit.c:562 msgid "q" msgstr "" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save" msgstr "записать" -#: g10/keyedit.c:561 +#: g10/keyedit.c:563 msgid "save and quit" msgstr "записать и выйти" -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "help" msgstr "помощь" -#: g10/keyedit.c:562 +#: g10/keyedit.c:564 msgid "show this help" msgstr "показать помощь" -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 msgid "fpr" msgstr "" -#: g10/keyedit.c:564 +#: g10/keyedit.c:566 #, fuzzy msgid "show fingerprint" msgstr "показать \"отпечаток пальца\"" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 #, fuzzy msgid "list" msgstr "список" -#: g10/keyedit.c:565 +#: g10/keyedit.c:567 #, fuzzy msgid "list key and user ids" msgstr "список ключей и идентификаторов пользователей" -#: g10/keyedit.c:566 +#: g10/keyedit.c:568 msgid "l" msgstr "" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "uid" msgstr "" -#: g10/keyedit.c:567 +#: g10/keyedit.c:569 msgid "select user id N" msgstr "выбрать идентификатор пользователя N" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "key" msgstr "ключ" -#: g10/keyedit.c:568 +#: g10/keyedit.c:570 msgid "select secondary key N" msgstr "выбрать дополнительный ключ N" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 msgid "check" msgstr "проверка" -#: g10/keyedit.c:569 +#: g10/keyedit.c:571 #, fuzzy msgid "list signatures" msgstr "список ключей и их подписей" -#: g10/keyedit.c:570 +#: g10/keyedit.c:572 msgid "c" msgstr "" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 msgid "sign" msgstr "подписать" -#: g10/keyedit.c:571 +#: g10/keyedit.c:573 #, fuzzy msgid "sign the key" msgstr "подписать ключ" -#: g10/keyedit.c:572 +#: g10/keyedit.c:574 msgid "s" msgstr "" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 #, fuzzy msgid "lsign" msgstr "подписать" -#: g10/keyedit.c:573 +#: g10/keyedit.c:575 #, fuzzy msgid "sign the key locally" msgstr "подписать ключ" -#: g10/keyedit.c:574 +#: g10/keyedit.c:576 msgid "debug" msgstr "отладка" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "adduid" msgstr "" -#: g10/keyedit.c:575 +#: g10/keyedit.c:577 msgid "add a user id" msgstr "добавить идентификатор пользователя" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 msgid "deluid" msgstr "" -#: g10/keyedit.c:576 +#: g10/keyedit.c:578 #, fuzzy msgid "delete user id" msgstr "удалить идентификатор пользователя" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 msgid "addkey" msgstr "" -#: g10/keyedit.c:577 +#: g10/keyedit.c:579 #, fuzzy msgid "add a secondary key" msgstr "добавить дополнительный ключ" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delkey" msgstr "" -#: g10/keyedit.c:578 +#: g10/keyedit.c:580 msgid "delete a secondary key" msgstr "удалить дополнительный ключ" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 #, fuzzy msgid "delsig" msgstr "подписать" -#: g10/keyedit.c:579 +#: g10/keyedit.c:581 #, fuzzy msgid "delete signatures" msgstr "список ключей и их подписей" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 msgid "expire" msgstr "" -#: g10/keyedit.c:580 +#: g10/keyedit.c:582 #, fuzzy msgid "change the expire date" msgstr "изменить ключевую фразу" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle" msgstr "" -#: g10/keyedit.c:581 +#: g10/keyedit.c:583 msgid "toggle between secret and public key listing" msgstr "переключить между списком секретных и открытых ключей" -#: g10/keyedit.c:583 +#: g10/keyedit.c:585 msgid "t" msgstr "" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "pref" msgstr "" -#: g10/keyedit.c:584 +#: g10/keyedit.c:586 msgid "list preferences" msgstr "" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 msgid "passwd" msgstr "" -#: g10/keyedit.c:585 +#: g10/keyedit.c:587 #, fuzzy msgid "change the passphrase" msgstr "изменить ключевую фразу" -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "trust" msgstr "" -#: g10/keyedit.c:586 +#: g10/keyedit.c:588 msgid "change the ownertrust" msgstr "изменить параметры доверия" -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 #, fuzzy msgid "revsig" msgstr "подписать" -#: g10/keyedit.c:587 +#: g10/keyedit.c:589 #, fuzzy msgid "revoke signatures" msgstr "проверить подпись на ключе" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 #, fuzzy msgid "revkey" msgstr "ключ" -#: g10/keyedit.c:588 +#: g10/keyedit.c:590 #, fuzzy msgid "revoke a secondary key" msgstr "удалить дополнительный ключ" -#: g10/keyedit.c:607 +#: g10/keyedit.c:591 +msgid "disable" +msgstr "" + +#: g10/keyedit.c:591 +#, fuzzy +msgid "disable a key" +msgstr "Плохой ключ" + +#: g10/keyedit.c:592 +msgid "enable" +msgstr "" + +#: g10/keyedit.c:592 +#, fuzzy +msgid "enable a key" +msgstr "Плохой ключ" + +#: g10/keyedit.c:611 msgid "can't do that in batchmode\n" msgstr "невозможно сделать это в пакетном режиме.\n" #. check that they match #. FIXME: check that they both match -#: g10/keyedit.c:636 +#: g10/keyedit.c:640 #, fuzzy msgid "Secret key is available.\n" msgstr "Имеется секретный ключ.\n" -#: g10/keyedit.c:665 +#: g10/keyedit.c:669 #, fuzzy msgid "Command> " msgstr "Команда> " -#: g10/keyedit.c:692 +#: g10/keyedit.c:696 #, fuzzy msgid "Need the secret key to do this.\n" msgstr "Чтобы это сделать, нужен секретный ключ.\n" -#: g10/keyedit.c:714 +#: g10/keyedit.c:718 msgid "Save changes? " msgstr "Сохранить изменения? " -#: g10/keyedit.c:717 +#: g10/keyedit.c:721 msgid "Quit without saving? " msgstr "Выйти без сохранения? " -#: g10/keyedit.c:727 +#: g10/keyedit.c:731 #, fuzzy, c-format msgid "update failed: %s\n" msgstr "обновление не удалось: %s\n" -#: g10/keyedit.c:734 +#: g10/keyedit.c:738 #, fuzzy, c-format msgid "update secret failed: %s\n" msgstr "обновление секрета не удалось: %s\n" -#: g10/keyedit.c:741 +#: g10/keyedit.c:745 msgid "Key not changed so no update needed.\n" msgstr "Ключ не изменился, обновление не нужно.\n" -#: g10/keyedit.c:744 g10/keyedit.c:803 +#: g10/keyedit.c:748 g10/keyedit.c:807 #, fuzzy, c-format msgid "update of trustdb failed: %s\n" msgstr "обновление базы данных доверия не удалось: %s\n" -#: g10/keyedit.c:777 +#: g10/keyedit.c:781 msgid "Really sign all user ids? " msgstr "Действительно подписать все идентификаторы пользователя? " -#: g10/keyedit.c:778 +#: g10/keyedit.c:782 msgid "Hint: Select the user ids to sign\n" msgstr "" "Подсказка: выберите идентификаторы пользователя которые хотите подписать\n" -#: g10/keyedit.c:814 g10/keyedit.c:835 +#: g10/keyedit.c:818 g10/keyedit.c:839 msgid "You must select at least one user id.\n" msgstr "Вы должны выбрать хотя бы один идентификатор пользователя.\n" -#: g10/keyedit.c:816 +#: g10/keyedit.c:820 msgid "You can't delete the last user id!\n" msgstr "Вы не можете удалить последний идентификатор пользователя!\n" -#: g10/keyedit.c:819 +#: g10/keyedit.c:823 #, fuzzy msgid "Really remove all selected user ids? " msgstr "Действительно удалить все выбранные идентификаторы пользователя? " -#: g10/keyedit.c:820 +#: g10/keyedit.c:824 #, fuzzy msgid "Really remove this user id? " msgstr "Действительно удалить этот идентификатор пользователя? " -#: g10/keyedit.c:858 g10/keyedit.c:880 +#: g10/keyedit.c:860 g10/keyedit.c:882 msgid "You must select at least one key.\n" msgstr "Вы должны выбрать хотя бы один ключ.\n" -#: g10/keyedit.c:862 +#: g10/keyedit.c:864 #, fuzzy msgid "Do you really want to delete the selected keys? " msgstr "Вы действительно хотите удалить выбранные ключи? " -#: g10/keyedit.c:863 +#: g10/keyedit.c:865 #, fuzzy msgid "Do you really want to delete this key? " msgstr "Вы действительно хотите удалить этот ключ? " -#: g10/keyedit.c:884 +#: g10/keyedit.c:886 #, fuzzy msgid "Do you really want to revoke the selected keys? " msgstr "Вы действительно хотите удалить выбранные ключи? " -#: g10/keyedit.c:885 +#: g10/keyedit.c:887 #, fuzzy msgid "Do you really want to revoke this key? " msgstr "Вы действительно хотите удалить этот ключ? " -#: g10/keyedit.c:939 +#: g10/keyedit.c:949 msgid "Invalid command (try \"help\")\n" msgstr "Недопустимая команда (попробуйте \"help\")\n" -#: g10/keyedit.c:1294 +#: g10/keyedit.c:1039 +#, fuzzy +msgid "This key has been disabled" +msgstr "Замечание: Срок действия ключа уже истек!\n" + +#: g10/keyedit.c:1310 msgid "Delete this good signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1298 +#: g10/keyedit.c:1314 msgid "Delete this invalid signature? (y/N/q)" msgstr "" -#: g10/keyedit.c:1302 +#: g10/keyedit.c:1318 #, fuzzy msgid "Delete this unknown signature? (y/N/q)" msgstr "сгенерировать отзывающий сертификат" -#: g10/keyedit.c:1308 +#: g10/keyedit.c:1324 #, fuzzy msgid "Really delete this self-signature? (y/N)" msgstr "сгенерировать отзывающий сертификат" -#: g10/keyedit.c:1322 +#: g10/keyedit.c:1338 #, fuzzy, c-format msgid "Deleted %d signature.\n" msgstr "%d плохих подписей\n" -#: g10/keyedit.c:1323 +#: g10/keyedit.c:1339 #, fuzzy, c-format msgid "Deleted %d signatures.\n" msgstr "%d плохих подписей\n" -#: g10/keyedit.c:1326 +#: g10/keyedit.c:1342 #, fuzzy msgid "Nothing deleted.\n" msgstr "ВНИМАНИЕ: Используется ключ к которому нет доверия!\n" -#: g10/keyedit.c:1395 +#: g10/keyedit.c:1411 msgid "Please remove selections from the secret keys.\n" msgstr "" -#: g10/keyedit.c:1401 +#: g10/keyedit.c:1417 #, fuzzy msgid "Please select at most one secondary key.\n" msgstr "Вы должны выбрать хотя бы один ключ.\n" -#: g10/keyedit.c:1405 +#: g10/keyedit.c:1421 msgid "Changing expiration time for a secondary key.\n" msgstr "" -#: g10/keyedit.c:1407 +#: g10/keyedit.c:1423 msgid "Changing expiration time for the primary key.\n" msgstr "" -#: g10/keyedit.c:1448 +#: g10/keyedit.c:1464 msgid "You can't change the expiration date of a v3 key\n" msgstr "" -#: g10/keyedit.c:1464 +#: g10/keyedit.c:1480 msgid "No corresponding signature in secret ring\n" msgstr "" -#: g10/keyedit.c:1524 +#: g10/keyedit.c:1540 #, c-format msgid "No user id with index %d\n" msgstr "Нет идентификатора пользователя с индексом %d\n" -#: g10/keyedit.c:1570 +#: g10/keyedit.c:1586 #, c-format msgid "No secondary key with index %d\n" msgstr "Нет дополнительного ключа с индексом %d\n" -#: g10/keyedit.c:1668 +#: g10/keyedit.c:1684 #, fuzzy msgid "user ID: \"" msgstr "Введите идентификатор пользователя: " -#: g10/keyedit.c:1671 +#: g10/keyedit.c:1687 #, fuzzy, c-format msgid "" "\"\n" "signed with your key %08lX at %s\n" msgstr "Нечего подписывать ключам %08lX\n" -#: g10/keyedit.c:1675 +#: g10/keyedit.c:1691 #, fuzzy msgid "Create a revocation certificate for this signature? (y/N)" msgstr "сгенерировать отзывающий сертификат" -#: g10/keyedit.c:1755 +#: g10/keyedit.c:1771 #, fuzzy msgid "Really create the revocation certificates? (y/N)" msgstr "сгенерировать отзывающий сертификат" -#: g10/keyedit.c:1778 +#: g10/keyedit.c:1794 #, fuzzy msgid "no secret key\n" msgstr "Плохой секретный ключ" #: g10/mainproc.c:184 #, fuzzy, c-format msgid "public key is %08lX\n" msgstr "Открытый ключ не найден" -#: g10/mainproc.c:212 +#: g10/mainproc.c:213 #, fuzzy msgid "public key encrypted data: good DEK\n" msgstr "расшифровка открытым ключом не удалась %s\n" #. fixme: defer this message until we have parsed all packets of #. * this type - do this by building a list of keys with their stati #. * and store it with the context. do_proc_packets can then use #. * this list to display some information -#: g10/mainproc.c:219 +#: g10/mainproc.c:220 #, c-format msgid "public key decryption failed: %s\n" msgstr "расшифровка открытым ключом не удалась %s\n" -#: g10/mainproc.c:247 +#: g10/mainproc.c:248 #, fuzzy msgid "decryption okay\n" msgstr "расшифровка не удалась: %s\n" -#: g10/mainproc.c:252 +#: g10/mainproc.c:253 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "" -#: g10/mainproc.c:257 +#: g10/mainproc.c:258 #, c-format msgid "decryption failed: %s\n" msgstr "расшифровка не удалась: %s\n" -#: g10/mainproc.c:275 +#: g10/mainproc.c:276 #, fuzzy msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "замечание: отправитель запросил \"только-для-Ваших-глаз\"\n" -#: g10/mainproc.c:277 +#: g10/mainproc.c:278 #, c-format msgid "original file name='%.*s'\n" msgstr "" -#: g10/mainproc.c:505 g10/mainproc.c:514 +#: g10/mainproc.c:506 g10/mainproc.c:515 #, fuzzy msgid "WARNING: invalid notation data found\n" msgstr "не найдено допустимых RFC1991 или OpenPGP данных.\n" -#: g10/mainproc.c:517 +#: g10/mainproc.c:518 msgid "Notation: " msgstr "" -#: g10/mainproc.c:524 +#: g10/mainproc.c:525 msgid "Policy: " msgstr "" -#: g10/mainproc.c:929 +#: g10/mainproc.c:930 msgid "signature verification suppressed\n" msgstr "" -#: g10/mainproc.c:935 +#: g10/mainproc.c:936 #, c-format msgid "Signature made %.*s using %s key ID %08lX\n" msgstr "Подпись сделана %.*s, используя %s ключ %08lX\n" #. just in case that we have no userid -#: g10/mainproc.c:961 g10/mainproc.c:972 +#: g10/mainproc.c:962 g10/mainproc.c:973 msgid "BAD signature from \"" msgstr "ПЛОХАЯ подпись от \"" -#: g10/mainproc.c:962 g10/mainproc.c:973 +#: g10/mainproc.c:963 g10/mainproc.c:974 msgid "Good signature from \"" msgstr "Хорошая подпись от \"" -#: g10/mainproc.c:964 +#: g10/mainproc.c:965 msgid " aka \"" msgstr "" -#: g10/mainproc.c:1015 +#: g10/mainproc.c:1016 #, c-format msgid "Can't check signature: %s\n" msgstr "Невозможно проверить подпись: %s\n" -#: g10/mainproc.c:1109 +#: g10/mainproc.c:1110 msgid "old style (PGP 2.x) signature\n" msgstr "" -#: g10/mainproc.c:1114 +#: g10/mainproc.c:1115 msgid "invalid root packet detected in proc_tree()\n" msgstr "" #: g10/misc.c:93 #, fuzzy, c-format msgid "can't disable core dumps: %s\n" msgstr "невозможно открыть файл `%s': %s\n" #: g10/misc.c:96 msgid "WARNING: program may create a core file!\n" msgstr "" #: g10/misc.c:203 msgid "Experimental algorithms should not be used!\n" msgstr "" #: g10/misc.c:217 msgid "" "RSA keys are deprecated; please consider creating a new key and use this key " "in the future\n" msgstr "" "Пользование RSA ключами не рекомендуется, пожалуйста, подумайте о создании\n" "нового ключа для использования в будущем\n" #: g10/misc.c:239 msgid "this cipher algorithm is depreciated; please use a more standard one!\n" msgstr "" #: g10/parse-packet.c:112 #, fuzzy, c-format msgid "can't handle public key algorithm %d\n" msgstr "невозможно заблокировать связку открытых ключей: %s\n" #: g10/parse-packet.c:931 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "" -#: g10/passphrase.c:157 +#: g10/passphrase.c:159 msgid "" "\n" "You need a passphrase to unlock the secret key for\n" "user: \"" msgstr "" "\n" "Вам нужна ключевая фраза, чтобы отомкнуть ключ\n" "пользователя: \"" -#: g10/passphrase.c:166 +#: g10/passphrase.c:168 #, fuzzy, c-format msgid "%u-bit %s key, ID %08lX, created %s" msgstr "(%u-бит %s ключ, ID %08lX, создан %s)\n" -#: g10/passphrase.c:171 +#: g10/passphrase.c:173 #, c-format msgid " (main key ID %08lX)" msgstr "" -#: g10/passphrase.c:192 +#: g10/passphrase.c:194 #, fuzzy msgid "Enter passphrase: " msgstr "Введите ключевую фразу: %s\n" -#: g10/passphrase.c:196 +#: g10/passphrase.c:198 #, fuzzy msgid "Repeat passphrase: " msgstr "Повторите ключевую фразу: %s\n" #: g10/plaintext.c:63 msgid "data not saved; use option \"--output\" to save it\n" msgstr "данные не были сохранены; воспользуйтесь --\"output\" для сохранения\n" #: g10/plaintext.c:266 msgid "Please enter name of data file: " msgstr "Пожалуйста, введите имя файла данных: " #: g10/plaintext.c:287 msgid "reading stdin ...\n" msgstr "" #: g10/plaintext.c:360 #, c-format msgid "can't open signed data `%s'\n" msgstr "невозможно открыть подписанные данные `%s' .\n" #: g10/pubkey-enc.c:79 #, c-format msgid "anonymous receiver; trying secret key %08lX ...\n" msgstr "анонимный получатель, пробуем секретный ключ %08lX ...\n" #: g10/pubkey-enc.c:85 #, fuzzy msgid "okay, we are the anonymous recipient.\n" msgstr "Ок, мы -- анонимный получатель.\n" #: g10/pubkey-enc.c:137 #, fuzzy msgid "old encoding of the DEK is not supported\n" msgstr "алгоритм защиты %d не поддерживается\n" #: g10/pubkey-enc.c:191 #, fuzzy, c-format msgid "NOTE: cipher algorithm %d not found in preferences\n" msgstr "замечание: шифровальный алгоритм %d не найден в предпочтениях\n" #: g10/seckey-cert.c:55 #, fuzzy, c-format msgid "protection algorithm %d is not supported\n" msgstr "алгоритм защиты %d не поддерживается\n" #: g10/seckey-cert.c:171 msgid "Invalid passphrase; please try again ...\n" msgstr "Неправильная ключевая фраза, попробуйте снова ...\n" #: g10/seckey-cert.c:227 #, fuzzy msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "Предупреждение: обнаружен слабый ключ - смените ключевую фразу.\n" -#: g10/sig-check.c:187 +#: g10/sig-check.c:199 msgid "assuming bad MDC due to an unknown critical bit\n" msgstr "" -#: g10/sig-check.c:283 +#: g10/sig-check.c:295 msgid "" "this is a PGP generated ElGamal key which is NOT secure for signatures!\n" msgstr "этот ElGamal ключ, созданный PGP, не надежен для создания подписей!\n" -#: g10/sig-check.c:291 +#: g10/sig-check.c:303 #, fuzzy, c-format msgid "public key is %lu second newer than the signature\n" msgstr "ключ %08lX: нет идентификатора пользователя для подписи\n" -#: g10/sig-check.c:292 +#: g10/sig-check.c:304 #, fuzzy, c-format msgid "public key is %lu seconds newer than the signature\n" msgstr "ключ %08lX: нет идентификатора пользователя для подписи\n" -#: g10/sig-check.c:308 +#: g10/sig-check.c:320 #, fuzzy, c-format msgid "NOTE: signature key expired %s\n" msgstr "предупреждение: ключ подписи устарел %s\n" -#: g10/sig-check.c:365 +#: g10/sig-check.c:377 msgid "assuming bad signature due to an unknown critical bit\n" msgstr "" #: g10/sign.c:132 #, fuzzy, c-format msgid "%s signature from: %s\n" msgstr "ПЛОХАЯ подпись от \"" #: g10/sign.c:263 g10/sign.c:554 #, fuzzy, c-format msgid "can't create %s: %s\n" msgstr "%s: невозможно открыть: %s\n" #: g10/sign.c:361 #, fuzzy msgid "signing:" msgstr "подписать" #: g10/sign.c:401 #, fuzzy, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "%s: предупреждение: пустой файл.\n" #: g10/textfilter.c:128 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "" #: g10/textfilter.c:197 #, c-format msgid "input line longer than %d characters\n" msgstr "" -#: g10/tdbio.c:116 g10/tdbio.c:1505 +#: g10/tdbio.c:116 g10/tdbio.c:1634 #, fuzzy, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "обновление секрета не удалось: %s\n" -#: g10/tdbio.c:122 g10/tdbio.c:1512 +#: g10/tdbio.c:122 g10/tdbio.c:1641 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" #: g10/tdbio.c:232 msgid "trustdb transaction too large\n" msgstr "" #: g10/tdbio.c:424 #, fuzzy, c-format msgid "%s: can't access: %s\n" msgstr "%s: невозможно открыть: %s\n" #: g10/ringedit.c:296 g10/tdbio.c:444 #, fuzzy, c-format msgid "%s: can't create directory: %s\n" msgstr "%s: невозможно открыть: %s\n" #: g10/ringedit.c:302 g10/tdbio.c:447 #, fuzzy, c-format msgid "%s: directory created\n" msgstr "%s: невозможно открыть: %s\n" #: g10/tdbio.c:451 #, c-format msgid "%s: directory does not exist!\n" msgstr "" -#: g10/openfile.c:144 g10/openfile.c:215 g10/ringedit.c:1344 g10/tdbio.c:457 +#: g10/openfile.c:182 g10/openfile.c:253 g10/ringedit.c:1344 g10/tdbio.c:457 #, fuzzy, c-format msgid "%s: can't create: %s\n" msgstr "%s: невозможно открыть: %s\n" #: g10/tdbio.c:472 g10/tdbio.c:521 #, fuzzy, c-format msgid "%s: can't create lock\n" msgstr "%s: невозможно открыть: %s\n" #: g10/tdbio.c:486 #, c-format msgid "%s: failed to create version record: %s" msgstr "" #: g10/tdbio.c:490 #, fuzzy, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: невозможно открыть: %s\n" #: g10/tdbio.c:493 #, fuzzy, c-format msgid "%s: trustdb created\n" msgstr "%s: невозможно открыть: %s\n" #: g10/tdbio.c:530 #, fuzzy, c-format msgid "%s: invalid trustdb\n" msgstr "обновление базы данных доверия не удалось: %s\n" #: g10/tdbio.c:563 #, fuzzy, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: невозможно открыть: %s\n" #: g10/tdbio.c:571 #, fuzzy, c-format msgid "%s: error updating version record: %s\n" msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" #: g10/tdbio.c:587 g10/tdbio.c:626 g10/tdbio.c:648 g10/tdbio.c:678 -#: g10/tdbio.c:703 g10/tdbio.c:1438 g10/tdbio.c:1465 +#: g10/tdbio.c:703 g10/tdbio.c:1567 g10/tdbio.c:1594 #, fuzzy, c-format msgid "%s: error reading version record: %s\n" msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" #: g10/tdbio.c:600 g10/tdbio.c:659 #, fuzzy, c-format msgid "%s: error writing version record: %s\n" msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" -#: g10/tdbio.c:1132 +#: g10/tdbio.c:1246 #, fuzzy, c-format msgid "trustdb: lseek failed: %s\n" msgstr "обновление секрета не удалось: %s\n" -#: g10/tdbio.c:1140 +#: g10/tdbio.c:1254 #, fuzzy, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "обновление базы данных доверия не удалось: %s\n" -#: g10/tdbio.c:1161 +#: g10/tdbio.c:1275 #, fuzzy, c-format msgid "%s: not a trustdb file\n" msgstr "обновление базы данных доверия не удалось: %s\n" -#: g10/tdbio.c:1177 +#: g10/tdbio.c:1291 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "" -#: g10/tdbio.c:1182 +#: g10/tdbio.c:1296 #, fuzzy, c-format msgid "%s: invalid file version %d\n" msgstr "недопустимое начало текстовой подписи\n" -#: g10/tdbio.c:1471 +#: g10/tdbio.c:1600 #, fuzzy, c-format msgid "%s: error reading free record: %s\n" msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" -#: g10/tdbio.c:1479 +#: g10/tdbio.c:1608 #, fuzzy, c-format msgid "%s: error writing dir record: %s\n" msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" -#: g10/tdbio.c:1489 +#: g10/tdbio.c:1618 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "" -#: g10/tdbio.c:1519 +#: g10/tdbio.c:1648 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "" -#: g10/tdbio.c:1630 +#: g10/tdbio.c:1759 #, fuzzy msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" msgstr "База данных доверия разрушена: запустите \"gpgm --fix-trust-db\".\n" -#: g10/trustdb.c:163 +#: g10/trustdb.c:160 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "" -#: g10/trustdb.c:178 +#: g10/trustdb.c:175 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "" -#: g10/trustdb.c:192 +#: g10/trustdb.c:189 #, fuzzy, c-format msgid "trust record %lu: delete failed: %s\n" msgstr "обновление секрета не удалось: %s\n" -#: g10/trustdb.c:206 +#: g10/trustdb.c:203 #, fuzzy, c-format msgid "trustdb: sync failed: %s\n" msgstr "обновление базы данных доверия не удалось: %s\n" -#: g10/trustdb.c:386 +#: g10/trustdb.c:347 #, fuzzy, c-format msgid "error reading dir record for LID %lu: %s\n" msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" -#: g10/trustdb.c:393 +#: g10/trustdb.c:354 #, c-format msgid "lid %lu: expected dir record, got type %d\n" msgstr "" -#: g10/trustdb.c:398 +#: g10/trustdb.c:359 #, c-format msgid "no primary key for LID %lu\n" msgstr "" -#: g10/trustdb.c:403 +#: g10/trustdb.c:364 #, fuzzy, c-format msgid "error reading primary key for LID %lu: %s\n" msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" -#: g10/trustdb.c:442 +#: g10/trustdb.c:403 #, fuzzy, c-format msgid "get_dir_record: search_record failed: %s\n" msgstr "обновление секрета не удалось: %s\n" -#: g10/trustdb.c:510 +#: g10/trustdb.c:458 #, fuzzy, c-format msgid "NOTE: secret key %08lX is NOT protected.\n" msgstr "Этот ключ не защищен.\n" -#: g10/trustdb.c:518 +#: g10/trustdb.c:466 #, fuzzy, c-format msgid "key %08lX: secret key without public key - skipped\n" msgstr "секретный ключ %08lX: не имеет соответствующего открытого ключа.\n" -#: g10/trustdb.c:525 +#: g10/trustdb.c:473 #, c-format msgid "key %08lX: secret and public key don't match\n" msgstr "ключ %08lX: секретный и открытого ключи не совпадают.\n" -#: g10/trustdb.c:535 +#: g10/trustdb.c:483 #, fuzzy, c-format msgid "key %08lX: can't put it into the trustdb\n" msgstr "ключ %08lX.%lu: невозможно положить в базу данных доверия\n" -#: g10/trustdb.c:541 +#: g10/trustdb.c:489 #, fuzzy, c-format msgid "key %08lX: query record failed\n" msgstr "ключ %08lX: запрос записи не удался\n" -#: g10/trustdb.c:550 +#: g10/trustdb.c:498 #, fuzzy, c-format msgid "key %08lX: already in trusted key table\n" msgstr "ключ %08lX: уже на связке секретных ключей\n" -#: g10/trustdb.c:553 +#: g10/trustdb.c:501 #, fuzzy, c-format msgid "key %08lX: accepted as trusted key.\n" msgstr "ключ %08lX: уже на связке секретных ключей\n" -#: g10/trustdb.c:561 +#: g10/trustdb.c:509 #, fuzzy, c-format msgid "enumerate secret keys failed: %s\n" msgstr "обновление секрета не удалось: %s\n" -#: g10/trustdb.c:851 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but marked as checked\n" -msgstr "" - -#: g10/trustdb.c:855 -#, c-format -msgid "NOTE: sig rec %lu[%d] in hintlist of %lu but not marked\n" -msgstr "" - -#. we need the dir record -#: g10/trustdb.c:862 -#, c-format -msgid "sig rec %lu[%d] in hintlist of %lu does not point to a dir record\n" -msgstr "" - -#: g10/trustdb.c:868 -#, c-format -msgid "lid %lu: no primary key\n" -msgstr "" - -#: g10/trustdb.c:901 +#: g10/trustdb.c:800 #, fuzzy, c-format -msgid "lid %lu: user id not found in keyblock\n" -msgstr "%s: пользователь не найден\n" - -#: g10/trustdb.c:905 -#, fuzzy, c-format -msgid "lid %lu: user id without signature\n" -msgstr "ключ %08lX: нет идентификатора пользователя для подписи\n" - -#: g10/trustdb.c:912 -#, fuzzy, c-format -msgid "lid %lu: self-signature in hintlist\n" -msgstr "build_sigrecs: Selbst-Signatur fehlt\n" - -#: g10/trustdb.c:923 g10/trustdb.c:1675 g10/trustdb.c:1766 -#, fuzzy -msgid "Valid certificate revocation" -msgstr "Плохой сертификат" - -#: g10/trustdb.c:924 g10/trustdb.c:1676 g10/trustdb.c:1767 -#, fuzzy -msgid "Good certificate" -msgstr "Плохой сертификат" - -#: g10/trustdb.c:933 -msgid "very strange: no public key\n" -msgstr "" - -#: g10/trustdb.c:982 -#, c-format -msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" -msgstr "" - -#: g10/trustdb.c:988 -#, c-format -msgid "lid %lu does not have a key\n" -msgstr "" - -#: g10/trustdb.c:998 -#, fuzzy, c-format -msgid "lid %lu: can't get keyblock: %s\n" -msgstr "невозможно записать блок ключа: %s\n" - -#: g10/trustdb.c:1055 g10/trustdb.c:2030 -#, fuzzy, c-format -msgid "tdbio_search_dir failed: %s\n" +msgid "tdbio_search_sdir failed: %s\n" msgstr "ошибка декодирования: %s\n" -#: g10/trustdb.c:1210 +#: g10/trustdb.c:875 #, fuzzy, c-format msgid "key %08lX.%lu: Good subkey binding\n" msgstr "ключ %08lX: нет идентификатора пользователя\n" -#: g10/trustdb.c:1216 g10/trustdb.c:1259 +#: g10/trustdb.c:881 g10/trustdb.c:916 #, fuzzy, c-format msgid "key %08lX.%lu: Invalid subkey binding: %s\n" msgstr "ключ %08lX: нет допустимых идентификаторов пользователей\n" -#: g10/trustdb.c:1232 +#: g10/trustdb.c:893 #, fuzzy, c-format msgid "key %08lX.%lu: Valid key revocation\n" msgstr "ключ %08lX.%lu: срок действия истек %s\n" -#: g10/trustdb.c:1238 +#: g10/trustdb.c:899 #, fuzzy, c-format msgid "key %08lX.%lu: Invalid key revocation: %s\n" msgstr "ключ %08lX: открытый ключ не найден: %s\n" -#: g10/trustdb.c:1253 +#: g10/trustdb.c:910 #, fuzzy, c-format msgid "key %08lX.%lu: Valid subkey revocation\n" msgstr "ключ %08lX: нет допустимых идентификаторов пользователей\n" -#: g10/trustdb.c:1360 +#: g10/trustdb.c:1021 #, fuzzy msgid "Good self-signature" msgstr "[само-подпись]\n" -#: g10/trustdb.c:1371 +#: g10/trustdb.c:1031 #, fuzzy msgid "Invalid self-signature" msgstr "ключ %08lX: недопустимая само-подпись\n" -#: g10/trustdb.c:1403 -msgid "Valid user ID revocation skipped due to a newer self signature\n" +#: g10/trustdb.c:1058 +msgid "Valid user ID revocation skipped due to a newer self signature" msgstr "" -#: g10/trustdb.c:1410 +#: g10/trustdb.c:1064 #, fuzzy -msgid "Valid user ID revocation\n" +msgid "Valid user ID revocation" msgstr "Недопустимый выбор.\n" -#: g10/trustdb.c:1417 +#: g10/trustdb.c:1069 #, fuzzy msgid "Invalid user ID revocation" msgstr "Недопустимый выбор.\n" -#: g10/trustdb.c:1512 -msgid "Too many preferences" -msgstr "" - -#: g10/trustdb.c:1526 -msgid "Too many preference items" -msgstr "" - -#: g10/trustdb.c:1549 g10/trustdb.c:3075 g10/trustdb.c:3105 -msgid "WARNING: can't yet handle long pref records\n" -msgstr "" - -#: g10/trustdb.c:1654 +#: g10/trustdb.c:1110 #, fuzzy -msgid "duplicated certificate - deleted" +msgid "Valid certificate revocation" msgstr "Плохой сертификат" -#: g10/trustdb.c:1692 +#: g10/trustdb.c:1111 #, fuzzy -msgid "public key not anymore available" -msgstr "Секретный ключ не существует" +msgid "Good certificate" +msgstr "Плохой сертификат" -#: g10/trustdb.c:1702 g10/trustdb.c:1791 +#: g10/trustdb.c:1132 #, fuzzy msgid "Invalid certificate revocation" msgstr "Плохой сертификат" -#: g10/trustdb.c:1703 g10/trustdb.c:1792 +#: g10/trustdb.c:1133 #, fuzzy msgid "Invalid certificate" msgstr "Плохой сертификат" -#: g10/trustdb.c:1720 -#, c-format -msgid "uid %08lX.%lu/%02X%02X: has shadow dir %lu but is not yet marked.\n" -msgstr "" - -#: g10/trustdb.c:1734 +#: g10/trustdb.c:1150 g10/trustdb.c:1154 #, c-format msgid "sig record %lu[%d] points to wrong record.\n" msgstr "" -#. that should never happen -#: g10/trustdb.c:2007 -#, fuzzy, c-format -msgid "insert_trust_record: keyblock not found: %s\n" -msgstr "ключ %08lX: секретный ключ не найден: %s\n" - -#: g10/trustdb.c:2408 -msgid "Ooops, no keys\n" -msgstr "" - -#: g10/trustdb.c:2412 +#: g10/trustdb.c:1206 #, fuzzy -msgid "Ooops, no user ids\n" -msgstr "список ключей и идентификаторов пользователей" +msgid "duplicated certificate - deleted" +msgstr "Плохой сертификат" + +#: g10/trustdb.c:1512 +#, fuzzy, c-format +msgid "tdbio_search_dir failed: %s\n" +msgstr "ошибка декодирования: %s\n" -#: g10/trustdb.c:2529 +#: g10/trustdb.c:1634 #, fuzzy, c-format msgid "lid ?: insert failed: %s\n" msgstr "обновление секрета не удалось: %s\n" -#: g10/trustdb.c:2534 +#: g10/trustdb.c:1639 #, fuzzy, c-format msgid "lid %lu: insert failed: %s\n" msgstr "обновление секрета не удалось: %s\n" -#: g10/trustdb.c:2540 +#: g10/trustdb.c:1645 #, c-format msgid "lid %lu: inserted\n" msgstr "" -#: g10/trustdb.c:2545 g10/trustdb.c:2654 +#: g10/trustdb.c:1650 #, fuzzy, c-format -msgid "lid %lu: update failed: %s\n" -msgstr "обновление не удалось: %s\n" - -#: g10/trustdb.c:2551 g10/trustdb.c:2660 -#, c-format -msgid "lid %lu: updated\n" -msgstr "" - -#: g10/trustdb.c:2556 g10/trustdb.c:2664 -#, c-format -msgid "lid %lu: okay\n" -msgstr "" +msgid "error reading dir record: %s\n" +msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" -#: g10/trustdb.c:2562 g10/trustdb.c:2671 +#: g10/trustdb.c:1658 g10/trustdb.c:1712 #, c-format msgid "%lu keys processed\n" msgstr "" -#: g10/trustdb.c:2564 g10/trustdb.c:2675 +#: g10/trustdb.c:1660 g10/trustdb.c:1716 #, fuzzy, c-format msgid "\t%lu keys with errors\n" msgstr "Ошибка записи файла" -#: g10/trustdb.c:2566 g10/trustdb.c:2677 -#, c-format -msgid "\t%lu keys updated\n" -msgstr "" - -#: g10/trustdb.c:2568 +#: g10/trustdb.c:1662 #, c-format msgid "\t%lu keys inserted\n" msgstr "" -#: g10/trustdb.c:2571 +#: g10/trustdb.c:1665 #, fuzzy, c-format msgid "enumerate keyblocks failed: %s\n" msgstr "обновление секрета не удалось: %s\n" -#: g10/trustdb.c:2598 +#: g10/trustdb.c:1703 #, c-format -msgid "%s: keyblock read problem: %s\n" +msgid "lid %lu: dir record w/o key - skipped\n" msgstr "" -#: g10/trustdb.c:2612 +#: g10/trustdb.c:1714 #, fuzzy, c-format -msgid "%s: update failed: %s\n" -msgstr "обновление не удалось: %s\n" - -#: g10/trustdb.c:2615 -#, c-format -msgid "%s: updated\n" -msgstr "" +msgid "\t%lu keys skipped\n" +msgstr "%s: пропущен: %s\n" -#: g10/trustdb.c:2617 +#: g10/trustdb.c:1718 #, c-format -msgid "%s: okay\n" +msgid "\t%lu keys updated\n" msgstr "" -#: g10/trustdb.c:2632 -#, c-format -msgid "lid %lu: dir record w/o key - skipped\n" +#: g10/trustdb.c:2055 +msgid "Ooops, no keys\n" msgstr "" -#: g10/trustdb.c:2645 -#, fuzzy, c-format -msgid "lid %lu: keyblock not found: %s\n" -msgstr "ключ %08lX: открытый ключ не найден: %s\n" - -#: g10/trustdb.c:2673 -#, fuzzy, c-format -msgid "\t%lu keys skipped\n" -msgstr "%s: пропущен: %s\n" +#: g10/trustdb.c:2059 +#, fuzzy +msgid "Ooops, no user ids\n" +msgstr "список ключей и идентификаторов пользователей" -#: g10/trustdb.c:2743 +#: g10/trustdb.c:2216 #, fuzzy, c-format msgid "check_trust: search dir record failed: %s\n" msgstr "ключ %08lX.%lu: вставка доверительной записи не удалась: %s\n" -#: g10/trustdb.c:2750 +#: g10/trustdb.c:2223 #, fuzzy, c-format msgid "key %08lX: insert trust record failed: %s\n" msgstr "ключ %08lX.%lu: вставка доверительной записи не удалась: %s\n" -#: g10/trustdb.c:2754 +#: g10/trustdb.c:2227 #, c-format msgid "key %08lX.%lu: inserted into trustdb\n" msgstr "ключ %08lX.%lu: вставлен в базу данных доверия\n" -#: g10/trustdb.c:2762 +#: g10/trustdb.c:2235 #, c-format msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" msgstr "" "ключ %08lX.%lu: сгенерирован в будущем (неправильно установлены часы)\n" -#: g10/trustdb.c:2769 +#: g10/trustdb.c:2244 #, c-format msgid "key %08lX.%lu: expired at %s\n" msgstr "ключ %08lX.%lu: срок действия истек %s\n" -#: g10/trustdb.c:2777 +#: g10/trustdb.c:2252 #, c-format msgid "key %08lX.%lu: trust check failed: %s\n" msgstr "ключ %08lX.%lu: проверка доверия не удалась: %s\n" -#: g10/trustdb.c:2881 +#: g10/trustdb.c:2358 #, fuzzy, c-format msgid "user '%s' not found: %s\n" msgstr "%s: пользователь не найден\n" -#: g10/trustdb.c:2883 +#: g10/trustdb.c:2360 #, fuzzy, c-format msgid "problem finding '%s' in trustdb: %s\n" msgstr "Ошибка инициализации базы данных доверия: %s\n" -#: g10/trustdb.c:2886 +#: g10/trustdb.c:2363 #, fuzzy, c-format msgid "user '%s' not in trustdb - inserting\n" msgstr "обновление базы данных доверия не удалось: %s\n" -#: g10/trustdb.c:2889 +#: g10/trustdb.c:2366 #, fuzzy, c-format msgid "failed to put '%s' into trustdb: %s\n" msgstr "Ошибка инициализации базы данных доверия: %s\n" +#: g10/trustdb.c:2552 g10/trustdb.c:2582 +msgid "WARNING: can't yet handle long pref records\n" +msgstr "" + #: g10/ringedit.c:316 #, fuzzy, c-format msgid "%s: can't create keyring: %s\n" msgstr "%s: невозможно открыть: %s\n" #: g10/ringedit.c:333 g10/ringedit.c:1349 #, fuzzy, c-format msgid "%s: keyring created\n" msgstr "%s: невозможно открыть: %s\n" #: g10/ringedit.c:1526 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "" #: g10/ringedit.c:1527 #, fuzzy, c-format msgid "%s is the unchanged one\n" msgstr "Использован неправильный секретный ключ" #: g10/ringedit.c:1528 #, c-format msgid "%s is the new one\n" msgstr "" #: g10/ringedit.c:1529 msgid "Please fix this possible security flaw\n" msgstr "" #: g10/skclist.c:88 g10/skclist.c:125 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" #: g10/skclist.c:113 #, fuzzy, c-format msgid "skipped `%s': %s\n" msgstr "%s: пропущен: %s\n" #: g10/skclist.c:119 #, fuzzy, c-format msgid "" "skipped `%s': this is a PGP generated ElGamal key which is not secure for " "signatures!\n" msgstr "этот ElGamal ключ, созданный PGP, не надежен для создания подписей!\n" #. do not overwrite #: g10/openfile.c:65 #, c-format msgid "File `%s' exists. " msgstr "Файл `%s' существует. " #: g10/openfile.c:67 msgid "Overwrite (y/N)? " msgstr "Переписать (y/N)? " #: g10/openfile.c:97 #, c-format msgid "%s: unknown suffix\n" msgstr "" -#: g10/openfile.c:122 +#: g10/openfile.c:119 +#, fuzzy +msgid "Enter new filename" +msgstr "--store [имя файла]" + +#: g10/openfile.c:160 #, fuzzy msgid "writing to stdout\n" msgstr "записывается в `%s'\n" -#: g10/openfile.c:181 +#: g10/openfile.c:219 #, fuzzy, c-format msgid "assuming signed data in `%s'\n" msgstr "невозможно открыть подписанные данные `%s' .\n" -#: g10/openfile.c:231 +#: g10/openfile.c:269 #, c-format msgid "%s: new options file created\n" msgstr "" #: g10/encr-data.c:66 #, fuzzy, c-format msgid "%s encrypted data\n" msgstr "зашифровать данные" #: g10/encr-data.c:68 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "" #: g10/encr-data.c:85 #, fuzzy msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "Предупреждение: сообщение было зашифровано, используя слабый ключ, в " "симметричном алгоритме шифрования.\n" #: g10/seskey.c:52 msgid "weak key created - retrying\n" msgstr "получился слабый ключ, пробуем еще раз\n" #: g10/seskey.c:57 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "не получается избежать слабого ключа в симметричном алгоритме; пробовали %d " "раз!\n" #. begin of list #: g10/helptext.c:48 msgid "edit_ownertrust.value" msgstr "" #: g10/helptext.c:54 msgid "revoked_key.override" msgstr "" #: g10/helptext.c:58 msgid "untrusted_key.override" msgstr "" #: g10/helptext.c:62 msgid "pklist.user_id.enter" msgstr "" #: g10/helptext.c:66 msgid "keygen.algo" msgstr "" #: g10/helptext.c:82 msgid "keygen.algo.elg_se" msgstr "" #: g10/helptext.c:89 msgid "keygen.size" msgstr "" #: g10/helptext.c:93 msgid "keygen.size.huge.okay" msgstr "" #: g10/helptext.c:98 msgid "keygen.size.large.okay" msgstr "" #: g10/helptext.c:103 msgid "keygen.valid" msgstr "" -#: g10/helptext.c:107 +#: g10/helptext.c:110 msgid "keygen.valid.okay" msgstr "" -#: g10/helptext.c:112 +#: g10/helptext.c:115 msgid "keygen.name" msgstr "" -#: g10/helptext.c:117 +#: g10/helptext.c:120 msgid "keygen.email" msgstr "" -#: g10/helptext.c:121 +#: g10/helptext.c:124 msgid "keygen.comment" msgstr "" -#: g10/helptext.c:126 +#: g10/helptext.c:129 msgid "keygen.userid.cmd" msgstr "" -#: g10/helptext.c:135 +#: g10/helptext.c:138 msgid "keygen.sub.okay" msgstr "" -#: g10/helptext.c:139 +#: g10/helptext.c:142 msgid "sign_uid.okay" msgstr "" -#: g10/helptext.c:144 +#: g10/helptext.c:147 msgid "change_passwd.empty.okay" msgstr "" -#: g10/helptext.c:149 -msgid "keyedit.cmd" -msgstr "" - -#: g10/helptext.c:153 +#: g10/helptext.c:152 msgid "keyedit.save.okay" msgstr "" -#: g10/helptext.c:158 +#: g10/helptext.c:157 msgid "keyedit.cancel.okay" msgstr "" -#: g10/helptext.c:162 +#: g10/helptext.c:161 msgid "keyedit.sign_all.okay" msgstr "" -#: g10/helptext.c:166 +#: g10/helptext.c:165 msgid "keyedit.remove.uid.okay" msgstr "" -#: g10/helptext.c:171 +#: g10/helptext.c:170 msgid "keyedit.remove.subkey.okay" msgstr "" -#: g10/helptext.c:176 +#: g10/helptext.c:175 msgid "keyedit.delsig.valid" msgstr "" -#: g10/helptext.c:181 +#: g10/helptext.c:180 msgid "keyedit.delsig.unknown" msgstr "" -#: g10/helptext.c:187 +#: g10/helptext.c:186 msgid "keyedit.delsig.invalid" msgstr "" -#: g10/helptext.c:191 +#: g10/helptext.c:190 msgid "keyedit.delsig.selfsig" msgstr "" # ################################ # ####### Help msgids ############ # ################################ -#: g10/helptext.c:200 +#: g10/helptext.c:199 msgid "passphrase.enter" msgstr "" "Bitte geben Sie die \"Passhrase\" ein; dies ist ein geheimer Satz der aus\n" "beliebigen Zeichen bestehen kann. Was Sie eingegeben wird nicht angezeigt.\n" "Zur ihrer eigenen Sicherbeit benutzen Sie biite einen Satz, den sie sich\n" "gut merken kЖnne, der aber nicht leicht zu raten ist; Zitate und andere\n" "bekannte Texte sind eine SCHLECHTE Wahl, da diese mit Sicherheit online\n" "verfЭgbar sind und durch entsprechende Programme zum Raten der " "\"Passphrase\"\n" "benutzt werden. SДtze mit persЖnlicher Bedeutung, die auch noch durch\n" "falsche Groъ-/Kleinschreibung und eingestreute Sonderzeichen verДndert " "werden,\n" "sind i.d.R. eine gute Wahl" -#: g10/helptext.c:207 +#: g10/helptext.c:206 msgid "passphrase.repeat" msgstr "" "Um sicher zu gehen, daъ Sie sich bei der Eingabe der \"Passphrase\" nicht\n" "vertippt haben, geben Sie diese bitte nochmal ein. Nur wenn beide Eingaben\n" "Эbereinstimmen, wird die \"Passphrase\" akzeptiert." -#: g10/helptext.c:211 +#: g10/helptext.c:210 #, fuzzy msgid "detached_signature.filename" msgstr "имя файла для отдельной подписи" +#. openfile.c (overwrite_filep) #: g10/helptext.c:215 msgid "openfile.overwrite.okay" msgstr "Вы желаете перезаписать файл (возможна потеря данных)" -#: g10/helptext.c:229 +#. openfile.c (ask_outfile_name) +#: g10/helptext.c:220 +msgid "openfile.askoutname" +msgstr "" + +#: g10/helptext.c:235 msgid "No help available" msgstr "Помощь отсутствует." -#: g10/helptext.c:241 +#: g10/helptext.c:247 #, c-format msgid "No help available for `%s'" msgstr "Помощь для `%s' отсутствует." +#, fuzzy +#~ msgid "lid %lu: user id not found in keyblock\n" +#~ msgstr "%s: пользователь не найден\n" + +#, fuzzy +#~ msgid "lid %lu: user id without signature\n" +#~ msgstr "ключ %08lX: нет идентификатора пользователя для подписи\n" + +#, fuzzy +#~ msgid "lid %lu: self-signature in hintlist\n" +#~ msgstr "build_sigrecs: Selbst-Signatur fehlt\n" + +#, fuzzy +#~ msgid "lid %lu: can't get keyblock: %s\n" +#~ msgstr "невозможно записать блок ключа: %s\n" + +#, fuzzy +#~ msgid "public key not anymore available" +#~ msgstr "Секретный ключ не существует" + +#, fuzzy +#~ msgid "insert_trust_record: keyblock not found: %s\n" +#~ msgstr "ключ %08lX: секретный ключ не найден: %s\n" + +#, fuzzy +#~ msgid "lid %lu: update failed: %s\n" +#~ msgstr "обновление не удалось: %s\n" + +#, fuzzy +#~ msgid "%s: update failed: %s\n" +#~ msgstr "обновление не удалось: %s\n" + +#, fuzzy +#~ msgid "lid %lu: keyblock not found: %s\n" +#~ msgstr "ключ %08lX: открытый ключ не найден: %s\n" + #, fuzzy #~ msgid "can't lock keyring `%': %s\n" #~ msgstr "невозможно заблокировать связку открытых ключей: %s\n" #, fuzzy #~ msgid "error writing keyring `%': %s\n" #~ msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" #~ msgid "can't open file: %s\n" #~ msgstr "невозможно открыть файл: %s\n" #~ msgid "read error: %s\n" #~ msgstr "ошибка чтения: %s\n" #~ msgid "can't write to keyring: %s\n" #~ msgstr "невозможно записать в связку ключей: %s\n" #~ msgid "writing keyblock\n" #~ msgstr "записывается блок ключа\n" #~ msgid "can't write keyblock: %s\n" #~ msgstr "невозможно записать блок ключа: %s\n" #~ msgid "can't lock secret keyring: %s\n" #~ msgstr "невозможно заблокировать связку секретных ключей: %s\n" #, fuzzy #~ msgid "can't write keyring: %s\n" #~ msgstr "невозможно записать связку ключей: %s\n" #, fuzzy #~ msgid "encrypted message is valid\n" #~ msgstr "выбран недопустимый дайджест-алгоритм\n" #, fuzzy #~ msgid "Can't check MDC: %s\n" #~ msgstr "Невозможно проверить подпись: %s\n" #~ msgid "Usage: gpgm [options] [files] (-h for help)" #~ msgstr "Использование: gpgm [параметры] [файлы] (-h для помощи)" #, fuzzy #~ msgid "" #~ "Syntax: gpgm [options] [files]\n" #~ "GnuPG maintenance utility\n" #~ msgstr "" #~ "Синтаксис: gpgm [параметры] [файлы]\n" #~ "Программа сопровождения GNUPG\n" #~ msgid "usage: gpgm [options] " #~ msgstr "Использование: gpgm [параметры] " #, fuzzy #~ msgid "'%s' is not a valid long keyID\n" #~ msgstr "Недопустимый символ в комментарии.\n" #, fuzzy #~ msgid "key %08lX: no public key for trusted key - skipped\n" #~ msgstr "секретный ключ %08lX: не имеет соответствующего открытого ключа.\n" #, fuzzy #~ msgid "lid %lu: read dir record failed: %s\n" #~ msgstr "ключ %08lX.%lu: вставка доверительной записи не удалась: %s\n" #, fuzzy #~ msgid "lid %lu: read key record failed: %s\n" #~ msgstr "ключ %08lX.%lu: вставка доверительной записи не удалась: %s\n" #, fuzzy #~ msgid "lid %lu: read uid record failed: %s\n" #~ msgstr "ключ %08lX.%lu: вставка доверительной записи не удалась: %s\n" #, fuzzy #~ msgid "lid %lu: read pref record failed: %s\n" #~ msgstr "ключ %08lX.%lu: вставка доверительной записи не удалась: %s\n" #, fuzzy #~ msgid "lid %lu: read sig record failed: %s\n" #~ msgstr "ключ %08lX.%lu: вставка доверительной записи не удалась: %s\n" #, fuzzy #~ msgid "user '%s' read problem: %s\n" #~ msgstr "%s: пользователь не найден\n" #, fuzzy #~ msgid "user '%s' list problem: %s\n" #~ msgstr "%s: пользователь не найден\n" #, fuzzy #~ msgid "user '%s' not in trustdb\n" #~ msgstr "%s: пользователь не найден\n" #, fuzzy #~ msgid "error: invalid fingerprint\n" #~ msgstr "ошибка в завершающей строке\n" #, fuzzy #~ msgid "error: no ownertrust value\n" #~ msgstr "экспортировать параметры доверия\n" #, fuzzy #~ msgid "key not in ring: %s\n" #~ msgstr "невозможно записать связку ключей: %s\n" #, fuzzy #~ msgid "insert trust record failed: %s\n" #~ msgstr "ключ %08lX.%lu: вставка доверительной записи не удалась: %s\n" -#, fuzzy -#~ msgid "error finding dir record: %s\n" -#~ msgstr "Fehler beim Erzeugen der \"Passphrase\": %s\n" - #, fuzzy #~ msgid "Hmmm, public key lost?" #~ msgstr "Плохой открытый ключ" #~ msgid "invalid clear text header: " #~ msgstr "недопустимый текстовый заголовок: " #~ msgid "You will see a list of signators etc. here\n" #~ msgstr "Здесь вы увидите список подписавших и т.д.\n" #~ msgid "key %08lX: already in ultikey_table\n" #~ msgstr "ключ %08lX: уже в ultikey_table\n" #, fuzzy #~ msgid "key %08lX.%lu, uid %02X%02X: no public key for signature %08lX\n" #~ msgstr "" #~ "ключ %08lX.%lu, uid %02X%02X: нет открытого ключа для подписи %08lX\n" #, fuzzy #~ msgid "key %08lX.%lu, uid %02X%02X: invalid %ssignature: %s\n" #~ msgstr "ключ %08lX: недопустимая само-подпись\n" #~ msgid "can't write keyring\n" #~ msgstr "kann ключring nicht schreiben\n" #~ msgid "make a signature on a key in the keyring" #~ msgstr "ключ signieren" #~ msgid "edit a key signature" #~ msgstr "Bearbeiten der Signaturen eines ключs" #~ 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.\n" #~ msgstr "" #~ "Sie mЭssen selbt entscheiden, welchen Wert Sie hier eintragen; dieser Wert\n" #~ "wird niemals an eine dritte Seite weitergegeben. Wir brauchen diesen Wert,\n" #~ "um das \"Netz des Vertrauens\" aufzubauen. Dieses hat nichts mit dem " #~ "(implizit\n" #~ "erzeugten) \"Netz der Zertifikate\" zu tun.\n" #~ msgid "public and secret subkey created.\n" #~ msgstr "жffentlicher und privater ключ erzeugt.\n" #~ msgid "No public key for %d signatures\n" #~ msgstr "Kein Жffentlicher ключ fЭr %d Signaturen\n" #~ msgid "[User name not available] " #~ msgstr "[Benuzername nicht verfЭgbar] " #~ msgid "This is a BAD signature!\n" #~ msgstr "Dies ist eine FALSCHE Signatur!\n" #~ msgid "The signature could not be checked!\n" #~ msgstr "Die Signatur konnte nicht geprЭft werden!\n" #~ msgid "Checking signatures of this public key certificate:\n" #~ msgstr "Die Signaturen dieses Zertifikats werden ЭberprЭft:\n" #~ msgid "Do you want to remove some of the invalid signatures? " #~ msgstr "MЖchten Sie einige der ungЭltigen Signaturen entfernen? " #~ msgid "there is a secret key for this public key!\n" #~ msgstr "Es gibt einen privaten ключ zu diesem Жffentlichen ключ!\n" #~ msgid "use option \"--delete-secret-key\" to delete it first.\n" #~ msgstr "" #~ "Benutzen Sie das Kommando \"--delete-secret-key\", um ihn vorab zu " #~ "entfernen.\n" #~ msgid "can't do that in batchmode without \"--yes\"\n" #~ msgstr "Dies kann im Batchmodus ohne \"--yes\" nicht durchgefЭhrt werden.\n" #~ msgid "Delete this key from the keyring? " #~ msgstr "Diesen ключ aus dem ключring lЖschen? " #~ msgid "This is a secret key! - really delete? " #~ msgstr "Dies ist ein privater ключ! - Wirklich lЖschen? " diff --git a/scripts/autogen.sh b/scripts/autogen.sh index 266eb75b6..045716b87 100755 --- a/scripts/autogen.sh +++ b/scripts/autogen.sh @@ -1,102 +1,102 @@ #!/bin/sh # Run this to generate all the initial makefiles, etc. PGM=GnuPG DIE=no autoconf_vers=2.13 automake_vers=1.4 aclocal_vers=1.4 -libtool_vers=1.2 +libtool_vers=1.3 if (autoconf --version) < /dev/null > /dev/null 2>&1 ; then if (autoconf --version | awk 'NR==1 { if( $3 >= '$autoconf_vers') \ exit 1; exit 0; }'); then echo "**Error**: "\`autoconf\'" is too old." echo ' (version ' $autoconf_vers ' or newer is required)' DIE="yes" fi else echo echo "**Error**: You must have "\`autoconf\'" installed to compile $PGM." echo ' (version ' $autoconf_vers ' or newer is required)' DIE="yes" fi if (automake --version) < /dev/null > /dev/null 2>&1 ; then if (automake --version | awk 'NR==1 { if( $4 >= '$automake_vers') \ exit 1; exit 0; }'); then echo "**Error**: "\`automake\'" is too old." echo ' (version ' $automake_vers ' or newer is required)' DIE="yes" fi if (aclocal --version) < /dev/null > /dev/null 2>&1; then if (aclocal --version | awk 'NR==1 { if( $4 >= '$aclocal_vers' ) \ exit 1; exit 0; }' ); then echo "**Error**: "\`aclocal\'" is too old." echo ' (version ' $aclocal_vers ' or newer is required)' DIE="yes" fi else echo echo "**Error**: Missing "\`aclocal\'". The version of "\`automake\' echo " installed doesn't appear recent enough." DIE="yes" fi else echo echo "**Error**: You must have "\`automake\'" installed to compile $PGM." echo ' (version ' $automake_vers ' or newer is required)' DIE="yes" fi if (gettext --version /dev/null | awk 'NR==1 { split($4,A,"\."); \ X=10000*A[1]+100*A[2]+A[3]; echo X; if( X >= 1035 ) exit 1; exit 0}') then echo "**Error**: You must have "\`gettext\'" installed to compile $PGM." echo ' (version 0.10.35 or newer is required; get' echo ' ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz' echo ' or install the latest Debian package)' DIE="yes" fi if (libtool --version) < /dev/null > /dev/null 2>&1 ; then if (libtool --version | awk 'NR==1 { if( $4 >= '$libtool_vers') \ exit 1; exit 0; }'); then echo "**Error**: "\`libtool\'" is too old." echo ' (version ' $libtool_vers ' or newer is required)' DIE="yes" fi else echo echo "**Error**: You must have "\`libtool\'" installed to compile $PGM." echo ' (version ' $libtool_vers ' or newer is required)' DIE="yes" fi if test "$DIE" = "yes"; then exit 1 fi echo "Running gettextize... Ignore non-fatal messages." echo "no" | gettextize --force echo "Running aclocal..." aclocal echo "Running autoheader..." autoheader echo "Running automake --gnu ..." automake --gnu; echo "Running autoconf..." autoconf echo "You can now run \"./configure\" and then \"make\"." diff --git a/scripts/distfiles b/scripts/distfiles index 13127323a..804b73f88 100644 --- a/scripts/distfiles +++ b/scripts/distfiles @@ -1,10 +1,12 @@ config.guess config.sub install-sh mkinstalldirs mkdiff missing gnupg.spec.in autogen.sh ChangeLog +ltconfig +ltmain.sh diff --git a/tools/ChangeLog b/tools/ChangeLog index 8555c72ce..b59145f02 100644 --- a/tools/ChangeLog +++ b/tools/ChangeLog @@ -1,18 +1,23 @@ +Wed Jul 7 13:08:40 CEST 1999 Werner Koch + + + * Makefile.am: Support for libtool. + Tue Jun 8 13:36:25 CEST 1999 Werner Koch * mpicalc.c (main): hex digits may now be lowercase (do_mulm): new. Thu Dec 10 20:15:36 CET 1998 Werner Koch * mpicalc.c (main): Moved initialization out of definition. Mon May 18 15:39:22 1998 Werner Koch (wk@isil.d.shuttle.de) * mk-tdata.c: New. Tue Apr 7 19:50:41 1998 Werner Koch (wk@isil.d.shuttle.de) * bftest.c: Now supports all availabe ciphers. diff --git a/tools/Makefile.am b/tools/Makefile.am index 71db17c68..403aa6761 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -1,24 +1,24 @@ ## Process this file with automake to produce Makefile.in INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/intl -needed_libs = ../cipher/libcipher.a ../util/libutil.a \ - ../mpi/libmpi.a ../util/libutil.a @INTLLIBS@ +needed_libs = ../cipher/libcipher.la \ + ../mpi/libmpi.la ../util/libutil.la @INTLLIBS@ noinst_PROGRAMS = mpicalc bftest clean-sat mk-tdata shmtest mpicalc_SOURCES = mpicalc.c bftest_SOURCES = bftest.c clean_sat_SOURCES = clean-sat.c mk_tdata_SOURCES = mk-tdata.c shmtest_SOURCES = shmtest.c mpicalc_LDADD = $(needed_libs) bftest_LDADD = $(needed_libs) shmtest_LDADD = $(needed_libs) mpicalc bftest shmtest: $(needed_libs) diff --git a/util/ChangeLog b/util/ChangeLog index e74bf851e..44c0f7f65 100644 --- a/util/ChangeLog +++ b/util/ChangeLog @@ -1,396 +1,408 @@ +Wed Jul 7 13:08:40 CEST 1999 Werner Koch + + + * memory.c (membug): Use if either M_DEBUG or M_GUARD is used. + + * miscutil.c (scan_isodatestr): New. + + * logger.c (g10_log_mpidump): Moved to ../mpi/mpicoder.c + (g10_log_print_prefix): Renamed from print_prefix and made global. + + * Makefile.am: Support for libtool. + Thu Jul 1 12:47:31 CEST 1999 Werner Koch * miscutil.c (make_printable_string): New. * strgutil.c (add_to_strlist2,append_to_strlist2): New. Tue Jun 29 21:44:25 CEST 1999 Werner Koch * secmem.c (USE_CAPABILITIES): Capabilities support (Remi). Sat Jun 26 12:15:59 CEST 1999 Werner Koch * dotlock.c (create_dotlock): s/uts/utsbuf/ cause there an Amdahl system with the name UTS (Dave Dykstra). * secmem.c (DEFAULT_POOLSIZE): Doubled the size. Fri Jun 18 00:18:02 CEST 1999 Michael Roth * iobuf.c: file_filter() Detection of EOF on terminals improved/fixed (see Bug #21). Mon Jun 14 21:18:54 CEST 1999 Michael Roth * ttyio.c: tty_no_terminal() new. Sat Jun 5 15:30:33 CEST 1999 Werner Koch * strgutil.c (set_native_charset): Support Latin-2 Tue Jun 1 16:01:46 CEST 1999 Werner Koch * iobuf.c (iobuf_get_real_fname): Made global and now keep a copy of the name in the iobuf struct. Mon May 31 19:41:10 CEST 1999 Werner Koch * iobuf.c (file_filter,block_filter): Speed patches (RИmi). Thu May 27 09:40:55 CEST 1999 Werner Koch * miscutil.c (answer_is_yes_no_quit): New. Sun May 23 14:20:22 CEST 1999 Werner Koch * dotlock.c: Tweaked to make it compile under mingw32 * http.c: Disabled for mingw32. Sat May 22 22:47:26 CEST 1999 Werner Koch * logger.c (log_set_logfile): New. Thu May 20 14:04:08 CEST 1999 Werner Koch * memory.c (membug): Nanu, there was a const instead of a static. * strgutil.c (trim_trailing_chars): New. Mon May 17 21:54:43 CEST 1999 Werner Koch * logger.c (g10_log_hexdump): Made 2nd arg a const. Wed Apr 28 13:03:03 CEST 1999 Werner Koch * miscutil.c (asctimestamp): Use nl_langinfo (GaКl QuИri). Sun Apr 18 10:11:28 CEST 1999 Werner Koch * argparse.c (store_alias): Disabled becuase it is not used. * ttyio.c (tty_batchmode): New Sat Mar 20 11:44:21 CET 1999 Werner Koch * http.c: Swapped to includes. Tue Mar 2 16:44:57 CET 1999 Werner Koch * strgutil.c (get_native_charset): New. Fri Feb 26 17:55:41 CET 1999 Werner Koch * secmem.c (memblock_struct): Force align (RИmi Guyomarch) Wed Feb 24 11:07:27 CET 1999 Werner Koch * iobuf.c (block_filter): Fixed the oscillating partial packet chunks. Fri Feb 19 15:49:15 CET 1999 Werner Koch * iobuf.c (iobuf_push_filter2): New to allow transer of context ownership to the iobuf. Released the context where needed. Tue Feb 16 14:10:02 CET 1999 Werner Koch * strgutil.c (add_to_strglist): Clear the new flags field (append_to_strglist): Ditto. * dotlock.c (read_lockfile): terminate pidstr (Michael). Wed Feb 10 17:15:39 CET 1999 Werner Koch * dotlock.c (remove_lockfiles): Add cleanup function. (make_dotlock): Add deadlock check. * secmem.c (secmem_malloc): Changed error message. Wed Jan 20 21:40:21 CET 1999 Werner Koch * http.c (http_wait_response): Moved the shutdown behind the dup Wed Jan 20 18:59:49 CET 1999 Werner Koch * http.c (send_request): Removed double LF Tue Jan 19 19:34:58 CET 1999 Werner Koch * * iobuf.c (iobuf_push_filter): Allow filters for temp streams (iobuf_write_temp): Ditto. (iobuf_flush_temp): New. (iobuf_unget_and_close_temp): Removed. * http.c (close_http_document): Renamed to http_close(). (open_http_document): Renamed to http_open_document(). (http_open): New. (http_start_data): New. (http_wait_response): New. Sun Jan 17 11:04:33 CET 1999 Werner Koch * strgutil.c (trim_trailing_ws): New. Sat Jan 16 12:03:27 CET 1999 Werner Koch * http.c (connect_server): Fixed stupid bug. Sat Jan 16 09:27:30 CET 1999 Werner Koch * http.c: New Wed Jan 13 14:10:15 CET 1999 Werner Koch * iobuf.c (iobuf_fdopen): New. Sat Jan 9 16:02:23 CET 1999 Werner Koch * secmem.c (lock_pool): add another check that setuid() worked. (secmem_init): Ditto. Thu Jan 7 18:00:58 CET 1999 Werner Koch * iobuf.c (iobuf_clear_eof): Removed. (underflow): Changed the eof handling. (iobuf_pop_filter): Made static and renamed to pop_filter. * iobuf.c (iobuf_read_line): New. Sun Jan 3 15:28:44 CET 1999 Werner Koch * dotlock.c (make_dotlock): print another informal message. (make_dotlock): Removed the cpp checks. Tue Dec 29 14:41:47 CET 1998 Werner Koch * secmem.c: Moved unistd.h out of the #ifdef * dotlock.c (make_dotlock): Sun has no SYS_NMLN * iobuf.c (iobuf_unget_and_close_temp): Reset .start Sat Dec 12 18:40:32 CET 1998 Werner Koch * argparse.c (arg_pars): fixed opts[i] with negative index. Fri Nov 27 21:37:41 CET 1998 Werner Koch * dotlock.c: Implemented Wed Nov 25 11:30:07 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.c (iobuf_pop_filter): Fixed sigsegv after error. Thu Nov 19 07:09:55 1998 Werner Koch * miscutil.c (strtimevalue): New. Tue Nov 10 10:01:53 1998 Werner Koch (wk@isil.d.shuttle.de) * strgutil.c (set_native_charset): New. (native_to_utf8): Now handles koi8-r. Tue Nov 3 16:17:56 1998 Werner Koch (wk@isil.d.shuttle.de) * strgutil.c (native_to_utf8): New. (utf8_to_native): New, but only as a stub. * argparse.c (optfile_parse): Trimmed spaces from args. Wed Oct 28 08:01:49 1998 me,,, (wk@tobold) * argparse.c (find_long_option): New. (arg_parse): option=value is now allowed. Add a new internal option "--dump-options". Thu Oct 22 16:25:49 1998 Michael Roth (mroth@nessie.de) * fileutil.c (make_basename): New. (make_dirname): New. Wed Oct 21 12:20:29 1998 Werner Koch (wk@isil.d.shuttle.de) * util.c (iobuf_flush): autoincreasing of a temp. iobuf (iobuf_temp_with_content): New. Tue Oct 13 12:40:13 1998 Werner Koch (wk@isil.d.shuttle.de) * util.c (.nofast): set this variable Wed Oct 7 19:27:50 1998 Werner Koch (wk@isil.d.shuttle.de) * memory.c (m_print_stats): New. Tue Oct 6 09:53:56 1998 Werner Koch (wk@isil.d.shuttle.de) * strgutil.c (memicmp): Add HAVE_MEMICMP. Mon Sep 21 19:45:01 1998 Werner Koch (wk@(none)) * secmem.c: New flags to allow suspend/resume of warnings. Fri Sep 18 16:25:47 1998 Werner Koch (wk@(none)) * secmem.c (lock_pool): Kludge for broken mlock on HPUX 10.20 Tue Sep 15 17:52:21 1998 Werner Koch (wk@(none)) * miscutil.c (asctimestamp): New. Mon Sep 14 09:38:18 1998 Werner Koch (wk@(none)) * secmem.c (init_pool): Now mmaps /dev/zero if we do not have MAP_ANON. Wed Sep 9 13:52:28 1998 Werner Koch (wk@(none)) * ttyio.c (do_get): Ctrl-D is now a valid but special character Mon Sep 7 13:52:41 1998 Werner Koch (wk@(none)) * iobuf.c (get_real_fname): New and changed file_filter datastructures and their initialization. Tue Aug 11 15:12:35 1998 Werner Koch (wk@(none)) * miscutil.c (answer_is_yes): i18ned Sat Aug 8 18:35:00 1998 Werner Koch (wk@(none)) * ttyio.c (cleanup): New. Mon Aug 3 17:06:00 1998 Werner Koch (wk@(none)) * secmem.c (MAP_ANON): Add a macro test Wed Jul 29 14:53:34 1998 Werner Koch (wk@(none)) * ttyio.c (tty_get_answer_is_yes): New. Tue Jul 21 10:35:48 1998 Werner Koch (wk@(none)) * argparse.c: New option flag to distinguish options and commands. Sat Jul 18 19:49:30 1998 Werner Koch (wk@(none)) * argparse.c (arg_parse): Added -? as alias for -h Thu Jul 9 14:47:20 1998 Werner Koch (wk@isil.d.shuttle.de) * secmem.c (secmem_init): Drops setuid if called with 0. Tue Jul 7 11:49:25 1998 Werner Koch (wk@isil.d.shuttle.de) * logger.c (log_set_filename): New. Mon Jul 6 09:03:49 1998 Werner Koch (wk@isil.d.shuttle.de) * strgutil.c (append_to_strlist): New. Thu Jul 2 15:55:44 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.c (block_filter): Add writing of OP partial length headers. Fri Jun 26 10:38:35 1998 Werner Koch (wk@isil.d.shuttle.de) * ttyio.c (do_get): all iso8859-1 characters are now allowed. Thu Jun 25 15:57:21 1998 Werner Koch (wk@isil.d.shuttle.de) * secmem.c (lock_pool): Removed left over test code. Wed Jun 10 07:39:41 1998 Werner Koch,mobil,,, (wk@tobold) * fileutil.c (compare_filenames): New. * argparse.c (arg_parse): New flag bit 6 to ignore --version Thu May 14 16:45:13 1998 Werner Koch (wk@isil.d.shuttle.de) * argparse.c (show_help): Add some formatting stuff Fri May 8 17:06:49 1998 Werner Koch (wk@isil.d.shuttle.de) * errors.c (strerror): New if !HAVE_STRERROR Mon May 4 19:48:03 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.c (iobuf_read): Code is now faster. * (iobuf_write): ditto. Mon Apr 27 11:01:32 1998 Werner Koch (wk@isil.d.shuttle.de) * strgutil.c (memicmp): New. Thu Mar 19 11:29:03 1998 Werner Koch (wk@isil.d.shuttle.de) * strgutil.c (memistr): Add const to return and first arg. Sat Mar 7 11:54:35 1998 Werner Koch (wk@isil.d.shuttle.de) * miscutil.c (print_string): New arg delim; changed all callers. Thu Mar 5 12:19:30 1998 Werner Koch (wk@isil.d.shuttle.de) * errors.c: New strings. Thu Mar 5 12:06:31 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.c (iobuf_open): A name of "-" now opens stdin. * fileutil.c (print_fname_stdout, print_fname_stdin): New. Fri Feb 27 10:20:03 1998 Werner Koch (wk@isil.d.shuttle.de) * memory.c (m_is_secure): Removed. * secmem.c (m_is_secure): Moved to here. * secmem.c (secmem_realloc): New. * memory.c (M_GUARD,EXTRA_ALIGN): New (all functions). Thu Feb 26 14:36:51 1998 Werner Koch (wk@isil.d.shuttle.de) * secmem.c (lock_pool): No error if EAGAIN is returned instead of EPERM. Fri Feb 20 17:43:05 1998 Werner Koch (wk@isil.d.shuttle.de) * ttyio.c [MINGW32]: Add support for mingw32. Tue Feb 17 19:43:44 1998 Werner Koch (wk@isil.d.shuttle.de) * memory.c (dump_table_at_exit): New. Mon Feb 16 10:07:28 1998 Werner Koch (wk@isil.d.shuttle.de) * argparse.c (show_version, show_help, default_strusage): Changed according to GNU standards. Mon Feb 16 08:58:25 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.c (iobuf_peek): New Fri Feb 13 19:34:59 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.c (iobuf_seek): Set counters to new offset. Fri Feb 13 17:13:04 1998 Werner Koch (wk@isil.d.shuttle.de) * logger.c (log_set_name, log_get_name): New. (print_prefix, pgm_name): New, changed all function to make use it. (log_mpidump): Removed the "DBG" prefix. (log_hexdump): Ditto. * logger.c (printstr): Removed. Fri Feb 13 15:14:13 1998 Werner Koch (wk@isil.d.shuttle.de) * argparse.c (show_help): New '\v' kludge. diff --git a/util/Makefile.am b/util/Makefile.am index 5b0b99df2..75f9e8c18 100644 --- a/util/Makefile.am +++ b/util/Makefile.am @@ -1,18 +1,19 @@ ## Process this file with automake to produce Makefile.in INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/intl -noinst_LIBRARIES = libutil.a +noinst_LTLIBRARIES = libutil.la -libutil_a_SOURCES = g10u.c logger.c fileutil.c miscutil.c strgutil.c \ - ttyio.c argparse.c memory.c secmem.c errors.c iobuf.c \ - dotlock.c http.c +libutil_la_LDFLAGS = +libutil_la_SOURCES = g10u.c logger.c fileutil.c miscutil.c strgutil.c \ + ttyio.c argparse.c memory.c secmem.c errors.c iobuf.c \ + dotlock.c http.c http-test: http.c gcc -DHAVE_CONFIG_H -I. -I. -I.. $(INCLUDES) -g -Wall -DTEST \ -o http-test http.c libutil.a ../mpi/libmpi.a @INTLLIBS@ diff --git a/util/logger.c b/util/logger.c index 2573f5b63..a1fb1f3d7 100644 --- a/util/logger.c +++ b/util/logger.c @@ -1,271 +1,264 @@ /* logger.c - log functions * Copyright (C) 1998 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 #include #include #include #include #include #include "util.h" #include "i18n.h" static char pidstring[15]; static char *pgm_name; static int errorcount; static FILE *logfp; /**************** * Set the logfile to use (not yet implemneted) or, if logfile is NULL, * the Fd where logoutputs should go. */ void log_set_logfile( const char *name, int fd ) { if( name ) BUG(); if( logfp && logfp != stderr && logfp != stdout ) fclose( logfp ); if( fd == 1 ) logfp = stdout; else if( fd == 2 ) logfp = stderr; else logfp = fdopen( fd, "a" ); if( !logfp ) { logfp = stderr; log_fatal("can't open fd %d for logging: %s\n", fd, strerror(errno)); } } FILE * log_stream() { if( !logfp ) logfp = stderr; return logfp; } void log_set_name( const char *name ) { m_free(pgm_name); if( name ) pgm_name = m_strdup(name); else pgm_name = NULL; } const char * log_get_name(void) { return pgm_name? pgm_name : ""; } void log_set_pid( int pid ) { if( pid ) sprintf(pidstring,"[%u]", (unsigned)pid ); else *pidstring = 0; } int log_get_errorcount( int clear) { int n = errorcount; if( clear ) errorcount = 0; return n; } -static void -print_prefix(const char *text) +void +g10_log_print_prefix(const char *text) { if( !logfp ) logfp = stderr; if( pgm_name ) fprintf(logfp, "%s%s: %s", pgm_name, pidstring, text ); else fprintf(logfp, "?%s: %s", pidstring, text ); } static void print_prefix_f(const char *text, const char *fname) { if( !logfp ) logfp = stderr; if( pgm_name ) fprintf(logfp, "%s%s:%s: %s", pgm_name, pidstring, fname, text ); else fprintf(logfp, "?%s:%s: %s", pidstring, fname, text ); } void g10_log_info( const char *fmt, ... ) { va_list arg_ptr ; - print_prefix(""); + g10_log_print_prefix(""); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); } void g10_log_info_f( const char *fname, const char *fmt, ... ) { va_list arg_ptr ; print_prefix_f("", fname); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); } void g10_log_error( const char *fmt, ... ) { va_list arg_ptr ; - print_prefix(""); + g10_log_print_prefix(""); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); errorcount++; } void g10_log_error_f( const char *fname, const char *fmt, ... ) { va_list arg_ptr ; print_prefix_f("", fname); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); errorcount++; } void g10_log_fatal( const char *fmt, ... ) { va_list arg_ptr ; - print_prefix("fatal: "); + g10_log_print_prefix("fatal: "); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); secmem_dump_stats(); exit(2); } void g10_log_fatal_f( const char *fname, const char *fmt, ... ) { va_list arg_ptr ; print_prefix_f("fatal: ", fname); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); secmem_dump_stats(); exit(2); } void g10_log_bug( const char *fmt, ... ) { va_list arg_ptr ; putc('\n', stderr ); - print_prefix("Ohhhh jeeee: "); + g10_log_print_prefix("Ohhhh jeeee: "); va_start( arg_ptr, fmt ) ; vfprintf(stderr,fmt,arg_ptr) ; va_end(arg_ptr); fflush(stderr); secmem_dump_stats(); abort(); } #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ) void g10_log_bug0( const char *file, int line, const char *func ) { log_bug(_("... this is a bug (%s:%d:%s)\n"), file, line, func ); } #else void g10_log_bug0( const char *file, int line ) { log_bug(_("you found a bug ... (%s:%d)\n"), file, line); } #endif void g10_log_debug( const char *fmt, ... ) { va_list arg_ptr ; - print_prefix("DBG: "); + g10_log_print_prefix("DBG: "); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); } void g10_log_debug_f( const char *fname, const char *fmt, ... ) { va_list arg_ptr ; print_prefix_f("DBG: ", fname); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); } void g10_log_hexdump( const char *text, const char *buf, size_t len ) { int i; - print_prefix(text); + g10_log_print_prefix(text); for(i=0; i < len; i++ ) fprintf(logfp, " %02X", ((const byte*)buf)[i] ); fputc('\n', logfp); } -void -g10_log_mpidump( const char *text, MPI a ) -{ - print_prefix(text); - mpi_print(logfp, a, 1 ); - fputc('\n', logfp); -} diff --git a/util/memory.c b/util/memory.c index 40784375d..af79cd0cb 100644 --- a/util/memory.c +++ b/util/memory.c @@ -1,590 +1,593 @@ /* memory.c - memory allocation * Copyright (C) 1998 Free Software Foundation, Inc. * * We use our own memory allocation functions instead of plain malloc(), * so that we can provide some special enhancements: * a) functions to provide memory from a secure memory. * b) by looking at the requested allocation size we * can reuse memory very quickly (e.g. MPI storage) * (really needed?) * c) memory usage reporting if compiled with M_DEBUG * d) memory checking if compiled with M_GUARD * * 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 #include #include #include #include #include "types.h" #include "memory.h" #include "util.h" #define MAGIC_NOR_BYTE 0x55 #define MAGIC_SEC_BYTE 0xcc #define MAGIC_END_BYTE 0xaa #if SIZEOF_UNSIGNED_LONG == 8 #define EXTRA_ALIGN 4 #else #define EXTRA_ALIGN 0 #endif +#if defined(M_DEBUG) || defined(M_GUARD) + static void membug( const char *fmt, ... ); +#endif #ifdef M_DEBUG - static void membug( const char *fmt, ... ); #ifndef M_GUARD #define M_GUARD 1 #endif #undef m_alloc #undef m_alloc_clear #undef m_alloc_secure #undef m_alloc_secure_clear #undef m_realloc #undef m_free #undef m_check #undef m_strdup #define FNAME(a) m_debug_ ##a #define FNAMEPRT , const char *info #define FNAMEARG , info #define store_len(p,n,m) do { add_entry(p,n,m, \ info, __FUNCTION__); } while(0) #else #define FNAME(a) m_ ##a #define FNAMEPRT #define FNAMEARG #define store_len(p,n,m) do { ((byte*)p)[EXTRA_ALIGN+0] = n; \ ((byte*)p)[EXTRA_ALIGN+1] = n >> 8 ; \ ((byte*)p)[EXTRA_ALIGN+2] = n >> 16 ; \ ((byte*)p)[EXTRA_ALIGN+3] = m? MAGIC_SEC_BYTE \ : MAGIC_NOR_BYTE; \ } while(0) #endif #ifdef M_GUARD static long used_memory; #endif #ifdef M_DEBUG /* stuff used for memory debuging */ struct info_entry { struct info_entry *next; unsigned count; /* call count */ const char *info; /* the reference to the info string */ }; struct memtbl_entry { const void *user_p; /* for reference: the pointer given to the user */ size_t user_n; /* length requested by the user */ struct memtbl_entry *next; /* to build a list of unused entries */ const struct info_entry *info; /* points into the table with */ /* the info strings */ unsigned inuse:1; /* this entry is in use */ unsigned count:31; }; #define INFO_BUCKETS 53 #define info_hash(p) ( *(u32*)((p)) % INFO_BUCKETS ) static struct info_entry *info_strings[INFO_BUCKETS]; /* hash table */ static struct memtbl_entry *memtbl; /* the table with the memory info */ static unsigned memtbl_size; /* number of allocated entries */ static unsigned memtbl_len; /* number of used entries */ static struct memtbl_entry *memtbl_unused;/* to keep track of unused entries */ static void dump_table_at_exit(void); static void dump_table(void); static void check_allmem( const char *info ); /**************** * Put the new P into the debug table and return a pointer to the table entry. * mode is true for security. BY is the name of the function which called us. */ static void add_entry( byte *p, unsigned n, int mode, const char *info, const char *by ) { unsigned index; struct memtbl_entry *e; struct info_entry *ie; if( memtbl_len < memtbl_size ) index = memtbl_len++; else { struct memtbl_entry *e; /* look for a used entry in the table. We take the first one, * so that freed entries remain as long as possible in the table * (free appends a new one) */ if( (e = memtbl_unused) ) { index = e - memtbl; memtbl_unused = e->next; e->next = NULL; } else { /* no free entries in the table: extend the table */ if( !memtbl_size ) { /* first time */ memtbl_size = 100; if( !(memtbl = calloc( memtbl_size, sizeof *memtbl )) ) membug("memory debug table malloc failed\n"); index = 0; memtbl_len = 1; atexit( dump_table_at_exit ); } else { /* realloc */ unsigned n = memtbl_size / 4; /* enlarge by 25% */ if(!(memtbl = realloc(memtbl, (memtbl_size+n)*sizeof *memtbl))) membug("memory debug table realloc failed\n"); memset(memtbl+memtbl_size, 0, n*sizeof *memtbl ); memtbl_size += n; index = memtbl_len++; } } } e = memtbl+index; if( e->inuse ) membug("Ooops: entry %u is flagged as in use\n", index); e->user_p = p + 4; e->user_n = n; e->count++; if( e->next ) membug("Ooops: entry is in free entry list\n"); /* do we already have this info string */ for( ie = info_strings[info_hash(info)]; ie; ie = ie->next ) if( ie->info == info ) break; if( !ie ) { /* no: make a new entry */ if( !(ie = malloc( sizeof *ie )) ) membug("can't allocate info entry\n"); ie->next = info_strings[info_hash(info)]; info_strings[info_hash(info)] = ie; ie->info = info; ie->count = 0; } ie->count++; e->info = ie; e->inuse = 1; /* put the index at the start of the memory */ p[0] = index; p[1] = index >> 8 ; p[2] = index >> 16 ; p[3] = mode? MAGIC_SEC_BYTE : MAGIC_NOR_BYTE ; if( DBG_MEMORY ) log_debug( "%s allocates %u bytes using %s\n", info, e->user_n, by ); } /**************** * Check that the memory block is correct. The magic byte has already been * checked. Checks which are done here: * - see whether the index points into our memory table * - see whether P is the same as the one stored in the table * - see whether we have already freed this block. */ struct memtbl_entry * check_mem( const byte *p, const char *info ) { unsigned n; struct memtbl_entry *e; n = p[EXTRA_ALIGN+0]; n |= p[EXTRA_ALIGN+1] << 8; n |= p[EXTRA_ALIGN+2] << 16; if( n >= memtbl_len ) membug("memory at %p corrupted: index=%u table_len=%u (%s)\n", p+EXTRA_ALIGN+4, n, memtbl_len, info ); e = memtbl+n; if( e->user_p != p+EXTRA_ALIGN+4 ) membug("memory at %p corrupted: reference mismatch (%s)\n", p+EXTRA_ALIGN+4, info ); if( !e->inuse ) membug("memory at %p corrupted: marked as free (%s)\n", p+EXTRA_ALIGN+4, info ); if( !(p[EXTRA_ALIGN+3] == MAGIC_NOR_BYTE || p[EXTRA_ALIGN+3] == MAGIC_SEC_BYTE) ) membug("memory at %p corrupted: underflow=%02x (%s)\n", p+EXTRA_ALIGN+4, p[EXTRA_ALIGN+3], info ); if( p[EXTRA_ALIGN+4+e->user_n] != MAGIC_END_BYTE ) membug("memory at %p corrupted: overflow=%02x (%s)\n", p+EXTRA_ALIGN+4, p[EXTRA_ALIGN+4+e->user_n], info ); return e; } /**************** * free the entry and the memory (replaces free) */ static void free_entry( byte *p, const char *info ) { struct memtbl_entry *e, *e2; check_allmem("add_entry"); e = check_mem(p, info); if( DBG_MEMORY ) log_debug( "%s frees %u bytes alloced by %s\n", info, e->user_n, e->info->info ); if( !e->inuse ) { if( e->user_p == p + EXTRA_ALIGN+ 4 ) membug("freeing an already freed pointer at %p\n", p+EXTRA_ALIGN+4 ); else membug("freeing pointer %p which is flagged as freed\n", p+EXTRA_ALIGN+4 ); } e->inuse = 0; e->next = NULL; if( !memtbl_unused ) memtbl_unused = e; else { for(e2=memtbl_unused; e2->next; e2 = e2->next ) ; e2->next = e; } memset(p,'f', e->user_n+5); free(p); } static void dump_entry(struct memtbl_entry *e ) { unsigned n = e - memtbl; fprintf(stderr, "mem %4u%c %5u %p %5u %s (%u)\n", n, e->inuse?'a':'u', e->count, e->user_p, e->user_n, e->info->info, e->info->count ); } static void dump_table_at_exit( void) { if( DBG_MEMSTAT ) dump_table(); } static void dump_table( void) { unsigned n; struct memtbl_entry *e; ulong sum = 0, chunks =0; for( e = memtbl, n = 0; n < memtbl_len; n++, e++ ) { if(e->inuse) { dump_entry(e); sum += e->user_n; chunks++; } } fprintf(stderr, " memory used: %8lu bytes in %ld chunks\n", sum, chunks ); } static void check_allmem( const char *info ) { unsigned n; struct memtbl_entry *e; for( e = memtbl, n = 0; n < memtbl_len; n++, e++ ) if( e->inuse ) check_mem(e->user_p-4-EXTRA_ALIGN, info); } +#endif /* M_DEBUG */ +#if defined(M_DEBUG) || defined(M_GUARD) static void membug( const char *fmt, ... ) { va_list arg_ptr ; fprintf(stderr, "\nMemory Error: " ) ; va_start( arg_ptr, fmt ) ; vfprintf(stderr,fmt,arg_ptr) ; va_end(arg_ptr); fflush(stderr); #ifdef M_DEBUG if( DBG_MEMSTAT ) dump_table(); #endif abort(); } - -#endif /* M_DEBUG */ +#endif void m_print_stats( const char *prefix ) { #ifdef M_DEBUG unsigned n; struct memtbl_entry *e; ulong sum = 0, chunks =0; for( e = memtbl, n = 0; n < memtbl_len; n++, e++ ) { if(e->inuse) { sum += e->user_n; chunks++; } } log_debug( "%s%smemstat: %8lu bytes in %ld chunks used\n", prefix? prefix:"", prefix? ": ":"", sum, chunks ); #elif defined(M_GUARD) log_debug( "%s%smemstat: %8ld bytes\n", prefix? prefix:"", prefix? ": ":"", used_memory ); #endif } void m_dump_table( const char *prefix ) { #if M_DEBUG fprintf(stderr,"Memory-Table-Dump: %s\n", prefix); dump_table(); #endif m_print_stats( prefix ); } static void out_of_core(size_t n, int secure) { log_fatal("out of %s memory while allocating %u bytes\n", secure? "secure":"" ,(unsigned)n ); } /**************** * Allocate memory of size n. * This function gives up if we do not have enough memory */ void * FNAME(alloc)( size_t n FNAMEPRT ) { char *p; #ifdef M_GUARD if( !(p = malloc( n + EXTRA_ALIGN+5 )) ) out_of_core(n,0); store_len(p,n,0); used_memory += n; p[4+EXTRA_ALIGN+n] = MAGIC_END_BYTE; return p+EXTRA_ALIGN+4; #else if( !(p = malloc( n )) ) out_of_core(n,0); return p; #endif } /**************** * Allocate memory of size n from the secure memory pool. * This function gives up if we do not have enough memory */ void * FNAME(alloc_secure)( size_t n FNAMEPRT ) { char *p; #ifdef M_GUARD if( !(p = secmem_malloc( n +EXTRA_ALIGN+ 5 )) ) out_of_core(n,1); store_len(p,n,1); p[4+EXTRA_ALIGN+n] = MAGIC_END_BYTE; return p+EXTRA_ALIGN+4; #else if( !(p = secmem_malloc( n )) ) out_of_core(n,1); return p; #endif } void * FNAME(alloc_clear)( size_t n FNAMEPRT ) { void *p; p = FNAME(alloc)( n FNAMEARG ); memset(p, 0, n ); return p; } void * FNAME(alloc_secure_clear)( size_t n FNAMEPRT) { void *p; p = FNAME(alloc_secure)( n FNAMEARG ); memset(p, 0, n ); return p; } /**************** * realloc and clear the old space */ void * FNAME(realloc)( void *a, size_t n FNAMEPRT ) { #ifdef M_GUARD unsigned char *p = a; void *b; size_t len = m_size(a); if( len >= n ) /* we don't shrink for now */ return a; if( p[-1] == MAGIC_SEC_BYTE ) b = FNAME(alloc_secure_clear)(n FNAMEARG); else b = FNAME(alloc_clear)(n FNAMEARG); FNAME(check)(NULL FNAMEARG); memcpy(b, a, len ); FNAME(free)(p FNAMEARG); #else void *b; if( m_is_secure(a) ) { if( !(b = secmem_realloc( a, n )) ) out_of_core(n,1); } else { if( !(b = realloc( a, n )) ) out_of_core(n,0); } #endif return b; } /**************** * Free a pointer */ void FNAME(free)( void *a FNAMEPRT ) { byte *p = a; if( !p ) return; #ifdef M_DEBUG free_entry(p-EXTRA_ALIGN-4, info); #elif M_GUARD m_check(p); if( m_is_secure(a) ) secmem_free(p-EXTRA_ALIGN-4); else { used_memory -= m_size(a); free(p-EXTRA_ALIGN-4); } #else if( m_is_secure(a) ) secmem_free(p); else free(p); #endif } void FNAME(check)( const void *a FNAMEPRT ) { #ifdef M_GUARD const byte *p = a; #ifdef M_DEBUG if( p ) check_mem(p-EXTRA_ALIGN-4, info); else check_allmem(info); #else if( !p ) return; if( !(p[-1] == MAGIC_NOR_BYTE || p[-1] == MAGIC_SEC_BYTE) ) membug("memory at %p corrupted (underflow=%02x)\n", p, p[-1] ); else if( p[m_size(p)] != MAGIC_END_BYTE ) membug("memory at %p corrupted (overflow=%02x)\n", p, p[-1] ); #endif #endif } size_t m_size( const void *a ) { #ifndef M_GUARD log_debug("Ooops, m_size called\n"); return 0; #else const byte *p = a; size_t n; #ifdef M_DEBUG n = check_mem(p-EXTRA_ALIGN-4, "m_size")->user_n; #else n = ((byte*)p)[-4]; n |= ((byte*)p)[-3] << 8; n |= ((byte*)p)[-2] << 16; #endif return n; #endif } #if 0 /* not used */ /**************** * Make a copy of the memory block at a */ void * FNAME(copy)( const void *a FNAMEPRT ) { void *b; size_t n; if( !a ) return NULL; n = m_size(a); Aiiiih woher nehmen if( m_is_secure(a) ) b = FNAME(alloc_secure)(n FNAMEARG); else b = FNAME(alloc)(n FNAMEARG); memcpy(b, a, n ); return b; } #endif char * FNAME(strdup)( const char *a FNAMEPRT ) { size_t n = strlen(a); char *p = FNAME(alloc)(n+1 FNAMEARG); strcpy(p, a); return p; } diff --git a/util/miscutil.c b/util/miscutil.c index 4244ccce0..b0a6410e8 100644 --- a/util/miscutil.c +++ b/util/miscutil.c @@ -1,243 +1,287 @@ /* miscutil.c - miscellaneous utilities * Copyright (C) 1998, 1999 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 +#include #include #include #include #include #ifdef HAVE_LANGINFO_H #include #endif #include "types.h" #include "util.h" #include "i18n.h" +/**************** + * I know that the OpenPGP protocol has a Y2106 problem ;-) + */ u32 make_timestamp() { return time(NULL); } +/**************** + * Scan a date string and return a timestamp. + * The only supported format is "yyyy-mm-dd" + * Returns 0 for an invalid date. + */ +u32 +scan_isodatestr( const char *string ) +{ + int year, month, day; + struct tm tmbuf; + time_t stamp; + int i; + + if( strlen(string) != 10 || string[4] != '-' || string[7] != '-' ) + return 0; + for( i=0; i < 4; i++ ) + if( !isdigit(string[i]) ) + return 0; + if( !isdigit(string[5]) || !isdigit(string[6]) ) + return 0; + if( !isdigit(string[8]) || !isdigit(string[9]) ) + return 0; + year = atoi(string); + month = atoi(string+5); + day = atoi(string+8); + /* some basic checks */ + if( year < 1970 || month < 1 || month > 12 || day < 1 || day > 31 ) + return 0; + memset( &tmbuf, 0, sizeof tmbuf ); + tmbuf.tm_mday = day; + tmbuf.tm_mon = month-1; + tmbuf.tm_year = year - 1900; + tmbuf.tm_isdst = -1; + stamp = mktime( &tmbuf ); + if( stamp == (time_t)-1 ) + return 0; + return stamp; +} + + u32 add_days_to_timestamp( u32 stamp, u16 days ) { return stamp + days*86400L; } /**************** * Return a string with a time value in the form: x Y, n D, n H */ const char * strtimevalue( u32 value ) { static char buffer[30]; unsigned int years, days, hours, minutes; value /= 60; minutes = value % 60; value /= 60; hours = value % 24; value /= 24; days = value % 365; value /= 365; years = value; sprintf(buffer,"%uy%ud%uh%um", years, days, hours, minutes ); if( years ) return buffer; if( days ) return strchr( buffer, 'y' ) + 1; return strchr( buffer, 'd' ) + 1; } /**************** * Note: this function returns GMT */ const char * strtimestamp( u32 stamp ) { static char buffer[11+5]; struct tm *tp; time_t atime = stamp; tp = gmtime( &atime ); sprintf(buffer,"%04d-%02d-%02d", 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday ); return buffer; } /**************** * Note: this function returns local time */ const char * asctimestamp( u32 stamp ) { static char buffer[50]; #if defined (HAVE_STRFTIME) && defined (HAVE_NL_LANGINFO) static char fmt[50]; #endif struct tm *tp; time_t atime = stamp; tp = localtime( &atime ); #ifdef HAVE_STRFTIME #if defined(HAVE_NL_LANGINFO) mem2str( fmt, nl_langinfo(D_T_FMT), DIM(fmt) ); if( strstr( fmt, "%Z" ) == NULL ) strcat( fmt, " %Z"); strftime( buffer, DIM(buffer)-1, fmt, tp ); #else /* fixme: we should check whether the locale appends a " %Z" * These locales from glibc don't put the " %Z": * fi_FI hr_HR ja_JP lt_LT lv_LV POSIX ru_RU ru_SU sv_FI sv_SE zh_CN */ strftime( buffer, DIM(buffer)-1, "%c %Z", tp ); #endif buffer[DIM(buffer)-1] = 0; #else mem2str( buffer, asctime(tp), DIM(buffer) ); #endif return buffer; } /**************** * Print a string to FP, but filter all control characters out. */ void print_string( FILE *fp, const byte *p, size_t n, int delim ) { for( ; n; n--, p++ ) if( iscntrl( *p ) || *p == delim ) { putc('\\', fp); if( *p == '\n' ) putc('n', fp); else if( *p == '\r' ) putc('r', fp); else if( *p == '\f' ) putc('f', fp); else if( *p == '\v' ) putc('v', fp); else if( *p == '\b' ) putc('b', fp); else if( !*p ) putc('0', fp); else fprintf(fp, "x%02x", *p ); } else putc(*p, fp); } /**************** * This function returns a string which is suitable for printing * Caller must release it with m_free() */ char * make_printable_string( const byte *p, size_t n, int delim ) { size_t save_n, buflen; const byte *save_p; char *buffer, *d; /* first count length */ for(save_n = n, save_p = p, buflen=1 ; n; n--, p++ ) { if( iscntrl( *p ) || *p == delim ) { if( *p=='\n' || *p=='\r' || *p=='\f' || *p=='\v' || *p=='\b' || !*p ) buflen += 2; else buflen += 3; } else buflen++; } p = save_p; n = save_n; /* and now make the string */ d = buffer = m_alloc( buflen ); for( ; n; n--, p++ ) { if( iscntrl( *p ) || *p == delim ) { *d++ = '\\'; if( *p == '\n' ) *d++ = 'n'; else if( *p == '\r' ) *d++ = 'r'; else if( *p == '\f' ) *d++ = 'f'; else if( *p == '\v' ) *d++ = 'v'; else if( *p == '\b' ) *d++ = 'b'; else if( !*p ) *d++ = '0'; else { sprintf(d, "x%02x", *p ); d += 2; } } else *d++ = *p; } *d = 0; return buffer; } int answer_is_yes( const char *s ) { char *long_yes = _("yes"); char *short_yes = _("yY"); if( !stricmp(s, long_yes ) ) return 1; if( strchr( short_yes, *s ) && !s[1] ) return 1; return 0; } /**************** * Return 1 for yes, -1 for quit, or 0 for no */ int answer_is_yes_no_quit( const char *s ) { char *long_yes = _("yes"); char *long_quit = _("quit"); char *short_yes = _("yY"); char *short_quit = _("qQ"); if( !stricmp(s, long_yes ) ) return 1; if( !stricmp(s, long_quit ) ) return -1; if( strchr( short_yes, *s ) && !s[1] ) return 1; if( strchr( short_quit, *s ) && !s[1] ) return -1; return 0; }